diff --git a/ATTRIBUTIONS.md b/ATTRIBUTIONS.md index 40f9d1de62..60f2305a8c 100644 --- a/ATTRIBUTIONS.md +++ b/ATTRIBUTIONS.md @@ -66,4 +66,10 @@ **Creator:** VerySoft (https://github.com/TS-Rogue-Star/Rogue-Star/pull/153)
**URL:** [Website](https://rogue-star.net/)
**License:** [CC BY-SA 3.0](https://creativecommons.org/licenses/by-sa/3.0/)
-**Notes:** Permission to use assets also given in writing. These new icon-states are modifications of existing icon-states.
\ No newline at end of file +**Notes:** Permission to use assets also given in writing. These new icon-states are modifications of existing icon-states.
+
+**Folder:** `sound/vore/sunesound`
+**Title:** Vore Sounds
+**Creator:** Poojawa (https://github.com/VOREStation/VOREStation/pull/6052)
+**License:** [General License](sound/vore/sunesound/LICENSE.txt)
+**Notes:** Permission to use assets also given in writing. All files under this folder is NOT licensed under CC3. Seek separate permission before copying/using.
diff --git a/code/ATMOSPHERICS/components/unary/cold_sink.dm b/code/ATMOSPHERICS/components/unary/cold_sink.dm index 2cd7403096..ed391dec5f 100644 --- a/code/ATMOSPHERICS/components/unary/cold_sink.dm +++ b/code/ATMOSPHERICS/components/unary/cold_sink.dm @@ -87,7 +87,7 @@ /obj/machinery/atmospherics/unary/freezer/tgui_act(action, params) if(..()) return TRUE - + . = TRUE switch(action) if("toggleStatus") @@ -173,3 +173,5 @@ . = ..() if(panel_open) . += "The maintenance hatch is open." + +#undef FREEZER_PERF_MULT diff --git a/code/ATMOSPHERICS/components/unary/heat_source.dm b/code/ATMOSPHERICS/components/unary/heat_source.dm index efd3a56d8b..85b0dcb821 100644 --- a/code/ATMOSPHERICS/components/unary/heat_source.dm +++ b/code/ATMOSPHERICS/components/unary/heat_source.dm @@ -160,3 +160,5 @@ . = ..() if(panel_open) . += "The maintenance hatch is open." + +#undef HEATER_PERF_MULT diff --git a/code/__defines/SDQL_2.dm b/code/__defines/SDQL_2.dm new file mode 100644 index 0000000000..273d42158e --- /dev/null +++ b/code/__defines/SDQL_2.dm @@ -0,0 +1,2 @@ +#define SDQL2_VALID_OPTION_TYPES list("proccall", "select", "priority", "autogc") +#define SDQL2_VALID_OPTION_VALUES list("async", "blocking", "force_nulls", "skip_nulls", "high", "normal", "keep_alive") diff --git a/code/__defines/_planes+layers_vr.dm b/code/__defines/_planes+layers_vr.dm index 125f492cd7..a9266aa701 100644 --- a/code/__defines/_planes+layers_vr.dm +++ b/code/__defines/_planes+layers_vr.dm @@ -3,5 +3,6 @@ #define PLANE_CH_STATUS_R 27 //Right-side status icon #define PLANE_CH_BACKUP 28 //Backup implant #define PLANE_CH_VANTAG 29 //Vore Antag hud +#define PLANE_CH_STOMACH -11 //Stomach Plane #define PLANE_AUGMENTED 40 //Augmented-reality plane diff --git a/code/__defines/action.dm b/code/__defines/action.dm new file mode 100644 index 0000000000..bdbe228777 --- /dev/null +++ b/code/__defines/action.dm @@ -0,0 +1,5 @@ +#define AB_CHECK_RESTRAINED 1 +#define AB_CHECK_STUNNED 2 +#define AB_CHECK_LYING 4 +#define AB_CHECK_ALIVE 8 +#define AB_CHECK_INSIDE 16 diff --git a/code/__defines/airlock_control.dm b/code/__defines/airlock_control.dm new file mode 100644 index 0000000000..51667f18cc --- /dev/null +++ b/code/__defines/airlock_control.dm @@ -0,0 +1 @@ +#define AIRLOCK_CONTROL_RANGE 22 diff --git a/code/__defines/ammunition.dm b/code/__defines/ammunition.dm new file mode 100644 index 0000000000..001e4bb5d6 --- /dev/null +++ b/code/__defines/ammunition.dm @@ -0,0 +1,4 @@ +//Gun loading types +#define SINGLE_CASING 1 //The gun only accepts ammo_casings. ammo_magazines should never have this as their mag_type. +#define SPEEDLOADER 2 //Transfers casings from the mag to the gun when used. +#define MAGAZINE 4 //The magazine item itself goes inside the gun diff --git a/code/__defines/assemblies.dm b/code/__defines/assemblies.dm new file mode 100644 index 0000000000..898c4d9020 --- /dev/null +++ b/code/__defines/assemblies.dm @@ -0,0 +1,2 @@ +#define IC_COMPONENTS_BASE 20 +#define IC_COMPLEXITY_BASE 60 diff --git a/code/__defines/blueprints.dm b/code/__defines/blueprints.dm new file mode 100644 index 0000000000..e00528d8af --- /dev/null +++ b/code/__defines/blueprints.dm @@ -0,0 +1,5 @@ +//TG blueprints. +#define AREA_ERRNONE 0 +#define AREA_STATION 1 +#define AREA_SPACE 2 +#define AREA_SPECIAL 3 diff --git a/code/__defines/chemistry_vr.dm b/code/__defines/chemistry_vr.dm index cc2a46f46d..178fb8c73b 100644 --- a/code/__defines/chemistry_vr.dm +++ b/code/__defines/chemistry_vr.dm @@ -2,4 +2,5 @@ #define IS_CHIMERA 12 #define IS_SHADEKIN 13 #define IS_ALRAUNE 14 -#define IS_GREY 15 //ywedit \ No newline at end of file +#define IS_LLEILL 15 +#define IS_GREY 16 //ywedit diff --git a/code/__defines/circuitboard.dm b/code/__defines/circuitboard.dm new file mode 100644 index 0000000000..ca1227af12 --- /dev/null +++ b/code/__defines/circuitboard.dm @@ -0,0 +1,2 @@ +//Define a macro that we can use to assemble all the circuit board names +#define T_BOARD(name) "circuit board (" + (name) + ")" diff --git a/code/__defines/cloning.dm b/code/__defines/cloning.dm new file mode 100644 index 0000000000..afe478f749 --- /dev/null +++ b/code/__defines/cloning.dm @@ -0,0 +1 @@ +#define CLONE_BIOMASS 30 //VOREstation Edit diff --git a/code/__defines/construction_datum.dm b/code/__defines/construction_datum.dm new file mode 100644 index 0000000000..7a0586d365 --- /dev/null +++ b/code/__defines/construction_datum.dm @@ -0,0 +1,2 @@ +#define FORWARD -1 +#define BACKWARD 1 diff --git a/code/__defines/dna.dm b/code/__defines/dna.dm index cb1d2ad7e7..ecf85abcd9 100644 --- a/code/__defines/dna.dm +++ b/code/__defines/dna.dm @@ -74,3 +74,67 @@ var/HALLUCINATIONBLOCK = 0 var/NOPRINTSBLOCK = 0 var/SHOCKIMMUNITYBLOCK = 0 var/SMALLSIZEBLOCK = 0 + +// Define block bounds (off-low,off-high,on-low,on-high) +// Used in setupgame.dm +#define DNA_DEFAULT_BOUNDS list(1,2049,2050,4095) +#define DNA_HARDER_BOUNDS list(1,3049,3050,4095) +#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_EAR_STYLE 17 // VOREStation snippet. +#define DNA_UI_TAIL_STYLE 18 +#define DNA_UI_PLAYERSCALE 19 +#define DNA_UI_TAIL_R 20 +#define DNA_UI_TAIL_G 21 +#define DNA_UI_TAIL_B 22 +#define DNA_UI_TAIL2_R 23 +#define DNA_UI_TAIL2_G 24 +#define DNA_UI_TAIL2_B 25 +#define DNA_UI_TAIL3_R 26 +#define DNA_UI_TAIL3_G 27 +#define DNA_UI_TAIL3_B 28 +#define DNA_UI_EARS_R 29 +#define DNA_UI_EARS_G 30 +#define DNA_UI_EARS_B 31 +#define DNA_UI_EARS2_R 32 +#define DNA_UI_EARS2_G 33 +#define DNA_UI_EARS2_B 34 +#define DNA_UI_EARS3_R 35 +#define DNA_UI_EARS3_G 36 +#define DNA_UI_EARS3_B 37 +#define DNA_UI_WING_STYLE 38 +#define DNA_UI_WING_R 39 +#define DNA_UI_WING_G 40 +#define DNA_UI_WING_B 41 +#define DNA_UI_WING2_R 42 +#define DNA_UI_WING2_G 43 +#define DNA_UI_WING2_B 44 +#define DNA_UI_WING3_R 45 +#define DNA_UI_WING3_G 46 +#define DNA_UI_WING3_B 47 // VOREStation snippet end. +#define DNA_UI_LENGTH 47 // VOREStation Edit - Needs to match the highest number above. + +#define DNA_SE_LENGTH 49 // VOREStation Edit (original was UI+11) + +//DNA modifiers +// Buffer datatype flags. +#define DNA2_BUF_UI 1 +#define DNA2_BUF_UE 2 +#define DNA2_BUF_SE 4 diff --git a/code/__defines/economy_misc.dm b/code/__defines/economy_misc.dm new file mode 100644 index 0000000000..7059cc7aa2 --- /dev/null +++ b/code/__defines/economy_misc.dm @@ -0,0 +1,24 @@ + +#define RIOTS 1 +#define WILD_ANIMAL_ATTACK 2 +#define INDUSTRIAL_ACCIDENT 3 +#define BIOHAZARD_OUTBREAK 4 +#define PIRATES 6 +#define CORPORATE_ATTACK 7 +#define ALIEN_RAIDERS 8 +#define AI_LIBERATION 9 +#define MOURNING 10 +#define CULT_CELL_REVEALED 11 +#define SECURITY_BREACH 12 +#define ANIMAL_RIGHTS_RAID 13 +#define FESTIVAL 14 + +#define SECURITY 1 +#define FOOD 2 +#define ANIMALS 3 +#define MINERALS 4 +#define EMERGENCY 5 +#define GASEOUS 6 +#define MAINTENANCE 7 +#define ROBOTICS 8 +#define BIOMEDICAL 9 diff --git a/code/__defines/equipment_vendor.dm b/code/__defines/equipment_vendor.dm new file mode 100644 index 0000000000..85ea963834 --- /dev/null +++ b/code/__defines/equipment_vendor.dm @@ -0,0 +1,2 @@ + +#define EQUIPMENT(n, o, p) n = new /datum/data/mining_equipment(n, o, p) diff --git a/code/modules/gamemaster/defines.dm b/code/__defines/events.dm similarity index 67% rename from code/modules/gamemaster/defines.dm rename to code/__defines/events.dm index 215e07ff91..f290638dbe 100644 --- a/code/modules/gamemaster/defines.dm +++ b/code/__defines/events.dm @@ -1,3 +1,3 @@ #define EVENT_CHAOS_THRESHOLD_HIGH_IMPACT 25 #define EVENT_CHAOS_THRESHOLD_MEDIUM_IMPACT 50 -#define EVENT_CHAOS_THRESHOLD_LOW_IMPACT 100 \ No newline at end of file +#define EVENT_CHAOS_THRESHOLD_LOW_IMPACT 100 diff --git a/code/__defines/holder.dm b/code/__defines/holder.dm new file mode 100644 index 0000000000..239ef8d290 --- /dev/null +++ b/code/__defines/holder.dm @@ -0,0 +1 @@ +#define PROCESS_REACTION_ITER 5 //when processing a reaction, iterate this many times diff --git a/code/__defines/implant.dm b/code/__defines/implant.dm new file mode 100644 index 0000000000..5e3ca49741 --- /dev/null +++ b/code/__defines/implant.dm @@ -0,0 +1,2 @@ +#define MALFUNCTION_TEMPORARY 1 +#define MALFUNCTION_PERMANENT 2 diff --git a/code/__defines/is_helpers.dm b/code/__defines/is_helpers.dm index dfb8b9246a..b4e180deb0 100644 --- a/code/__defines/is_helpers.dm +++ b/code/__defines/is_helpers.dm @@ -51,6 +51,7 @@ #define issilicon(A) istype(A, /mob/living/silicon) #define isAI(A) istype(A, /mob/living/silicon/ai) #define isrobot(A) istype(A, /mob/living/silicon/robot) +#define isshell(A) istype(A, /mob/living/silicon/robot/ai_shell) #define ispAI(A) istype(A, /mob/living/silicon/pai) #define isbot(A) istype(A, /mob/living/bot) diff --git a/code/__defines/job_controller.dm b/code/__defines/job_controller.dm new file mode 100644 index 0000000000..25148c2ce7 --- /dev/null +++ b/code/__defines/job_controller.dm @@ -0,0 +1,3 @@ +#define GET_RANDOM_JOB 0 +#define BE_ASSISTANT 1 +#define RETURN_TO_LOBBY 2 diff --git a/code/__defines/jukebox.dm b/code/__defines/jukebox.dm new file mode 100644 index 0000000000..7cab3de4dd --- /dev/null +++ b/code/__defines/jukebox.dm @@ -0,0 +1,4 @@ +#define JUKEMODE_NEXT 1 // Advance to next song in the track list +#define JUKEMODE_RANDOM 2 // Not shuffle, randomly picks next each time. +#define JUKEMODE_REPEAT_SONG 3 // Play the same song over and over +#define JUKEMODE_PLAY_ONCE 4 // Play, then stop. diff --git a/code/__defines/life.dm b/code/__defines/life.dm new file mode 100644 index 0000000000..1f022dec9a --- /dev/null +++ b/code/__defines/life.dm @@ -0,0 +1,20 @@ +//Note that gas heat damage is only applied once every FOUR ticks. +#define HEAT_GAS_DAMAGE_LEVEL_1 2 //Amount of damage applied when the current breath's temperature just passes the 360.15k safety point +#define HEAT_GAS_DAMAGE_LEVEL_2 4 //Amount of damage applied when the current breath's temperature passes the 400K point +#define HEAT_GAS_DAMAGE_LEVEL_3 8 //Amount of damage applied when the current breath's temperature passes the 1000K point + +#define COLD_GAS_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when the current breath's temperature just passes the 260.15k safety point +#define COLD_GAS_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when the current breath's temperature passes the 200K point +#define COLD_GAS_DAMAGE_LEVEL_3 3 //Amount of damage applied when the current breath's temperature passes the 120K point + +#define COLD_ALERT_SEVERITY_LOW 1 // Constants passed to the cold and heat alerts. +#define COLD_ALERT_SEVERITY_MODERATE 2 +#define COLD_ALERT_SEVERITY_MAX 3 +#define ENVIRONMENT_COMFORT_MARKER_COLD 1 + +#define HOT_ALERT_SEVERITY_LOW 1 +#define HOT_ALERT_SEVERITY_MODERATE 2 +#define HOT_ALERT_SEVERITY_MAX 3 +#define ENVIRONMENT_COMFORT_MARKER_HOT 2 + +#define TECHNOMANCER_INSTABILITY_MIN_GLOW 10 // When above this number, the entity starts glowing, affecting others. diff --git a/code/__defines/lighting_vr.dm b/code/__defines/lighting_vr.dm index aa7cb6994d..83c34affed 100644 --- a/code/__defines/lighting_vr.dm +++ b/code/__defines/lighting_vr.dm @@ -5,4 +5,9 @@ //Fake ambient occlusion filter #undef AMBIENT_OCCLUSION -#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-1, size=2, offset=2, color="#04080F55") //VOREStation Edit for prettier visuals. \ No newline at end of file +#define AMBIENT_OCCLUSION filter(type="drop_shadow", x=0, y=-1, size=2, offset=2, color="#04080F55") //VOREStation Edit for prettier visuals. + +#define LIGHT_OK 0 +#define LIGHT_EMPTY 1 +#define LIGHT_BROKEN 2 +#define LIGHT_BURNED 3 diff --git a/code/__defines/map.dm b/code/__defines/map.dm index 9708190a17..24d967d27e 100644 --- a/code/__defines/map.dm +++ b/code/__defines/map.dm @@ -14,3 +14,5 @@ // Misc map defines. #define SUBMAP_MAP_EDGE_PAD 8 // Automatically created submaps are forbidden from being this close to the main map's edge. //VOREStation Edit + +#define CELL_ALIVE(VAL) (VAL == cell_live_value) diff --git a/code/__defines/mecha.dm b/code/__defines/mecha.dm new file mode 100644 index 0000000000..5441794f5c --- /dev/null +++ b/code/__defines/mecha.dm @@ -0,0 +1,26 @@ +#define MECHA_INT_FIRE 1 +#define MECHA_INT_TEMP_CONTROL 2 +#define MECHA_INT_SHORT_CIRCUIT 4 +#define MECHA_INT_TANK_BREACH 8 +#define MECHA_INT_CONTROL_LOST 16 + +#define MECHA_PROC_MOVEMENT 1 +#define MECHA_PROC_DAMAGE 2 +#define MECHA_PROC_INT_TEMP 4 + +#define MELEE 1 +#define RANGED 2 + +#define MECH_FACTION_NT "nano" +#define MECH_FACTION_SYNDI "syndi" +#define MECH_FACTION_NONE "none" + +//Mecha Equipment +#define EQUIP_HULL "hull" +#define EQUIP_WEAPON "weapon" +#define EQUIP_UTILITY "utility" +#define EQUIP_SPECIAL "core" +//VOREStation Addition begin: MICROMECHS +#define EQUIP_MICRO_UTILITY "micro_utility" +#define EQUIP_MICRO_WEAPON "micro_weapon" +//VOREStation Addition end: MICROMECHS diff --git a/code/__defines/mobs_vr.dm b/code/__defines/mobs_vr.dm index 52e8d86525..ae87b1c624 100644 --- a/code/__defines/mobs_vr.dm +++ b/code/__defines/mobs_vr.dm @@ -7,7 +7,9 @@ #define VIS_AUGMENTED 32 -#define VIS_COUNT 32 +#define VIS_CH_STOMACH 33 + +#define VIS_COUNT 33 //Protean organs #define O_ORCH "orchestrator" @@ -33,6 +35,7 @@ #define SPECIES_ZORREN_HIGH "Zorren" #define SPECIES_CUSTOM "Custom Species" #define SPECIES_TAJARAN "Tajara" +#define SPECIES_LLEILL "Lleill" //monkey species #define SPECIES_MONKEY_AKULA "Sobaka" #define SPECIES_MONKEY_NEVREAN "Sparra" @@ -54,3 +57,6 @@ #define MARKING_NONDIGI_ONLY (1 << 0) #define MARKING_DIGITIGRADE_ONLY (1 << 1) #define MARKING_ALL_LEGS MARKING_NONDIGI_ONLY|MARKING_DIGITIGRADE_ONLY + +//Grabs +#define UPGRADE_COOLDOWN 40 diff --git a/code/__defines/objects.dm b/code/__defines/objects.dm index d6530fecff..7378b766c8 100644 --- a/code/__defines/objects.dm +++ b/code/__defines/objects.dm @@ -49,3 +49,5 @@ #define MECH_ARMOR "Plating" #define MECH_GAS "Life Support" #define MECH_ELECTRIC "Firmware" + +#define DRINK_ICON_FILE 'icons/pdrink.dmi' diff --git a/code/__defines/observer.dm b/code/__defines/observer.dm new file mode 100644 index 0000000000..4a21eb68bb --- /dev/null +++ b/code/__defines/observer.dm @@ -0,0 +1 @@ +#define OBSERVER_EVENT_DESTROY "OnDestroy" diff --git a/code/__defines/organ_internal.dm b/code/__defines/organ_internal.dm new file mode 100644 index 0000000000..252097aaa3 --- /dev/null +++ b/code/__defines/organ_internal.dm @@ -0,0 +1 @@ +#define PROCESS_ACCURACY 10 diff --git a/code/__defines/paicard.dm b/code/__defines/paicard.dm new file mode 100644 index 0000000000..448c54d01a --- /dev/null +++ b/code/__defines/paicard.dm @@ -0,0 +1,3 @@ +#define PP_FUNCTIONAL 0 +#define PP_BROKEN 1 +#define PP_MISSING 2 diff --git a/code/__defines/persistence.dm b/code/__defines/persistence.dm index 1fde05bf22..5d9a0d5082 100644 --- a/code/__defines/persistence.dm +++ b/code/__defines/persistence.dm @@ -1 +1,7 @@ -#define PERSISTENCE_VARIABLE_TOKEN_LENGTH -1 \ No newline at end of file +#define PERSIST_SPAWN 0x01 // Persist spawnpoint based on location of despawn/logout. +#define PERSIST_WEIGHT 0x02 // Persist mob weight +#define PERSIST_ORGANS 0x04 // Persist the status (normal/amputated/robotic/etc) and model (for robotic) status of organs +#define PERSIST_MARKINGS 0x08 // Persist markings +#define PERSIST_SIZE 0x10 // Persist size +#define PERSIST_COUNT 5 // Number of valid bits in this bitflag. Keep this updated! +#define PERSIST_DEFAULT PERSIST_SPAWN|PERSIST_ORGANS|PERSIST_MARKINGS|PERSIST_SIZE // Default setting for new folks diff --git a/code/__defines/planets_vr.dm b/code/__defines/planets_vr.dm index be6553cd4d..07c9122467 100644 --- a/code/__defines/planets_vr.dm +++ b/code/__defines/planets_vr.dm @@ -1 +1,47 @@ -#define WEATHER_PARTY "party" \ No newline at end of file +#define WEATHER_PARTY "party" + +//Atmosphere properties +#define VIRGO3B_ONE_ATMOSPHERE 82.4 //kPa +#define VIRGO3B_AVG_TEMP 234 //kelvin + +#define VIRGO3B_PER_N2 0.16 //percent +#define VIRGO3B_PER_O2 0.00 +#define VIRGO3B_PER_N2O 0.00 //Currently no capacity to 'start' a turf with this. See turf.dm +#define VIRGO3B_PER_CO2 0.12 +#define VIRGO3B_PER_PHORON 0.72 + +//Math only beyond this point +#define VIRGO3B_MOL_PER_TURF (VIRGO3B_ONE_ATMOSPHERE*CELL_VOLUME/(VIRGO3B_AVG_TEMP*R_IDEAL_GAS_EQUATION)) +#define VIRGO3B_MOL_N2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_N2) +#define VIRGO3B_MOL_O2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_O2) +#define VIRGO3B_MOL_N2O (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_N2O) +#define VIRGO3B_MOL_CO2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_CO2) +#define VIRGO3B_MOL_PHORON (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_PHORON) + +//Turfmakers +#define VIRGO3B_SET_ATMOS nitrogen=VIRGO3B_MOL_N2;oxygen=VIRGO3B_MOL_O2;carbon_dioxide=VIRGO3B_MOL_CO2;phoron=VIRGO3B_MOL_PHORON;temperature=VIRGO3B_AVG_TEMP +#define VIRGO3B_TURF_CREATE(x) x/virgo3b/nitrogen=VIRGO3B_MOL_N2;x/virgo3b/oxygen=VIRGO3B_MOL_O2;x/virgo3b/carbon_dioxide=VIRGO3B_MOL_CO2;x/virgo3b/phoron=VIRGO3B_MOL_PHORON;x/virgo3b/temperature=VIRGO3B_AVG_TEMP;x/virgo3b/outdoors=TRUE;x/virgo3b/update_graphic(list/graphic_add = null, list/graphic_remove = null) return 0 +#define VIRGO3B_TURF_CREATE_UN(x) x/virgo3b/nitrogen=VIRGO3B_MOL_N2;x/virgo3b/oxygen=VIRGO3B_MOL_O2;x/virgo3b/carbon_dioxide=VIRGO3B_MOL_CO2;x/virgo3b/phoron=VIRGO3B_MOL_PHORON;x/virgo3b/temperature=VIRGO3B_AVG_TEMP + +//Atmosphere properties +#define VIRGO3BB_ONE_ATMOSPHERE 101.325 //kPa +#define VIRGO3BB_AVG_TEMP 293.15 //kelvin + +#define VIRGO3BB_PER_N2 0.78 //percent +#define VIRGO3BB_PER_O2 0.21 +#define VIRGO3BB_PER_N2O 0.00 //Currently no capacity to 'start' a turf with this. See turf.dm +#define VIRGO3BB_PER_CO2 0.01 +#define VIRGO3BB_PER_PHORON 0.00 + +//Math only beyond this point +#define VIRGO3BB_MOL_PER_TURF (VIRGO3BB_ONE_ATMOSPHERE*CELL_VOLUME/(VIRGO3BB_AVG_TEMP*R_IDEAL_GAS_EQUATION)) +#define VIRGO3BB_MOL_N2 (VIRGO3BB_MOL_PER_TURF * VIRGO3BB_PER_N2) +#define VIRGO3BB_MOL_O2 (VIRGO3BB_MOL_PER_TURF * VIRGO3BB_PER_O2) +#define VIRGO3BB_MOL_N2O (VIRGO3BB_MOL_PER_TURF * VIRGO3BB_PER_N2O) +#define VIRGO3BB_MOL_CO2 (VIRGO3BB_MOL_PER_TURF * VIRGO3BB_PER_CO2) +#define VIRGO3BB_MOL_PHORON (VIRGO3BB_MOL_PER_TURF * VIRGO3BB_PER_PHORON) + +//Turfmakers +#define VIRGO3BB_SET_ATMOS nitrogen=VIRGO3BB_MOL_N2;oxygen=VIRGO3BB_MOL_O2;carbon_dioxide=VIRGO3BB_MOL_CO2;phoron=VIRGO3BB_MOL_PHORON;temperature=VIRGO3BB_AVG_TEMP +#define VIRGO3BB_TURF_CREATE(x) x/virgo3b_better/nitrogen=VIRGO3BB_MOL_N2;x/virgo3b_better/oxygen=VIRGO3BB_MOL_O2;x/virgo3b_better/carbon_dioxide=VIRGO3BB_MOL_CO2;x/virgo3b_better/phoron=VIRGO3BB_MOL_PHORON;x/virgo3b_better/temperature=VIRGO3BB_AVG_TEMP;x/virgo3b_better/outdoors=TRUE;x/virgo3b_better/update_graphic(list/graphic_add = null, list/graphic_remove = null) return 0 +#define VIRGO3BB_TURF_CREATE_UN(x) x/virgo3b_better/nitrogen=VIRGO3BB_MOL_N2;x/virgo3b_better/oxygen=VIRGO3BB_MOL_O2;x/virgo3b_better/carbon_dioxide=VIRGO3BB_MOL_CO2;x/virgo3b_better/phoron=VIRGO3BB_MOL_PHORON;x/virgo3b_better/temperature=VIRGO3BB_AVG_TEMP diff --git a/code/__defines/power.dm b/code/__defines/power.dm new file mode 100644 index 0000000000..ea32aa1470 --- /dev/null +++ b/code/__defines/power.dm @@ -0,0 +1,2 @@ +#define I_SINGULO "singulo" +#define EMITTER_DAMAGE_POWER_TRANSFER 450 //used to transfer power to containment field generators diff --git a/code/__defines/preferences.dm b/code/__defines/preferences.dm index 880d9318d8..ba0abca8cf 100644 --- a/code/__defines/preferences.dm +++ b/code/__defines/preferences.dm @@ -12,4 +12,6 @@ #define MULTILINGUAL_DOUBLE_DELIMITER 2 #define MULTILINGUAL_OFF 3 -#define MULTILINGUAL_MODE_MAX 4 \ No newline at end of file +#define MULTILINGUAL_MODE_MAX 4 + +#define SAVE_RESET -1 diff --git a/code/__defines/projectile.dm b/code/__defines/projectile.dm new file mode 100644 index 0000000000..5152cd76fc --- /dev/null +++ b/code/__defines/projectile.dm @@ -0,0 +1,3 @@ +#define HOLD_CASINGS 0 //do not do anything after firing. Manual action, like pump shotguns, or guns that want to define custom behaviour +#define EJECT_CASINGS 1 //drop spent casings on the ground after firing +#define CYCLE_CASINGS 2 //experimental: cycle casings, like a revolver. Also works for multibarrelled guns diff --git a/code/__defines/recipe.dm b/code/__defines/recipe.dm new file mode 100644 index 0000000000..e0577711f4 --- /dev/null +++ b/code/__defines/recipe.dm @@ -0,0 +1,9 @@ +// Recipe type defines. Used to determine what machine makes them. +#define MICROWAVE 0x1 +#define FRYER 0x2 +#define OVEN 0x4 +#define GRILL 0x8 +#define CANDYMAKER 0x10 +#define CEREALMAKER 0x20 + +#define RECIPE_REAGENT_REPLACE 0 //Reagents in the ingredients are discarded. diff --git a/code/__defines/request_console.dm b/code/__defines/request_console.dm new file mode 100644 index 0000000000..96997f9348 --- /dev/null +++ b/code/__defines/request_console.dm @@ -0,0 +1,4 @@ +//Request Console Department Types +#define RC_ASSIST 1 //Request Assistance +#define RC_SUPPLY 2 //Request Supplies +#define RC_INFO 4 //Relay Info diff --git a/code/__defines/robot.dm b/code/__defines/robot.dm new file mode 100644 index 0000000000..30026857d7 --- /dev/null +++ b/code/__defines/robot.dm @@ -0,0 +1 @@ +#define DEFAULT_ROBOT_SPRITE_NAME "M-USE NanoTrasen" diff --git a/code/__defines/simple_mob.dm b/code/__defines/simple_mob.dm new file mode 100644 index 0000000000..995f0178f7 --- /dev/null +++ b/code/__defines/simple_mob.dm @@ -0,0 +1,8 @@ +// Flags for specifying which states we have vore icon_states for. +#define SA_ICON_LIVING 0x01 +#define SA_ICON_DEAD 0x02 +#define SA_ICON_REST 0x04 + +// Hivebots are tuned towards how many default lasers are needed to kill them. +// As such, if laser damage is ever changed, you should change this define. +#define LASERS_TO_KILL * 40 diff --git a/code/__defines/size.dm b/code/__defines/size.dm new file mode 100644 index 0000000000..d9418b700e --- /dev/null +++ b/code/__defines/size.dm @@ -0,0 +1,3 @@ + +#define MAX_VOICE_FREQ 70000 +#define MIN_VOICE_FREQ 15000 diff --git a/code/__defines/species_languages_vr.dm b/code/__defines/species_languages_vr.dm index ec9165653d..146fcb86ab 100644 --- a/code/__defines/species_languages_vr.dm +++ b/code/__defines/species_languages_vr.dm @@ -17,3 +17,4 @@ #define LANGUAGE_MOUSE "Mouse" #define LANGUAGE_SHADEKIN "Shadekin Empathy" +#define LANGUAGE_LLEILL "Glamour Speak" diff --git a/code/__defines/spells.dm b/code/__defines/spells.dm new file mode 100644 index 0000000000..e349a9c6a9 --- /dev/null +++ b/code/__defines/spells.dm @@ -0,0 +1,5 @@ + +#define OFFENSIVE_SPELLS "Offensive" +#define DEFENSIVE_SPELLS "Defensive" +#define UTILITY_SPELLS "Utility" +#define SUPPORT_SPELLS "Support" diff --git a/code/__defines/traits.dm b/code/__defines/traits.dm new file mode 100644 index 0000000000..994f1a3247 --- /dev/null +++ b/code/__defines/traits.dm @@ -0,0 +1,2 @@ +#define ORGANICS 1 +#define SYNTHETICS 2 diff --git a/code/__defines/update_icons.dm b/code/__defines/update_icons.dm new file mode 100644 index 0000000000..4fa21751be --- /dev/null +++ b/code/__defines/update_icons.dm @@ -0,0 +1 @@ +#define MOB_WATER_LAYER 36 diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 1cda5c811f..2ded9ae75a 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -52,8 +52,9 @@ input = copytext(input,1,max_length) if(extra) + input = replacetext(input, new/regex("^\[\\n\]+|\[\\n\]+$", "g"), "")// strip leading and trailing new lines var/temp_input = replace_characters(input, list("\n"=" ","\t"=" "))//one character is replaced by two - if(length(input) < (length(temp_input) - 6))//6 is the number of linebreaks allowed per message + if(length(input) < (length(temp_input) - 18))//18 is the number of linebreaks allowed per message input = replace_characters(temp_input,list(" "=" "))//replace again, this time the double spaces with single ones if(encode) diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 20c38938a5..8a722ac767 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1580,6 +1580,7 @@ GLOBAL_REAL_VAR(list/stack_trace_storage) . += new /obj/screen/plane_master{plane = PLANE_CH_HEALTH_VR} //Health bar but transparent at 100 . += new /obj/screen/plane_master{plane = PLANE_CH_BACKUP} //Backup implant status . += new /obj/screen/plane_master{plane = PLANE_CH_VANTAG} //Vore Antags + . += new /obj/screen/plane_master{plane = PLANE_CH_STOMACH} //Stomachs . += new /obj/screen/plane_master{plane = PLANE_AUGMENTED} //Augmented reality //VOREStation Add End /proc/CallAsync(datum/source, proctype, list/arguments) diff --git a/code/_onclick/hud/action.dm b/code/_onclick/hud/action.dm index d725fb8064..288c479922 100644 --- a/code/_onclick/hud/action.dm +++ b/code/_onclick/hud/action.dm @@ -3,12 +3,6 @@ #define AB_INNATE 3 #define AB_GENERIC 4 -#define AB_CHECK_RESTRAINED 1 -#define AB_CHECK_STUNNED 2 -#define AB_CHECK_LYING 4 -#define AB_CHECK_ALIVE 8 -#define AB_CHECK_INSIDE 16 - /datum/action var/name = "Generic Action" @@ -226,4 +220,9 @@ /datum/action/innate/ - action_type = AB_INNATE \ No newline at end of file + action_type = AB_INNATE + +#undef AB_ITEM +#undef AB_SPELL +#undef AB_INNATE +#undef AB_GENERIC diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index af26526846..8dfcdf9b5b 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -507,3 +507,5 @@ var/list/global_huds = list( /datum/hud/proc/update_ammo_hud(mob/living/user, obj/item/weapon/gun/G) var/obj/screen/ammo/ammo_hud = ammo_hud_list[G] ammo_hud?.update_hud(user, G) + +#undef MAX_AMMO_HUD_POSSIBLE diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index fa568b8614..32725ec5ae 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -316,4 +316,7 @@ GLOBAL_LIST_EMPTY(radial_menus) var/answer = menu.selected_choice QDEL_NULL(menu) GLOB.radial_menus -= uniqueid - return answer \ No newline at end of file + return answer + +#undef NEXT_PAGE_ID +#undef DEFAULT_CHECK_DELAY diff --git a/code/_onclick/hud/skybox.dm b/code/_onclick/hud/skybox.dm index 97f3999b7e..fbe3088c91 100644 --- a/code/_onclick/hud/skybox.dm +++ b/code/_onclick/hud/skybox.dm @@ -63,5 +63,6 @@ client.update_skybox() client.skybox?.scale_to_view(client.view) +#undef SKYBOX_PADDING #undef SKYBOX_PIXELS #undef SKYBOX_TURFS diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 76214eb64d..289c9345d9 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -1019,6 +1019,12 @@ var/list/gamemode_cache = list() if("asset_cdn_url") config.asset_cdn_url = value + if("allow_robot_recolor") + config.allow_robot_recolor = TRUE + + if("allow_simple_mob_recolor") + config.allow_simple_mob_recolor = TRUE + else log_misc("Unknown setting in configuration: '[name]'") @@ -1087,10 +1093,6 @@ var/list/gamemode_cache = list() if("loadout_whitelist") config.loadout_whitelist = text2num(value) - if("allow_robot_recolor") - config.allow_robot_recolor = 1 - if("allow_simple_mob_recolor") - config.allow_simple_mob_recolor = 1 else log_misc("Unknown setting in configuration: '[name]'") diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm index 7b63084af2..3e369f1271 100644 --- a/code/controllers/master_controller.dm +++ b/code/controllers/master_controller.dm @@ -43,9 +43,9 @@ var/global/pipe_processing_killed = 0 admin_notice("Initializations complete.", R_DEBUG) // #if UNIT_TEST -// #define CHECK_SLEEP_MASTER // For unit tests we don't care about a smooth lobby screen experience. We care about speed. +// # define CHECK_SLEEP_MASTER // For unit tests we don't care about a smooth lobby screen experience. We care about speed. // #else -// #define CHECK_SLEEP_MASTER if(++initialized_objects > 500) { initialized_objects=0;sleep(world.tick_lag); } +// # define CHECK_SLEEP_MASTER if(++initialized_objects > 500) { initialized_objects=0;sleep(world.tick_lag); } // #endif /datum/controller/game_controller/proc/setup_objects() @@ -53,4 +53,4 @@ var/global/pipe_processing_killed = 0 populate_antag_type_list() //Set up spawn points. - populate_spawn_points() \ No newline at end of file + populate_spawn_points() diff --git a/code/controllers/observer_listener/atom/observer.dm b/code/controllers/observer_listener/atom/observer.dm index 8c3e93f4fc..fe56294346 100644 --- a/code/controllers/observer_listener/atom/observer.dm +++ b/code/controllers/observer_listener/atom/observer.dm @@ -1,5 +1,3 @@ -#define OBSERVER_EVENT_DESTROY "OnDestroy" - /atom var/list/observer_events diff --git a/code/controllers/subsystems/plants.dm b/code/controllers/subsystems/plants.dm index f21cc1cb2c..f90d533eb6 100644 --- a/code/controllers/subsystems/plants.dm +++ b/code/controllers/subsystems/plants.dm @@ -126,7 +126,7 @@ SUBSYSTEM_DEF(plants) // Caching var/list/currentrun = src.currentrun - + while(currentrun.len) var/obj/effect/plant/P = currentrun[currentrun.len] --currentrun.len @@ -158,3 +158,5 @@ SUBSYSTEM_DEF(plants) for(var/mask in SSplants.gene_tag_masks) to_chat(usr, "[mask]: [SSplants.gene_tag_masks[mask]]") + +#undef PLANT_TICK_TIME diff --git a/code/controllers/subsystems/robot_sprites.dm b/code/controllers/subsystems/robot_sprites.dm index 8fd72b0a15..88fa331451 100644 --- a/code/controllers/subsystems/robot_sprites.dm +++ b/code/controllers/subsystems/robot_sprites.dm @@ -1,5 +1,3 @@ -#define DEFAULT_ROBOT_SPRITE_NAME "M-USE NanoTrasen" - SUBSYSTEM_DEF(robot_sprites) name = "Robot Sprites" init_order = INIT_ORDER_ROBOT_SPRITES @@ -112,4 +110,4 @@ SUBSYSTEM_DEF(robot_sprites) if(RS.whitelist_ckey == ckey && RS.whitelist_charname == spritename) . |= RS - return \ No newline at end of file + return diff --git a/code/controllers/subsystems/throwing.dm b/code/controllers/subsystems/throwing.dm index 101c71a147..0cad319b7d 100644 --- a/code/controllers/subsystems/throwing.dm +++ b/code/controllers/subsystems/throwing.dm @@ -208,3 +208,6 @@ SUBSYSTEM_DEF(throwing) if(hit_thing) finalize(hit=TRUE, t_target=hit_thing) return TRUE + +#undef MAX_THROWING_DIST +#undef MAX_TICKS_TO_MAKE_UP diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index d39d012832..453652928b 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -1,7 +1,7 @@ ///If the machine is used/deleted in the crafting process -#define CRAFTING_MACHINERY_CONSUME 1 +//# define CRAFTING_MACHINERY_CONSUME 1 Unused ///If the machine is only "used" i.e. it checks to see if it's nearby and allows crafting, but doesn't delete it -#define CRAFTING_MACHINERY_USE 0 +//# define CRAFTING_MACHINERY_USE 0 Unused /datum/crafting_recipe var/name = "" //in-game display name @@ -48,7 +48,7 @@ /datum/crafting_recipe/proc/on_craft_completion(mob/user, atom/result) return -// Computes the total reagents volume +// Computes the total reagents volume /datum/crafting_recipe/proc/get_parts_reagents_volume() . = 0 for(var/list/L in parts) diff --git a/code/datums/components/resize_guard.dm b/code/datums/components/resize_guard.dm index 33799cb828..d708002cc1 100644 --- a/code/datums/components/resize_guard.dm +++ b/code/datums/components/resize_guard.dm @@ -15,5 +15,5 @@ var/area/A = get_area(parent) if(A?.limit_mob_size) var/mob/living/L = parent - L.resize(L.size_multiplier) + L.resize(L.size_multiplier, ignore_prefs = TRUE) qdel(src) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 17d8fb17ed..7c37c10f52 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -486,7 +486,6 @@ var/global/list/PDA_Manifest = list() R.fields["ma_crim"] = "None" R.fields["ma_crim_d"] = "No major crime convictions." R.fields["notes"] = "No notes." - R.fields["notes"] = "No notes." if(hidden) hidden_security += R else diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index be38a7a5a2..d2d3136e88 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -1,7 +1,3 @@ -#define FORWARD -1 -#define BACKWARD 1 - - // As of August 4th, 2018, these datums are only used in Mech construction. /datum/construction var/list/steps @@ -158,4 +154,4 @@ return 0 /datum/construction/reversible/custom_action(index, diff, I, user) - return 1 \ No newline at end of file + return 1 diff --git a/code/datums/looping_sounds/sequence.dm b/code/datums/looping_sounds/sequence.dm index f14b43184b..5c1a54dceb 100644 --- a/code/datums/looping_sounds/sequence.dm +++ b/code/datums/looping_sounds/sequence.dm @@ -173,3 +173,4 @@ #undef MORSE_DOT #undef MORSE_DASH +#undef MORSE_BASE_DELAY diff --git a/code/datums/wires/mines.dm b/code/datums/wires/mines.dm index 229ce682be..8fccfc1dfc 100644 --- a/code/datums/wires/mines.dm +++ b/code/datums/wires/mines.dm @@ -79,6 +79,8 @@ ..() +#undef WIRE_TRAP + /datum/wires/mines/interactable(mob/user) var/obj/effect/mine/M = holder return M.panel_open diff --git a/code/defines/procs/radio.dm b/code/defines/procs/radio.dm index 0ee38f3b12..954004b313 100644 --- a/code/defines/procs/radio.dm +++ b/code/defines/procs/radio.dm @@ -61,6 +61,11 @@ return TELECOMMS_RECEPTION_RECEIVER return TELECOMMS_RECEPTION_NONE +#undef TELECOMMS_RECEPTION_NONE +#undef TELECOMMS_RECEPTION_SENDER +#undef TELECOMMS_RECEPTION_RECEIVER +#undef TELECOMMS_RECEPTION_BOTH + /proc/get_reception(var/atom/sender, var/receiver, var/message = "", var/do_sleep = 1) var/datum/reception/reception = new diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index a370f614d6..2be00fb258 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -254,13 +254,6 @@ // new lighting behaviour with obj lights icon_state = null - -/* -#define EQUIP 1 -#define LIGHT 2 -#define ENVIRON 3 -*/ - /area/proc/powered(var/chan) // return true if the area has power to given channel if(!requires_power) @@ -553,4 +546,4 @@ GLOBAL_DATUM(spoiler_obfuscation_image, /image) if(should_obfuscate) add_overlay(GLOB.spoiler_obfuscation_image) else - cut_overlay(GLOB.spoiler_obfuscation_image) \ No newline at end of file + cut_overlay(GLOB.spoiler_obfuscation_image) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index c00ccbd9f2..5e78698f48 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -10,65 +10,8 @@ #define DNA_ON_LOWERBOUND 3 #define DNA_ON_UPPERBOUND 4 -// Define block bounds (off-low,off-high,on-low,on-high) -// Used in setupgame.dm -#define DNA_DEFAULT_BOUNDS list(1,2049,2050,4095) -#define DNA_HARDER_BOUNDS list(1,3049,3050,4095) -#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_EAR_STYLE 17 // VOREStation snippet. -#define DNA_UI_TAIL_STYLE 18 -#define DNA_UI_PLAYERSCALE 19 -#define DNA_UI_TAIL_R 20 -#define DNA_UI_TAIL_G 21 -#define DNA_UI_TAIL_B 22 -#define DNA_UI_TAIL2_R 23 -#define DNA_UI_TAIL2_G 24 -#define DNA_UI_TAIL2_B 25 -#define DNA_UI_TAIL3_R 26 -#define DNA_UI_TAIL3_G 27 -#define DNA_UI_TAIL3_B 28 -#define DNA_UI_EARS_R 29 -#define DNA_UI_EARS_G 30 -#define DNA_UI_EARS_B 31 -#define DNA_UI_EARS2_R 32 -#define DNA_UI_EARS2_G 33 -#define DNA_UI_EARS2_B 34 -#define DNA_UI_EARS3_R 35 -#define DNA_UI_EARS3_G 36 -#define DNA_UI_EARS3_B 37 -#define DNA_UI_WING_STYLE 38 -#define DNA_UI_WING_R 39 -#define DNA_UI_WING_G 40 -#define DNA_UI_WING_B 41 -#define DNA_UI_WING2_R 42 -#define DNA_UI_WING2_G 43 -#define DNA_UI_WING2_B 44 -#define DNA_UI_WING3_R 45 -#define DNA_UI_WING3_G 46 -#define DNA_UI_WING3_B 47 // VOREStation snippet end. -#define DNA_UI_LENGTH 47 // VOREStation Edit - Needs to match the highest number above. - -#define DNA_SE_LENGTH 49 // VOREStation Edit (original was UI+11) // For later: -//#define DNA_SE_LENGTH 50 // Was STRUCDNASIZE, size 27. 15 new blocks added = 42, plus room to grow. +//# define DNA_SE_LENGTH 50 // Was STRUCDNASIZE, size 27. 15 new blocks added = 42, plus room to grow. // Defines which values mean "on" or "off". @@ -515,3 +458,8 @@ var/global/list/datum/dna/gene/dna_genes[0] unique_enzymes = md5(character.real_name) reg_dna[unique_enzymes] = character.real_name + +#undef DNA_OFF_LOWERBOUND +#undef DNA_OFF_UPPERBOUND +#undef DNA_ON_LOWERBOUND +#undef DNA_ON_UPPERBOUND diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 0e8e0ba43c..572583ef9e 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -1,10 +1,5 @@ #define DNA_BLOCK_SIZE 3 -// Buffer datatype flags. -#define DNA2_BUF_UI 1 -#define DNA2_BUF_UE 2 -#define DNA2_BUF_SE 4 - #define PAGE_UI "ui" #define PAGE_SE "se" #define PAGE_BUFFER "buffer" @@ -792,6 +787,7 @@ else return FALSE +#undef DNA_BLOCK_SIZE #undef PAGE_UI #undef PAGE_SE diff --git a/code/game/gamemodes/technomancer/catalog.dm b/code/game/gamemodes/technomancer/catalog.dm index a63723ec23..2c4a8c925d 100644 --- a/code/game/gamemodes/technomancer/catalog.dm +++ b/code/game/gamemodes/technomancer/catalog.dm @@ -1,8 +1,4 @@ #define ALL_SPELLS "All" -#define OFFENSIVE_SPELLS "Offensive" -#define DEFENSIVE_SPELLS "Defensive" -#define UTILITY_SPELLS "Utility" -#define SUPPORT_SPELLS "Support" var/list/all_technomancer_spells = subtypesof(/datum/technomancer/spell) var/list/all_technomancer_equipment = subtypesof(/datum/technomancer/equipment) @@ -385,3 +381,5 @@ var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance qdel(AM) return to_chat(user, "\The [src] is unable to refund \the [AM].") + +#undef ALL_SPELLS diff --git a/code/game/gamemodes/technomancer/instability.dm b/code/game/gamemodes/technomancer/instability.dm index a7cf71b8f0..c41c2ea8dc 100644 --- a/code/game/gamemodes/technomancer/instability.dm +++ b/code/game/gamemodes/technomancer/instability.dm @@ -6,7 +6,6 @@ // 0.95 is 14 ticks. #define TECHNOMANCER_INSTABILITY_MIN_DECAY 0.1 // Minimum removed every Life() tick, always. #define TECHNOMANCER_INSTABILITY_PRECISION 0.1 // Instability is rounded to this. -#define TECHNOMANCER_INSTABILITY_MIN_GLOW 10 // When above this number, the entity starts glowing, affecting others. /mob/living @@ -288,3 +287,6 @@ to_chat(src, "The purple glow makes you feel strange...") adjust_instability(amount) +#undef TECHNOMANCER_INSTABILITY_DECAY +#undef TECHNOMANCER_INSTABILITY_MIN_DECAY +#undef TECHNOMANCER_INSTABILITY_PRECISION diff --git a/code/game/jobs/job/captain_vr.dm b/code/game/jobs/job/captain_vr.dm index f80cfb7de1..3e2541bdec 100644 --- a/code/game/jobs/job/captain_vr.dm +++ b/code/game/jobs/job/captain_vr.dm @@ -15,7 +15,7 @@ title = "Captain" /datum/job/captain/get_request_reasons() - return list("Training crew") + return list("Training crew", "Assembling expedition team") /datum/job/hop disallow_jobhop = TRUE @@ -53,7 +53,7 @@ title = "First Mate" /datum/job/hop/get_request_reasons() - return list("ID modification", "Training crew") + return list("ID modification", "Training crew", "Assembling expedition team") /datum/job/secretary diff --git a/code/game/jobs/job/civilian_vr.dm b/code/game/jobs/job/civilian_vr.dm index 31d69c1a89..9934d9dea9 100644 --- a/code/game/jobs/job/civilian_vr.dm +++ b/code/game/jobs/job/civilian_vr.dm @@ -106,6 +106,9 @@ /datum/alt_title/excavator title = "Excavator" +/datum/job/mining/get_request_reasons() + return list("Assembling expedition team") + /datum/job/janitor //Lots of janitor substations on station. total_positions = 3 @@ -236,6 +239,9 @@ /datum/alt_title/helmsman title = "Helmsman" +/datum/job/pilot/get_request_reasons() + return list("Assembling expedition team") + ////////////////////////////////// // Entertainer ////////////////////////////////// diff --git a/code/game/jobs/job/engineering_vr.dm b/code/game/jobs/job/engineering_vr.dm index d41f80ef7f..336fce4b48 100644 --- a/code/game/jobs/job/engineering_vr.dm +++ b/code/game/jobs/job/engineering_vr.dm @@ -24,7 +24,7 @@ title = "Maintenance Manager" /datum/job/chief_engineer/get_request_reasons() - return list("Engine setup", "Construction project", "Repairs necessary", "Training crew") + return list("Engine setup", "Construction project", "Repairs necessary", "Training crew", "Assembling expedition team") /datum/job/engineer @@ -42,7 +42,7 @@ title_blurb = "An Engineering Contractor fulfills similar duties to other engineers, but isn't directly employed by NT proper." /datum/job/engineer/get_request_reasons() - return list("Engine setup", "Construction project", "Repairs necessary") + return list("Engine setup", "Construction project", "Repairs necessary", "Assembling expedition team") @@ -67,7 +67,7 @@ title = "Fuel Technician" /datum/job/atmos/get_request_reasons() - return list("Construction project", "Repairs necessary") + return list("Construction project", "Repairs necessary", "Assembling expedition team") // YW Alt Titles /datum/alt_title/station_engineer diff --git a/code/game/jobs/job/medical_vr.dm b/code/game/jobs/job/medical_vr.dm index 8c6543e8f8..8b566a21d5 100644 --- a/code/game/jobs/job/medical_vr.dm +++ b/code/game/jobs/job/medical_vr.dm @@ -22,7 +22,7 @@ title = "Healthcare Manager" /datum/job/cmo/get_request_reasons() - return list("Surgery pending", "Viral outbreak", "Training crew") + return list("Surgery pending", "Viral outbreak", "Training crew", "Assembling expedition team") /datum/job/doctor @@ -49,7 +49,7 @@ title_blurb = "A Medical Contractor can be anything from a full-blown doctor to the likes of a nurse or orderly, but isn't directly employed by NT proper." /datum/job/doctor/get_request_reasons() - return list("Surgery pending", "Viral outbreak") + return list("Surgery pending", "Viral outbreak", "Assembling expedition team") /datum/job/chemist @@ -92,3 +92,6 @@ /datum/alt_title/sar title = "Search and Rescue" + +/datum/job/paramedic/get_request_reasons() + return list("Assembling expedition team") diff --git a/code/game/jobs/job/science_vr.dm b/code/game/jobs/job/science_vr.dm index 37bc168901..fd95a95409 100644 --- a/code/game/jobs/job/science_vr.dm +++ b/code/game/jobs/job/science_vr.dm @@ -26,7 +26,7 @@ title = "Head Scientist" /datum/job/rd/get_request_reasons() - return list("Repairs needed", "Training crew") + return list("Repairs needed", "Training crew", "Assembling expedition team") /datum/job/scientist @@ -69,6 +69,8 @@ title_blurb = "A Circuit Programmer is a Scientist whose expertise is working with integrated circuits. They are familar with the workings and programming of those devices. \ They work to create various useful devices using the capabilities of integrated circuitry." +/datum/job/scientist/get_request_reasons() + return list("Assembling expedition team") /datum/job/xenobiologist spawn_positions = 3 @@ -123,4 +125,4 @@ title = "Xenoflorist" /datum/alt_title/xenohydroponicist - title = "Xenohydroponicist" \ No newline at end of file + title = "Xenohydroponicist" diff --git a/code/game/jobs/job/security_vr.dm b/code/game/jobs/job/security_vr.dm index c6657abec7..8980381d6a 100644 --- a/code/game/jobs/job/security_vr.dm +++ b/code/game/jobs/job/security_vr.dm @@ -17,7 +17,7 @@ title = "Security Manager" /datum/job/hos/get_request_reasons() - return list("Wildlife management", "Forensic investigation", "Training crew") + return list("Wildlife management", "Forensic investigation", "Training crew", "Assembling expedition team") /datum/job/warden @@ -72,4 +72,4 @@ title = "Security Contractor" /datum/job/officer/get_request_reasons() - return list("Wildlife management") \ No newline at end of file + return list("Wildlife management", "Assembling expedition team") diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 6091fc0e7b..4ce8780cf4 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -1,9 +1,5 @@ var/global/datum/controller/occupations/job_master -#define GET_RANDOM_JOB 0 -#define BE_ASSISTANT 1 -#define RETURN_TO_LOBBY 2 - /datum/controller/occupations //List of all jobs var/list/occupations = list() diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index b73df5ca3a..87d4146259 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -205,6 +205,11 @@ occupantData["bodyTempF"] = (((H.bodytemperature-T0C) * 1.8) + 32) occupantData["hasBorer"] = H.has_brain_worms() + occupantData["colourblind"] = null + for(var/datum/modifier/M in H.modifiers) + if(!isnull(M.wire_colors_replace)) + occupantData["colourblind"] = LAZYLEN(M.wire_colors_replace) + break var/bloodData[0] if(H.vessel) diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index c8da98c9df..0374f9eab8 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -846,3 +846,21 @@ #undef LOAD_TLV_VALUES #undef TEST_TLV_VALUES #undef DECLARE_TLV_VALUES + +#undef AALARM_MODE_SCRUBBING +#undef AALARM_MODE_REPLACEMENT +#undef AALARM_MODE_PANIC +#undef AALARM_MODE_CYCLE +#undef AALARM_MODE_FILL +#undef AALARM_MODE_OFF + +#undef AALARM_SCREEN_MAIN +#undef AALARM_SCREEN_VENT +#undef AALARM_SCREEN_SCRUB +#undef AALARM_SCREEN_MODE +#undef AALARM_SCREEN_SENSORS + +#undef AALARM_REPORT_TIMEOUT + +#undef MAX_TEMPERATURE +#undef MIN_TEMPERATURE diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index da958671e7..a536042cc5 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -23,7 +23,6 @@ break return selected -#define CLONE_BIOMASS 30 //VOREstation Edit #define MINIMUM_HEAL_LEVEL 40 /obj/machinery/clonepod @@ -479,6 +478,8 @@ healthstring = "ERROR" return healthstring +#undef MINIMUM_HEAL_LEVEL + //Disk stuff. //The return of data disks?? Just for transferring between genetics machine/cloning machine. //TO-DO: Make the genetics machine accept them. diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index dc8375f1e7..9fa837889b 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -310,3 +310,5 @@ // Please for the love of all that is holy, someone make surgery steps // have names so I don't have to do this stupid pretty_type shit. . += "[pretty_type(S)]: [english_list(allowed_tools_by_name)]" + +#undef OP_COMPUTER_COOLDOWN diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm index c54fb1ffb8..8efe7003af 100644 --- a/code/game/machinery/computer/medical.dm +++ b/code/game/machinery/computer/medical.dm @@ -510,5 +510,11 @@ circuit = /obj/item/weapon/circuitboard/med_data/pcu density = FALSE +#undef MED_DATA_R_LIST +#undef MED_DATA_MAINT +#undef MED_DATA_RECORD +#undef MED_DATA_V_DATA +#undef MED_DATA_MEDBOT + #undef FIELD #undef MED_FIELD diff --git a/code/game/machinery/computer/prisonshuttle.dm b/code/game/machinery/computer/prisonshuttle.dm index 2c6b4c7ced..7716f527a5 100644 --- a/code/game/machinery/computer/prisonshuttle.dm +++ b/code/game/machinery/computer/prisonshuttle.dm @@ -213,3 +213,7 @@ var/prison_shuttle_timeleft = 0 hacked = 1 to_chat(user, "You disable the lock.") return 1 + +#undef PRISON_MOVETIME +#undef PRISON_STATION_AREATYPE +#undef PRISON_DOCK_AREATYPE diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index e239a6cf06..53cdeec5f7 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -512,4 +512,8 @@ /obj/machinery/computer/secure_data/detective_computer icon_state = "messyfiles" +#undef SEC_DATA_R_LIST +#undef SEC_DATA_MAINT +#undef SEC_DATA_RECORD + #undef FIELD diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm index 876a2009d1..d157d964f5 100644 --- a/code/game/machinery/computer/skills.dm +++ b/code/game/machinery/computer/skills.dm @@ -385,3 +385,9 @@ continue ..(severity) + +#undef GENERAL_RECORD_LIST +#undef GENERAL_RECORD_MAINT +#undef GENERAL_RECORD_DATA + +#undef FIELD diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm index cc8727343c..ac510ee19f 100644 --- a/code/game/machinery/computer/specops_shuttle.dm +++ b/code/game/machinery/computer/specops_shuttle.dm @@ -329,3 +329,8 @@ var/specops_shuttle_timeleft = 0 add_fingerprint(usr) updateUsrDialog() return + +#undef SPECOPS_MOVETIME +#undef SPECOPS_STATION_AREATYPE +#undef SPECOPS_DOCK_AREATYPE +#undef SPECOPS_RETURN_DELAY diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 3a394b1973..d431c700d6 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -366,3 +366,5 @@ /datum/data/function/proc/display() return + +#undef HEAT_CAPACITY_HUMAN diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 38b48ee76a..49dcdbafe7 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -86,7 +86,7 @@ /obj/machinery/computer/cryopod/tgui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "CryoStorageVr", storage_name) // VOREStation Edit - Use our own template for our custom data + ui = new(user, src, "CryoStorage", storage_name) // VOREStation Edit - Use our own template for our custom data ui.open() /obj/machinery/computer/cryopod/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state) diff --git a/code/game/machinery/doors/airlock_angled_bay.dm b/code/game/machinery/doors/airlock_angled_bay.dm index 4d5eac48a4..00741a1fd3 100644 --- a/code/game/machinery/doors/airlock_angled_bay.dm +++ b/code/game/machinery/doors/airlock_angled_bay.dm @@ -8,7 +8,7 @@ * icons being built at runtime to afford the luxury of not needing to pre-bake * all the icons like we have in the past, but preventing the overlay thrashing that * Bay's seem to encounter. All the heavy lifting is just done once at initialization. - * + * * The input state names from the various Bay files are: * preview: Only in base_icon for mapping * closed: static, when closed @@ -16,7 +16,7 @@ * closing: anim, from open to closed transition * opening: anim, from closed to open transition * deny: static/anim, when denying a mob access - * + * * The output state names to our system are: * door_closed: closed * door_locked: closed+bolted lights @@ -28,7 +28,7 @@ * o_door_closing: closing+panel * door_opening_stat: opening * door_closing_stat: closing - * + * * These do not include the door icon and are overlays: * panel_open: bare panel overlay * welded: bare welded overlay @@ -114,7 +114,7 @@ icon = mine update_icon() return // hooray - + // Base layer - the bare metal - absolutely required sprites var/icon/door_closed = icon(base_icon, "closed") var/icon/door_open = icon(base_icon, "open") @@ -127,7 +127,7 @@ var/icon/door_closing_stat = icon(base_icon, "closing") var/icon/o_door_opening = icon(base_icon, "opening") var/icon/o_door_closing = icon(base_icon, "closing") - + // Optional icons var/icon/panel_open var/icon/welded_closed @@ -135,26 +135,26 @@ var/icon/sparks_damaged var/icon/sparks_open var/icon/sparks_broken - + if(panel_icon) panel_open = icon(panel_icon, "closed") else panel_open = icon('icons/effects/effects.dmi', "nothing") - + if(welded_icon) welded_closed = icon(welded_icon, "closed") welded_open = icon(welded_icon, "open") // only used on firedoors far as I can tell else welded_closed = icon('icons/effects/effects.dmi', "nothing") welded_open = icon('icons/effects/effects.dmi', "nothing") - + if(spark_damaged_icon) sparks_damaged = icon(spark_damaged_icon, "closed") sparks_open = icon(spark_damaged_icon, "open") else sparks_damaged = icon('icons/effects/effects.dmi', "nothing") sparks_open = icon('icons/effects/effects.dmi', "nothing") - + if(spark_broken_icon) sparks_broken = icon(spark_broken_icon, "closed") else @@ -231,10 +231,10 @@ o_door_opening.Blend(icon(lights_green_icon, "opening"), ICON_OVERLAY) door_closing.Blend(icon(lights_green_icon, "closing"), ICON_OVERLAY) o_door_closing.Blend(icon(lights_green_icon, "closing"), ICON_OVERLAY) - + if(lights_deny_icon) door_deny.Blend(icon(lights_deny_icon, "deny"), ICON_OVERLAY) - + if(lights_bolts_icon) door_locked.Blend(icon(lights_bolts_icon, "closed"), ICON_OVERLAY) @@ -462,3 +462,8 @@ else bound_width = world.icon_size bound_height = width * world.icon_size + +#undef FILL_NONE +#undef FILL_METAL +#undef FILL_GLASS +#undef FILL_COLOR diff --git a/code/game/machinery/doors/airlock_control.dm b/code/game/machinery/doors/airlock_control.dm index 3c91bd7c02..bbc0b5e5ed 100644 --- a/code/game/machinery/doors/airlock_control.dm +++ b/code/game/machinery/doors/airlock_control.dm @@ -1,5 +1,3 @@ -#define AIRLOCK_CONTROL_RANGE 22 - // This code allows for airlocks to be controlled externally by setting an id_tag and comm frequency (disables ID access) /obj/machinery/door/airlock var/id_tag diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index f1aa9051cc..ea187cd583 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -292,3 +292,9 @@ #undef FONT_COLOR #undef FONT_STYLE #undef CHARS_PER_LINE + +#undef MAX_TIMER + +#undef PRESET_SHORT +#undef PRESET_MEDIUM +#undef PRESET_LONG diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 3493ec1dc7..bc80533df2 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -1,6 +1,3 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -#define DOOR_REPAIR_AMOUNT 50 //amount of health regained per stack amount used - /obj/machinery/door name = "Door" desc = "It opens and closes." diff --git a/code/game/machinery/embedded_controller/docking_program.dm b/code/game/machinery/embedded_controller/docking_program.dm index 7c13792724..78dadca5e9 100644 --- a/code/game/machinery/embedded_controller/docking_program.dm +++ b/code/game/machinery/embedded_controller/docking_program.dm @@ -306,4 +306,6 @@ #undef MODE_NONE #undef MODE_SERVER -#undef MODE_CLIENT \ No newline at end of file +#undef MODE_CLIENT + +#undef MESSAGE_RESEND_TIME diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 31c7233c7d..caaaaef648 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -3,11 +3,6 @@ // Rewritten by Leshana from existing Polaris code, merging in D2K5 and N3X15 work // -#define JUKEMODE_NEXT 1 // Advance to next song in the track list -#define JUKEMODE_RANDOM 2 // Not shuffle, randomly picks next each time. -#define JUKEMODE_REPEAT_SONG 3 // Play the same song over and over -#define JUKEMODE_PLAY_ONCE 4 // Play, then stop. - /obj/machinery/media/jukebox name = "space jukebox" desc = "Filled with songs both past and present!" diff --git a/code/game/machinery/nuclear_bomb.dm b/code/game/machinery/nuclear_bomb.dm index 1784635d59..fc942c4fa9 100644 --- a/code/game/machinery/nuclear_bomb.dm +++ b/code/game/machinery/nuclear_bomb.dm @@ -410,6 +410,8 @@ var/bomb_set return return +#undef NUKERANGE + /obj/item/weapon/disk/nuclear/New() ..() nuke_disks |= src diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index 027de127b2..85b79e233f 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -1,4 +1,4 @@ -//#define AMAP +//# define AMAP /obj/machinery/computer/security/verb/station_map() set name = ".map" set category = "Object" diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 11eb234e26..2738b35918 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -1,11 +1,6 @@ /******************** Requests Console ********************/ /** Originally written by errorage, updated by: Carn, needs more work though. I just added some security fixes */ -//Request Console Department Types -#define RC_ASSIST 1 //Request Assistance -#define RC_SUPPLY 2 //Request Supplies -#define RC_INFO 4 //Relay Info - //Request Console Screens #define RCS_MAINMENU 0 // Main menu #define RCS_RQASSIST 1 // Request supplies @@ -289,3 +284,13 @@ var/list/obj/machinery/requests_console/allConsoles = list() announcement.announcer = "" if(mainmenu) screen = RCS_MAINMENU + +#undef RCS_MAINMENU +#undef RCS_RQASSIST +#undef RCS_RQSUPPLY +#undef RCS_SENDINFO +#undef RCS_SENTPASS +#undef RCS_SENTFAIL +#undef RCS_VIEWMSGS +#undef RCS_MESSAUTH +#undef RCS_ANNOUNCE diff --git a/code/game/machinery/requests_console_vr.dm b/code/game/machinery/requests_console_vr.dm index fa40e4c2e9..90504d49dc 100644 --- a/code/game/machinery/requests_console_vr.dm +++ b/code/game/machinery/requests_console_vr.dm @@ -2,9 +2,9 @@ // By using these presets we can rename the departments easily. //Request Console Department Types -// #define RC_ASSIST 1 //Request Assistance -// #define RC_SUPPLY 2 //Request Supplies -// #define RC_INFO 4 //Relay Info +// # define RC_ASSIST 1 //Request Assistance +// # define RC_SUPPLY 2 //Request Supplies +// # define RC_INFO 4 //Relay Info /obj/machinery/requests_console/preset name = "" diff --git a/code/game/magic/archived_book.dm b/code/game/magic/archived_book.dm index 117279cf65..35df877443 100644 --- a/code/game/magic/archived_book.dm +++ b/code/game/magic/archived_book.dm @@ -3,7 +3,6 @@ #define BOOK_VERSION_MIN 1 #define BOOK_VERSION_MAX 2 #define BOOK_PATH "data/books/" -#define BOOKS_USE_SQL 0 // no guarentee for this branch to work right with sql var/global/datum/book_manager/book_mgr = new() diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 80c16c4a65..f7be915eda 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -1,13 +1,5 @@ //DO NOT ADD MECHA PARTS TO THE GAME WITH THE DEFAULT "SPRITE ME" SPRITE! //I'm annoyed I even have to tell you this! SPRITE FIRST, then commit. -#define EQUIP_HULL "hull" -#define EQUIP_WEAPON "weapon" -#define EQUIP_UTILITY "utility" -#define EQUIP_SPECIAL "core" -//VOREStation Addition begin: MICROMECHS -#define EQUIP_MICRO_UTILITY "micro_utility" -#define EQUIP_MICRO_WEAPON "micro_weapon" -//VOREStation Addition end: MICROMECHS /obj/item/mecha_parts/mecha_equipment name = "mecha equipment" diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 1e054279ca..f8275a4d3d 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -1,26 +1,9 @@ -#define MECHA_INT_FIRE 1 -#define MECHA_INT_TEMP_CONTROL 2 -#define MECHA_INT_SHORT_CIRCUIT 4 -#define MECHA_INT_TANK_BREACH 8 -#define MECHA_INT_CONTROL_LOST 16 - -#define MECHA_PROC_MOVEMENT 1 -#define MECHA_PROC_DAMAGE 2 -#define MECHA_PROC_INT_TEMP 4 - -#define MELEE 1 -#define RANGED 2 - #define MECHA_OPERATING 0 #define MECHA_BOLTS_SECURED 1 #define MECHA_PANEL_LOOSE 2 #define MECHA_CELL_OPEN 3 #define MECHA_CELL_OUT 4 -#define MECH_FACTION_NT "nano" -#define MECH_FACTION_SYNDI "syndi" -#define MECH_FACTION_NONE "none" - /obj/mecha name = "Mecha" desc = "Exosuit" @@ -2911,3 +2894,9 @@ playsound(src, 'sound/effects/attackblob.ogg', 50, 1) return ..() + +#undef MECHA_OPERATING +#undef MECHA_BOLTS_SECURED +#undef MECHA_PANEL_LOOSE +#undef MECHA_CELL_OPEN +#undef MECHA_CELL_OUT diff --git a/code/game/mecha/micro/mecha_vr.dm b/code/game/mecha/micro/mecha_vr.dm index a0dd1b43e9..9a89e98e16 100644 --- a/code/game/mecha/micro/mecha_vr.dm +++ b/code/game/mecha/micro/mecha_vr.dm @@ -45,3 +45,5 @@ /obj/item/weapon/circuitboard/mecha/weasel/main name = T_BOARD_MICRO_MECHA("Weasel central control") icon_state = "mainboard" + +#undef T_BOARD_MICRO_MECHA diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 16a0515e63..50fec106cc 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -193,7 +193,6 @@ var/global/list/image/splatter_cache=list() icon = blood cut_overlays() - add_overlay(janhud) add_overlay(giblets) /obj/effect/decal/cleanable/blood/gibs/up @@ -252,3 +251,5 @@ var/global/list/image/splatter_cache=list() /obj/effect/decal/cleanable/mucus/mapped/Destroy() virus2.Cut() return ..() + +#undef DRYING_TIME diff --git a/code/game/objects/effects/decals/Cleanable/tracks.dm b/code/game/objects/effects/decals/Cleanable/tracks.dm index 41b5498340..3d9e74ca6a 100644 --- a/code/game/objects/effects/decals/Cleanable/tracks.dm +++ b/code/game/objects/effects/decals/Cleanable/tracks.dm @@ -1,15 +1,5 @@ // Stolen en masse from N3X15 of /vg/station with much gratitude. -// The idea is to have 4 bits for coming and 4 for going. -#define TRACKS_COMING_NORTH 1 -#define TRACKS_COMING_SOUTH 2 -#define TRACKS_COMING_EAST 4 -#define TRACKS_COMING_WEST 8 -#define TRACKS_GOING_NORTH 16 -#define TRACKS_GOING_SOUTH 32 -#define TRACKS_GOING_EAST 64 -#define TRACKS_GOING_WEST 128 - // 5 seconds #define TRACKS_CRUSTIFY_TIME 50 @@ -130,7 +120,6 @@ var/global/list/image/fluidtrack_cache=list() /obj/effect/decal/cleanable/blood/tracks/update_icon() cut_overlays() - add_overlay(janhud) color = "#FFFFFF" var/truedir=0 diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index a3c5dc6a4b..8d8e52f6f1 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -12,7 +12,7 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for var/generic_filth = FALSE var/age = 0 var/list/random_icon_states = list() - var/list/janhud = list() + var/obj/effect/decal/jan_hud/jan_icon = null /obj/effect/decal/cleanable/Initialize(var/mapload, var/_age) if(!isnull(_age)) @@ -21,13 +21,12 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for src.icon_state = pick(src.random_icon_states) if(!mapload || !config.persistence_ignore_mapload) SSpersistence.track_value(src, /datum/persistent/filth) - janhud += gen_hud_image(ingame_hud, src, "janhud[rand(1,9)]", plane = PLANE_JANHUD) - add_overlay(janhud) + jan_icon = new/obj/effect/decal/jan_hud(src.loc) . = ..() /obj/effect/decal/cleanable/Destroy() SSpersistence.forget_value(src, /datum/persistent/filth) - cut_overlays() + QDEL_NULL(jan_icon) . = ..() /obj/effect/decal/cleanable/clean_blood(var/ignore = 0) @@ -40,3 +39,14 @@ generic_filth = TRUE means when the decal is saved, it will be switched out for if (random_icon_states && length(src.random_icon_states) > 0) src.icon_state = pick(src.random_icon_states) ..() + +/obj/effect/decal/jan_hud + plane = PLANE_JANHUD + layer = BELOW_MOB_LAYER + vis_flags = VIS_HIDE + persist_storable = FALSE + icon = 'icons/mob/hud.dmi' + mouse_opacity = 0 + +/obj/effect/decal/jan_hud/Initialize() + src.icon_state = "janhud[rand(1,9)]" diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index 949eb71eaf..31bc2b804d 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -2,7 +2,7 @@ // If emp_act() takes more than defined deciseconds (1/10 seconds) an admin message and log is created. // I do not recommend having this uncommented on main server, it probably causes a bit more lag, espicially with larger EMPs. -// #define EMPDEBUG 10 +// # define EMPDEBUG 10 /proc/empulse(turf/epicenter, first_range, second_range, third_range, fourth_range, log=0) if(!epicenter) return @@ -71,4 +71,4 @@ if((world.timeofday - time) >= EMPDEBUG) log_and_message_admins("EMPDEBUG: [T.name] - [T.type] - took [world.timeofday - time]ds to process emp_act()!") #endif - return 1 \ No newline at end of file + return 1 diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 31039c7fbc..fa8cf298fe 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -5,10 +5,6 @@ icon_state = "blueprints" attack_verb = list("attacked", "bapped", "hit") preserve_item = 1 - var/const/AREA_ERRNONE = 0 - var/const/AREA_STATION = 1 - var/const/AREA_SPACE = 2 - var/const/AREA_SPECIAL = 3 var/const/BORDER_ERROR = 0 var/const/BORDER_NONE = 1 diff --git a/code/game/objects/items/blueprints_vr.dm b/code/game/objects/items/blueprints_vr.dm index 93bd466de6..6b924f31ab 100644 --- a/code/game/objects/items/blueprints_vr.dm +++ b/code/game/objects/items/blueprints_vr.dm @@ -55,14 +55,6 @@ /area/submap/casino_event name = "\improper Space Casino" - - -//TG blueprints. -#define AREA_ERRNONE 0 -#define AREA_STATION 1 -#define AREA_SPACE 2 -#define AREA_SPECIAL 3 - /obj/item/areaeditor name = "area modification item" icon = 'icons/obj/items.dmi' diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index f188f05431..64c28a8333 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -32,12 +32,6 @@ // // The explosion cannot insta-kill anyone with 30% or more health. -#define LIGHT_OK 0 -#define LIGHT_EMPTY 1 -#define LIGHT_BROKEN 2 -#define LIGHT_BURNED 3 - - /obj/item/device/lightreplacer name = "light replacer" @@ -223,8 +217,3 @@ return 1 else return 0 - -#undef LIGHT_OK -#undef LIGHT_EMPTY -#undef LIGHT_BROKEN -#undef LIGHT_BURNED \ No newline at end of file diff --git a/code/game/objects/items/devices/modkit.dm b/code/game/objects/items/devices/modkit.dm index e299a4d390..5f4891cef1 100644 --- a/code/game/objects/items/devices/modkit.dm +++ b/code/game/objects/items/devices/modkit.dm @@ -62,6 +62,10 @@ user.drop_from_inventory(src) qdel(src) +#undef MODKIT_HELMET +#undef MODKIT_SUIT +#undef MODKIT_FULL + /obj/item/device/modkit/examine(mob/user) . = ..() . += "It looks as though it modifies hardsuits to fit [target_species] users." diff --git a/code/game/objects/items/devices/paicard_vr.dm b/code/game/objects/items/devices/paicard_vr.dm index 7283966d47..26dcdc7912 100644 --- a/code/game/objects/items/devices/paicard_vr.dm +++ b/code/game/objects/items/devices/paicard_vr.dm @@ -1,7 +1,3 @@ -#define PP_FUNCTIONAL 0 -#define PP_BROKEN 1 -#define PP_MISSING 2 - var/global/list/paikeys = list() /obj/item/device/paicard diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index fe41bc658f..ace8fde636 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -62,6 +62,7 @@ /obj/item/borg/upgrade/utility/rename/action(var/mob/living/silicon/robot/R) if(..()) return 0 + if(isshell(R)) return 0 R.notify_ai(ROBOT_NOTIFICATION_NEW_NAME, R.name, heldname) R.name = heldname R.custom_name = heldname diff --git a/code/game/objects/items/uav.dm b/code/game/objects/items/uav.dm index 20bb85d69b..39f95514f6 100644 --- a/code/game/objects/items/uav.dm +++ b/code/game/objects/items/uav.dm @@ -365,4 +365,5 @@ #undef UAV_OFF #undef UAV_ON +#undef UAV_PAIRING #undef UAV_PACKED diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm index a083027713..3e806915a4 100644 --- a/code/game/objects/items/weapons/circuitboards/circuitboard.dm +++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm @@ -1,9 +1,3 @@ -//Define a macro that we can use to assemble all the circuit board names -#ifdef T_BOARD -#error T_BOARD already defined elsewhere, we can't use it. -#endif -#define T_BOARD(name) "circuit board (" + (name) + ")" - /obj/item/weapon/circuitboard name = "circuit board" icon = 'icons/obj/module.dmi' diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 7ff8063e32..395c51fa19 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -1,7 +1,3 @@ -#define MALFUNCTION_TEMPORARY 1 -#define MALFUNCTION_PERMANENT 2 - - /obj/item/weapon/implant name = "implant" icon = 'icons/obj/device.dmi' diff --git a/code/game/objects/items/weapons/material/material_armor.dm b/code/game/objects/items/weapons/material/material_armor.dm index 7f16d57a1c..c9524bf48c 100644 --- a/code/game/objects/items/weapons/material/material_armor.dm +++ b/code/game/objects/items/weapons/material/material_armor.dm @@ -163,6 +163,7 @@ Protectiveness | Armor % result = abs(result - 100) return round(result) +#undef MATERIAL_ARMOR_COEFFICENT /obj/item/clothing/proc/update_armor() if(material) @@ -410,4 +411,4 @@ Protectiveness | Armor % icon_state = "material_armor_makeshift" /obj/item/clothing/head/helmet/material/makeshift/durasteel - default_material = "durasteel" \ No newline at end of file + default_material = "durasteel" diff --git a/code/game/objects/items/weapons/picnic_blankets.dm b/code/game/objects/items/weapons/picnic_blankets.dm index ab76b8efa7..0986c46e6f 100644 --- a/code/game/objects/items/weapons/picnic_blankets.dm +++ b/code/game/objects/items/weapons/picnic_blankets.dm @@ -119,3 +119,6 @@ unfold() if(unfoldable) verbs -= /obj/structure/picnic_blanket_deployed/verb/fold_up + +#undef CENTER +#undef SIDE diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index c1cb09fecb..880f5f2491 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -669,3 +669,5 @@ var/list/global/tank_gauge_cache = list() unsense_proximity(callback = /atom/proc/HasProximity, center = old_loc) if(isturf(loc)) sense_proximity(callback = /atom/proc/HasProximity) + +#undef TANK_IDEAL_PRESSURE diff --git a/code/game/objects/random/maintenance.dm b/code/game/objects/random/maintenance.dm index 56366d7cdd..b3370c2792 100644 --- a/code/game/objects/random/maintenance.dm +++ b/code/game/objects/random/maintenance.dm @@ -112,7 +112,9 @@ something, make sure it's not in one of the other lists.*/ prob(2);/obj/item/toy/tennis/blue, prob(2);/obj/item/toy/tennis/purple, prob(1);/obj/item/toy/baseball, - prob(1);/obj/item/pizzavoucher + prob(1);/obj/item/pizzavoucher, + prob(5);/obj/item/weapon/material/fishing_net/butterfly_net, + prob(2);/obj/item/weapon/cracker /* VOREStation Edit End */ ) diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index 1cb0175267..a4e4b13702 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -1138,5 +1138,13 @@ prob(8);/obj/item/capture_crystal/random, prob(10);/obj/item/weapon/bluespace_harpoon, prob(10);/obj/item/weapon/bluespace_crystal, - prob(1);/obj/item/clothing/glasses/graviton + prob(1);/obj/item/clothing/glasses/graviton, + prob(10);/obj/item/weapon/cracker, + prob(1);/obj/item/weapon/cracker/shrinking, + prob(1);/obj/item/weapon/cracker/growing, + prob(1);/obj/item/weapon/cracker/invisibility, + prob(1);/obj/item/weapon/cracker/drugged, + prob(1);/obj/item/weapon/cracker/knockover, + prob(1);/obj/item/weapon/cracker/vore, + prob(1);/obj/item/weapon/cracker/money ) \ No newline at end of file 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 5eec312418..157354f2c9 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/hydroponics.dm @@ -18,7 +18,8 @@ /obj/item/weapon/reagent_containers/spray/plantbgone, /obj/item/clothing/suit/storage/hooded/wintercoat/hydro, /obj/item/clothing/shoes/boots/winter/hydro, - /obj/item/weapon/storage/belt/hydro) + /obj/item/weapon/storage/belt/hydro, + /obj/item/weapon/material/fishing_net/butterfly_net) /obj/structure/closet/secure_closet/hydroponics/Initialize() if(prob(50)) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 2a7bda2d3f..6dcb5da2b8 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -227,8 +227,7 @@ GLOBAL_LIST_BOILERPLATE(all_crematoriums, /obj/structure/morgue/crematorium) if (!( A.anchored )) A.forceMove(src) playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - //src.connected = null - qdel(src.connected) + qdel_null(connected) else if (src.locked == 0) playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) src.connected = new /obj/structure/m_tray/c_tray( src.loc ) @@ -242,8 +241,7 @@ GLOBAL_LIST_BOILERPLATE(all_crematoriums, /obj/structure/morgue/crematorium) A.forceMove(src.connected.loc) src.connected.icon_state = "cremat" else - //src.connected = null - qdel(src.connected) + qdel_null(connected) src.add_fingerprint(user) update() diff --git a/code/game/objects/structures/props/prop.dm b/code/game/objects/structures/props/prop.dm index 968ff4b66d..90f885bc40 100644 --- a/code/game/objects/structures/props/prop.dm +++ b/code/game/objects/structures/props/prop.dm @@ -52,6 +52,13 @@ icon_state = "ship_memorial" bound_width = 64 +/obj/structure/prop/big_skeleton + name = "large skeleton" + desc = "Whatever it is, it doesn't look too healthy." + icon = 'icons/obj/props/decor96x96.dmi' + icon_state = "big_skeleton" + density = 0 + /** * Notes on change_state diff --git a/code/game/objects/structures/props/rocks.dm b/code/game/objects/structures/props/rocks.dm index b76c477367..253a36bda5 100644 --- a/code/game/objects/structures/props/rocks.dm +++ b/code/game/objects/structures/props/rocks.dm @@ -59,4 +59,49 @@ /obj/structure/prop/rock/crystal_dust name = "crystal dust" icon = 'icons/obj/props/decor.dmi' - icon_state = "bsc_dust" \ No newline at end of file + icon_state = "bsc_dust" + +/obj/structure/prop/rock/ice + icon_state = "ice2" + +/obj/structure/prop/rock/ice/spike + icon_state = "ice1" + +/obj/structure/prop/rock/ice/flat + icon_state = "ice3" + +/obj/structure/prop/rock/ice/round + icon_state = "ice4" + +/obj/structure/prop/rock/ice/small + name = "small rocks" + icon_state = "icesmall1" + density = FALSE + +/obj/structure/prop/rock/ice/small/alt + icon_state = "icesmall2" + +// glamour things for whitespace +/obj/structure/prop/rock/glamour + name = "glamour" + icon = 'icons/obj/glamour.dmi' + icon_state = "pillar_1" + +/obj/structure/prop/rock/glamour/double + icon_state = "pillar_3" + +/obj/structure/prop/rock/glamour/triple + icon_state = "pillar_2" + +/obj/structure/prop/rock/glamour/small + icon_state = "gems_1" + density = FALSE + +/obj/structure/prop/rock/glamour/small/alt1 + icon_state = "gems_2" + +/obj/structure/prop/rock/glamour/small/alt2 + icon_state = "gems_3" + +/obj/structure/prop/rock/glamour/small/alt3 + icon_state = "gems_4" \ No newline at end of file diff --git a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm index c08a9d1951..b0d9a6bed8 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/alien_nests.dm @@ -39,6 +39,8 @@ src.add_fingerprint(user) return +#undef NEST_RESIST_TIME + /obj/structure/bed/nest/user_buckle_mob(mob/M as mob, mob/user as mob) if ( !ismob(M) || (get_dist(src, user) > 1) || (M.loc != src.loc) || user.restrained() || usr.stat || M.buckled || istype(user, /mob/living/silicon/pai) ) return diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index 2387293584..e4fd0a5141 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -96,6 +96,7 @@ to_chat(user, "You put [I] in [src].") update_icon() +#undef TANK_DISPENSER_CAPACITY /obj/structure/dispenser/tgui_act(action, params) if(..()) @@ -119,4 +120,4 @@ oxygentanks-- . = TRUE playsound(src, 'sound/items/drop/gascan.ogg', 100, 1, 1) - update_icon() \ No newline at end of file + update_icon() diff --git a/code/game/objects/structures/trash_pile_vr.dm b/code/game/objects/structures/trash_pile_vr.dm index 6b63271978..65552088f7 100644 --- a/code/game/objects/structures/trash_pile_vr.dm +++ b/code/game/objects/structures/trash_pile_vr.dm @@ -282,6 +282,7 @@ prob(4);/obj/item/weapon/gun/energy/sizegun, prob(4);/obj/item/device/slow_sizegun, prob(4);/obj/item/clothing/accessory/collar/shock/bluespace, + prob(3);/obj/item/weapon/cracker, prob(3);/obj/item/weapon/material/butterfly, prob(3);/obj/item/weapon/material/butterfly/switchblade, prob(3);/obj/item/clothing/gloves/knuckledusters, @@ -314,7 +315,8 @@ prob(1);/obj/item/device/perfect_tele/one_beacon, prob(1);/obj/item/clothing/gloves/bluespace, prob(1);/obj/item/weapon/gun/energy/mouseray, - prob(1);/obj/item/clothing/accessory/collar/shock/bluespace/modified) + prob(1);/obj/item/clothing/accessory/collar/shock/bluespace/modified, + prob(1);/obj/item/weapon/gun/energy/sizegun/backfire) var/obj/item/I = new path() return I diff --git a/code/game/turfs/simulated/outdoors/snow.dm b/code/game/turfs/simulated/outdoors/snow.dm index 9f8982ebb2..94933d7532 100644 --- a/code/game/turfs/simulated/outdoors/snow.dm +++ b/code/game/turfs/simulated/outdoors/snow.dm @@ -80,3 +80,17 @@ desc = "Looks slippery." movement_cost = 4 edge_blending_priority = 0 + +// Extra cold variants + +/turf/simulated/floor/outdoors/snow/v5 + temperature = 150 + oxygen = 8 + nitrogen = 17 + carbon_dioxide = 75 + +/turf/simulated/floor/outdoors/ice/v5 + temperature = 150 + oxygen = 8 + nitrogen = 17 + carbon_dioxide = 75 diff --git a/code/game/turfs/simulated/water.dm b/code/game/turfs/simulated/water.dm index a396b29d29..56a8f07710 100644 --- a/code/game/turfs/simulated/water.dm +++ b/code/game/turfs/simulated/water.dm @@ -270,3 +270,14 @@ var/list/shoreline_icon_cache = list() to_chat(L, "You get drenched in blood from entering \the [src]!") AM.water_act(5) ..() + +/turf/simulated/floor/water/glamour + name = "glamour" + desc = "A body of glamour. It seems shallow enough to walk through, if needed." + icon = 'icons/turf/flooring/glamour.dmi' + icon_state = "water" + water_icon = 'icons/turf/flooring/glamour.dmi' + water_state = "water" + under_state = "glamour" + reagent_type = "water" + diff --git a/code/game/turfs/unsimulated/planetary_vr.dm b/code/game/turfs/unsimulated/planetary_vr.dm index 144379a6f6..82fccbdaed 100644 --- a/code/game/turfs/unsimulated/planetary_vr.dm +++ b/code/game/turfs/unsimulated/planetary_vr.dm @@ -1,49 +1,3 @@ -//Atmosphere properties -#define VIRGO3B_ONE_ATMOSPHERE 82.4 //kPa -#define VIRGO3B_AVG_TEMP 234 //kelvin - -#define VIRGO3B_PER_N2 0.16 //percent -#define VIRGO3B_PER_O2 0.00 -#define VIRGO3B_PER_N2O 0.00 //Currently no capacity to 'start' a turf with this. See turf.dm -#define VIRGO3B_PER_CO2 0.12 -#define VIRGO3B_PER_PHORON 0.72 - -//Math only beyond this point -#define VIRGO3B_MOL_PER_TURF (VIRGO3B_ONE_ATMOSPHERE*CELL_VOLUME/(VIRGO3B_AVG_TEMP*R_IDEAL_GAS_EQUATION)) -#define VIRGO3B_MOL_N2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_N2) -#define VIRGO3B_MOL_O2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_O2) -#define VIRGO3B_MOL_N2O (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_N2O) -#define VIRGO3B_MOL_CO2 (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_CO2) -#define VIRGO3B_MOL_PHORON (VIRGO3B_MOL_PER_TURF * VIRGO3B_PER_PHORON) - -//Turfmakers -#define VIRGO3B_SET_ATMOS nitrogen=VIRGO3B_MOL_N2;oxygen=VIRGO3B_MOL_O2;carbon_dioxide=VIRGO3B_MOL_CO2;phoron=VIRGO3B_MOL_PHORON;temperature=VIRGO3B_AVG_TEMP -#define VIRGO3B_TURF_CREATE(x) x/virgo3b/nitrogen=VIRGO3B_MOL_N2;x/virgo3b/oxygen=VIRGO3B_MOL_O2;x/virgo3b/carbon_dioxide=VIRGO3B_MOL_CO2;x/virgo3b/phoron=VIRGO3B_MOL_PHORON;x/virgo3b/temperature=VIRGO3B_AVG_TEMP;x/virgo3b/outdoors=TRUE;x/virgo3b/update_graphic(list/graphic_add = null, list/graphic_remove = null) return 0 -#define VIRGO3B_TURF_CREATE_UN(x) x/virgo3b/nitrogen=VIRGO3B_MOL_N2;x/virgo3b/oxygen=VIRGO3B_MOL_O2;x/virgo3b/carbon_dioxide=VIRGO3B_MOL_CO2;x/virgo3b/phoron=VIRGO3B_MOL_PHORON;x/virgo3b/temperature=VIRGO3B_AVG_TEMP - -//Atmosphere properties -#define VIRGO3BB_ONE_ATMOSPHERE 101.325 //kPa -#define VIRGO3BB_AVG_TEMP 293.15 //kelvin - -#define VIRGO3BB_PER_N2 0.78 //percent -#define VIRGO3BB_PER_O2 0.21 -#define VIRGO3BB_PER_N2O 0.00 //Currently no capacity to 'start' a turf with this. See turf.dm -#define VIRGO3BB_PER_CO2 0.01 -#define VIRGO3BB_PER_PHORON 0.00 - -//Math only beyond this point -#define VIRGO3BB_MOL_PER_TURF (VIRGO3BB_ONE_ATMOSPHERE*CELL_VOLUME/(VIRGO3BB_AVG_TEMP*R_IDEAL_GAS_EQUATION)) -#define VIRGO3BB_MOL_N2 (VIRGO3BB_MOL_PER_TURF * VIRGO3BB_PER_N2) -#define VIRGO3BB_MOL_O2 (VIRGO3BB_MOL_PER_TURF * VIRGO3BB_PER_O2) -#define VIRGO3BB_MOL_N2O (VIRGO3BB_MOL_PER_TURF * VIRGO3BB_PER_N2O) -#define VIRGO3BB_MOL_CO2 (VIRGO3BB_MOL_PER_TURF * VIRGO3BB_PER_CO2) -#define VIRGO3BB_MOL_PHORON (VIRGO3BB_MOL_PER_TURF * VIRGO3BB_PER_PHORON) - -//Turfmakers -#define VIRGO3BB_SET_ATMOS nitrogen=VIRGO3BB_MOL_N2;oxygen=VIRGO3BB_MOL_O2;carbon_dioxide=VIRGO3BB_MOL_CO2;phoron=VIRGO3BB_MOL_PHORON;temperature=VIRGO3BB_AVG_TEMP -#define VIRGO3BB_TURF_CREATE(x) x/virgo3b_better/nitrogen=VIRGO3BB_MOL_N2;x/virgo3b_better/oxygen=VIRGO3BB_MOL_O2;x/virgo3b_better/carbon_dioxide=VIRGO3BB_MOL_CO2;x/virgo3b_better/phoron=VIRGO3BB_MOL_PHORON;x/virgo3b_better/temperature=VIRGO3BB_AVG_TEMP;x/virgo3b_better/outdoors=TRUE;x/virgo3b_better/update_graphic(list/graphic_add = null, list/graphic_remove = null) return 0 -#define VIRGO3BB_TURF_CREATE_UN(x) x/virgo3b_better/nitrogen=VIRGO3BB_MOL_N2;x/virgo3b_better/oxygen=VIRGO3BB_MOL_O2;x/virgo3b_better/carbon_dioxide=VIRGO3BB_MOL_CO2;x/virgo3b_better/phoron=VIRGO3BB_MOL_PHORON;x/virgo3b_better/temperature=VIRGO3BB_AVG_TEMP - // This is a wall you surround the area of your "planet" with, that makes the atmosphere inside stay within bounds, even if canisters // are opened or other strange things occur. /turf/unsimulated/wall/planetary/virgo3b diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index 65c8afb298..f59a6ad811 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -48,3 +48,5 @@ else to_chat(src, "Error: admin_investigate: Href Logging is not on.") return + +#undef INVESTIGATE_DIR diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index e04b578c95..99628c244a 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -168,9 +168,6 @@ Example: USING PROCCALL = BLOCKING, SELECT = FORCE_NULLS, PRIORITY = HIGH SELECT #define SDQL2_STATE_SWITCHING 5 #define SDQL2_STATE_HALTING 6 -#define SDQL2_VALID_OPTION_TYPES list("proccall", "select", "priority", "autogc") -#define SDQL2_VALID_OPTION_VALUES list("async", "blocking", "force_nulls", "skip_nulls", "high", "normal", "keep_alive") - #define SDQL2_OPTION_SELECT_OUTPUT_SKIP_NULLS (1<<0) #define SDQL2_OPTION_BLOCKING_CALLS (1<<1) #define SDQL2_OPTION_HIGH_PRIORITY (1<<2) //High priority SDQL query, allow using almost all of the tick. diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index ef5987e4be..ebfdd9b195 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -877,3 +877,4 @@ #undef BUILDMODE_LIGHTS #undef BUILDMODE_AI #undef LAST_BUILDMODE +#undef BUILDMODE_DROP diff --git a/code/modules/admin/verbs/get_player_status.dm b/code/modules/admin/verbs/get_player_status.dm index c409deab65..c852c81fd3 100644 --- a/code/modules/admin/verbs/get_player_status.dm +++ b/code/modules/admin/verbs/get_player_status.dm @@ -42,3 +42,5 @@ message += "#### Over all, there are [players] eligible players, of which [inactives] were hidden due to inactivity. ####" to_chat(usr, SPAN_NOTICE(message)) + +#undef INACTIVITY_CAP diff --git a/code/modules/admin/verbs/lightning_strike.dm b/code/modules/admin/verbs/lightning_strike.dm index e048ff4e5c..0b6b3e2661 100644 --- a/code/modules/admin/verbs/lightning_strike.dm +++ b/code/modules/admin/verbs/lightning_strike.dm @@ -95,5 +95,6 @@ C.ear_deaf += 10 to_chat(L, span("danger", "Lightning struck nearby, and the thunderclap is deafening!")) +#undef LIGHTNING_REDIRECT_RANGE #undef LIGHTNING_ZAP_RANGE #undef LIGHTNING_POWER diff --git a/code/modules/admin/verbs/modify_robot.dm b/code/modules/admin/verbs/modify_robot.dm index f381c06968..4d4f0096b9 100644 --- a/code/modules/admin/verbs/modify_robot.dm +++ b/code/modules/admin/verbs/modify_robot.dm @@ -76,7 +76,7 @@ var/obj/item/weapon/robot_module/robot/robot_type = new module_type(robot) robot.emag_items = 1 if(!istype(robot_type, /obj/item/weapon/robot_module/robot/)) - robot.Destroy() + qdel(robot) break var/list/all_modules = robot.module.modules all_modules += robot.module.emag @@ -134,7 +134,7 @@ target.module.synths.Add(item_with_matter.plastic) else item_with_matter.plastic = target.module.synths[found] - robot.Destroy() + qdel(robot) if(MODIFIY_ROBOT_MODULE_REMOVE) while(TRUE) var/list/active_modules = target.module.modules @@ -326,7 +326,7 @@ target.hud_used.update_robot_modules_display(TRUE) target.modtype = initial(target.modtype) target.module.Reset(target) - target.module.Destroy() + qdel(target.module) target.modtype = selected_module var/module_type = robot_modules[selected_module] target.transform_with_anim() diff --git a/code/modules/ai/ai_holder.dm b/code/modules/ai/ai_holder.dm index f8bf5cd9dc..14128dfbb1 100644 --- a/code/modules/ai/ai_holder.dm +++ b/code/modules/ai/ai_holder.dm @@ -535,3 +535,8 @@ #undef AI_NO_PROCESS #undef AI_PROCESSING #undef AI_FASTPROCESSING + +#undef START_AIPROCESSING +#undef STOP_AIPROCESSING +#undef START_AIFASTPROCESSING +#undef STOP_AIFASTPROCESSING diff --git a/code/modules/ai/ai_holder_subtypes/simple_mob_ai_vr.dm b/code/modules/ai/ai_holder_subtypes/simple_mob_ai_vr.dm index 6c78d38d8f..ef75fb502d 100644 --- a/code/modules/ai/ai_holder_subtypes/simple_mob_ai_vr.dm +++ b/code/modules/ai/ai_holder_subtypes/simple_mob_ai_vr.dm @@ -1,4 +1,6 @@ #define VIRGO_AI_NORETURN_CREATE(x) x/returnhome/returns_home=1;x/returnhome/max_home_distance=8 VIRGO_AI_NORETURN_CREATE(/datum/ai_holder/simple_mob/melee/evasive) -VIRGO_AI_NORETURN_CREATE(/datum/ai_holder/simple_mob/ranged/kiting/threatening) \ No newline at end of file +VIRGO_AI_NORETURN_CREATE(/datum/ai_holder/simple_mob/ranged/kiting/threatening) + +#undef VIRGO_AI_NORETURN_CREATE diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm index 3ad1df433f..89fe38a38f 100644 --- a/code/modules/alarm/alarm.dm +++ b/code/modules/alarm/alarm.dm @@ -43,6 +43,8 @@ AS.duration = 0 AS.end_time = world.time + ALARM_RESET_DELAY +#undef ALARM_RESET_DELAY + /datum/alarm/proc/set_source_data(var/atom/source, var/duration, var/severity, var/hidden) var/datum/alarm_source/AS = sources_assoc[source] if(!AS) diff --git a/code/modules/alarm/alarm_handler.dm b/code/modules/alarm/alarm_handler.dm index 4064d700d2..b49402d7ff 100644 --- a/code/modules/alarm/alarm_handler.dm +++ b/code/modules/alarm/alarm_handler.dm @@ -75,6 +75,9 @@ C.remove_network(category) notify_listeners(alarm, was_raised) +#undef ALARM_RAISED +#undef ALARM_CLEARED + /datum/alarm_handler/proc/get_alarm_severity_for_origin(var/atom/origin) if(!origin) return @@ -113,4 +116,4 @@ if(A.hidden || (z && !(A.origin?.z in map_levels))) continue visible_alarms.Add(A) - return visible_alarms \ No newline at end of file + return visible_alarms diff --git a/code/modules/busy_space_vr/air_traffic.dm b/code/modules/busy_space_vr/air_traffic.dm index 347617558e..46adabfcb2 100644 --- a/code/modules/busy_space_vr/air_traffic.dm +++ b/code/modules/busy_space_vr/air_traffic.dm @@ -460,4 +460,7 @@ var/datum/lore/atc_controller/atc = new/datum/lore/atc_controller //Ship sends response to ATC msg(full_closure,"[prefix] [shipname]") return -*/ \ No newline at end of file +*/ + +#undef MIN_MSG_DELAY +#undef MAX_MSG_DELAY diff --git a/code/modules/casino/casino.dm b/code/modules/casino/casino.dm index d5516efed1..04e89cbaba 100644 --- a/code/modules/casino/casino.dm +++ b/code/modules/casino/casino.dm @@ -529,9 +529,9 @@ if(ishuman(usr) || istype(usr, /mob/living/silicon/robot)) interval = tgui_input_number(usr, "Put the desired interval (1-1000)", "Set Interval", null, 1000, 1) if(interval>1000 || interval<1) - usr << "Invalid interval." + to_chat(usr, span_notice("Invalid interval.")) return - usr << "You set the interval to [interval]" + to_chat(usr, span_notice("You set the interval to [interval]")) return // diff --git a/code/modules/casino/casino_prize_vendor.dm b/code/modules/casino/casino_prize_vendor.dm index df7bebcefc..10b9437d1a 100644 --- a/code/modules/casino/casino_prize_vendor.dm +++ b/code/modules/casino/casino_prize_vendor.dm @@ -350,3 +350,5 @@ /obj/machinery/casino_prize_dispenser/process() //Might not need this, but just to be safe for now if(stat & (BROKEN|NOPOWER)) return + +#undef CASINO_PRIZE diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index d09aa71fa3..ea1b3db4f3 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -5,7 +5,7 @@ #define MIN_CLIENT_VERSION 0 //Just an ambiguously low version for now, I don't want to suddenly stop people playing. //I would just like the code ready should it ever need to be used. -//#define TOPIC_DEBUGGING 1 +//# define TOPIC_DEBUGGING 1 /* When somebody clicks a link in game, this Topic is called first. diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index 61603361f5..21e6602863 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -155,17 +155,17 @@ var/list/gear_datums = list() . += "
" for(var/gear_name in LC.gear) var/datum/gear/G = LC.gear[gear_name] - //VOREStation Edit Start if(preference_mob && preference_mob.client) if(G.ckeywhitelist && !(preference_mob.ckey in G.ckeywhitelist)) continue if(G.character_name && !(preference_mob.client.prefs.real_name in G.character_name)) continue - //VOREStation Edit End var/ticked = (G.display_name in pref.gear) . += "[G.display_name]" . += "[G.cost]" . += "[G.description]" + if(G.show_roles && G.allowed_roles) + . += "        Restricted to: [list2text(G.allowed_roles,", ")]" if(ticked) . += "" for(var/datum/gear_tweak/tweak in G.gear_tweaks) @@ -252,6 +252,7 @@ var/list/gear_datums = list() var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points. var/slot //Slot to equip to. var/list/allowed_roles //Roles that can spawn with this item. + var/show_roles = TRUE //Show the role restrictions on this item? var/whitelisted //Term to check the whitelist for.. var/sort_category = "General" var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm index 9ea615df08..9b7839801e 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -75,7 +75,7 @@ gear_tweaks += new/datum/gear_tweak/path(sortAssoc(wcoats)) /datum/gear/accessory/holster - display_name = "holster selection (Security, CD, HoP)" + display_name = "holster selection" path = /obj/item/clothing/accessory/holster allowed_roles = list("Site Manager", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective", "Blueshield Guard","Security Pilot") //YW ADDITIONS diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm index c6f689e4cc..c1c6ce0c8d 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories_vr.dm @@ -57,35 +57,35 @@ path = /obj/item/clothing/accessory/collar/holo/indigestible /datum/gear/accessory/holster - display_name = "holster selection (Security, SM, HoP, Exploration)" //YW ADDITIONS, Sec pilot, Exploration - allowed_roles = list("Site Manager", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective","Field Medic","Explorer","Pathfinder","Talon Captain","Talon Guard","Field Medic","Explorer","Pathfinder","Blueshield Guard","Security Pilot") //YW ADDITIONS, Sec pilot, Exploration + display_name = "holster selection" + allowed_roles = list("Site Manager", "Head of Personnel", "Security Officer", "Warden", "Head of Security","Detective","Talon Captain","Talon Guard","Field Medic","Explorer","Pathfinder","Blueshield Guard","Security Pilot") //YW ADDITIONS, Sec pilot, Exploration /datum/gear/accessory/brown_vest - display_name = "webbing, brown (Eng, Sec, Med, Miner, Exploration)" //YW ADDITIONS, Sec pilot, Exploration + display_name = "webbing, brown" allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Shaft Miner","Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner","Field Medic","Explorer","Pathfinder","Security Pilot") //YW ADDITIONS, Blueshield, Sec pilot, Exploration /datum/gear/accessory/black_vest - display_name = "webbing, black (Eng, Sec, Med, Miner, Exploration)" //YW ADDITIONS, Sec pilot, Exploration + display_name = "webbing, black" allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Shaft Miner","Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner","Field Medic","Explorer","Pathfinder","Security Pilot") //YW ADDITIONS, Sec pilot, Exploration /datum/gear/accessory/white_vest - display_name = "webbing, white (Medical)" + display_name = "webbing, white" allowed_roles = list("Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Talon Doctor","Field Medic") //YW ADDITIONS, field medic /datum/gear/accessory/brown_drop_pouches - display_name = "drop pouches, brown (Eng, Sec, Med, Miner, Exploration)" //YW ADDITIONS, Exploration - allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner","Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner","Field Medic","Explorer","Pathfinder","Security Pilot") //YW ADDITIONS, Exploration + display_name = "drop pouches, brown" + allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Shaft Miner","Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner","Field Medic","Explorer","Pathfinder","Security Pilot") //YW ADDITIONS, Exploration /datum/gear/accessory/black_drop_pouches - display_name = "drop pouches, black (Eng, Sec, Med, Exploration, Miner)" //YW ADDITIONS, Exploration - allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Field Medic","Explorer","Pathfinder","Shaft Miner","Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner","Field Medic","Explorer","Pathfinder","Security Pilot") //YW ADDITIONS, Sec pilot, Exploration + display_name = "drop pouches, black" + allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Shaft Miner","Talon Captain","Talon Doctor","Talon Engineer","Talon Guard", "Talon Miner","Field Medic","Explorer","Pathfinder","Security Pilot") //YW ADDITIONS, Sec pilot, Exploration /datum/gear/accessory/white_drop_pouches - display_name = "drop pouches, white (Medical)" + display_name = "drop pouches, white" allowed_roles = list("Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Talon Doctor","Field Medic") //YW ADDITIONS, field medic /datum/gear/accessory/bluespace - display_name = "bluespace badge (Eng, Sec, Med, Miner, Pilot, Exploration)" //YW ADDITIONS, Exploration + display_name = "bluespace badge" path = /obj/item/clothing/accessory/storage/bluespace allowed_roles = list("Engineer","Atmospheric Technician","Chief Engineer","Security Officer","Detective","Head of Security","Warden","Paramedic","Chief Medical Officer","Medical Doctor","Chemist","Shaft Miner","Talon Captain","Talon Doctor","Talon Engineer","Talon Guard","Talon Miner","Pilot","Field Medic","Explorer","Pathfinder","Security Pilot") //YW ADDITIONS, Exploration cost = 2 diff --git a/code/modules/client/preference_setup/loadout/loadout_eyes.dm b/code/modules/client/preference_setup/loadout/loadout_eyes.dm index 842a77a673..50617425f1 100644 --- a/code/modules/client/preference_setup/loadout/loadout_eyes.dm +++ b/code/modules/client/preference_setup/loadout/loadout_eyes.dm @@ -68,76 +68,76 @@ path = /obj/item/clothing/glasses/science /datum/gear/eyes/security - display_name = "Security HUD (Security)" + display_name = "Security HUD" path = /obj/item/clothing/glasses/hud/security allowed_roles = list("Security Officer","Head of Security","Warden", "Detective","Blueshield Guard","Security Pilot") //YW ADDITIONS /datum/gear/eyes/security/prescriptionsec - display_name = "Security HUD, prescription (Security)" + display_name = "Security HUD, prescription" path = /obj/item/clothing/glasses/hud/security/prescription /datum/gear/eyes/security/sunglasshud - display_name = "Security HUD, sunglasses (Security)" + display_name = "Security HUD, sunglasses" path = /obj/item/clothing/glasses/sunglasses/sechud /datum/gear/eyes/security/aviator - display_name = "Security HUD Aviators (Security)" + display_name = "Security HUD Aviators" path = /obj/item/clothing/glasses/sunglasses/sechud/aviator /datum/gear/eyes/security/aviator/prescription - display_name = "Security HUD Aviators, prescription (Security)" + display_name = "Security HUD Aviators, prescription" path = /obj/item/clothing/glasses/sunglasses/sechud/aviator/prescription /datum/gear/eyes/medical - display_name = "Medical HUD (Medical)" + display_name = "Medical HUD" path = /obj/item/clothing/glasses/hud/health allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist", "Search and Rescue") /datum/gear/eyes/medical/prescriptionmed - display_name = "Medical HUD, prescription (Medical)" + display_name = "Medical HUD, prescription" path = /obj/item/clothing/glasses/hud/health/prescription /datum/gear/eyes/medical/aviator - display_name = "Medical HUD Aviators (Medical)" + display_name = "Medical HUD Aviators" path = /obj/item/clothing/glasses/hud/health/aviator /datum/gear/eyes/medical/aviator/prescription - display_name = "Medical HUD Aviators, prescription (Medical)" + display_name = "Medical HUD Aviators, prescription" path = /obj/item/clothing/glasses/hud/health/aviator/prescription /datum/gear/eyes/janitor - display_name = "Contaminant HUD (Janitor)" + display_name = "Contaminant HUD" path = /obj/item/clothing/glasses/hud/janitor allowed_roles = list("Janitor") /datum/gear/eyes/janitor/prescriptionjan - display_name = "Contaminant HUD, prescription (Janitor)" + display_name = "Contaminant HUD, prescription" path = /obj/item/clothing/glasses/hud/janitor/prescription /datum/gear/eyes/meson - display_name = "Optical Meson Scanners (Engineering, Science, Mining)" + display_name = "Optical Meson Scanners" path = /obj/item/clothing/glasses/meson allowed_roles = list("Engineer","Chief Engineer","Atmospheric Technician", "Scientist", "Research Director", "Shaft Miner") /datum/gear/eyes/meson/prescription - display_name = "Optical Meson Scanners, prescription (Engineering, Science, Mining)" + display_name = "Optical Meson Scanners, prescription" path = /obj/item/clothing/glasses/meson/prescription /datum/gear/eyes/material - display_name = "Optical Material Scanners (Mining)" + display_name = "Optical Material Scanners" path = /obj/item/clothing/glasses/material allowed_roles = list("Shaft Miner","Quartermaster") /datum/gear/eyes/material/prescription - display_name = "Prescription Optical Material Scanners (Mining)" + display_name = "Prescription Optical Material Scanners" path = /obj/item/clothing/glasses/material/prescription /datum/gear/eyes/meson/aviator - display_name = "Optical Meson Aviators, (Engineering, Science, Mining)" + display_name = "Optical Meson Aviators" path = /obj/item/clothing/glasses/meson/aviator /datum/gear/eyes/meson/aviator/prescription - display_name = "Optical Meson Aviators, prescription (Engineering, Science, Mining)" + display_name = "Optical Meson Aviators, prescription" path = /obj/item/clothing/glasses/meson/aviator/prescription /datum/gear/eyes/glasses/fakesun @@ -149,16 +149,16 @@ path = /obj/item/clothing/glasses/fakesunglasses/aviator /datum/gear/eyes/sun - display_name = "Sunglasses (Security/Command)" + display_name = "sunglasses (Security/Command)" path = /obj/item/clothing/glasses/sunglasses allowed_roles = list("Security Officer","Head of Security","Warden","Site Manager","Head of Personnel","Quartermaster","Internal Affairs Agent","Detective", "Blueshield Guard","Security Pilot") //YW ADDITIONS /datum/gear/eyes/sun/shades - display_name = "Sunglasses, fat (Security/Command)" + display_name = "sunglasses, fat (Security/Command)" path = /obj/item/clothing/glasses/sunglasses/big /datum/gear/eyes/sun/aviators - display_name = "Sunglasses, aviators (Security/Command)" + display_name = "sunglasses, aviators (Security/Command)" path = /obj/item/clothing/glasses/sunglasses/aviator /datum/gear/eyes/sun/prescriptionsun @@ -170,17 +170,17 @@ path = /obj/item/clothing/glasses/circuitry /datum/gear/eyes/glasses/rimless - display_name = "Glasses, rimless" + display_name = "glasses, rimless" path = /obj/item/clothing/glasses/rimless /datum/gear/eyes/glasses/prescriptionrimless - display_name = "Glasses, prescription rimless" + display_name = "glasses, prescription rimless" path = /obj/item/clothing/glasses/regular/rimless /datum/gear/eyes/glasses/thin - display_name = "Glasses, thin frame" + display_name = "glasses, thin frame" path = /obj/item/clothing/glasses/thin /datum/gear/eyes/glasses/prescriptionthin - display_name = "Glasses, prescription thin frame" + display_name = "glasses, prescription thin frame" path = /obj/item/clothing/glasses/regular/thin diff --git a/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm b/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm index e90d0e120f..9f402d25c9 100644 --- a/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_eyes_vr.dm @@ -21,27 +21,27 @@ path = /obj/item/clothing/glasses/omnihud/prescription /datum/gear/eyes/arglasses/sec - display_name = "AR-S glasses (Sec)" + display_name = "AR-Security glasses" path = /obj/item/clothing/glasses/omnihud/sec allowed_roles = list("Security Officer","Head of Security","Warden","Detective") /datum/gear/eyes/arglasses/sci - display_name = "AR-R glasses (Sci)" + display_name = "AR-Research glasses" path = /obj/item/clothing/glasses/omnihud/rnd allowed_roles = list("Research Director","Scientist","Xenobiologist","Xenobotanist","Roboticist") /datum/gear/eyes/arglasses/eng - display_name = "AR-E glasses (Eng)" + display_name = "AR-Engineering glasses" path = /obj/item/clothing/glasses/omnihud/eng allowed_roles = list("Engineer","Chief Engineer","Atmospheric Technician") /datum/gear/eyes/arglasses/med - display_name = "AR-M glasses (Medical)" + display_name = "AR-Medical glasses" path = /obj/item/clothing/glasses/omnihud/med allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist", "Field Medic") // YW EDIT Field medic /datum/gear/eyes/arglasses/all - display_name = "AR-B glasses (SM, HoP)" + display_name = "AR-Command glasses" path = /obj/item/clothing/glasses/omnihud/all cost = 2 allowed_roles = list("Site Manager","Head of Personnel") @@ -55,7 +55,7 @@ path = /obj/item/clothing/glasses/fluff/science_proper /datum/gear/eyes/meson/retinal - display_name = "retinal projector, meson (Eng, Sci, Explo)" + display_name = "retinal projector, meson" path = /obj/item/clothing/glasses/omnihud/eng/meson /datum/gear/eyes/security/secpatch @@ -67,7 +67,7 @@ path = /obj/item/clothing/glasses/hud/security/eyepatch2 /datum/gear/eyes/security/tac_sec_visor - display_name = "Tactical AR visor (Security)" + display_name = "Tactical AR visor" path = /obj/item/clothing/glasses/sunglasses/sechud/tactical_sec_vis /datum/gear/eyes/medical/medpatch diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm index 1720d50315..1cc15975e2 100644 --- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm @@ -10,16 +10,16 @@ ckeywhitelist = list("This entry should never be choosable with this variable set.") //If it does, then that means somebody fucked up the whitelist system pretty hard character_name = list("This entry should never be choosable with this variable set.") cost = 0 + /* /datum/gear/fluff/testhorn path = /obj/item/weapon/bikehorn display_name = "Airhorn - Example Item" description = "An example item that you probably shouldn't see!" - ckeywhitelist = list("mewchild") + ckeywhitelist = list("your_ckey_here") allowed_roles = list("Engineer") */ - /datum/gear/fluff/collar //Use this as a base path for collars if you'd like to set tags in loadout. Make sure you don't use apostrophes in the display name or this breaks! slot = slot_tie diff --git a/code/modules/client/preference_setup/loadout/loadout_gloves.dm b/code/modules/client/preference_setup/loadout/loadout_gloves.dm index 6530edf321..3571142448 100644 --- a/code/modules/client/preference_setup/loadout/loadout_gloves.dm +++ b/code/modules/client/preference_setup/loadout/loadout_gloves.dm @@ -52,7 +52,7 @@ cost = 3 /datum/gear/gloves/forensic - display_name = "gloves, forensic (Detective)" + display_name = "gloves, forensic" path = /obj/item/clothing/gloves/forensic allowed_roles = list("Detective") diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index 6ee1985c7f..c1f5f29b3d 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -146,6 +146,7 @@ display_name = "labcoat selection, cmo" path = /obj/item/clothing/suit/storage/toggle/labcoat/cmo allowed_roles = list("Chief Medical Officer") + show_roles = FALSE /datum/gear/suit/labcoat_cmo/New() ..() @@ -165,6 +166,7 @@ display_name = "labcoat, research director" path = /obj/item/clothing/suit/storage/toggle/labcoat/rd allowed_roles = list("Research Director") + show_roles = FALSE /datum/gear/suit/miscellaneous/labcoat display_name = "plague doctor's coat" @@ -256,42 +258,49 @@ display_name = "cloak, head of security" path = /obj/item/clothing/accessory/poncho/roles/cloak/hos allowed_roles = list("Head of Security") + show_roles = FALSE cost = 1 /datum/gear/suit/roles/cloak_cmo display_name = "cloak, chief medical officer" path = /obj/item/clothing/accessory/poncho/roles/cloak/cmo allowed_roles = list("Chief Medical Officer") + show_roles = FALSE cost = 1 /datum/gear/suit/roles/cloak_ce display_name = "cloak, chief engineer" path = /obj/item/clothing/accessory/poncho/roles/cloak/ce allowed_roles = list("Chief Engineer") + show_roles = FALSE cost = 1 /datum/gear/suit/roles/cloak_rd display_name = "cloak, research director" path = /obj/item/clothing/accessory/poncho/roles/cloak/rd allowed_roles = list("Research Director") + show_roles = FALSE cost = 1 /datum/gear/suit/roles/cloak_qm display_name = "cloak, quartermaster" path = /obj/item/clothing/accessory/poncho/roles/cloak/qm allowed_roles = list("Quartermaster") + show_roles = FALSE cost = 1 /datum/gear/suit/roles/cloak_captain display_name = "cloak, site manager" path = /obj/item/clothing/accessory/poncho/roles/cloak/captain allowed_roles = list("Site Manager") + show_roles = FALSE cost = 1 /datum/gear/suit/roles/cloak_hop display_name = "cloak, head of personnel" path = /obj/item/clothing/accessory/poncho/roles/cloak/hop allowed_roles = list("Head of Personnel") + show_roles = FALSE cost = 1 /datum/gear/suit/cloak_custom //A colorable cloak @@ -346,7 +355,7 @@ path = /obj/item/clothing/suit/suspenders /datum/gear/suit/forensics - display_name = "forensics uniform selection (Detective)" + display_name = "forensics uniform selection" path = /obj/item/clothing/suit/storage/forensics/red/long allowed_roles = list("Detective") @@ -364,11 +373,13 @@ display_name = "coat, quartermaster" path = /obj/item/clothing/suit/storage/qm allowed_roles = list("Quartermaster") + show_roles = FALSE /datum/gear/suit/cargo_coat display_name = "coat, cargo tech" path = /obj/item/clothing/suit/storage/cargo allowed_roles = list("Quartermaster","Shaft Miner","Cargo Technician","Head of Personnel") + show_roles = FALSE // winter coats go here /datum/gear/suit/wintercoat @@ -379,116 +390,139 @@ display_name = "winter coat, site manager" path = /obj/item/clothing/suit/storage/hooded/wintercoat/captain allowed_roles = list("Site Manager") + show_roles = FALSE /datum/gear/suit/wintercoat/hop display_name = "winter coat, head of personnel" path = /obj/item/clothing/suit/storage/hooded/wintercoat/hop allowed_roles = list("Head of Personnel") + show_roles = FALSE /datum/gear/suit/wintercoat/security display_name = "winter coat, security" path = /obj/item/clothing/suit/storage/hooded/wintercoat/security allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective","Blueshield Guard","Security Pilot") //YW ADDITIONS + show_roles = FALSE /datum/gear/suit/wintercoat/security/hos display_name = "winter coat, head of security" path = /obj/item/clothing/suit/storage/hooded/wintercoat/security/hos allowed_roles = list("Head of Security") + show_roles = FALSE /datum/gear/suit/wintercoat/medical display_name = "winter coat, medical" path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist", "Field Medic") // YW EDIT Field medic + show_roles = FALSE /datum/gear/suit/wintercoat/medical/alt display_name = "winter coat, medical alt" path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/alt allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist", "Field Medic") // YW EDIT Field medic + show_roles = FALSE /datum/gear/suit/wintercoat/medical/viro display_name = "winter coat, virologist" path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/viro allowed_roles = list("Medical Doctor","Chief Medical Officer") + show_roles = FALSE /datum/gear/suit/wintercoat/medical/para display_name = "winter coat, paramedic" path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/para allowed_roles = list("Medical Doctor","Chief Medical Officer","Paramedic", "Field Medic") // YW EDIT Field medic + show_roles = FALSE /datum/gear/suit/wintercoat/medical/chemist display_name = "winter coat, chemist" path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/chemist allowed_roles = list("Chief Medical Officer","Chemist") + show_roles = FALSE /datum/gear/suit/wintercoat/medical/cmo display_name = "winter coat, chief medical officer" path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/cmo allowed_roles = list("Chief Medical Officer") + show_roles = FALSE /datum/gear/suit/wintercoat/medical/sar display_name = "winter coat, search and rescue" path = /obj/item/clothing/suit/storage/hooded/wintercoat/medical/sar allowed_roles = list("Chief Medical Officer","Paramedic", "Field Medic") // YW EDIT Field medic + show_roles = FALSE /datum/gear/suit/wintercoat/science display_name = "winter coat, science" path = /obj/item/clothing/suit/storage/hooded/wintercoat/science allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist", "Xenobotanist") + show_roles = FALSE /datum/gear/suit/wintercoat/science/robotics display_name = "winter coat, robotics" path = /obj/item/clothing/suit/storage/hooded/wintercoat/science/robotics allowed_roles = list("Research Director", "Roboticist") + show_roles = FALSE /datum/gear/suit/wintercoat/science/rd display_name = "winter coat, research director" path = /obj/item/clothing/suit/storage/hooded/wintercoat/science/rd allowed_roles = list("Research Director") + show_roles = FALSE /datum/gear/suit/wintercoat/engineering display_name = "winter coat, engineering" path = /obj/item/clothing/suit/storage/hooded/wintercoat/engineering allowed_roles = list("Chief Engineer","Atmospheric Technician", "Engineer") + show_roles = FALSE /datum/gear/suit/wintercoat/engineering/atmos display_name = "winter coat, atmospherics" path = /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos allowed_roles = list("Chief Engineer", "Atmospheric Technician") + show_roles = FALSE /datum/gear/suit/wintercoat/engineering/ce display_name = "winter coat, chief engineer" path = /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/ce allowed_roles = list("Chief Engineer") + show_roles = FALSE /datum/gear/suit/wintercoat/hydro display_name = "winter coat, hydroponics" path = /obj/item/clothing/suit/storage/hooded/wintercoat/hydro allowed_roles = list("Botanist", "Xenobotanist") + show_roles = FALSE /datum/gear/suit/wintercoat/cargo display_name = "winter coat, cargo" path = /obj/item/clothing/suit/storage/hooded/wintercoat/cargo allowed_roles = list("Quartermaster","Cargo Technician") + show_roles = FALSE /datum/gear/suit/wintercoat/miner display_name = "winter coat, mining" path = /obj/item/clothing/suit/storage/hooded/wintercoat/miner allowed_roles = list("Shaft Miner") + show_roles = FALSE /datum/gear/suit/wintercoat/cargo/qm display_name = "winter coat, quartermaster" path = /obj/item/clothing/suit/storage/hooded/wintercoat/cargo/qm allowed_roles = list("Quartermaster") + show_roles = FALSE /datum/gear/suit/wintercoat/bar display_name = "winter coat, bartender" path = /obj/item/clothing/suit/storage/hooded/wintercoat/bar allowed_roles = list("Bartender") + show_roles = FALSE /datum/gear/suit/wintercoat/janitor display_name = "winter coat, janitor" path = /obj/item/clothing/suit/storage/hooded/wintercoat/janitor allowed_roles = list("Janitor") + show_roles = FALSE /datum/gear/suit/wintercoat/aformal display_name = "winter coat, assistant formal" @@ -611,35 +645,56 @@ display_name = "snowsuit" path = /obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit -/datum/gear/suit/snowsuit/command +/datum/gear/suit/snowsuit/command_vore // YW EDIT command to command_vore display_name = "snowsuit, command" + path = /obj/item/clothing/suit/storage/snowsuit/command + allowed_roles = list("Site Manager","Research Director","Head of Personnel","Head of Security","Chief Engineer","Command Secretary","Blueshield Guard") //YW ADDITIONS + show_roles = FALSE + +/datum/gear/suit/snowsuit/security_vore //YW EDIT security to security_vore + display_name = "snowsuit, security" + path = /obj/item/clothing/suit/storage/snowsuit/security + allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective") + show_roles = FALSE + +// YW Addition START +/datum/gear/suit/snowsuit/command + display_name = "snowsuit, command (Yawn)" path = /obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/command allowed_roles = list("Site Manager","Research Director","Head of Personnel","Head of Security","Chief Engineer","Command Secretary","Blueshield Guard") //YW ADDITIONS + show_roles = FALSE /datum/gear/suit/snowsuit/security - display_name = "snowsuit, security" + display_name = "snowsuit, security (Yawn)" path = /obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/security allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective","Blueshield Guard","Security Pilot") + show_roles = FALSE + +// YW Addition END /datum/gear/suit/snowsuit/medical display_name = "snowsuit, medical" path = /obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/medical allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist", "Search and Rescue") + show_roles = FALSE /datum/gear/suit/snowsuit/science display_name = "snowsuit, science" path = /obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/science allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist") + show_roles = FALSE /datum/gear/suit/snowsuit/engineering display_name = "snowsuit, engineering" path = /obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/engineering allowed_roles = list("Chief Engineer","Atmospheric Technician", "Engineer") + show_roles = FALSE /datum/gear/suit/snowsuit/cargo display_name = "snowsuit, supply" path = /obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit/cargo allowed_roles = list("Quartermaster","Shaft Miner","Cargo Technician","Head of Personnel") + show_roles = FALSE /datum/gear/suit/miscellaneous/cardigan display_name = "cardigan, colorable" @@ -653,6 +708,7 @@ display_name = "command dress jacket" path = /obj/item/clothing/suit/storage/toggle/cmddressjacket allowed_roles = list("Site Manager", "Head of Personnel", "Command Secretary") + show_roles = FALSE /datum/gear/suit/miscellaneous/kimono display_name = "traditional kimono, colorable" diff --git a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm index 48cb8b88e7..4ad9c7bfe7 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm @@ -55,7 +55,7 @@ //Detective alternative /datum/gear/suit/detective_alt - display_name = "sleek modern coat selection, detective" + display_name = "sleek modern coat selection" path = /obj/item/clothing/suit/storage/det_trench/alt allowed_roles = list("Head of Security", "Detective") @@ -112,12 +112,12 @@ Talon winter coat /datum/gear/suit/armor/combat/crusader_explo display_name = "knight, explo" path = /obj/item/clothing/suit/armor/combat/crusader_explo - allowed_roles = list("Explorer","Pathfinder", "Field Medic") // YW EDIT Field medic + //allowed_roles = list("Explorer","Pathfinder", "Field Medic") // YW EDIT Field medic /datum/gear/suit/armor/combat/crusader_explo/FM display_name = "knight, Field Medic" path = /obj/item/clothing/suit/armor/combat/crusader_explo/FM - allowed_roles = list ("Paramedic") + allowed_roles = list ("Paramedic", "Field Medic") // YW EDIT Field medic //Long fur coat /datum/gear/suit/russofurcoat @@ -232,11 +232,13 @@ Talon winter coat display_name = "boat cloak, site manager" path = /obj/item/clothing/accessory/poncho/roles/cloak/boat/cap allowed_roles = list("Site Manager") + show_roles = FALSE /datum/gear/suit/roles/hopboatcloak display_name = "boat cloak, head of personnel" path = /obj/item/clothing/accessory/poncho/roles/cloak/boat/hop allowed_roles = list("Head of Personnel") + show_roles = FALSE /datum/gear/suit/roles/boatcloaks display_name = "boat cloak selection" @@ -268,11 +270,13 @@ Talon winter coat display_name = "shroud, site manager" path = /obj/item/clothing/accessory/poncho/roles/cloak/shroud/cap allowed_roles = list("Site Manager") + show_roles = FALSE /datum/gear/suit/roles/hopshroud display_name = "shroud, head of personnel" path = /obj/item/clothing/accessory/poncho/roles/cloak/shroud/hop allowed_roles = list("Head of Personnel") + show_roles = FALSE /datum/gear/suit/roles/shrouds display_name = "shroud selection" diff --git a/code/modules/client/preference_setup/loadout/loadout_uni_selector.dm b/code/modules/client/preference_setup/loadout/loadout_uni_selector.dm index 5e56cca10e..e7628c7981 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uni_selector.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uni_selector.dm @@ -5,6 +5,7 @@ display_name = "DEPT - BLANK's Uniforms" description = "Select from a range of outfits available to all BLANK personnel." allowed_roles = list("") + show_roles = FALSE path = slot = slot_w_uniform sort_category = "Uniforms" @@ -23,6 +24,7 @@ display_name = "Command - Site Manager's Uniforms" description = "Select from a range of outfits available to all Site Managers." allowed_roles = list("Site Manager") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_captain sort_category = "Uniforms" cost = 1 @@ -52,6 +54,7 @@ display_name = "Command - Head of Personnel's Uniforms" description = "Select from a range of outfits available to all Heads of Personnel." allowed_roles = list("Head of Personnel") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_hop sort_category = "Uniforms" cost = 1 @@ -83,6 +86,7 @@ display_name = "Civilian - Pilot's Uniforms" description = "Select from a range of outfits available to all Pilots." allowed_roles = list("Pilot") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_pilot sort_category = "Uniforms" cost = 1 @@ -101,6 +105,7 @@ display_name = "Civilian - Janitor's Uniforms" description = "Select from a range of outfits available to all Janitorial personnel." allowed_roles = list("Janitor") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_janitor sort_category = "Uniforms" cost = 1 @@ -184,6 +189,7 @@ display_name = "Security - Basic Uniforms" description = "Select from a range of outfits available to all Security personnel." allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer","Blueshield Guard","Security Pilot") //YW ADDITIONS + show_roles = FALSE path = /obj/item/clothing/under/rank/security/corp sort_category = "Uniforms" cost = 1 @@ -229,6 +235,7 @@ display_name = "Security - Warden's Uniforms" description = "Select from a range of outfits available to Wardens." allowed_roles = list("Head of Security","Warden") + show_roles = FALSE path = /obj/item/clothing/under/rank/warden/corp sort_category = "Uniforms" cost = 1 @@ -250,6 +257,7 @@ display_name = "Security - Detective's Uniforms" description = "Select from a range of outfits available to all Detectives." allowed_roles = list("Head of Security","Detective") + show_roles = FALSE path = /obj/item/clothing/under/det/corporate sort_category = "Uniforms" cost = 1 @@ -266,6 +274,7 @@ display_name = "Security - Head's Uniforms" description = "Select from a range of outfits available to all Heads of Security." allowed_roles = list("Head of Security") + show_roles = FALSE path = /obj/item/clothing/under/rank/head_of_security/corp sort_category = "Uniforms" cost = 1 @@ -305,6 +314,7 @@ display_name = "Cargo - Quartermaster's Uniforms" description = "Select from a range of outfits available to all Quartermasters." allowed_roles = list("Quartermaster") + show_roles = FALSE path = /obj/item/clothing/under/rank/cargo/jeans sort_category = "Uniforms" cost = 1 @@ -336,6 +346,7 @@ display_name = "Cargo - Basic Uniforms" description = "Select from a range of outfits available to all Cargo personnel." allowed_roles = list("Cargo Technician","Shaft Miner","Quartermaster") + show_roles = FALSE path = /obj/item/clothing/under/rank/cargotech/jeans sort_category = "Uniforms" cost = 1 @@ -364,6 +375,7 @@ display_name = "Cargo - Miner's Uniforms" description = "Select from a range of outfits available to all Mining personnel." allowed_roles = list("Shaft Miner","Quartermaster") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_miner sort_category = "Uniforms" cost = 1 @@ -382,6 +394,7 @@ display_name = "Engineering - Chief Engineer's Uniforms" description = "Select from a range of outfits available to all Chief Engineers." allowed_roles = list("Chief Engineer") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_chiefengi sort_category = "Uniforms" cost = 1 @@ -406,6 +419,7 @@ display_name = "Engineering - Basic Uniforms" description = "Select from a range of outfits available to all Engineering personnel." allowed_roles = list("Chief Engineer","Engineer","Atmospheric Technician") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_engi sort_category = "Uniforms" cost = 1 @@ -433,6 +447,7 @@ display_name = "Engineering - Atmos Tech's Uniforms" description = "Select from a range of outfits available to all Atmospherics Technicians." allowed_roles = list("Chief Engineer","Atmospheric Technician") + show_roles = FALSE path = /obj/item/clothing/under/rank/atmospheric_technician/skirt sort_category = "Uniforms" cost = 1 @@ -452,6 +467,7 @@ display_name = "Medical - Basic Uniforms" description = "Select from a range of outfits available to all Medical personnel." allowed_roles = list("Chief Medical Officer","Medical Doctor","Chemist","Psychiatrist","Paramedic", "Field Medic") // YW EDIT Field medic + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_med sort_category = "Uniforms" cost = 1 @@ -484,6 +500,7 @@ display_name = "Medical - Chemist's Uniforms" description = "Select from a range of outfits available to all Chemists." allowed_roles = list("Chief Medical Officer","Chemist") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_chem sort_category = "Uniforms" cost = 1 @@ -503,6 +520,7 @@ display_name = "Medical - Paramedic's Uniforms" description = "Select from a range of outfits available to all Paramedics." allowed_roles = list("Medical Doctor","Chief Medical Officer","Paramedic") + show_roles = FALSE path = /obj/item/clothing/under/rank/paramedunidark sort_category = "Uniforms" cost = 1 @@ -525,6 +543,7 @@ display_name = "Medical - Chief Medical Officer's Uniforms" description = "Select from a range of outfits available to all Chief Medical Officers." allowed_roles = list("Chief Medical Officer") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_cmo sort_category = "Uniforms" cost = 2 @@ -553,6 +572,7 @@ display_name = "Science - Research Director's Uniforms" description = "Select from a range of outfits available to all Research Directors." allowed_roles = list("Research Director") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_rd_suit sort_category = "Uniforms" cost = 1 @@ -578,6 +598,7 @@ display_name = "Science - Basic Uniforms" description = "Select from a range of outfits available to all Science personnel." allowed_roles = list("Scientist","Research Director","Roboticist","Xenobiologist","Xenobotanist") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_science sort_category = "Uniforms" cost = 1 @@ -602,6 +623,7 @@ display_name = "Science - Roboticist's Uniforms" description = "Select from a range of outfits available to all Roboticists." allowed_roles = list("Research Director","Roboticist") + show_roles = FALSE path = /obj/item/clothing/under/rank/neo_robo sort_category = "Uniforms" cost = 1 diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno.dm b/code/modules/client/preference_setup/loadout/loadout_xeno.dm index 41cc5aa037..d0b1a2cef6 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno.dm @@ -554,16 +554,19 @@ display_name = "warden belted cloak (Teshari)" path = /obj/item/clothing/suit/storage/teshari/beltcloak/jobs/wrdn allowed_roles = list("Head of Security","Warden") + sort_category = "Xenowear" /datum/gear/suit/dept/beltcloak/jani display_name = "janitor belted cloak (Teshari)" path = /obj/item/clothing/suit/storage/teshari/beltcloak/jobs/jani allowed_roles = list("Janitor") + sort_category = "Xenowear" /datum/gear/suit/dept/beltcloak/cmd display_name = "command belted cloak (Teshari)" path = /obj/item/clothing/suit/storage/teshari/beltcloak/jobs/command allowed_roles = list("Site Manager","Head of Personnel","Head of Security","Chief Engineer","Chief Medical Officer","Research Director") + sort_category = "Xenowear" /datum/gear/suit/cloak_hood display_name = "hooded cloak selection (Teshari)" diff --git a/code/modules/client/preference_setup/vore/02_size.dm b/code/modules/client/preference_setup/vore/02_size.dm index 530706c0e2..599424723c 100644 --- a/code/modules/client/preference_setup/vore/02_size.dm +++ b/code/modules/client/preference_setup/vore/02_size.dm @@ -3,8 +3,6 @@ #define WEIGHT_MAX 500 #define WEIGHT_CHANGE_MIN 0 #define WEIGHT_CHANGE_MAX 100 -#define MAX_VOICE_FREQ 70000 -#define MIN_VOICE_FREQ 15000 // Define a place to save in character setup /datum/preferences @@ -252,3 +250,8 @@ SEND_SOUND(user, S) return ..(); + +#undef WEIGHT_MIN +#undef WEIGHT_MAX +#undef WEIGHT_CHANGE_MIN +#undef WEIGHT_CHANGE_MAX diff --git a/code/modules/client/preference_setup/vore/05_persistence.dm b/code/modules/client/preference_setup/vore/05_persistence.dm index 2d8846a3dd..330a21a73b 100644 --- a/code/modules/client/preference_setup/vore/05_persistence.dm +++ b/code/modules/client/preference_setup/vore/05_persistence.dm @@ -1,11 +1,3 @@ -#define PERSIST_SPAWN 0x01 // Persist spawnpoint based on location of despawn/logout. -#define PERSIST_WEIGHT 0x02 // Persist mob weight -#define PERSIST_ORGANS 0x04 // Persist the status (normal/amputated/robotic/etc) and model (for robotic) status of organs -#define PERSIST_MARKINGS 0x08 // Persist markings -#define PERSIST_SIZE 0x10 // Persist size -#define PERSIST_COUNT 5 // Number of valid bits in this bitflag. Keep this updated! -#define PERSIST_DEFAULT PERSIST_SPAWN|PERSIST_ORGANS|PERSIST_MARKINGS|PERSIST_SIZE // Default setting for new folks - // Define a place to save in character setup /datum/preferences var/persistence_settings = PERSIST_DEFAULT // Control what if anything is persisted for this character between rounds. diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index 644bc955dc..96255f095e 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -2,9 +2,6 @@ #define NEUTRAL_MODE 2 #define NEGATIVE_MODE 3 -#define ORGANICS 1 -#define SYNTHETICS 2 - var/global/list/valid_bloodreagents = list("default","iron","copper","phoron","silver","gold","slimejelly") //allowlist-based so people don't make their blood restored by alcohol or something really silly. use reagent IDs! /datum/preferences diff --git a/code/modules/client/preference_setup/vore/09_misc.dm b/code/modules/client/preference_setup/vore/09_misc.dm index bde733d4c8..963354baea 100644 --- a/code/modules/client/preference_setup/vore/09_misc.dm +++ b/code/modules/client/preference_setup/vore/09_misc.dm @@ -11,6 +11,7 @@ S["capture_crystal"] >> pref.capture_crystal S["auto_backup_implant"] >> pref.auto_backup_implant S["borg_petting"] >> pref.borg_petting + S["stomach_vision"] >> pref.stomach_vision /datum/category_item/player_setup_item/vore/misc/save_character(var/savefile/S) S["show_in_directory"] << pref.show_in_directory @@ -21,12 +22,21 @@ S["capture_crystal"] << pref.capture_crystal S["auto_backup_implant"] << pref.auto_backup_implant S["borg_petting"] << pref.borg_petting + S["stomach_vision"] << pref.stomach_vision /datum/category_item/player_setup_item/vore/misc/copy_to_mob(var/mob/living/carbon/human/character) if(pref.sensorpref > 5 || pref.sensorpref < 1) pref.sensorpref = 5 character.sensorpref = pref.sensorpref character.capture_crystal = pref.capture_crystal + //Vore Stomach Sprite Preference + character.stomach_vision = pref.stomach_vision + if((character && !istype(character,/mob/living/carbon/human/dummy)) && character.stomach_vision && !(VIS_CH_STOMACH in character.vis_enabled)) + character.plane_holder.set_vis(VIS_CH_STOMACH,TRUE) + character.vis_enabled += VIS_CH_STOMACH + else if((character && !istype(character,/mob/living/carbon/human/dummy)) && !character.stomach_vision && (VIS_CH_STOMACH in character.vis_enabled)) + character.plane_holder.set_vis(VIS_CH_STOMACH,FALSE) + character.vis_enabled -= VIS_CH_STOMACH /datum/category_item/player_setup_item/vore/misc/sanitize_character() pref.show_in_directory = sanitize_integer(pref.show_in_directory, 0, 1, initial(pref.show_in_directory)) @@ -36,6 +46,7 @@ pref.capture_crystal = sanitize_integer(pref.capture_crystal, 0, 1, initial(pref.capture_crystal)) pref.auto_backup_implant = sanitize_integer(pref.auto_backup_implant, 0, 1, initial(pref.auto_backup_implant)) pref.borg_petting = sanitize_integer(pref.borg_petting, 0, 1, initial(pref.borg_petting)) + pref.stomach_vision = sanitize_integer(pref.stomach_vision, 0, 1, initial(pref.stomach_vision)) /datum/category_item/player_setup_item/vore/misc/content(var/mob/user) . += "
" @@ -47,6 +58,7 @@ . += "Capture Crystal Preference: [pref.capture_crystal ? "Yes" : "No"]
" . += "Spawn With Backup Implant: [pref.auto_backup_implant ? "Yes" : "No"]
" . += "Allow petting as robot: [pref.borg_petting ? "Yes" : "No"]
" + . += "Enable Stomach Sprites: [pref.stomach_vision ? "Yes" : "No"]
" /datum/category_item/player_setup_item/vore/misc/OnTopic(var/href, var/list/href_list, var/mob/user) if(href_list["toggle_show_in_directory"]) @@ -84,4 +96,7 @@ else if(href_list["toggle_borg_petting"]) pref.borg_petting = pref.borg_petting ? 0 : 1; return TOPIC_REFRESH + else if(href_list["toggle_stomach_vision"]) + pref.stomach_vision = pref.stomach_vision ? 0 : 1; + return TOPIC_REFRESH return ..(); diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 844bc73c54..7a3b86ec84 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1,5 +1,3 @@ -#define SAVE_RESET -1 - var/list/preferences_datums = list() /datum/preferences diff --git a/code/modules/client/preferences_vr.dm b/code/modules/client/preferences_vr.dm index ee3363dff5..f1cfc4413a 100644 --- a/code/modules/client/preferences_vr.dm +++ b/code/modules/client/preferences_vr.dm @@ -7,6 +7,7 @@ var/capture_crystal = 1 //Whether or not someone is able to be caught with capture crystals var/auto_backup_implant = FALSE //Whether someone starts with a backup implant or not. var/borg_petting = TRUE //Whether someone can be petted as a borg or not. + var/stomach_vision = TRUE //Whether or not someone can view stomach sprites var/job_talon_high = 0 var/job_talon_med = 0 diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index ebf17c84b6..cd26d6da78 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -210,6 +210,13 @@ if(Adjacent(user) && src.loc == user) . += "You are currently facing [dir2text(user.dir)]. The micro beacon is [gps.tracking ? "on" : "off"]." var/TB = src.loc.loc + if(istype(TB, /turf/)) //no point returning light level if we're not on a turf (might be *in* someone!) + var/turf/TL = TB + var/light_level = TL.get_lumcount() + if(light_level) + . += "Light Level: [TL.get_lumcount()]" + else + . += "It's too dark to see the light level!" if(istype(TB, /turf/simulated)) //no point returning atmospheric data from unsimulated tiles (they don't track pressure anyway, only temperature) var/turf/simulated/T = TB var/datum/gas_mixture/env = T.return_air() diff --git a/code/modules/clothing/spacesuits/void/ert_vr.dm b/code/modules/clothing/spacesuits/void/ert_vr.dm index 8b147a4dc3..9d98e3273c 100644 --- a/code/modules/clothing/spacesuits/void/ert_vr.dm +++ b/code/modules/clothing/spacesuits/void/ert_vr.dm @@ -171,6 +171,7 @@ sprite_sheets = list( SPECIES_HUMAN = 'icons/inventory/suit/mob_vr.dmi', SPECIES_TAJ = 'icons/inventory/suit/mob_vr_tajaran.dmi', + SPECIES_LLEILL = 'icons/inventory/suit/mob_vr_tajaran.dmi', SPECIES_SKRELL = 'icons/inventory/suit/mob_vr_skrell.dmi', SPECIES_UNATHI = 'icons/inventory/suit/mob_vr_unathi.dmi', SPECIES_XENOHYBRID = 'icons/inventory/suit/mob_vr_unathi.dmi', @@ -201,13 +202,15 @@ SPECIES_NEVREAN = 'icons/inventory/suit/item_vr.dmi', SPECIES_RAPALA = 'icons/inventory/suit/item_vr.dmi', SPECIES_ALRAUNE = 'icons/inventory/suit/item_vr.dmi', - SPECIES_ZADDAT = 'icons/inventory/suit/item_vr.dmi' + SPECIES_ZADDAT = 'icons/inventory/suit/item_vr.dmi', + SPECIES_LLEILL = 'icons/inventory/suit/item_vr.dmi' ) /obj/item/clothing/head/helmet/space/void/responseteam sprite_sheets = list( SPECIES_HUMAN = 'icons/inventory/head/mob_vr.dmi', SPECIES_TAJ = 'icons/inventory/head/mob_vr_tajaran.dmi', + SPECIES_LLEILL = 'icons/inventory/suit/mob_vr_tajaran.dmi', SPECIES_SKRELL = 'icons/inventory/head/mob_vr_skrell.dmi', SPECIES_UNATHI = 'icons/inventory/head/mob_vr_unathi.dmi', SPECIES_XENOHYBRID = 'icons/inventory/head/mob_vr_unathi.dmi', @@ -238,5 +241,6 @@ SPECIES_NEVREAN = 'icons/inventory/head/item_vr.dmi', SPECIES_RAPALA = 'icons/inventory/head/item_vr.dmi', SPECIES_ALRAUNE = 'icons/inventory/head/item_vr.dmi', - SPECIES_ZADDAT = 'icons/inventory/head/item_vr.dmi' + SPECIES_ZADDAT = 'icons/inventory/head/item_vr.dmi', + SPECIES_LLEILL = 'icons/inventory/suit/item_vr.dmi' ) diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 34246de082..8a66d99327 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -46,6 +46,8 @@ desc = "Replica armor commonly worn by Dominion Of Mu'tu'bi soldiers from the hit series Spacer Trail. Modified for Laser Tag (Red Team)." icon_state = "redtag2" +#undef LASER_TAG_HEALTH + /* * 80s */ diff --git a/code/modules/economy/ATM.dm b/code/modules/economy/ATM.dm index 4c310c4a53..8bb91fdbfd 100644 --- a/code/modules/economy/ATM.dm +++ b/code/modules/economy/ATM.dm @@ -480,3 +480,8 @@ log transactions human_user.put_in_hands(E) E.worth = sum E.owner_name = authenticated_account.owner_name + +#undef NO_SCREEN +#undef CHANGE_SECURITY_LEVEL +#undef TRANSFER_FUNDS +#undef VIEW_TRANSACTION_LOGS diff --git a/code/modules/economy/casinocash.dm b/code/modules/economy/casinocash.dm index 79a057b636..e5749504a9 100644 --- a/code/modules/economy/casinocash.dm +++ b/code/modules/economy/casinocash.dm @@ -17,7 +17,7 @@ else playsound(loc, 'sound/items/polaroid2.ogg', 50, 1) - user << "You insert [I] into [src]." + to_chat(user, span_info("You insert [I] into [src].")) spawn_casinochips(round(I:worth/5), src.loc) src.attack_hand(user) qdel(I) @@ -29,7 +29,7 @@ else playsound(loc, 'sound/items/polaroid2.ogg', 50, 1) - user << "You insert [I] into [src]." + to_chat(user, span_info("You insert [I] into [src].")) spawn_money(round(I:worth*5), src.loc) src.attack_hand(user) qdel(I) @@ -64,7 +64,7 @@ h_user.drop_from_inventory(src) h_user.drop_from_inventory(SC) h_user.put_in_hands(SC) - user << "You combine the casino chips to a stack of [SC.worth] casino credits." + to_chat(user, span_notice("You combine the casino chips to a stack of [SC.worth] casino credits.")) qdel(src) /obj/item/weapon/spacecasinocash/update_icon() diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm index 1b029ac74a..1aa32484f5 100644 --- a/code/modules/economy/economy_misc.dm +++ b/code/modules/economy/economy_misc.dm @@ -1,29 +1,3 @@ - -#define RIOTS 1 -#define WILD_ANIMAL_ATTACK 2 -#define INDUSTRIAL_ACCIDENT 3 -#define BIOHAZARD_OUTBREAK 4 -#define PIRATES 6 -#define CORPORATE_ATTACK 7 -#define ALIEN_RAIDERS 8 -#define AI_LIBERATION 9 -#define MOURNING 10 -#define CULT_CELL_REVEALED 11 -#define SECURITY_BREACH 12 -#define ANIMAL_RIGHTS_RAID 13 -#define FESTIVAL 14 - -#define SECURITY 1 -#define FOOD 2 -#define ANIMALS 3 -#define MINERALS 4 -#define EMERGENCY 5 -#define GASEOUS 6 -#define MAINTENANCE 7 -#define ROBOTICS 8 -#define BIOMEDICAL 9 - - //---- The following corporations are friendly with NanoTrasen and loosely enable trade and travel: //Corporation NanoTrasen - Generalised / high tech research and phoron exploitation. //Corporation Vessel Contracting - Ship and station construction, materials research. diff --git a/code/modules/examine/descriptions/armor.dm b/code/modules/examine/descriptions/armor.dm index b1cf96af6e..e83c739473 100644 --- a/code/modules/examine/descriptions/armor.dm +++ b/code/modules/examine/descriptions/armor.dm @@ -43,7 +43,6 @@ else return "It's difficult to tell how much it'll influence your speed." - /obj/item/clothing/get_description_info() var/armor_stats = description_info + "\
" @@ -70,28 +69,18 @@ if(flags & AIRTIGHT) armor_stats += "It is airtight. \n" - if(min_pressure_protection == 0 && max_pressure_protection >= WARNING_HIGH_PRESSURE) //0 to 325 - armor_stats += "Wearing this will protect you from the vacuum of space and from high pressures. \n" - else if(min_pressure_protection <= WARNING_LOW_PRESSURE && max_pressure_protection >= WARNING_HIGH_PRESSURE) //50 to 325 - armor_stats += "Wearing this will protect you from both low and high pressures, but not the vacuum of space. \n" - else if(min_pressure_protection == 0) - armor_stats += "Wearing this will protect you from the vacuum of space. \n" - else if(min_pressure_protection <= WARNING_LOW_PRESSURE) //50 or below - armor_stats += "Wearing this will protect you from low pressures, but not the vacuum of space. \n" - else if(max_pressure_protection >= WARNING_HIGH_PRESSURE) //325 or higher - armor_stats += "Wearing this will protect you from high pressures. \n" + if(min_pressure_protection != null) + armor_stats += "It is rated for pressures as low as [min_pressure_protection] kPa. \n" + if(max_pressure_protection) + armor_stats += "It is rated for pressures as high as [max_pressure_protection] kPa. \n" if(flags & THICKMATERIAL) //stops syringes armor_stats += "The material is exceptionally thick. \n" - if(max_heat_protection_temperature >= FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE && min_cold_protection_temperature <= SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE) //30000 or higher and as low as 2 - armor_stats += "It provides exceptional protection from extremely high and low temperatures alike. \n" - else if(max_heat_protection_temperature >= SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE && min_cold_protection_temperature <= SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE) //5000 or above, but less than 30000 - armor_stats += "It provides very good protection against hazardous temperatures at both extremes, but may not be sufficient for very high-intensity situations. \n" - else if(max_heat_protection_temperature >= FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE) //30000 or above - armor_stats += "It provides exceptional protection from extremely high temperatures. \n" - else if(min_cold_protection_temperature <= SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE) //2 or less - armor_stats += "It provides exceptional protection against very low temperatures. \n" + if(min_cold_protection_temperature) + armor_stats += "It is rated for temperatures as low as [min_cold_protection_temperature] Kelvin. \n" + if(max_heat_protection_temperature) + armor_stats += "It is rated for temperatures as high as [max_heat_protection_temperature] Kelvin. \n" var/list/covers = list() var/list/slots = list() diff --git a/code/modules/examine/examine.dm b/code/modules/examine/examine.dm index 9d4f8a9c0b..a97dc00bfd 100644 --- a/code/modules/examine/examine.dm +++ b/code/modules/examine/examine.dm @@ -195,3 +195,5 @@ results = list("You were unable to examine that. Tell a developer!") to_chat(src, jointext(results, "
")) update_examine_panel(B) + +#undef EXAMINE_PANEL_PADDING diff --git a/code/modules/fireworks/firework_stars.dm b/code/modules/fireworks/firework_stars.dm index 31cb9d3c59..62123a2512 100644 --- a/code/modules/fireworks/firework_stars.dm +++ b/code/modules/fireworks/firework_stars.dm @@ -145,4 +145,6 @@ if(temp_shape == "none" || !temp_shape) return "You see a [pick(firework_adjectives)] explosion of [current_color] sparks in the sky!" else - return "You see a [pick(firework_adjectives)] explosion of [current_color] sparks in the sky, forming into shape of [current_shape]!" \ No newline at end of file + return "You see a [pick(firework_adjectives)] explosion of [current_color] sparks in the sky, forming into shape of [current_shape]!" + +#undef T_FIREWORK_WEATHER_STAR diff --git a/code/modules/fishing/fishing_net.dm b/code/modules/fishing/fishing_net.dm index 8c98448427..19a3a461f1 100644 --- a/code/modules/fishing/fishing_net.dm +++ b/code/modules/fishing/fishing_net.dm @@ -107,3 +107,117 @@ else slowdown = initial(slowdown) reach = initial(reach) + +/obj/item/weapon/material/fishing_net/butterfly_net + name = "butterfly net" + desc = "A butterfly net." + icon = 'icons/obj/items.dmi' + icon_state = "butterfly_net" + item_state = "butterfly_net" + description_info = "This object can be used to capture certain creatures easily, most commonly butterflies. \ + It can be emptied by activating it in-hand." + + empty_state = "butterfly_net" + contain_state = "butterfly_net_full" + + w_class = ITEMSIZE_SMALL + flags = NOBLUDGEON + + reach = 1 + + default_material = "cloth" + + accepted_mobs = list(/mob/living/simple_mob/animal/sif/glitterfly, /mob/living/carbon/human) + +/obj/item/weapon/material/fishing_net/butterfly_net/afterattack(var/atom/A, var/mob/user, var/proximity) + if(get_dist(get_turf(src), A) > reach) + return + + if(istype(A, /turf)) + var/mob/living/Target + for(var/type in accepted_mobs) + Target = locate(type) in A.contents + if(Target) + afterattack(Target, user, proximity) + break + + if(istype(A, /mob)) + var/accept = FALSE + for(var/D in accepted_mobs) + if(istype(A, D)) + var/mob/M = A + if(istype(M, /mob/living/carbon/human) && M.size_multiplier > 0.5) + accept = FALSE + else if(A == user) + accept = FALSE + else + accept = TRUE + for(var/atom/At in src.contents) + if(isliving(At)) + to_chat(user, "Your net is already holding something!") + accept = FALSE + if(!accept) + to_chat(user, "[A] can't be trapped in \the [src].") + return + var/mob/L = A + user.visible_message("[user] snatches [L] with \the [src].", "You snatch [L] with \the [src].") + L.forceMove(src) + playsound(src, 'sound/effects/plop.ogg', 50, 1) + update_icon() + update_weight() + return + return ..() + +/obj/item/weapon/material/fishing_net/butterfly_net/attack_self(var/mob/user) + for(var/mob/living/M in src) + if(!user.get_inactive_hand()) //Check if the inactive hand is empty + M.forceMove(get_turf(src)) + M.attempt_to_scoop(user) + user.visible_message("[user] scoops [M] out from \the [src].", "You pull [M] from \the [src].") + else + M.forceMove(get_turf(src)) + user.visible_message("[user] releases [M] from \the [src].", "You release [M] from \the [src].") + for(var/obj/item/I in src) + I.forceMove(get_turf(src)) + user.visible_message("[user] dumps \the [I] out of \the [src].", "You dump \the [I] out of \the [src].") + update_icon() + update_weight() + return + +/obj/item/weapon/material/fishing_net/butterfly_net/container_resist(mob/living/M) + if(prob(20)) + M.forceMove(get_turf(src)) + to_chat(M, "You climb out of \the [src].") + update_icon() + update_weight() + else + to_chat(M, "You fail to escape \the [src].") + +/obj/item/weapon/material/fishing_net/butterfly_net/update_icon() // Also updates name and desc + underlays.Cut() + cut_overlays() + + name = initial(name) + desc = initial(desc) + var/contains_mob = FALSE + for(var/mob/M in src) + name = "filled butterfly net" + desc = "A net with [M] inside." + contains_mob = TRUE + + if(contains_mob) + icon_state = contain_state + + else + icon_state = empty_state + + return + +/datum/crafting_recipe/butterfly_net + name = "butterfly net" + result = /obj/item/weapon/material/fishing_net/butterfly_net + reqs = list( + list(/obj/item/stack/material/cloth = 2) + ) + time = 20 + category = CAT_MISC diff --git a/code/modules/food/drinkingglass/drinkingglass.dm b/code/modules/food/drinkingglass/drinkingglass.dm index 1ef6ebfdcd..0b556fafc9 100644 --- a/code/modules/food/drinkingglass/drinkingglass.dm +++ b/code/modules/food/drinkingglass/drinkingglass.dm @@ -1,5 +1,3 @@ -#define DRINK_ICON_FILE 'icons/pdrink.dmi' - /var/const/DRINK_FIZZ = "fizz" /var/const/DRINK_ICE = "ice" /var/const/DRINK_ICON_DEFAULT = "" @@ -163,4 +161,4 @@ if(afterattack(target, user)) //Check to see if harm intent & splash. return else - ..() //If they're splashed, no need to do anything else. \ No newline at end of file + ..() //If they're splashed, no need to do anything else. diff --git a/code/modules/food/food/drinks.dm b/code/modules/food/food/drinks.dm index 84a651ba3c..9c2944df26 100644 --- a/code/modules/food/food/drinks.dm +++ b/code/modules/food/food/drinks.dm @@ -179,7 +179,16 @@ return ..() /obj/item/weapon/reagent_containers/food/drinks/self_feed_message(var/mob/user) - to_chat(user, "You swallow a gulp from \the [src].") + if(amount_per_transfer_from_this == volume) //I wanted to use a switch, but switch statements can't use vars and the maximum volume of containers varies + to_chat(user, "You knock back the entire [src] in one go!") + else if(amount_per_transfer_from_this <= 4) //below the standard 5 + to_chat(user, "You take a modest sip from \the [src].") + else if(amount_per_transfer_from_this <= 10) //the standard five to a bit more + to_chat(user, "You swallow a gulp from \the [src].") + else if(amount_per_transfer_from_this <= 30) + to_chat(user, "You take a long drag from \the [src].") + else //default message as a fallback + to_chat(user, "You swallow a gulp from \the [src].") /obj/item/weapon/reagent_containers/food/drinks/feed_sound(var/mob/user) playsound(src, 'sound/items/drink.ogg', rand(10, 50), 1) diff --git a/code/modules/food/food/drinks/bottle.dm b/code/modules/food/food/drinks/bottle.dm index 2b25369016..5c2889c5a9 100644 --- a/code/modules/food/food/drinks/bottle.dm +++ b/code/modules/food/food/drinks/bottle.dm @@ -180,6 +180,25 @@ var/obj/item/weapon/broken_bottle/B = smash(target.loc, target) user.put_in_active_hand(B) +/obj/item/weapon/reagent_containers/food/drinks/bottle/verb/spin_bottle() + set name = "Spin The Bottle" + set category = "Object" + set src in view(1) + + if(isobserver(usr) || usr.stat) + return + + if(!isturf(src.loc)) + to_chat(usr, "\The [src] needs to be on the floor to spin.") + return + + var/spin_rotation = (rand(0,359)) + usr.visible_message("\The [usr] spins \the [src]!","You spin \the [src]!") + SpinAnimation(3,10) + spawn(30) + icon_rotation = spin_rotation + update_transform() + //Keeping this here for now, I'll ask if I should keep it here. /obj/item/weapon/broken_bottle name = "Broken Bottle" diff --git a/code/modules/food/recipe.dm b/code/modules/food/recipe.dm index c967687e1f..fac396caf3 100644 --- a/code/modules/food/recipe.dm +++ b/code/modules/food/recipe.dm @@ -29,14 +29,6 @@ * /datum/recipe/proc/check_items(var/obj/container as obj) * * */ - -// Recipe type defines. Used to determine what machine makes them. -#define MICROWAVE 0x1 -#define FRYER 0x2 -#define OVEN 0x4 -#define GRILL 0x8 -#define CANDYMAKER 0x10 -#define CEREALMAKER 0x20 /datum/recipe var/list/reagents // Example: = list("berryjuice" = 5) // do not list same reagent twice @@ -50,8 +42,7 @@ var/result // Example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal var/result_quantity = 1 // Number of instances of result that are created. var/time = 100 // 1/10 part of second - - #define RECIPE_REAGENT_REPLACE 0 //Reagents in the ingredients are discarded. + //Only the reagents present in the result at compiletime are used #define RECIPE_REAGENT_MAX 1 //The result will contain the maximum of each reagent present between the two pools. Compiletime result, and sum of ingredients #define RECIPE_REAGENT_MIN 2 //As above, but the minimum, ignoring zero values. @@ -74,7 +65,7 @@ /datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents, var/exact = FALSE) if(!reagents || !reagents.len) return TRUE - + if(!avail_reagents) return FALSE @@ -86,7 +77,7 @@ . = FALSE else return FALSE - + if((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) return FALSE return . @@ -117,7 +108,7 @@ /datum/recipe/proc/check_items(var/obj/container as obj, var/exact = FALSE) if(!items || !items.len) return TRUE - + . = TRUE if(items && items.len) var/list/checklist = list() @@ -332,3 +323,7 @@ /datum/recipe/proc/after_cook(obj/container) // Called When the Microwave is finished. + +#undef RECIPE_REAGENT_MAX +#undef RECIPE_REAGENT_MIN +#undef RECIPE_REAGENT_SUM diff --git a/code/modules/hydroponics/seedtypes/flowers.dm b/code/modules/hydroponics/seedtypes/flowers.dm index e71e707e63..e6c2e86f59 100644 --- a/code/modules/hydroponics/seedtypes/flowers.dm +++ b/code/modules/hydroponics/seedtypes/flowers.dm @@ -65,7 +65,7 @@ set_trait(TRAIT_MATURATION,7) set_trait(TRAIT_PRODUCTION,5) set_trait(TRAIT_YIELD,5) - set_trait(TRAIT_PRODUCT_ICON,"lavender") + set_trait(TRAIT_PRODUCT_ICON,"flower6") set_trait(TRAIT_PRODUCT_COLOUR,"#B57EDC") set_trait(TRAIT_PLANT_COLOUR,"#6B8C5E") set_trait(TRAIT_PLANT_ICON,"flower4") diff --git a/code/modules/hydroponics/spreading/spreading.dm b/code/modules/hydroponics/spreading/spreading.dm index 224c7ee0c7..a81f2919c1 100644 --- a/code/modules/hydroponics/spreading/spreading.dm +++ b/code/modules/hydroponics/spreading/spreading.dm @@ -317,3 +317,6 @@ /obj/effect/plant/proc/is_mature() return (health >= (max_health/3) && world.time > mature_time) + +#undef DEFAULT_SEED +#undef VINE_GROWTH_STAGES diff --git a/code/modules/instruments/songs/editor.dm b/code/modules/instruments/songs/editor.dm index f38420fd37..2927b0ddba 100644 --- a/code/modules/instruments/songs/editor.dm +++ b/code/modules/instruments/songs/editor.dm @@ -191,7 +191,7 @@ stop_playing() else if(href_list["setlinearfalloff"]) - var/amount = tgui_input_number(usr, "Set linear sustain duration in seconds", "Linear Sustain Duration") + var/amount = tgui_input_number(usr, "Set linear sustain duration in seconds", "Linear Sustain Duration", round_value=FALSE) if(!isnull(amount)) set_linear_falloff_duration(round(amount * 10, world.tick_lag)) diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index 8262768d3a..1ce496ba4d 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -1,6 +1,3 @@ -#define IC_COMPONENTS_BASE 20 -#define IC_COMPLEXITY_BASE 60 - // Here is where the base definition lives. // Specific subtypes are in their own folder. diff --git a/code/modules/library/lib_readme.dm b/code/modules/library/lib_readme.dm index 0150ed6ba8..85a8fc1a08 100644 --- a/code/modules/library/lib_readme.dm +++ b/code/modules/library/lib_readme.dm @@ -6,11 +6,11 @@ // Deprecated! See global.dm for new SQL config vars -- TLE /* -#define SQL_ADDRESS "" -#define SQL_DB "" -#define SQL_PORT "3306" -#define SQL_LOGIN "" -#define SQL_PASS "" +# define SQL_ADDRESS "" +# define SQL_DB "" +# define SQL_PORT "3306" +# define SQL_LOGIN "" +# define SQL_PASS "" */ //******************************* diff --git a/code/modules/maps/writer.dm b/code/modules/maps/writer.dm index 81c6a39603..1d4d403684 100644 --- a/code/modules/maps/writer.dm +++ b/code/modules/maps/writer.dm @@ -171,4 +171,11 @@ dmm_suite{ return key } } - } \ No newline at end of file + } + +#undef DMM_IGNORE_AREAS +#undef DMM_IGNORE_TURFS +#undef DMM_IGNORE_OBJS +#undef DMM_IGNORE_NPCS +#undef DMM_IGNORE_PLAYERS +#undef DMM_IGNORE_MOBS diff --git a/code/modules/media/mediamanager.dm b/code/modules/media/mediamanager.dm index 12fd714283..adc522546f 100644 --- a/code/modules/media/mediamanager.dm +++ b/code/modules/media/mediamanager.dm @@ -59,7 +59,7 @@ set_new_volume(usr) /client/proc/set_new_volume(var/mob/user) - if(!QDELETED(src.media) || !istype(src.media)) + if(QDELETED(src.media) || !istype(src.media)) to_chat(user, "You have no media datum to change, if you're not in the lobby tell an admin.") return var/value = input(usr, "Choose your Jukebox volume.", "Jukebox volume", media.volume) @@ -179,3 +179,9 @@ targetVolume = M.volume //MP_DEBUG("Found audio source: [M.media_url] @ [(world.time - start_time) / 10]s.") push_music(targetURL, targetStartTime, targetVolume) + + +#ifdef DEBUG_MEDIAPLAYER +#undef DEBUG_MEDIAPLAYER +#undef MP_DEBUG +#endif diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index c82fdb8e3c..7cf35610dc 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -745,3 +745,26 @@ var/list/mining_overlay_cache = list() mineral = GLOB.ore_data[mineral_name] UpdateMineral() update_icon() + +// V5 turfs + +/turf/simulated/mineral/icey/v5 + temperature = 202 + oxygen = 8 + nitrogen = 17 + carbon_dioxide = 75 + ignore_cavegen = TRUE + +/turf/simulated/mineral/crystal/v5 + temperature = 202 + oxygen = 8 + nitrogen = 17 + carbon_dioxide = 75 + ignore_cavegen = TRUE + +/turf/simulated/mineral/crystal_shiny/v5 + temperature = 202 + oxygen = 8 + nitrogen = 17 + carbon_dioxide = 75 + ignore_cavegen = TRUE diff --git a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm index 764fbc56ae..b9e2c2d75e 100644 --- a/code/modules/mining/ore_redemption_machine/equipment_vendor.dm +++ b/code/modules/mining/ore_redemption_machine/equipment_vendor.dm @@ -2,8 +2,6 @@ // * n — The proper name of the purchasable // * o — The object type path of the purchasable to spawn // * p — The price of the purchasable in mining points -#define EQUIPMENT(n, o, p) n = new /datum/data/mining_equipment(n, o, p) - /**********************Mining Equipment Locker**************************/ /obj/machinery/mineral/equipment_vendor diff --git a/code/modules/mob/freelook/visualnet.dm b/code/modules/mob/freelook/visualnet.dm index 271572abe8..2af7ffacd6 100644 --- a/code/modules/mob/freelook/visualnet.dm +++ b/code/modules/mob/freelook/visualnet.dm @@ -159,3 +159,5 @@ var/datum/chunk/chunk = cameranet.getCameraChunk(x, y, z) usr.client.debug_variables(chunk) */ + +#undef CHUNK_SIZE diff --git a/code/modules/mob/language/station_vr.dm b/code/modules/mob/language/station_vr.dm index e966ddc38f..6750fc07f1 100644 --- a/code/modules/mob/language/station_vr.dm +++ b/code/modules/mob/language/station_vr.dm @@ -152,6 +152,21 @@ /datum/language/echosong/scramble(var/input, var/list/known_languages) return stars(input) +/datum/language/lleill + name = LANGUAGE_LLEILL + desc = "An ancient, gutteral language involving a lot of spitting." + speech_verb = "speaks" + ask_verb = "ponders" + exclaim_verb = "calls" + colour = "echosong" + key = "L" + syllables = list( + "llyn", "bren", "gwyn", "gwyr", "ddys", "dath", "llio", "cym", "ddrai", "ffyr", "lle", "dy", "eto", "uno", "dydno", "llego", "bryth", "ffair", + "ynys", "ed", "fore", "oe", "hen", "wladd", "ty", "nha", "dwy", "mae", "dros", "pob", "ia", "wyll", "gwdd", "fi" + ) + machine_understands = FALSE + flags = WHITELISTED + /datum/language/echosong/broadcast(var/mob/living/speaker, var/message, var/speaker_mask) log_say("(INAUDIBLE) [message]", speaker) speaker.say_signlang(format_message(message), pick(signlang_verb), pick(signlang_verb_understood), src, 2) diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm index ffbd20a6f1..7c9870a79c 100644 --- a/code/modules/mob/living/bot/cleanbot.dm +++ b/code/modules/mob/living/bot/cleanbot.dm @@ -15,6 +15,7 @@ var/cleaning = 0 var/wet_floors = 0 var/spray_blood = 0 + var/blood = 1 var/list/target_types = list() /mob/living/bot/cleanbot/New() @@ -138,7 +139,8 @@ if(prob(20)) custom_emote(2, "begins to clean up \the [loc]") if(do_after(src, cleantime * cTimeMult)) - clean_blood() + if(blood) + clean_blood() if(istype(loc, /turf/simulated)) var/turf/simulated/T = loc T.dirt = 0 @@ -186,6 +188,7 @@ data["on"] = on data["open"] = open data["locked"] = locked + data["blood"] = blood data["patrol"] = will_patrol data["vocal"] = vocal @@ -207,6 +210,9 @@ else turn_on() . = TRUE + if("blood") + blood = !blood + . = TRUE if("patrol") will_patrol = !will_patrol patrol_path = null diff --git a/code/modules/mob/living/bot/edCLNbot.dm b/code/modules/mob/living/bot/edCLNbot.dm index 3a8265f352..0d976fef89 100644 --- a/code/modules/mob/living/bot/edCLNbot.dm +++ b/code/modules/mob/living/bot/edCLNbot.dm @@ -213,4 +213,4 @@ user.drop_item() qdel(W) user.drop_from_inventory(src) - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm index 938ed1d8e0..396c42fb43 100644 --- a/code/modules/mob/living/bot/farmbot.dm +++ b/code/modules/mob/living/bot/farmbot.dm @@ -419,4 +419,9 @@ created_name = t /obj/item/weapon/farmbot_arm_assembly/attack_hand(mob/user as mob) - return //it's a converted watertank, no you cannot pick it up and put it in your backpack \ No newline at end of file + return //it's a converted watertank, no you cannot pick it up and put it in your backpack + +#undef FARMBOT_COLLECT +#undef FARMBOT_WATER +#undef FARMBOT_UPROOT +#undef FARMBOT_NUTRIMENT diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm index 22584ae359..e281609cdb 100644 --- a/code/modules/mob/living/bot/floorbot.dm +++ b/code/modules/mob/living/bot/floorbot.dm @@ -2,7 +2,7 @@ // This can be a problem if it tries to pave over space or shuttles. That should be fixed but... // If it can see space outside windows, it can be laggy since it keeps wondering if it should fix them. // Therefore that functionality is disabled for now. But it can be turned on by uncommenting this. -// #define FLOORBOT_PATCHES_HOLES 1 +// # define FLOORBOT_PATCHES_HOLES 1 /mob/living/bot/floorbot name = "Floorbot" diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm index 22cd01b4fe..9596a2024d 100644 --- a/code/modules/mob/living/bot/medbot.dm +++ b/code/modules/mob/living/bot/medbot.dm @@ -572,3 +572,8 @@ #undef MEDBOT_PANIC_FUCK #undef MEDBOT_PANIC_ENDING #undef MEDBOT_PANIC_END + +#undef MEDBOT_MIN_INJECTION +#undef MEDBOT_MAX_INJECTION +#undef MEDBOT_MIN_HEAL +#undef MEDBOT_MAX_HEAL diff --git a/code/modules/mob/living/bot/mulebot.dm b/code/modules/mob/living/bot/mulebot.dm index 02638226bf..cb8e2acb13 100644 --- a/code/modules/mob/living/bot/mulebot.dm +++ b/code/modules/mob/living/bot/mulebot.dm @@ -331,3 +331,11 @@ AM.layer = initial(AM.layer) AM.pixel_y = initial(AM.pixel_y) busy = 0 + +#undef MULE_IDLE +#undef MULE_MOVING +#undef MULE_UNLOAD +#undef MULE_LOST +#undef MULE_CALC_MIN +#undef MULE_CALC_MAX +#undef MULE_PATH_DONE diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm index 0d32705542..31e0854d00 100644 --- a/code/modules/mob/living/bot/secbot.dm +++ b/code/modules/mob/living/bot/secbot.dm @@ -479,3 +479,7 @@ if(!in_range(src, user) && loc != user) return created_name = t + +#undef SECBOT_WAIT_TIME +#undef SECBOT_THREAT_ARREST +#undef SECBOT_THREAT_ATTACK diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 674c470e5b..f157d12a3d 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -7,6 +7,17 @@ has_huds = TRUE //We do have HUDs (like health, wanted, status, not inventory slots) + + var/vore_capacity = 3 + var/vore_capacity_ex = list("stomach" = 3, "taur belly" = 3) + var/vore_fullness_ex = list("stomach" = 0, "taur belly" = 0) + var/vore_icon_bellies = list("stomach", "taur belly") + var/struggle_anim_stomach = FALSE + var/struggle_anim_taur = FALSE + var/vore_sprite_color = list("stomach" = "#FFFFFF", "taur belly" = "#FFFFFF") + var/vore_sprite_multiply = list("stomach" = TRUE, "taur belly" = TRUE) + var/vore_fullness = 0 + var/embedded_flag //To check if we've need to roll for damage on movement while an item is imbedded in us. var/obj/item/weapon/rig/wearing_rig // This is very not good, but it's much much better than calling get_rig() every update_canmove() call. var/last_push_time //For human_attackhand.dm, keeps track of the last use of disarm @@ -19,6 +30,9 @@ var/can_defib = 1 //Horrible damage (like beheadings) will prevent defibbing organics. var/active_regen = FALSE //Used for the regenerate proc in human_powers.dm var/active_regen_delay = 300 + var/list/teleporters = list() //Used for lleill abilities + + var/rest_dir = 0 //To lay down in a specific direction /mob/living/carbon/human/Initialize(mapload, var/new_species = null) if(!dna) @@ -1276,6 +1290,7 @@ vessel.maximum_volume = species.blood_volume fixblood() species.update_attack_types() //VOREStation Edit - Required for any trait that updates unarmed_types in setup. + species.update_vore_belly_def_variant() // Rebuild the HUD. If they aren't logged in then login() should reinstantiate it for them. update_hud() @@ -1777,3 +1792,35 @@ /mob/living/carbon/human/get_mob_riding_slots() return list(back, head, wear_suit) + +/mob/living/carbon/human/proc/update_fullness() + var/list/new_fullness = list() + vore_fullness = 0 + for(var/belly_class in vore_icon_bellies) + new_fullness[belly_class] = 0 + for(var/obj/belly/B as anything in vore_organs) + new_fullness[B.belly_sprite_to_affect] += B.GetFullnessFromBelly() + for(var/belly_class in vore_icon_bellies) + new_fullness[belly_class] /= size_multiplier //Divided by pred's size so a macro mob won't get macro belly from a regular prey. + new_fullness[belly_class] = round(new_fullness[belly_class], 1) // Because intervals of 0.25 are going to make sprite artists cry. + vore_fullness_ex[belly_class] = min(vore_capacity_ex[belly_class], new_fullness[belly_class]) + vore_fullness += new_fullness[belly_class] + vore_fullness = min(vore_capacity, vore_fullness) + update_vore_belly_sprite() + update_vore_tail_sprite() + +/mob/living/carbon/human/verb/lay_down_left() + set name = "Rest-Left" + + rest_dir = -1 + resting = !resting + to_chat(src, "You are now [resting ? "resting" : "getting up"].") + update_canmove() + +/mob/living/carbon/human/verb/lay_down_right() + set name = "Rest-Right" + + rest_dir = 1 + resting = !resting + to_chat(src, "You are now [resting ? "resting" : "getting up"].") + update_canmove() diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm index 692f121ba8..c531ef5086 100644 --- a/code/modules/mob/living/carbon/human/human_helpers.dm +++ b/code/modules/mob/living/carbon/human/human_helpers.dm @@ -192,6 +192,15 @@ compiled_vis |= VIS_CH_VANTAG //VOREStation Add End + //Vore Stomach addition start. This goes here. + if(stomach_vision && !(VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,TRUE) + compiled_vis += VIS_CH_STOMACH + else if(!stomach_vision && (VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,FALSE) + compiled_vis -= VIS_CH_STOMACH + //Vore Stomach addition end + if(!compiled_vis.len && !vis_enabled.len) return //Nothin' doin'. diff --git a/code/modules/mob/living/carbon/human/human_species_vr.dm b/code/modules/mob/living/carbon/human/human_species_vr.dm index a747280df8..dd3134420a 100644 --- a/code/modules/mob/living/carbon/human/human_species_vr.dm +++ b/code/modules/mob/living/carbon/human/human_species_vr.dm @@ -31,3 +31,6 @@ /mob/living/carbon/human/altevian/New(var/new_loc) ..(new_loc, SPECIES_ALTEVIAN) + +/mob/living/carbon/human/lleill/New(var/new_loc) + ..(new_loc, SPECIES_LLEILL) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 3f884c362c..53e5e240d6 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -12,25 +12,6 @@ #define COLD_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when your body temperature passes the 200K point #define COLD_DAMAGE_LEVEL_3 3 //Amount of damage applied when your body temperature passes the 120K point -//Note that gas heat damage is only applied once every FOUR ticks. -#define HEAT_GAS_DAMAGE_LEVEL_1 2 //Amount of damage applied when the current breath's temperature just passes the 360.15k safety point -#define HEAT_GAS_DAMAGE_LEVEL_2 4 //Amount of damage applied when the current breath's temperature passes the 400K point -#define HEAT_GAS_DAMAGE_LEVEL_3 8 //Amount of damage applied when the current breath's temperature passes the 1000K point - -#define COLD_GAS_DAMAGE_LEVEL_1 0.5 //Amount of damage applied when the current breath's temperature just passes the 260.15k safety point -#define COLD_GAS_DAMAGE_LEVEL_2 1.5 //Amount of damage applied when the current breath's temperature passes the 200K point -#define COLD_GAS_DAMAGE_LEVEL_3 3 //Amount of damage applied when the current breath's temperature passes the 120K point - -#define COLD_ALERT_SEVERITY_LOW 1 // Constants passed to the cold and heat alerts. -#define COLD_ALERT_SEVERITY_MODERATE 2 -#define COLD_ALERT_SEVERITY_MAX 3 -#define ENVIRONMENT_COMFORT_MARKER_COLD 1 - -#define HOT_ALERT_SEVERITY_LOW 1 -#define HOT_ALERT_SEVERITY_MODERATE 2 -#define HOT_ALERT_SEVERITY_MAX 3 -#define ENVIRONMENT_COMFORT_MARKER_HOT 2 - #define RADIATION_SPEED_COEFFICIENT 0.1 #define HUMAN_COMBUSTION_TEMP 524 //524k is the sustained combustion temperature of human fat @@ -2147,3 +2128,14 @@ #undef HUMAN_MAX_OXYLOSS #undef HUMAN_CRIT_MAX_OXYLOSS + +#undef HEAT_DAMAGE_LEVEL_1 +#undef HEAT_DAMAGE_LEVEL_2 +#undef HEAT_DAMAGE_LEVEL_3 + +#undef COLD_DAMAGE_LEVEL_1 +#undef COLD_DAMAGE_LEVEL_2 +#undef COLD_DAMAGE_LEVEL_3 + +#undef RADIATION_SPEED_COEFFICIENT +#undef HUMAN_COMBUSTION_TEMP diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill.dm new file mode 100644 index 0000000000..48146df8e8 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill.dm @@ -0,0 +1,178 @@ +/datum/species/lleill + + name = SPECIES_LLEILL + name_plural = "Lleill" + icobase = 'icons/mob/human_races/r_lleill.dmi' + deform = 'icons/mob/human_races/r_lleill.dmi' + color_mult = 1 + tail = "tail" + icobase_tail = 1 + blurb = "A species that appears to originate somewhere in redspace. Their forms are not consistent, \ + they do not care for consistency, and are working under a constant never-ending drive to improve themselves \ + and the world around them. With little care for whether the world itself wants to change." //PLACEHOLDER + + blood_color = "#FFFFFF" + blood_name = "glamour" + flesh_color = "#FFFFFF" + reagent_tag = IS_LLEILL + + num_alternate_languages = 3 + species_language = LANGUAGE_LLEILL + language = LANGUAGE_LLEILL + name_language = LANGUAGE_LLEILL + + flags = NO_SCAN | NO_MINOR_CUT | NO_INFECT | NO_HALLUCINATION + spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE + appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_UNDERWEAR + + max_age = 200 + + economic_modifier = 15 + + digi_allowed = TRUE + + //Specific abilities + + darksight = 10 //Can see in dark + + burn_mod = 0.25 //Very resistant to fire + pain_mod = 0.25 //Whilst not resistant to brute or stunning, they are quite resistant to pain, making them tanky in their own way. + + warning_low_pressure = 50 + hazard_low_pressure = -1 + warning_high_pressure = 300 + hazard_high_pressure = 10000 //Can be killed by pressure but you're going to need a hell of a lot + + cold_level_1 = -1 //Safe in space + cold_level_2 = -1 + cold_level_3 = -1 + + heat_level_1 = 1500 //Very resiliant to heat + heat_level_2 = 2500 + heat_level_3 = 5000 + + can_space_freemove = TRUE //Have no issue moving through space. + can_zero_g_move = TRUE + + chem_strength_alcohol = 0 //Can't get drunk + + oxy_mod = 0.25 //Suffocates very slowly, but does ultimately need to breathe, will outpace heal most oxygen damage. + poison_type = null //Not harmed by phoron. + water_breather = TRUE + + var/list/valid_transform_species = list( + "Human", "Unathi", "Tajara", "Skrell", + "Diona", "Teshari", "Monkey","Sergal", + "Akula","Nevrean","Zorren", + "Fennec", "Vulpkanin", "Vasilissan", + "Rapala", "Neaera", "Stok", "Farwa", "Sobaka", + "Wolpin", "Saru", "Sparra", "Lleill") + + // Looks like a lot but the majority of these are just to change their appearance. + inherent_verbs = list( + /mob/living/carbon/human/proc/lleill_select_colour, + /mob/living/carbon/human/proc/lleill_select_shape, + /mob/living/carbon/human/proc/shapeshifter_select_hair, + /mob/living/carbon/human/proc/shapeshifter_select_hair_colors, + /mob/living/carbon/human/proc/shapeshifter_select_gender, + /mob/living/carbon/human/proc/shapeshifter_select_wings, + /mob/living/carbon/human/proc/shapeshifter_select_tail, + /mob/living/carbon/human/proc/shapeshifter_select_ears, + /mob/living/proc/set_size, + /mob/living/carbon/human/proc/lleill_invisibility, + /mob/living/carbon/human/proc/lleill_transmute, + /mob/living/carbon/human/proc/lleill_rings) + + //organs, going with just the basics for now + + has_organ = list( + O_HEART = /obj/item/organ/internal/heart, + O_LUNGS = /obj/item/organ/internal/lungs, + O_VOICE = /obj/item/organ/internal/voicebox, + O_LIVER = /obj/item/organ/internal/liver, + O_KIDNEYS = /obj/item/organ/internal/kidneys, + O_BRAIN = /obj/item/organ/internal/brain, + O_APPENDIX = /obj/item/organ/internal/appendix, + O_SPLEEN = /obj/item/organ/internal/spleen, + O_EYES = /obj/item/organ/internal/eyes, + O_STOMACH = /obj/item/organ/internal/stomach, + O_INTESTINE = /obj/item/organ/internal/intestine + ) + + has_limbs = list( + BP_TORSO = list("path" = /obj/item/organ/external/chest), + BP_GROIN = list("path" = /obj/item/organ/external/groin), + BP_HEAD = list("path" = /obj/item/organ/external/head/lleill), + BP_L_ARM = list("path" = /obj/item/organ/external/arm), + BP_R_ARM = list("path" = /obj/item/organ/external/arm/right), + BP_L_LEG = list("path" = /obj/item/organ/external/leg), + BP_R_LEG = list("path" = /obj/item/organ/external/leg/right), + BP_L_HAND = list("path" = /obj/item/organ/external/hand), + BP_R_HAND = list("path" = /obj/item/organ/external/hand/right), + BP_L_FOOT = list("path" = /obj/item/organ/external/foot), + BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) + ) + + base_species = SPECIES_LLEILL + +// Shapeshifters have some behaviour that doesn't play well with this species so I have taken the main parts needed for here. + +/datum/species/lleill/get_valid_shapeshifter_forms(var/mob/living/carbon/human/H) + return valid_transform_species + +/datum/species/lleill/get_icobase(var/mob/living/carbon/human/H, var/get_deform) + if(!H) return ..(null, get_deform) + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] + if(!S || S.type == src.type) return ..(H, get_deform) + return S.get_icobase(H,get_deform) + +/datum/species/lleill/get_race_key(var/mob/living/carbon/human/H) + return "[..()]-[wrapped_species_by_ref["\ref[H]"]]" + +/datum/species/lleill/get_bodytype(var/mob/living/carbon/human/H) + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] + if(!H || !S) return ..() + if(S.type == src.type) return ..(H) + return S.get_bodytype(H) + +/datum/species/lleill/get_blood_mask(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] + if(!S || S.name == src.name) + return ..() + return S?.get_blood_mask(H) + +/datum/species/lleill/get_damage_mask(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] + if(!S || S.name == src.name) + return ..() + return S?.get_damage_mask(H) + +/datum/species/lleill/get_damage_overlays(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] + if(!S || S.name == src.name) + return ..() + return S?.get_damage_overlays(H) + +/datum/species/lleill/get_tail(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] + if(!S || S.name == src.name) + return ..() + return S?.get_tail(H) + +/datum/species/lleill/get_tail_animation(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] + if(!S || S.name == src.name) + return ..() + return S?.get_tail_animation(H) + +/datum/species/lleill/get_tail_hair(var/mob/living/carbon/human/H) + if(!H) return ..() + var/datum/species/S = GLOB.all_species[wrapped_species_by_ref["\ref[H]"]] + if(!S || S.name == src.name) + return ..() + return S?.get_tail_hair(H) diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm new file mode 100644 index 0000000000..97ee036c8a --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill_abilities.dm @@ -0,0 +1,179 @@ +/datum/power/lleill + +// Simple ability to become invisible. Does not phase you out of the world, you can still interact with things and can not pass through walls. +// Essentially the same as traitor cloaking, using the same proc for it. + +/datum/power/lleill/invisibility + name = "Invisibility" + desc = "Change your appearance to match your surroundings, becoming completely invisible to the naked eye." + verbpath = /mob/living/carbon/human/proc/lleill_invisibility + +/mob/living/carbon/human/proc/lleill_invisibility() + set name = "Invisibility" + set desc = "Change your appearance to match your surroundings, becoming completely invisible to the naked eye." + set category = "Abilities" + + if(stat) + to_chat(src, "You can't go invisible when weakened like this.") + return + + if(!cloaked) + cloak() + to_chat(src, "Your fur shimmers and shifts around you, hiding you from the naked eye.") + else + uncloak() + to_chat(src, "The brustling of your fur settles down and you become visible once again.") + +/mob/living/carbon/human/proc/lleill_select_shape() + + set name = "Select Body Shape" + set category = "Abilities" + + if(stat || world.time < last_special) + return + + last_special = world.time + 50 + + var/new_species = null + new_species = tgui_input_list(usr, "Please select a species to emulate.", "Shapeshifter Body", species.get_valid_shapeshifter_forms(src)) + + if(!new_species || !GLOB.all_species[new_species] || wrapped_species_by_ref["\ref[src]"] == new_species) + return + lleill_change_shape(new_species) + +/mob/living/carbon/human/proc/lleill_change_shape(var/new_species = null) + if(!new_species) + return + + wrapped_species_by_ref["\ref[src]"] = new_species + dna.base_species = new_species + species.base_species = new_species + visible_message("\The [src] shifts and contorts, taking the form of \a [new_species]!") + regenerate_icons() + +/mob/living/carbon/human/proc/lleill_select_colour() + + set name = "Select Body Colour" + set category = "Abilities" + + if(stat || world.time < last_special) + return + + last_special = world.time + 50 + + var/new_skin = input(usr, "Please select a new body color.", "Shapeshifter Colour", rgb(r_skin, g_skin, b_skin)) as null|color + if(!new_skin) + return + lleill_set_colour(new_skin) + +/mob/living/carbon/human/proc/lleill_set_colour(var/new_skin) + + r_skin = hex2num(copytext(new_skin, 2, 4)) + g_skin = hex2num(copytext(new_skin, 4, 6)) + b_skin = hex2num(copytext(new_skin, 6, 8)) + r_synth = r_skin + g_synth = g_skin + b_synth = b_skin + + for(var/obj/item/organ/external/E in organs) + E.sync_colour_to_human(src) + + regenerate_icons() + +/mob/living/carbon/human/proc/lleill_transmute() + set name = "Transmute Object" + set desc = "Convert an object into a piece of glamour." + set category = "Abilities" + + var/list/transmute_list = list( + /obj/item/weapon/potion_material/glamour_transparent, + /obj/item/weapon/potion_material/glamour_shrinking, + /obj/item/weapon/potion_material/glamour_twinkling, + /obj/item/weapon/potion_material/glamour_shard, + /obj/item/capture_crystal/glamour, + /obj/item/glamour_face, + /obj/item/device/universal_translator/glamour + ) + + if(stat) + to_chat(src, "You can't go do that when weakened like this.") + return + + var/obj/item/I = get_active_hand() + if(!I) + to_chat(src, "You have no item in your active hand.") + return + + var/obj/item/transmute_product = tgui_input_list(src, "Choose an glamour to transmute the item into:", "Transmutation", transmute_list) + if(!get_active_hand(I)) + to_chat(src, "The item is no longer in your hands.") + return + else + visible_message("\The [src] begins to change the form of \the [I].") + if(!do_after(usr, 10 SECONDS, I, exclusive = TASK_USER_EXCLUSIVE)) + visible_message("\The [src] leaves \the [I] in its original form.") + return 0 + visible_message("\The [src] transmutes \the [I] into a \the [transmute_product.name].") + drop_item(I) + qdel(I) + var/spawnloc = get_turf(usr) + var/obj/item/N = new transmute_product(spawnloc) + put_in_active_hand(N) + +/mob/living/carbon/human/proc/lleill_rings() + set name = "Place/Use Rings" + set desc = "Place or teleport to a glamour ring." + set category = "Abilities" + + if(stat) + to_chat(src, "You can't go do that when weakened like this.") + return + if(buckled) + to_chat(src,"You can't do that when restrained.") + + var/r_action = tgui_alert(src, "What would you like to do with your rings?", "Actions", list("Spawn New Ring", "Teleport to Ring", "Cancel")) + if(r_action == "Cancel") + return + if(r_action == "Spawn New Ring") + if(!do_after(src, 10 SECONDS, src, exclusive = TASK_USER_EXCLUSIVE)) + src.visible_message("\The [src] begins to form white rings on the ground.") + return 0 + to_chat(src, "You place a new glamour ring at your feet.") + var/spawnloc = get_turf(src) + var/obj/structure/glamour_ring/R = new(spawnloc) + src.teleporters |= R + if(r_action == "Teleport to Ring") + if(!src.teleporters.len) + to_chat(src, "You need to place rings to teleport to them.") + return + else + var/obj/structure/glamour_ring/R = tgui_input_list(src, "Where do you wish to teleport?", "Teleport", src.teleporters) + + var/datum/effect/effect/system/spark_spread/spk + spk = new(src) + + var/T = get_turf(src) + spk.set_up(5, 0, src) + spk.attach(src) + playsound(T, "sparks", 50, 1) + anim(T,src,'icons/mob/mob.dmi',,"phaseout",,src.dir) + + var/S = get_turf(R) + src.forceMove(S) + + spk.start() + playsound(S, 'sound/effects/phasein.ogg', 25, 1) + playsound(S, 'sound/effects/sparks2.ogg', 50, 1) + anim(S,src,'icons/mob/mob.dmi',,"phasein",,src.dir) + spk.set_up(5, 0, src) + spk.attach(src) + + //Would be fun to eat people standing on your ring... + if(can_be_drop_pred && vore_selected) + var/list/target_list = src.living_mobs(0) + if(target_list.len) + for(var/mob/living/M in target_list) + if(M.devourable && M.can_be_drop_prey) + M.forceMove(vore_selected) + to_chat(M,"In a bright flash of white light, you suddenly find yourself trapped in \the [src]'s [vore_selected.name]!") + diff --git a/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm b/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm new file mode 100644 index 0000000000..8b724fe8b6 --- /dev/null +++ b/code/modules/mob/living/carbon/human/species/lleill/lleill_items.dm @@ -0,0 +1,198 @@ +//Transparent Glamour (invisibility potion) + +/obj/item/weapon/potion_material/glamour_transparent + name = "transparent glamour" + desc = "A shard of hardened white crystal that is clearly translucent." + icon = 'icons/obj/glamour.dmi' + icon_state = "transparent" + base_reagent = /obj/item/weapon/potion_base/aqua_regia + product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/invisibility + +/obj/item/weapon/reagent_containers/glass/bottle/potion/invisibility + name = "transparent potion" + desc = "A small white potion, the clear liquid inside can barely be seen at all." + prefill = list("transparent glamour" = 1) + +/datum/reagent/glamour_transparent + name = "Clear Glamour" + id = "transparent glamour" + description = "This material is from somewhere else, it can barely be seen by the naked eye." + taste_description = "nothingness" + reagent_state = LIQUID + color = "#ffffff" + scannable = 1 + +/datum/reagent/glamour_transparent/affect_blood(var/mob/living/carbon/target, var/removed) + if(!target.cloaked) + target.visible_message("\The [target] vanishes from sight.") + target.cloak() + target.bloodstr.clear_reagents() //instantly clears reagents afterwards + target.ingested.clear_reagents() + target.touching.clear_reagents() + spawn(600) + if(target.cloaked) + target.uncloak() + target.visible_message("\The [target] appears as if from thin air.") + +//Shrinking Glamour (scaling potion) + +/obj/item/weapon/potion_material/glamour_shrinking + name = "shrinking glamour" + desc = "A soft clump of white material that seems to shrink at your touch." + icon = 'icons/obj/glamour.dmi' + icon_state = "shrinking" + base_reagent = /obj/item/weapon/potion_base/aqua_regia + product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/scaling + +/obj/item/weapon/reagent_containers/glass/bottle/potion/scaling + name = "scaling potion" + desc = "A small white potion, the clear liquid inside can barely be seen at all." + prefill = list("scaling glamour" = 1) + +/datum/reagent/glamour_scaling + name = "Scaling Glamour" + id = "scaling glamour" + description = "This material is from somewhere else, it appears to change volumes readily at a glance." + taste_description = "difficult to discern" + reagent_state = LIQUID + color = "#ffffff" + scannable = 1 + +/datum/reagent/glamour_scaling/affect_blood(var/mob/living/carbon/target, var/removed) + if(!(/mob/living/proc/set_size in target.verbs)) + to_chat(target, "You feel as though you could change size at any moment.") + target.verbs |= /mob/living/proc/set_size + target.bloodstr.clear_reagents() //instantly clears reagents afterwards + target.ingested.clear_reagents() + target.touching.clear_reagents() + +//Twinkling Glamour (Sparkling potion - Gives darksight) + +/obj/item/weapon/potion_material/glamour_twinkling + name = "twinkling glamour" + desc = "A sheet of white material that twinkles on its own accord." + icon = 'icons/obj/glamour.dmi' + icon_state = "twinkling" + base_reagent = /obj/item/weapon/potion_base/aqua_regia + product_potion = /obj/item/weapon/reagent_containers/glass/bottle/potion/darksight + +/obj/item/weapon/reagent_containers/glass/bottle/potion/darksight + name = "twinling potion" + desc = "A small white potion, the thin white liquid inside twinkles brightly." + prefill = list("twinkling glamour" = 1) + +/datum/reagent/glamour_twinkling + name = "Twinkling Glamour" + id = "twinkling glamour" + description = "This material is from somewhere else, it appears to be twinkling." + taste_description = "bright" + reagent_state = LIQUID + color = "#ffffff" + scannable = 1 + +/datum/reagent/glamour_twinkling/affect_blood(var/mob/living/carbon/human/target, var/removed) + if(target.species.darksight < 10) + to_chat(target, "You can suddenly see much better than before.") + target.species.darksight = 10 + if(target.disabilities & NEARSIGHTED) + target.disabilities &= ~NEARSIGHTED + to_chat(target, "Everything is much less blurry.") + target.bloodstr.clear_reagents() //instantly clears reagents afterwards + target.ingested.clear_reagents() + target.touching.clear_reagents() + +//Glamour Cell (variant of capture crystal) + +/obj/item/capture_crystal/glamour + name = "glamour cell" + desc = "A large but light round ball of glamour that glows from somewhere within." + icon = 'icons/obj/glamour.dmi' + +/obj/item/capture_crystal/glamour/animate_action(atom/thing) + var/image/coolanimation = image('icons/obj/glamour.dmi', null, "animation") + coolanimation.plane = PLANE_LIGHTING_ABOVE + thing.overlays += coolanimation + sleep(14) + thing.overlays -= coolanimation + +//Face of Glamour (creates a clone of a target) + +/obj/item/glamour_face + name = "face of glamour" + desc = "A piece of glamour that is formed vaguely into the shape of a face." + icon = 'icons/obj/glamour.dmi' + icon_state = "face" + var/mob/living/homunculus = 0 + +/obj/item/glamour_face/attack_self(var/mob/user) + if(!homunculus) + var/list/targets = list() + for(var/mob/living/carbon/human/M in mob_list) + if(M.z != user.z || get_dist(user,M) > 10) + continue + if(istype(M) && M.resleeve_lock && M.ckey != M.resleeve_lock) + continue + targets |= M + + if(!targets) + to_chat(user, "There are no appropriate targets in range.") + return + + var/mob/living/carbon/human/chosen_target = tgui_input_list(user, "Which target do you wish to create a homunculus of?", "homunculus", targets) + + var/spawnloc = get_turf(user) + var/mob/living/simple_mob/homunculus/H = new(spawnloc) + H.name = chosen_target.name + H.desc = chosen_target.desc + H.icon = chosen_target.icon + H.icon_state = chosen_target.icon_state + H.copy_overlays(chosen_target, TRUE) + H.resize(chosen_target.size_multiplier, ignore_prefs = TRUE) + homunculus = H + H.owner = src + return + if(homunculus) + var/mob/living/simple_mob/homunculus/H = homunculus + var/h_action = tgui_alert(user, "What would you like to do with your homunculus?", "Actions", list("Recall", "Speak Through", "Cancel")) + if(h_action == "Cancel") + return + if(h_action == "Recall") + H.visible_message("\The [H] returns to the face.") + qdel(H) + homunculus = 0 + return + if(h_action == "Speak Through") + var/words_to_say = tgui_input_text(user, "What should the homunculus say:", "Speak Through") + H.say(words_to_say) + return + + +//Speaking Glamour (universal translator) + +/obj/item/device/universal_translator/glamour + name = "speaking glamour" + desc = "A shard of glamour that translates all known language for the user." + icon = 'icons/obj/glamour.dmi' + icon_state = "translator" + +//Teleporter ring + +/obj/structure/glamour_ring + name = "glamour ring" + desc = "A ring of glowing white, oddly reflective material." + icon = 'icons/obj/glamour.dmi' + icon_state = "ring" + density = 0 + anchored = 1 + + var/connected_mob + var/area_name + +/obj/structure/glamour_ring/Initialize() + . = ..() + var/area/A = get_area(src) + area_name = A.name + name = "[area_name] glamour ring" + +//Glamour Floor +//Glamour Wall \ No newline at end of file diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 9f68957cee..3b471a84a3 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -108,7 +108,7 @@ var/chem_strength_heal = 1 // Multiplier to most beneficial chem strength var/chem_strength_pain = 1 // Multiplier to painkiller strength (could be used in a negative trait to simulate long-term addiction reducing effects, etc.) var/chem_strength_tox = 1 // Multiplier to toxic chem strength (inc. chloral/sopo/mindbreaker/etc. thresholds) - var/chem_strength_alcohol = 1 // Multiplier to alcohol strength; 0.5 = half, 0 = no effect at all, 2 = double, etc. + var/chem_strength_alcohol = 1 // Multiplier to alcohol effect thresholds; higher means more is needed to reach a given effect tier var/chemOD_threshold = 1 // Multiplier to overdose threshold; lower = easier overdosing var/chemOD_mod = 1 // Damage modifier for overdose; higher = more damage from ODs @@ -222,6 +222,8 @@ var/rarity_value = 1 // Relative rarity/collector value for this species. var/economic_modifier = 2 // How much money this species makes + var/vore_belly_default_variant = "H" + // Determines the organs that the species spawns with and var/list/has_organ = list( // which required-organ checks are conducted. O_HEART = /obj/item/organ/internal/heart, diff --git a/code/modules/mob/living/carbon/human/species/species_vr.dm b/code/modules/mob/living/carbon/human/species/species_vr.dm index e7499467a3..f6bf1a7a88 100644 --- a/code/modules/mob/living/carbon/human/species/species_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_vr.dm @@ -45,6 +45,9 @@ var/list/food_preference = list() //RS edit var/food_preference_bonus = 0 +/datum/species/unathi + vore_belly_default_variant = "L" + /datum/species/proc/give_numbing_bite() //Holy SHIT this is hacky, but it works. Updating a mob's attacks mid game is insane. unarmed_attacks = list() unarmed_types += /datum/unarmed_attack/bite/sharp/numbing @@ -114,3 +117,11 @@ /datum/species/get_bodytype() return base_species + +/datum/species/proc/update_vore_belly_def_variant() + // Determine the actual vore_belly_default_variant, if the base species in the VORE tab is set + switch (base_species) + if("Teshari") + vore_belly_default_variant = "T" + if("Unathi") + vore_belly_default_variant = "L" diff --git a/code/modules/mob/living/carbon/human/species/station/prometheans.dm b/code/modules/mob/living/carbon/human/species/station/prometheans.dm index b3c1a86697..1574a1636e 100644 --- a/code/modules/mob/living/carbon/human/species/station/prometheans.dm +++ b/code/modules/mob/living/carbon/human/species/station/prometheans.dm @@ -61,7 +61,7 @@ var/datum/species/shapeshifter/promethean/prometheans item_slowdown_mod = 1.33 throwforce_absorb_threshold = 10 - chem_strength_alcohol = 2 + chem_strength_alcohol = 0.5 cloning_modifier = /datum/modifier/cloning_sickness/promethean diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 1e1a32d94b..f76e23ce9f 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -71,7 +71,7 @@ name_language = LANGUAGE_UNATHI species_language = LANGUAGE_UNATHI health_hud_intensity = 2.5 - chem_strength_alcohol = 0.75 + chem_strength_alcohol = 1.25 throwforce_absorb_threshold = 10 digi_allowed = TRUE @@ -198,7 +198,7 @@ name_language = LANGUAGE_SIIK species_language = LANGUAGE_SIIK health_hud_intensity = 2.5 - chem_strength_alcohol = 1.25 + chem_strength_alcohol = 0.75 digi_allowed = TRUE min_age = 18 @@ -303,7 +303,7 @@ species_language = LANGUAGE_SKRELLIAN assisted_langs = list(LANGUAGE_EAL, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX, LANGUAGE_PROMETHEAN) health_hud_intensity = 2 - chem_strength_alcohol = 5 + chem_strength_alcohol = 0.2 water_movement = -3 @@ -522,7 +522,7 @@ show_ssd = "completely quiescent" health_hud_intensity = 2.5 item_slowdown_mod = 0.1 - chem_strength_alcohol = 0 + chem_strength_alcohol = 10000 //a little hacky, maybe? but whatever. nobody plays diona anyway. throwforce_absorb_threshold = 5 num_alternate_languages = 3 diff --git a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm index f4b8023562..ffdbfcc3a9 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_special_abilities_vr.dm @@ -148,6 +148,7 @@ revive() mutations.Remove(HUSK) setBrainLoss(braindamage) + species.update_vore_belly_def_variant() if(!uninjured) nutrition = old_nutrition * 0.5 @@ -1529,3 +1530,145 @@ if(Adjacent(target)) //We leapt at them but we didn't manage to hit them, let's see if we're next to them target.Weaken(2) //get knocked down, idiot + + +/mob/living/proc/injection() // Allows the user to inject reagents into others somehow, like stinging, or biting. + set name = "Injection" + set category = "Abilities" + set desc = "Inject another being with something!" + + if(stat || paralysis || weakened || stunned || world.time < last_special) //Epic copypasta from tongue grabbing. + to_chat(src, "You can't do that in your current state.") + return + + last_special = world.time + 10 //Anti-spam. + + var/list/choices = list("Inject") + + if(trait_injection_reagents.len > 1) //Should never happen, but who knows! + choices += "Change reagent" + else if(!trait_injection_selected) + trait_injection_selected = trait_injection_reagents[1] + + choices += "Change amount" + choices += "Change verb" + choices += "Chemical Refresher" + + var/choice = tgui_alert(src, "Do you wish to inject somebody, or adjust settings?", "Selection List", choices) + + if(choice == "Change reagent") + var/reagent_choice = tgui_input_list(usr, "Choose which reagent to inject!", "Select reagent", trait_injection_reagents) + if(reagent_choice) + trait_injection_selected = reagent_choice + to_chat(src, "You prepare to inject [trait_injection_amount] units of [trait_injection_selected ? "[trait_injection_selected]" : "...nothing. Select a reagent before trying to inject anything."]") + return + if(choice == "Change amount") + var/amount_choice = tgui_input_number(usr, "How much of the reagent do you want to inject? (Up to 5 units) (Can select 0 for a bite that doesn't inject venom!)", "How much?", trait_injection_amount, 5, 0) + if(amount_choice >= 0) + trait_injection_amount = amount_choice + to_chat(src, "You prepare to inject [trait_injection_amount] units of [trait_injection_selected ? "[trait_injection_selected]" : "...nothing. Select a reagent before trying to inject anything."]") + return + if(choice == "Change verb") + var/verb_choice = tgui_input_text(usr, "Choose the percieved manner of injection, such as 'bites' or 'stings', don't be misleading or abusive. This will show up in game as ('X' 'Verb' 'Y'. Example: X bites Y.)", "How are you injecting?", trait_injection_verb, max_length = 60) //Whoaa there cowboy don't put a novel in there. + if(verb_choice) + trait_injection_verb = verb_choice + to_chat(src, "You will [trait_injection_verb] your targets.") + return + if(choice == "Chemical Refresher") + var/output = {"Chemical Refresher!
+ Options for venoms
+
+ Size Chemicals
+ Microcillin: Will make someone shrink.
+ Macrocillin: Will make someone grow.
+ Normalcillin: Will make someone normal size.
+ Note: 1 unit = 100% size diff. 0.01 unit = 1% size diff.
+ Note: Normacillin stops at 100% size.
+
+ Gender Chemicals
+ Androrovir: Will transform someone's sex to male.
+ Gynorovir: Will transform someone's sex to female.
+ Androgynorovir: Will transform someone's sex to plural.
+
+ Special Chemicals
+ Stoxin: Will make someone drowsy.
+ Rainbow Toxin: Will make someone see rainbows.
+ Paralysis Toxin: Will make someone paralyzed.
+ Numbing Enzyme: Will make someone unable to feel pain.
+ Pain Enzyme: Will make someone feel amplified pain.
+
+ Side Notes
+ You can select a value of 0 to inject nothing!
+ Overdose threshold for most chemicals is 30 units.
+ Exceptions to OD is: (Numbing Enzyme:20)
+ You can also bite synthetics, but due to how synths work, they won't have anything injected into them. +
+ "} + usr << browse(output,"window=chemicalrefresher") + return + else + var/list/targets = list() //IF IT IS NOT BROKEN. DO NOT FIX IT. AND KEEP COPYPASTING IT (Pointing Rick Dalton: "That's my code!" ~CL) + + for(var/mob/living/carbon/L in living_mobs(1, TRUE)) //Noncarbons don't even process reagents so don't bother listing others. + if(!istype(L, /mob/living/carbon)) + continue + if(L == src) //no getting high off your own supply, get a nif or something, nerd. + continue + if(!L.resizable && (trait_injection_selected == "macrocillin" || trait_injection_selected == "microcillin" || trait_injection_selected == "normalcillin")) // If you're using a size reagent, ignore those with pref conflicts. + continue + if(!L.allow_spontaneous_tf && (trait_injection_selected == "androrovir" || trait_injection_selected == "gynorovir" || trait_injection_selected == "androgynorovir")) // If you're using a TF reagent, ignore those with pref conflicts. + continue + targets += L + + if(!(targets.len)) + to_chat(src, "No eligible targets found.") + return + + var/mob/living/target = tgui_input_list(src, "Please select a target.", "Victim", targets) + + if(!target) + return + + if(!istype(target, /mob/living/carbon)) //Safety. + to_chat(src, "That won't work on that kind of creature! (Only works on crew/monkeys)") + return + + + var/synth = 0 + if(target.isSynthetic()) + synth = 1 + + if(!trait_injection_selected) + to_chat(src, "You need to select a reagent.") + return + + if(!trait_injection_verb) + to_chat(src, "Somehow, you forgot your means of injecting. (Select a verb!)") + return + + if(do_after(src, 50, target)) //A decent enough timer. + add_attack_logs(src,target,"Injection trait ([trait_injection_selected], [trait_injection_amount])") + if(target.reagents && (trait_injection_amount > 0) && !synth) + target.reagents.add_reagent(trait_injection_selected, trait_injection_amount) + var/ourmsg = "[usr] [trait_injection_verb] [target] " + switch(zone_sel.selecting) + if(BP_HEAD) + ourmsg += "on the head!" + if(BP_TORSO) + ourmsg += "on the chest!" + if(BP_GROIN) + ourmsg += "on the groin!" + if(BP_R_ARM, BP_L_ARM) + ourmsg += "on the arm!" + if(BP_R_HAND, BP_L_HAND) + ourmsg += "on the hand!" + if(BP_R_LEG, BP_L_LEG) + ourmsg += "on the leg!" + if(BP_R_FOOT, BP_L_FOOT) + ourmsg += "on the foot!" + if("mouth") + ourmsg += "on the mouth!" + if("eyes") + ourmsg += "on the eyes!" + ourmsg += "" + visible_message(ourmsg) diff --git a/code/modules/mob/living/carbon/human/species/station/teshari_vr.dm b/code/modules/mob/living/carbon/human/species/station/teshari_vr.dm index 8b9b319b9a..1625a87e8d 100644 --- a/code/modules/mob/living/carbon/human/species/station/teshari_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/teshari_vr.dm @@ -17,6 +17,8 @@ male_sneeze_sound = list('sound/effects/mob_effects/tesharisneeze.ogg','sound/effects/mob_effects/tesharisneezeb.ogg') female_sneeze_sound = list('sound/effects/mob_effects/tesharisneeze.ogg','sound/effects/mob_effects/tesharisneezeb.ogg') + vore_belly_default_variant = "T" //Teshari belly sprite + inherent_verbs = list( /mob/living/carbon/human/proc/sonar_ping, /mob/living/proc/hide, diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index 83a5fc1d19..4805df6703 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -144,6 +144,45 @@ YW change end */ H.verbs |= /mob/living/carbon/human/proc/succubus_drain_finalize H.verbs |= /mob/living/carbon/human/proc/succubus_drain_lethal +/datum/trait/neutral/venom_bite + name = "Venomous Injection" + desc = "Allows for injecting prey through one method or another to inject them with a variety of chemicals with varying effects!" + tutorial = "This trait allows you to bite prey with varying effects!
\ + Options for venoms:
\ + =====Size Chemicals =====
\ + Microcillin: Will make someone shrink. (This is 1% per 0.01 units. So 1 unit = 100% size change)
\ + Macrocillin: Will make someone grow. (This is 1% per 0.01 units. So 1 unit = 100% size change)
\ + Normalcillin: Will make someone normal size. (This is 1% per 0.01 units. So 1 unit = 100% size change) Stops at 100% size.
\ + ===== Gender Chemicals =====
\ + Androrovir: Will transform someone's sex to male.
\ + Gynorovir: Will transform someone's sex to female.
\ + Androgynorovir: Will transform someone's sex to pleural.
\ + ===== Special Chemicals =====
\ + Stoxin: Will make someone drowsy.
\ + Rainbow Toxin: Will make someone see rainbows.
\ + Paralysis Toxin: Will make someone paralyzed.
\ + Numbing Enzyme: Will make someone unable to feel pain.
\ + Pain Enzyme: Will make someone feel pain, amplifieed
\ + ===== Side Notes =====
\ + You aren't required to inject anything if you prefer to just use it as a normal bite!" + cost = 0 + custom_only = FALSE + +/datum/trait/neutral/venom_bite/apply(var/datum/species/S,var/mob/living/carbon/human/H) + ..() + H.verbs |= /mob/living/proc/injection + H.trait_injection_reagents += "microcillin" // get small + H.trait_injection_reagents += "macrocillin" // get BIG + H.trait_injection_reagents += "normalcillin" // normal + H.trait_injection_reagents += "numbenzyme" // no feelings + H.trait_injection_reagents += "androrovir" // -> MALE + H.trait_injection_reagents += "gynorovir" // -> FEMALE + H.trait_injection_reagents += "androgynorovir" // -> PLURAL + H.trait_injection_reagents += "stoxin" // night night chem + H.trait_injection_reagents += "rainbowtoxin" // Funny flashing lights. + H.trait_injection_reagents += "paralysistoxin" // Paralysis! + H.trait_injection_reagents += "painenzyme" // Pain INCREASER + /datum/trait/neutral/long_vore name = "Long Predatorial Reach" desc = "Makes you able to use an unspecified appendage to grab creatures." @@ -484,21 +523,21 @@ YW change end */ desc = "The only way you can hold a drink is if it's in your own two hands, and even then you'd best not inhale too deeply near it. Alcohol hits you three times as hard as they do other people." cost = 0 custom_only = FALSE - var_changes = list("chem_strength_alcohol" = 3) + var_changes = list("chem_strength_alcohol" = 0.33) /datum/trait/neutral/alcohol_intolerance_basic name = "Liver of Lilies" desc = "You have a hard time with alcohol. Maybe you just never took to it, or maybe it doesn't agree with your system... either way, alcohol hits you twice as hard." cost = 0 custom_only = FALSE - var_changes = list("chem_strength_alcohol" = 2) + var_changes = list("chem_strength_alcohol" = 0.5) /datum/trait/neutral/alcohol_intolerance_slight name = "Liver of Tulips" desc = "You are what some might call 'a bit of a lightweight', but you can still keep your drinks down... most of the time. Alcohol hits you fifty percent harder." cost = 0 custom_only = FALSE - var_changes = list("chem_strength_alcohol" = 1.5) + var_changes = list("chem_strength_alcohol" = 0.75) /datum/trait/neutral/alcohol_tolerance_reset name = "Liver of Unremarkableness" @@ -513,21 +552,21 @@ YW change end */ desc = "You can hold drinks much better than those lily-livered land-lubbers! Arr! Alcohol's effects on you are reduced by about a quarter." cost = 0 custom_only = FALSE - var_changes = list("chem_strength_alcohol" = 0.75) + var_changes = list("chem_strength_alcohol" = 1.25) /datum/trait/neutral/alcohol_tolerance_advanced name = "Liver of Steel" desc = "Drinks tremble before your might! You can hold your alcohol twice as well as those blue-bellied barnacle boilers! Alcohol has just half the effect on you as it does on others." cost = 0 custom_only = FALSE - var_changes = list("chem_strength_alcohol" = 0.5) + var_changes = list("chem_strength_alcohol" = 2) /datum/trait/neutral/alcohol_immunity name = "Liver of Durasteel" desc = "You've drunk so much that most booze doesn't even faze you. It takes something like a Pan-Galactic or a pint of Deathbell for you to even get slightly buzzed." cost = 0 custom_only = FALSE - var_changes = list("chem_strength_alcohol" = 0.25) + var_changes = list("chem_strength_alcohol" = 4) // Alcohol Traits End Here. YW CHANGE STOP*/ diff --git a/code/modules/mob/living/carbon/human/stripping.dm b/code/modules/mob/living/carbon/human/stripping.dm index 216208d0c6..d635523b76 100644 --- a/code/modules/mob/living/carbon/human/stripping.dm +++ b/code/modules/mob/living/carbon/human/stripping.dm @@ -53,6 +53,17 @@ suit.accessories -= A update_inv_w_uniform() return + if("underwear") + var/datum/category_group/underwear/UWC = tgui_input_list(user, "Choose underwear. (Do not do this without OOC permission from the other player)", "Show/hide underwear", global_underwear.categories) + if(!UWC) return + var/datum/category_item/underwear/UWI = all_underwear[UWC.name] + if(!UWI || UWI.name == "None") + to_chat(user, "\The [src] does not have [UWC.gender==PLURAL ? "[UWC.display_name]" : "a [UWC.display_name]"].") + return + hide_underwear[UWC.name] = !hide_underwear[UWC.name] + update_underwear(1) + visible_message("\The [user] [hide_underwear[UWC.name] ? "takes off" : "puts on"] \the [src]'s [UWC.display_name].") + return // Are we placing or stripping? var/stripping @@ -67,7 +78,7 @@ var/obj/item/weapon/grab/grab = held if(istype(grab) && grab.affecting == src) stripping = TRUE - + if(stripping) if(!istype(target_slot)) // They aren't holding anything valid and there's nothing to remove, why are we even here? return diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 5dc3b6e48a..c27553b787 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -95,9 +95,12 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #define TAIL_UPPER_LAYER_ALT 33 //Modified tail-sprite layer. Tend to be larger. #define MODIFIER_EFFECTS_LAYER 34 //Effects drawn by modifiers #define FIRE_LAYER 35 //'Mob on fire' overlay layer -#define MOB_WATER_LAYER 36 //'Mob submerged' overlay layer +// # define MOB_WATER_LAYER 36 //'Mob submerged' overlay layer // Moved to global defines #define TARGETED_LAYER 37 //'Aimed at' overlay layer -#define TOTAL_LAYERS 37 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. +#define VORE_BELLY_LAYER 38 +#define VORE_TAIL_LAYER 39 + +#define TOTAL_LAYERS 39 //VOREStation edit. <---- KEEP THIS UPDATED, should always equal the highest number here, used to initialize a list. ////////////////////////////////// /mob/living/carbon/human @@ -158,11 +161,19 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() update_tail_showing() M.Scale(desired_scale_x, desired_scale_y) else - var/randn = rand(1, 2) - if(randn <= 1) // randomly choose a rotation - M.Turn(-90) + if(rest_dir) + if(rest_dir < 0) + M.Turn(-90) + rest_dir = 0 + else + M.Turn(90) + rest_dir = 0 else - M.Turn(90) + var/randn = rand(1, 2) + if(randn <= 1) // randomly choose a rotation + M.Turn(-90) + else + M.Turn(90) if(species.icon_height == 64) M.Translate(13,-22) else @@ -421,6 +432,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() //tail update_tail_showing() update_wing_showing() + update_vore_belly_sprite() + update_vore_tail_sprite() /mob/living/carbon/human/proc/update_skin() if(QDESTROYING(src)) @@ -1060,7 +1073,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() apply_layer(tail_layer) return - var/species_tail = species.get_tail(src) // Species tail icon_state prefix. + var/species_tail = species?.get_tail(src) // Species tail icon_state prefix. //This one is actually not that bad I guess. if(species_tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) @@ -1393,9 +1406,78 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if((. = ..())) update_wing_showing() +/mob/living/carbon/human/proc/update_vore_belly_sprite() + if(QDESTROYING(src)) + return + + remove_layer(VORE_BELLY_LAYER) + + var/image/vore_belly_image = get_vore_belly_image() + if(vore_belly_image) + vore_belly_image.layer = BODY_LAYER+VORE_BELLY_LAYER + overlays_standing[VORE_BELLY_LAYER] = vore_belly_image + vore_belly_image.plane = PLANE_CH_STOMACH //This one line of code. This ONE LINE OF CODE TOOK 6 HOURS TO FIGURE OUT. THANK YOU REDCAT. + + apply_layer(VORE_BELLY_LAYER) + +/mob/living/carbon/human/proc/get_vore_belly_image() + if(!(wear_suit && wear_suit.flags_inv & HIDETAIL)) + var/vs_fullness = vore_fullness_ex["stomach"] + var/icon/vorebelly_s = new/icon(icon = 'icons/mob/vore/Bellies.dmi', icon_state = "[species.vore_belly_default_variant]Belly[vs_fullness][struggle_anim_stomach ? "" : " idle"]") + vorebelly_s.Blend(vore_sprite_color["stomach"], vore_sprite_multiply["stomach"] ? ICON_MULTIPLY : ICON_ADD) + var/image/working = image(vorebelly_s) + working.overlays += em_block_image_generic(working) + return working + return null + +/mob/living/carbon/human/proc/vore_belly_animation() + if(!struggle_anim_stomach) + struggle_anim_stomach = TRUE + update_vore_belly_sprite() + spawn(12) + struggle_anim_stomach = FALSE + update_vore_belly_sprite() + +/mob/living/carbon/human/proc/update_vore_tail_sprite() + if(QDESTROYING(src)) + return + + remove_layer(VORE_TAIL_LAYER) + + var/image/vore_tail_image = get_vore_tail_image() + if(vore_tail_image) + vore_tail_image.layer = BODY_LAYER+VORE_TAIL_LAYER + overlays_standing[VORE_TAIL_LAYER] = vore_tail_image + vore_tail_image.plane = PLANE_CH_STOMACH //This one line of code. This ONE LINE OF CODE TOOK 6 HOURS TO FIGURE OUT. THANK YOU REDCAT. + + apply_layer(VORE_TAIL_LAYER) + +/mob/living/carbon/human/proc/get_vore_tail_image() + if(tail_style && istaurtail(tail_style) && tail_style:vore_tail_sprite_variant) + var/vs_fullness = vore_fullness_ex["taur belly"] + var/loaf_alt = lying && tail_style:belly_variant_when_loaf + var/fullness_icons = min(tail_style.fullness_icons, vs_fullness) + var/icon/vorebelly_s = new/icon(icon = tail_style.bellies_icon_path, icon_state = "Taur[tail_style:vore_tail_sprite_variant]-Belly-[fullness_icons][loaf_alt ? " loaf" : (struggle_anim_taur ? "" : " idle")]") + vorebelly_s.Blend(vore_sprite_color["taur belly"], vore_sprite_multiply["taur belly"] ? ICON_MULTIPLY : ICON_ADD) + var/image/working = image(vorebelly_s) + working.pixel_x = -16 + if(tail_style.em_block) + working.overlays += em_block_image_generic(working) + return working + return null + +/mob/living/carbon/human/proc/vore_tail_animation() + if(tail_style.struggle_anim && !struggle_anim_taur) + struggle_anim_taur = TRUE + update_vore_tail_sprite() + spawn(12) + struggle_anim_taur = FALSE + update_vore_tail_sprite() + //Human Overlays Indexes///////// #undef MUTATIONS_LAYER #undef SKIN_LAYER +#undef BLOOD_LAYER #undef MOB_DAM_LAYER #undef SURGERY_LAYER #undef UNDERWEAR_LAYER @@ -1408,19 +1490,24 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() #undef SUIT_LAYER #undef TAIL_UPPER_LAYER #undef TAIL_LOWER_LAYER +#undef WING_LOWER_LAYER #undef GLASSES_LAYER #undef BELT_LAYER_ALT #undef SUIT_STORE_LAYER #undef BACK_LAYER #undef HAIR_LAYER +#undef HAIR_ACCESSORY_LAYER #undef EARS_LAYER #undef EYES_LAYER #undef FACEMASK_LAYER +#undef GLASSES_LAYER_ALT #undef HEAD_LAYER #undef HANDCUFF_LAYER #undef LEGCUFF_LAYER #undef L_HAND_LAYER #undef R_HAND_LAYER +#undef WING_LAYER +#undef TAIL_UPPER_LAYER_ALT #undef MODIFIER_EFFECTS_LAYER #undef FIRE_LAYER #undef WATER_LAYER diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm index 9e6fbdb2d2..c7476f2ab7 100644 --- a/code/modules/mob/living/silicon/robot/analyzer.dm +++ b/code/modules/mob/living/silicon/robot/analyzer.dm @@ -56,8 +56,8 @@ user.show_message("\t Damage Specifics: [span_orange("[BU]")] - [span_red("[BR]")]") if(M.tod && M.stat == DEAD) user.show_message(span_blue("Time of Disable: [M.tod]")) - var/mob/living/silicon/robot/H = M - var/obj/item/weapon/cell/cell = H.get_cell() + var/mob/living/silicon/robot/R = M + var/obj/item/weapon/cell/cell = R.get_cell() if(cell) var/cell_charge = round(cell.percent()) var/cell_text @@ -72,7 +72,7 @@ else cell_text = span_red("[cell_charge]") user.show_message("\t Power Cell Status: [span_blue("[capitalize(cell.name)]")] at [cell_text]% charge") - var/list/damaged = H.get_damaged_components(1,1,1) + var/list/damaged = R.get_damaged_components(1,1,1) user.show_message(span_blue("Localized Damage:"),1) if(length(damaged)>0) for(var/datum/robot_component/org in damaged) @@ -85,12 +85,12 @@ (org.powered) ? "Power ON" : "[span_red("Power OFF")]")),1) else user.show_message(span_blue("\t Components are OK."),1) - if(H.emagged && prob(5)) + if(R.emagged && prob(5)) user.show_message(span_red("\t ERROR: INTERNAL SYSTEMS COMPROMISED"),1) user.show_message(span_blue("Operating Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)"), 1) else - var/mob/living/silicon/robot/H = M - var/obj/item/weapon/cell/cell = H.get_cell() + var/mob/living/silicon/robot/R = M + var/obj/item/weapon/cell/cell = R.get_cell() user.show_message(span_blue("Upgrade Analyzing Results for [M]:")) if(cell) user.show_message("\t Power Cell Details: [span_blue("[capitalize(cell.name)]")] with a capacity of [cell.maxcharge] at [round(cell.percent())]% charge") @@ -98,12 +98,12 @@ for(var/datum/design/item/prosfab/robot_upgrade/utility/upgrade) var/obj/item/borg/upgrade/utility/upgrade_type = initial(upgrade.build_path) var/needs_module = initial(upgrade_type.require_module) - if((!H.module && needs_module) || !initial(upgrade.name) || (H.stat != DEAD && initial(upgrade.name) == "Emergency Restart Module")) + if((!R.module && needs_module) || !initial(upgrade.name) || (R.stat != DEAD && (upgrade_type == /obj/item/borg/upgrade/utility/restart)) || (isshell(R) && (upgrade_type == /obj/item/borg/upgrade/utility/rename))) continue if(show_title) user.show_message("\t Utility Modules, used for modifying purposes:") show_title = FALSE - if(H.stat == DEAD) + if(R.stat == DEAD) if(initial(upgrade.name) == "Emergency Restart Module") user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_green("Usable")]")) else @@ -112,55 +112,55 @@ for(var/datum/design/item/prosfab/robot_upgrade/basic/upgrade) var/obj/item/borg/upgrade/basic/upgrade_type = initial(upgrade.build_path) var/needs_module = initial(upgrade_type.require_module) - if((!H.module && needs_module) || !initial(upgrade.name) || H.stat == DEAD) + if((!R.module && needs_module) || !initial(upgrade.name) || R.stat == DEAD) continue if(show_title) user.show_message("\t Basic Modules, used for direct upgrade purposes:") show_title = FALSE - if(H.has_basic_upgrade(initial(upgrade.build_path)) == "") + if(R.has_basic_upgrade(initial(upgrade.build_path)) == "") user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("ERROR")]")) else - user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [H.has_basic_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) + user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [R.has_basic_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) show_title = TRUE for(var/datum/design/item/prosfab/robot_upgrade/advanced/upgrade) var/obj/item/borg/upgrade/advanced/upgrade_type = initial(upgrade.build_path) var/needs_module = initial(upgrade_type.require_module) - if((!H.module && needs_module) || !initial(upgrade.name) || H.stat == DEAD) + if((!R.module && needs_module) || !initial(upgrade.name) || R.stat == DEAD) continue if(show_title) user.show_message("\t Advanced Modules, used for module upgrade purposes:") show_title = FALSE - if(H.has_advanced_upgrade(initial(upgrade.build_path)) == "") + if(R.has_advanced_upgrade(initial(upgrade.build_path)) == "") user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("ERROR")]")) else - user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [H.has_advanced_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) + user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [R.has_advanced_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) show_title = TRUE for(var/datum/design/item/prosfab/robot_upgrade/restricted/upgrade) var/obj/item/borg/upgrade/restricted/upgrade_type = initial(upgrade.build_path) var/needs_module = initial(upgrade_type.require_module) - if((!H.module && needs_module) || !initial(upgrade.name) || !H.supports_upgrade(initial(upgrade.build_path)) || H.stat == DEAD) + if((!R.module && needs_module) || !initial(upgrade.name) || !R.supports_upgrade(initial(upgrade.build_path)) || R.stat == DEAD) continue if(show_title) user.show_message("\t Restricted Modules, used for module upgrade purposes on specific chassis:") show_title = FALSE - if(H.has_restricted_upgrade(initial(upgrade.build_path)) == "") + if(R.has_restricted_upgrade(initial(upgrade.build_path)) == "") user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("ERROR")]")) else - user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [H.has_restricted_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) + user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [R.has_restricted_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) show_title = TRUE for(var/datum/design/item/prosfab/robot_upgrade/no_prod/upgrade) var/obj/item/borg/upgrade/no_prod/upgrade_type = initial(upgrade.build_path) var/needs_module = initial(upgrade_type.require_module) var/hidden = initial(upgrade_type.hidden_from_scan) - if((!H.module && needs_module) || !initial(upgrade.name) || hidden || H.stat == DEAD) + if((!R.module && needs_module) || !initial(upgrade.name) || hidden || R.stat == DEAD) continue if(show_title) user.show_message("\t Special Modules, used for recreation purposes:") show_title = FALSE - if(H.has_no_prod_upgrade(initial(upgrade.build_path)) == "") + if(R.has_no_prod_upgrade(initial(upgrade.build_path)) == "") user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [span_red("ERROR")]")) else - user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [H.has_no_prod_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) + user.show_message(span_blue("\t\t [capitalize(initial(upgrade.name))]: [R.has_no_prod_upgrade(initial(upgrade.build_path)) ? span_green("Installed") : span_red("Missing")]")) if("prosthetics") diff --git a/code/modules/mob/living/silicon/robot/drone/drone_console.dm b/code/modules/mob/living/silicon/robot/drone/drone_console.dm index 2b8d37c7ae..fd092f3003 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_console.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_console.dm @@ -42,7 +42,7 @@ //VOREStation Edit - multiz lol if(D.foreign_droid) continue - + drones.Add(list(list( "name" = D.real_name, "active" = D.stat != 2, @@ -56,7 +56,10 @@ data["fabricator"] = dronefab data["fabPower"] = dronefab?.produce_drones - data["areas"] = GLOB.tagger_locations + var/list/areas = list() + for(var/area in GLOB.tagger_locations) + areas += area + data["areas"] = areas data["selected_area"] = "[drone_call_area]" return data diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index 98e91cdcdd..5972874617 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -255,9 +255,14 @@ else to_chat(src, "You need to disable a module first!") return - after_equip() + after_equip(O) -/mob/living/silicon/robot/proc/after_equip() +/mob/living/silicon/robot/proc/after_equip(var/obj/item/O) + if(istype(O, /obj/item/device/gps)) + var/obj/item/device/gps/tracker = O + if(tracker.tracking) + tracker.tracking = FALSE + tracker.toggle_tracking() if(sight_mode & BORGANOMALOUS) var/obj/item/weapon/dogborg/pounce/pounce = has_upgrade_module(/obj/item/weapon/dogborg/pounce) if(pounce) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 858a253c0b..6d850186ba 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -427,7 +427,7 @@ set category = "Robot Commands" if(custom_name) - to_chat(usr, "You can't pick another custom name. Go ask for a name change.") + to_chat(usr, "You can't pick another custom name. [isshell(src) ? "" : "Go ask for a name change."]") return 0 spawn(0) @@ -836,7 +836,7 @@ if(notify) notify_ai(ROBOT_NOTIFICATION_MODULE_RESET, module.name) module.Reset(src) - module.Destroy() + qdel(module) module = null updatename("Default") has_recoloured = FALSE @@ -1704,3 +1704,5 @@ /mob/living/silicon/robot/proc/has_upgrade(var/given_type) return (has_basic_upgrade(given_type) || has_advanced_upgrade(given_type) || has_restricted_upgrade(given_type) || has_no_prod_upgrade(given_type)) + +#undef CYBORG_POWER_USAGE_MULTIPLIER diff --git a/code/modules/mob/living/silicon/robot/sprites/fluff.dm b/code/modules/mob/living/silicon/robot/sprites/fluff.dm index cc91b97e07..becbde2deb 100644 --- a/code/modules/mob/living/silicon/robot/sprites/fluff.dm +++ b/code/modules/mob/living/silicon/robot/sprites/fluff.dm @@ -109,4 +109,6 @@ pixel_x = -16 whitelist_ckey = "lunarfleet" - whitelist_charname = "Clea-Nor" \ No newline at end of file + whitelist_charname = "Clea-Nor" + +#undef CUSTOM_BORGSPRITE diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm index 69c0ed52d8..77dbac0c06 100644 --- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm +++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm @@ -1,8 +1,3 @@ -// Flags for specifying which states we have vore icon_states for. -#define SA_ICON_LIVING 0x01 -#define SA_ICON_DEAD 0x02 -#define SA_ICON_REST 0x04 - /mob/living/simple_mob melee_attack_delay = 1 base_attack_cooldown = 10 diff --git a/code/modules/mob/living/simple_mob/subtypes/glamour/homunculus.dm b/code/modules/mob/living/simple_mob/subtypes/glamour/homunculus.dm new file mode 100644 index 0000000000..3a65edf7b6 --- /dev/null +++ b/code/modules/mob/living/simple_mob/subtypes/glamour/homunculus.dm @@ -0,0 +1,35 @@ +/mob/living/simple_mob/homunculus + name = "homunculus" + desc = "A strange misshapen humanoid creature made purely from glamour!" + + icon_dead = "homunculus" + icon_living = "homunculus" + icon_state = "homunculus" + icon = 'icons/mob/vore.dmi' + + ai_holder_type = /datum/ai_holder/simple_mob/passive + + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + + var/owner + +/mob/living/simple_mob/homunculus/death() + if(owner) + var/obj/item/glamour_face/O = owner + O.homunculus = 0 + qdel(src) + +/mob/living/simple_mob/homunculus/update_icon() + return + +/mob/living/simple_mob/homunculus/update_icons() + return + diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm index b1494bc268..7c5f3a6cf7 100644 --- a/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm +++ b/code/modules/mob/living/simple_mob/subtypes/mechanical/hivebot/hivebot.dm @@ -1,7 +1,3 @@ -// Hivebots are tuned towards how many default lasers are needed to kill them. -// As such, if laser damage is ever changed, you should change this define. -#define LASERS_TO_KILL * 40 - /mob/living/simple_mob/mechanical/hivebot name = "hivebot" desc = "A robot. It appears to be somewhat resilient, but lacks a true weapon." @@ -57,4 +53,4 @@ can_flee = FALSE // Fearless dumb machines. /decl/mob_organ_names/hivebot - hit_zones = list("central chassis", "positioning servo", "head", "sensor suite", "manipulator arm", "shoulder weapon mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg") \ No newline at end of file + hit_zones = list("central chassis", "positioning servo", "head", "sensor suite", "manipulator arm", "shoulder weapon mount", "weapons array", "front right leg", "front left leg", "rear left leg", "rear right leg") diff --git a/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm b/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm index 514b2087b6..f6c65b9ed3 100644 --- a/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm +++ b/code/modules/mob/living/simple_mob/subtypes/occult/unknown.dm @@ -344,4 +344,12 @@ pointblank = TRUE intelligence_level = AI_SMART vision_range = 9 - closest_distance = 4 \ No newline at end of file + closest_distance = 4 + +#undef GA_ADS +#undef GA_CALLDOWN +#undef GA_SPEEDUP +#undef GA_ILLUSION +#undef GA_BULLETHELL +#undef GA_LINES +#undef GA_CONFUSION diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm index 6d3d58f40a..8dae71b3bf 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/morph/morph.dm @@ -376,3 +376,5 @@ prey_body.forceMove(parent_morph.vore_selected) log_and_message_admins("[key_name_admin(prey_body)] and [key_name_admin(parent_morph)] have been returned to their original bodies. [get_area(src)] - [COORD(src)].") qdel(src) + +#undef MORPH_COOLDOWN diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm index c1102a6050..8fe1626976 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub.dm @@ -15,8 +15,6 @@ List of things solar grubs should be able to do: Therefore, if you see the grubs, kill them while they're small, or things might escalate." // TODO: PORT SOLAR MOTHS - Rykka value = CATALOGUER_REWARD_EASY -#define SINK_POWER 1 - /mob/living/simple_mob/vore/solargrub name = "juvenile solargrub" desc = "A young sparkling solargrub" diff --git a/code/modules/mob/mob_defines_vr.dm b/code/modules/mob/mob_defines_vr.dm index 619cfe5940..0eaed29131 100644 --- a/code/modules/mob/mob_defines_vr.dm +++ b/code/modules/mob/mob_defines_vr.dm @@ -1,5 +1,6 @@ /mob var/vantag_hud = 0 // Do I have the HUD enabled? + var/stomach_vision = 1 // By default, you will see stomachs. var/mob/temporary_form // For holding onto a temporary form var/disconnect_time = null //Time of client loss, set by Logout(), for timekeeping diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index e0a628eb90..e5c84c6928 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -1,4 +1,3 @@ -#define UPGRADE_COOLDOWN 40 #define UPGRADE_KILL_TIMER 100 ///Process_Grab() @@ -417,3 +416,5 @@ qdel(hud) hud = null return ..() + +#undef UPGRADE_KILL_TIMER diff --git a/code/modules/mob/mob_helpers_vr.dm b/code/modules/mob/mob_helpers_vr.dm index 663cfc7f4a..81ae7da305 100644 --- a/code/modules/mob/mob_helpers_vr.dm +++ b/code/modules/mob/mob_helpers_vr.dm @@ -1,5 +1,13 @@ /mob/recalculate_vis() . = ..() + + if(stomach_vision && !(VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,TRUE) + vis_enabled += VIS_CH_STOMACH + else if(!stomach_vision && (VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,FALSE) + vis_enabled -= VIS_CH_STOMACH + if(!plane_holder || !vis_enabled) return @@ -12,3 +20,33 @@ plane_holder.set_vis(VIS_CH_VANTAG,FALSE) vis_enabled -= VIS_CH_VANTAG return + + +/mob/verb/toggle_stomach_vision() + set name = "Toggle Stomach Sprites" + set category = "Preferences" + set desc = "Toggle the ability to see stomachs or not" + + var/toggle + toggle = tgui_alert(src, "Would you like to see visible stomachs?", "Visible Tummy?", list("Yes", "No")) + if(toggle =="Yes") + stomach_vision = 1 //Simple! Easy! + if(!(VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,TRUE) + vis_enabled += VIS_CH_STOMACH + to_chat("You can now see stomachs!") + else + stomach_vision = 0 + if(VIS_CH_STOMACH in vis_enabled) + plane_holder.set_vis(VIS_CH_STOMACH,FALSE) + vis_enabled -= VIS_CH_STOMACH + to_chat("You will no longer see stomachs!") + +/* //Leaving this in as an example of 'how to properly enable a plane to hide/show itself' for future PRs. +if(stomach_vision && !(VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,TRUE) + vis_enabled += VIS_CH_STOMACH +else if(!stomach_vision && (VIS_CH_STOMACH in vis_enabled)) + plane_holder.set_vis(VIS_CH_STOMACH,FALSE) + vis_enabled -= VIS_CH_STOMACH +*/ diff --git a/code/modules/mob/mob_planes_vr.dm b/code/modules/mob/mob_planes_vr.dm index b23067733f..9f5b30f579 100644 --- a/code/modules/mob/mob_planes_vr.dm +++ b/code/modules/mob/mob_planes_vr.dm @@ -4,6 +4,7 @@ plane_masters[VIS_CH_HEALTH_VR] = new /obj/screen/plane_master{plane = PLANE_CH_HEALTH_VR} //Health bar but transparent at 100 plane_masters[VIS_CH_BACKUP] = new /obj/screen/plane_master{plane = PLANE_CH_BACKUP} //Backup implant status plane_masters[VIS_CH_VANTAG] = new /obj/screen/plane_master{plane = PLANE_CH_VANTAG} //Vore Antags + plane_masters[VIS_CH_STOMACH] = new /obj/screen/plane_master{plane = PLANE_CH_STOMACH} //Stomach plane_masters[VIS_AUGMENTED] = new /obj/screen/plane_master/augmented(M = my_mob) //Augmented reality ..() diff --git a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm index a8ea0ebfeb..217cf5fb7a 100644 --- a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm @@ -9,7 +9,7 @@ name = "You should not see this..." icon = 'icons/mob/vore/ears_vr.dmi' do_colouration = 0 // Set to 1 to blend (ICON_ADD) hair color - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_GREY_YW, SPECIES_SHADEKIN_YW) //This lets all races use //YW EDIT + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_GREY_YW, SPECIES_SHADEKIN_YW) //This lets all races use //YW EDIT color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 // Species-unique ears @@ -30,6 +30,17 @@ do_colouration = 1 extra_overlay = "shadekin-round-inner" +/datum/sprite_accessory/ears/lleill + name = "Lleill Ears, colorable" + desc = "" + icon = 'icons/mob/vore/ears_32x64.dmi' + icon_state = "lleill" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "lleill-antlers" + species_allowed = list(SPECIES_LLEILL) + + // Ears avaliable to anyone /datum/sprite_accessory/ears/alien_slug diff --git a/code/modules/mob/new_player/sprite_accessories_tail.dm b/code/modules/mob/new_player/sprite_accessories_tail.dm index a4f1e457f5..b1f6a930a7 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail.dm @@ -1058,3 +1058,12 @@ extra_overlay2 = "zorgoia_fluff_top" do_colouration = 1 color_blend_mode = ICON_MULTIPLY + +/datum/sprite_accessory/tail/lleill + name = "Lleill tail" + desc = "" + icon = 'icons/mob/species/lleill/tail.dmi' + icon_state = "tail" + do_colouration = 1 + color_blend_mode = ICON_MULTIPLY + extra_overlay = "tail_marking" diff --git a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm index b71cede427..67f07f57b5 100644 --- a/code/modules/mob/new_player/sprite_accessories_tail_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm @@ -13,7 +13,7 @@ var/mob_offset_x = 0 var/mob_offset_y = 0 do_colouration = 0 //Set to 1 to enable coloration using the tail color. - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use var/list/lower_layer_dirs = list(SOUTH) var/icon_loaf = null diff --git a/code/modules/mob/new_player/sprite_accessories_taur.dm b/code/modules/mob/new_player/sprite_accessories_taur.dm index 0e052d9c50..89a264c82e 100644 --- a/code/modules/mob/new_player/sprite_accessories_taur.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur.dm @@ -1,3 +1,10 @@ +/datum/sprite_accessory/tail + var/vore_tail_sprite_variant = "" + var/belly_variant_when_loaf = FALSE + var/fullness_icons = 0 + var/struggle_anim = FALSE + var/bellies_icon_path = 'icons/mob/vore/Taur_Bellies.dmi' + /datum/riding/taur keytype = /obj/item/weapon/material/twohanded/riding_crop // Crack! nonhuman_key_exemption = FALSE // If true, nonhumans who can't hold keys don't need them, like borgs and simplemobs. @@ -355,4 +362,70 @@ /datum/sprite_accessory/tail/taur/zorgoia/fat name = "Zorgoia (Fat Taur)" - extra_overlay = "zorgoia_fat" \ No newline at end of file + extra_overlay = "zorgoia_fat" + + +/datum/sprite_accessory/tail/taur/wolf + vore_tail_sprite_variant = "N" + fullness_icons = 3 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/naga/naga_2c + vore_tail_sprite_variant = "Naga" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/horse + vore_tail_sprite_variant = "Horse" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/cow + vore_tail_sprite_variant = "Cow" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/lizard + vore_tail_sprite_variant = "Lizard" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/lizard/synthlizard + vore_tail_sprite_variant = "SynthLiz" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/feline + vore_tail_sprite_variant = "Feline" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/slug + vore_tail_sprite_variant = "Slug" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/drake + vore_tail_sprite_variant = "Drake" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/otie + vore_tail_sprite_variant = "Otie" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/deer + vore_tail_sprite_variant = "Deer" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/skunk + vore_tail_sprite_variant = "Skunk" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE diff --git a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm index 17e716fd4e..2a85dda15f 100644 --- a/code/modules/mob/new_player/sprite_accessories_taur_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm @@ -60,6 +60,9 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 4 + vore_tail_sprite_variant = "N" + fullness_icons = 3 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/wolf/fatwolf name = "Fat Wolf (Taur)" @@ -131,6 +134,10 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 3 + vore_tail_sprite_variant = "Skunk" //Sadly there appears to be no sprites... For now! + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/naga name = "Naga (Taur)" @@ -165,34 +172,43 @@ msg_prey_stepunder = "You jump over %prey's thick tail." msg_owner_stepunder = "%owner bounds over your tail." -/datum/sprite_accessory/tail/taur/naga/naga_2c +/datum/sprite_accessory/tail/taur/naga/vore_compatable + name = "Naga (Taur) (Vore Compatable)" + vore_tail_sprite_variant = "Naga" + fullness_icons = 1 + struggle_anim = TRUE + +/datum/sprite_accessory/tail/taur/naga/vore_compatable/naga_2c name = "Naga dual-color (Taur)" icon_state = "naga_s" extra_overlay = "naga_markings" //icon_sprite_tag = "naga2c" + vore_tail_sprite_variant = "Naga" + fullness_icons = 1 + struggle_anim = TRUE -/datum/sprite_accessory/tail/taur/naga/alt_2c +/datum/sprite_accessory/tail/taur/naga/vore_compatable/alt_2c name = "Naga alt style dual-color (Taur)" suit_sprites = 'icons/mob/taursuits_naga_alt_vr.dmi' icon_state = "altnaga_s" extra_overlay = "altnaga_markings" //icon_sprite_tag = "altnaga2c" -/datum/sprite_accessory/tail/taur/naga/alt_3c +/datum/sprite_accessory/tail/taur/naga/vore_compatable/alt_3c name = "Naga alt style tri-color (Taur)" suit_sprites = 'icons/mob/taursuits_naga_alt_vr.dmi' icon_state = "altnaga_s" extra_overlay = "altnaga_markings" extra_overlay2 = "altnaga_stripes" -/datum/sprite_accessory/tail/taur/naga/alt_3c_rattler +/datum/sprite_accessory/tail/taur/naga/vore_compatable/alt_3c_rattler name = "Naga alt style tri-color, rattler (Taur)" suit_sprites = 'icons/mob/taursuits_naga_alt_vr.dmi' icon_state = "altnaga_s" extra_overlay = "altnaga_markings" extra_overlay2 = "altnaga_rattler" -/datum/sprite_accessory/tail/taur/naga/alt_3c_tailmaw +/datum/sprite_accessory/tail/taur/naga/vore_compatable/alt_3c_tailmaw name = "Naga alt style tri-color, tailmaw (Taur)" suit_sprites = 'icons/mob/taursuits_naga_alt_vr.dmi' icon_state = "altnagatailmaw_s" @@ -208,6 +224,9 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 4 + vore_tail_sprite_variant = "Horse" + fullness_icons = 1 + struggle_anim = TRUE msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" @@ -242,6 +261,9 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 3 + vore_tail_sprite_variant = "Cow" + fullness_icons = 1 + struggle_anim = TRUE msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" @@ -267,6 +289,10 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 7 + vore_tail_sprite_variant = "Deer" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE msg_owner_disarm_run = "You quickly push %prey to the ground with your hoof!" msg_prey_disarm_run = "%owner pushes you down to the ground with their hoof!" @@ -303,6 +329,9 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 5 + vore_tail_sprite_variant = "Lizard" + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/lizard/fatlizard name = "Fat Lizard (Taur)" @@ -349,6 +378,9 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 3 + vore_tail_sprite_variant = "SynthLiz" + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/lizard/fatsynthlizard name = "Fat SynthLizard dual-color (Taur)" @@ -424,6 +456,10 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 5 + vore_tail_sprite_variant = "Feline" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/fatfeline name = "Fat Feline (Taur)" @@ -529,6 +565,9 @@ icon_state = "slug_s" suit_sprites = 'icons/mob/taursuits_slug_vr.dmi' icon_sprite_tag = "slug" + vore_tail_sprite_variant = "Slug" + fullness_icons = 1 + struggle_anim = TRUE msg_owner_help_walk = "You carefully slither around %prey." msg_prey_help_walk = "%owner's huge tail slithers past beside you!" @@ -599,6 +638,10 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 6 + vore_tail_sprite_variant = "Drake" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/drake/fat name = "Fat Drake (Taur)" @@ -626,6 +669,10 @@ can_loaf = TRUE icon_loaf = 'icons/mob/vore/taurs_vr_loaf.dmi' loaf_offset = 5 + vore_tail_sprite_variant = "Otie" + belly_variant_when_loaf = TRUE + fullness_icons = 1 + struggle_anim = TRUE /datum/sprite_accessory/tail/taur/alraune/alraune_2c name = "Alraune (dual color)" @@ -1071,4 +1118,4 @@ offset_x = -32 offset_y = -11 mob_offset_y = 11 -*/ \ No newline at end of file +*/ diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index a29e4ebba0..142dfdf432 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -6,7 +6,7 @@ /datum/sprite_accessory/hair - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_SHADEKIN_YW, SPECIES_KIGYAR_YW, SPECIES_TVAOAN_KIGYAR_YW, SPECIES_SANGHEILI_YW, SPECIES_UNGGOY_YW) //This lets all races use the default hairstyles. // yw edit shadekin and covenants + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL, SPECIES_SHADEKIN_YW, SPECIES_KIGYAR_YW, SPECIES_TVAOAN_KIGYAR_YW, SPECIES_SANGHEILI_YW, SPECIES_UNGGOY_YW) //This lets all races use the default hairstyles. // yw edit shadekin and covenants /datum/sprite_accessory/hair/astolfo name = "Astolfo" @@ -485,20 +485,20 @@ /datum/sprite_accessory/facial_hair icon = 'icons/mob/human_face_or_vr.dmi' color_blend_mode = ICON_MULTIPLY - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use the facial hair styles. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use the facial hair styles. /datum/sprite_accessory/facial_hair/shaved name = "Shaved" icon_state = "bald" gender = NEUTER - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This needed to be manually defined, apparantly. + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This needed to be manually defined, apparantly. /datum/sprite_accessory/facial_hair/neck_fluff name = "Neck Fluff" icon = 'icons/mob/human_face_or_vr.dmi' icon_state = "facial_neckfluff" gender = NEUTER - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) /datum/sprite_accessory/facial_hair/vulp_none name = "None" diff --git a/code/modules/mob/new_player/sprite_accessories_wing_vr.dm b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm index 1e8f6d4919..8bd27ee746 100644 --- a/code/modules/mob/new_player/sprite_accessories_wing_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm @@ -9,7 +9,7 @@ name = "You should not see this..." icon = 'icons/mob/vore/wings_vr.dmi' do_colouration = 0 //Set to 1 to enable coloration using the tail color. - species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN) //This lets all races use + species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_ALTEVIAN, SPECIES_LLEILL) //This lets all races use color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1 var/wing_offset = 0 var/multi_dir = FALSE // Does it use different sprites at different layers? _front will be added for sprites on low layer, _back to high layer diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 1956139fce..32e609ad90 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -254,6 +254,7 @@ to_chat(user,message) to_chat(user, "^ This message was NOT SENT ^ -- It was [length] characters, and the limit is [MAX_MESSAGE_LEN]. It would fit in [posts] separate messages.") #undef MAX_HUGE_MESSAGE_LEN +#undef POST_DELIMITER_STR ///// PSAY ///// diff --git a/code/modules/modular_computers/file_system/programs/command/comm.dm b/code/modules/modular_computers/file_system/programs/command/comm.dm index 61b6e97c8c..ade5f40adb 100644 --- a/code/modules/modular_computers/file_system/programs/command/comm.dm +++ b/code/modules/modular_computers/file_system/programs/command/comm.dm @@ -1,8 +1,3 @@ -#define STATE_DEFAULT 1 -#define STATE_MESSAGELIST 2 -#define STATE_VIEWMESSAGE 3 -#define STATE_STATUSDISPLAY 4 -#define STATE_ALERT_LEVEL 5 /datum/computer_file/program/comm filename = "comm" filedesc = "Command and Communications Program" diff --git a/code/modules/multiz/portals_vr.dm b/code/modules/multiz/portals_vr.dm index 4f6756ad49..a7a4c9c75b 100644 --- a/code/modules/multiz/portals_vr.dm +++ b/code/modules/multiz/portals_vr.dm @@ -93,7 +93,7 @@ if(portal_type == "Weird Green") portal_icon_selection = "type-b-portal" if(portal_type == "Pulsing") - var/portal_subtype = tgui_alert(user, "Which subtype would you prefer?", "Subtype Selection", list("Blue","Red","Blue/Red Mix", "Yellow")) + var/portal_subtype = tgui_alert(user, "Which subtype would you prefer?", "Subtype Selection", list("Blue","Red","Blue/Red Mix", "Yellow", "White")) if(portal_subtype == "Blue") portal_icon_selection = "type-c-blue-portal" if(portal_subtype == "Red") @@ -102,6 +102,8 @@ portal_icon_selection = "type-c-mix-portal" if(portal_subtype == "Yellow") portal_icon_selection = "type-c-yellow-portal" + if(portal_subtype == "White") + portal_icon_selection = "type-c-white-portal" return portal_icon_selection /obj/structure/portal_event/proc/teleport(atom/movable/M as mob|obj) diff --git a/code/modules/multiz/stairs.dm b/code/modules/multiz/stairs.dm index fd9702b9de..cbdbf6f43c 100644 --- a/code/modules/multiz/stairs.dm +++ b/code/modules/multiz/stairs.dm @@ -1,5 +1,3 @@ -#define STAIR_MOVE_DELAY 10 // Animation delay for non-living objects moving up/down stairs - /obj/structure/stairs name = "Stairs" desc = "Stairs leading to another deck. Not too useful if the gravity goes out." diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index dd6a91b5aa..854c6b9035 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -37,6 +37,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable var/tmp/list/nifsofts[TOTAL_NIF_SOFTWARE] // All our nifsofts var/tmp/list/nifsofts_life = list() // Ones that want to be talked to on life() var/owner // Owner character name + var/owner_key // Account associated with the nif var/examine_msg //Message shown on examine. var/tmp/vision_flags = 0 // Flags implants set for faster lookups @@ -158,6 +159,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable return if(H.mind) owner = H.mind.name + owner_key = H.ckey implant(H) return TRUE @@ -286,16 +288,18 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable //Firsties if(!install_done) if(human.mind.name == owner) + owner_key = human.ckey install_done = world.time + 1 MINUTE notify("Welcome back, [owner]! Performing quick-calibration...") else if(!owner) + owner_key = human.ckey install_done = world.time + 35 MINUTES notify("Adapting to new user...") sleep(5 SECONDS) notify("Adjoining optic [human.isSynthetic() ? "interface" : "nerve"], please be patient.",TRUE) else notify("You are not an authorized user for this device. Please contact [owner].",TRUE) - unimplant() + unimplant(human) stat = NIF_TEMPFAIL return FALSE diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 5c0bad4294..a6e91a9efb 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -610,3 +610,10 @@ if(message) var/sane_message = sanitize(message) soulcatcher.emote_into(sane_message,src,null) + +#undef NIF_SC_CATCHING_ME +#undef NIF_SC_CATCHING_OTHERS +#undef NIF_SC_ALLOW_EARS +#undef NIF_SC_ALLOW_EYES +#undef NIF_SC_BACKUPS +#undef NIF_SC_PROJECTING diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 7d820c54f1..bea81b6e87 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -429,3 +429,5 @@ var/const/CE_STABLE_THRESHOLD = 0.5 B.fluorescent = 0 B.invisibility = 0 return B + +#undef BLOOD_MINIMUM_STOP_PROCESS diff --git a/code/modules/organs/internal/_organ_internal.dm b/code/modules/organs/internal/_organ_internal.dm index 58ed176505..38a5d4009b 100644 --- a/code/modules/organs/internal/_organ_internal.dm +++ b/code/modules/organs/internal/_organ_internal.dm @@ -1,5 +1,3 @@ -#define PROCESS_ACCURACY 10 - /**************************************************** INTERNAL ORGANS DEFINES ****************************************************/ @@ -61,4 +59,3 @@ if(. >= 3 && antibiotics < ANTIBIO_OD) //INFECTION_LEVEL_THREE if (prob(50)) take_damage(1,silent=prob(15)) - diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 7ca9cde39e..7fe0d25607 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -1431,3 +1431,7 @@ Note that amputating the affected organ does in fact remove the infection from t var/datum/sprite_accessory/marking/mark = markings[M]["datum"] if(mark.hide_body_parts && (organ_tag in mark.hide_body_parts)) return 1 + +#undef DROPLIMB_THRESHOLD_EDGE +#undef DROPLIMB_THRESHOLD_TEAROFF +#undef DROPLIMB_THRESHOLD_DESTROY diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index c67a3235d0..f4e044463d 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -1,5 +1,3 @@ -#define PROCESS_ACCURACY 10 - /**************************************************** INTERNAL ORGANS DEFINES ****************************************************/ diff --git a/code/modules/organs/subtypes/lleill.dm b/code/modules/organs/subtypes/lleill.dm new file mode 100644 index 0000000000..bd50b6ebff --- /dev/null +++ b/code/modules/organs/subtypes/lleill.dm @@ -0,0 +1,3 @@ +/obj/item/organ/external/head/lleill + eye_icon_location = 'icons/mob/human_face_vr.dmi' + eye_icon = "eyes_lleill" diff --git a/code/modules/overmap/ships/ship.dm b/code/modules/overmap/ships/ship.dm index 9252358757..35208c7285 100644 --- a/code/modules/overmap/ships/ship.dm +++ b/code/modules/overmap/ships/ship.dm @@ -44,7 +44,7 @@ var/last_sound = 0 //The last time a ship sound was played //VOREStation add var/sound_cooldown = 10 SECONDS //VOREStation add - /// Vis contents overlay holding the ship's vector when in motion + /// Vis contents overlay holding the ship's vector when in motion var/obj/effect/overlay/vis/vector /obj/effect/overmap/visitable/ship/Initialize() @@ -72,18 +72,18 @@ /obj/effect/overmap/visitable/ship/get_scan_data(mob/user) . = ..() - + if(!is_still()) . += {"\n\[i\]Heading\[/i\]: [get_heading_degrees()]\n\[i\]Velocity\[/i\]: [get_speed() * 1000]"} else . += {"\n\[i\]Vessel was stationary at time of scan.\[/i\]\n"} - + var/life = 0 - + for(var/mob/living/L in living_mob_list) if(L.z in map_z) //Things inside things we'll consider shielded, otherwise we'd want to use get_z(L) life++ - + . += {"\[i\]Life Signs\[/i\]: [life ? life : "None"]"} //Projected acceleration based on information from engines @@ -301,6 +301,7 @@ var/y_to_use = T?.y || "UNK" return "\[X:[x_to_use], Y:[y_to_use], VEL:[get_speed() * 1000], HDG:[get_heading_degrees()]\]" +#undef SHIP_MOVE_RESOLUTION #undef MOVING #undef SANITIZE_SPEED -#undef CHANGE_SPEED_BY \ No newline at end of file +#undef CHANGE_SPEED_BY diff --git a/code/modules/pda/cart_apps.dm b/code/modules/pda/cart_apps.dm index 857b7bbc04..74086c27b5 100644 --- a/code/modules/pda/cart_apps.dm +++ b/code/modules/pda/cart_apps.dm @@ -229,7 +229,7 @@ for(var/datum/supply_order/SO as anything in SSsupply.shoppinglist) supplyOrderCount++ - supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.ordered_by, "Comment" = html_encode(SO.comment)) + supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.approved_by, "Comment" = html_encode(SO.comment)) supplyData["approved"] = supplyOrderData supplyData["approved_count"] = supplyOrderCount diff --git a/code/modules/pda/core_apps.dm b/code/modules/pda/core_apps.dm index 94c30cea65..6e6ab50076 100644 --- a/code/modules/pda/core_apps.dm +++ b/code/modules/pda/core_apps.dm @@ -314,7 +314,9 @@ // Compile all the newscasts for(var/datum/feed_channel/channel in news_network.network_channels) if(!channel.censored) + var/index = 0 for(var/datum/feed_message/FM in channel.messages) + index++ var/body = replacetext(FM.body, "\n", "
") news[++news.len] = list( "channel" = channel.channel_name, @@ -324,7 +326,8 @@ "time_stamp" = FM.time_stamp, "has_image" = (FM.img != null), "caption" = FM.caption, - "time" = FM.post_time + "time" = FM.post_time, + "index" = index ) // Cut out all but the youngest three diff --git a/code/modules/persistence/effects/paper.dm b/code/modules/persistence/effects/paper.dm index 26cbd83f95..35c13510db 100644 --- a/code/modules/persistence/effects/paper.dm +++ b/code/modules/persistence/effects/paper.dm @@ -17,6 +17,8 @@ var/obj/item/weapon/paper/paper = new paper_type(creating) paper.info = token["message"] paper.name = token["title"] + if(!paper.name) + paper.name = "No Title" paper.last_modified_ckey = token["author"] paper.age = token["age"]+1 if(requires_noticeboard) diff --git a/code/modules/planet/virgo3c_vr.dm b/code/modules/planet/virgo3c_vr.dm index c80ac3e78e..c0664319a4 100644 --- a/code/modules/planet/virgo3c_vr.dm +++ b/code/modules/planet/virgo3c_vr.dm @@ -723,3 +723,23 @@ VIRGO3C_TURF_CREATE(/turf/simulated/floor/tiled/asteroid_steel/outdoors) /turf/simulated/floor/outdoors/grass/forest/virgo3c/notrees tree_chance = 0 + +#undef VIRGO3C_ONE_ATMOSPHERE +#undef VIRGO3C_AVG_TEMP + +#undef VIRGO3C_PER_N2 +#undef VIRGO3C_PER_O2 +#undef VIRGO3C_PER_N2O +#undef VIRGO3C_PER_CO2 +#undef VIRGO3C_PER_PHORON + +#undef VIRGO3C_MOL_PER_TURF +#undef VIRGO3C_MOL_N2 +#undef VIRGO3C_MOL_O2 +#undef VIRGO3C_MOL_N2O +#undef VIRGO3C_MOL_CO2 +#undef VIRGO3C_MOL_PHORON + +#undef VIRGO3C_SET_ATMOS +#undef VIRGO3C_TURF_CREATE +#undef VIRGO3C_TURF_CREATE_UN diff --git a/code/modules/power/antimatter/computer.dm b/code/modules/power/antimatter/computer.dm index 973828b6e0..018d4d0325 100644 --- a/code/modules/power/antimatter/computer.dm +++ b/code/modules/power/antimatter/computer.dm @@ -93,3 +93,6 @@ user << browse(dat, "window=communications;size=400x500") onclose(user, "communications") +#undef STATE_DEFAULT +#undef STATE_INJECTOR +#undef STATE_ENGINE diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index cd33c821b1..8f387b20d9 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -804,7 +804,7 @@ GLOBAL_LIST_EMPTY(apcs) "emagged" = emagged, "isOperating" = operating, "externalPower" = main_status, - "powerCellStatus" = cell ? cell.percent() : null, + "powerCellStatus" = cell ? cell.percent() : 0, "chargeMode" = chargemode, "chargingStatus" = charging, "totalLoad" = round(lastused_total), @@ -1380,6 +1380,32 @@ GLOBAL_LIST_EMPTY(apcs) /obj/machinery/power/apc/get_cell() return cell +#undef CRITICAL_APC_EMP_PROTECTION + +#undef UPDATE_CELL_IN +#undef UPDATE_OPENED1 +#undef UPDATE_OPENED2 +#undef UPDATE_MAINT +#undef UPDATE_BROKE +#undef UPDATE_BLUESCREEN +#undef UPDATE_WIREEXP +#undef UPDATE_ALLGOOD + +#undef APC_UPOVERLAY_CHARGEING0 +#undef APC_UPOVERLAY_CHARGEING1 +#undef APC_UPOVERLAY_CHARGEING2 +#undef APC_UPOVERLAY_EQUIPMENT0 +#undef APC_UPOVERLAY_EQUIPMENT1 +#undef APC_UPOVERLAY_EQUIPMENT2 +#undef APC_UPOVERLAY_LIGHTING0 +#undef APC_UPOVERLAY_LIGHTING1 +#undef APC_UPOVERLAY_LIGHTING2 +#undef APC_UPOVERLAY_ENVIRON0 +#undef APC_UPOVERLAY_ENVIRON1 +#undef APC_UPOVERLAY_ENVIRON2 +#undef APC_UPOVERLAY_LOCKED +#undef APC_UPOVERLAY_OPERATING + #undef APC_UPDATE_ICON_COOLDOWN #undef APC_EXTERNAL_POWER_NOTCONNECTED @@ -1389,3 +1415,12 @@ GLOBAL_LIST_EMPTY(apcs) #undef APC_HAS_ELECTRONICS_NONE #undef APC_HAS_ELECTRONICS_WIRED #undef APC_HAS_ELECTRONICS_SECURED + +#undef POWERCHAN_OFF +#undef POWERCHAN_OFF_AUTO +#undef POWERCHAN_ON +#undef POWERCHAN_ON_AUTO + +#undef NIGHTSHIFT_AUTO +#undef NIGHTSHIFT_NEVER +#undef NIGHTSHIFT_ALWAYS diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm index dcf8dab1bd..62b162a1d9 100644 --- a/code/modules/power/batteryrack.dm +++ b/code/modules/power/batteryrack.dm @@ -319,4 +319,11 @@ update_icon() RefreshParts() update_maxcharge() - return TRUE \ No newline at end of file + return TRUE + +#undef PSU_OFFLINE +#undef PSU_OUTPUT +#undef PSU_INPUT +#undef PSU_AUTO + +#undef PSU_MAXCELLS diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index 2fe1fc821b..954231a6ab 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -998,3 +998,5 @@ var/list/possible_cable_coil_colours = list( else ..() return + +#undef MAXCOIL diff --git a/code/modules/power/fusion/core/core_field.dm b/code/modules/power/fusion/core/core_field.dm index 9be55a9ce0..18d6a6834a 100644 --- a/code/modules/power/fusion/core/core_field.dm +++ b/code/modules/power/fusion/core/core_field.dm @@ -325,7 +325,7 @@ var/obj/S = new Mat.stack_type dormant_reactant_quantities[particle] -= 20 S.throw_at_random(FALSE, 7, 3) - + else dormant_reactant_quantities[particle] = 0 @@ -684,5 +684,6 @@ return #undef FUSION_HEAT_CAP +#undef FUSION_ENERGY_PER_K #undef FUSION_MAX_ENVIRO_HEAT #undef PLASMA_TEMP_RADIATION_DIVISIOR diff --git a/code/modules/power/fusion/magpower.dm b/code/modules/power/fusion/magpower.dm index 81ab2e5ce5..9d5f9bb649 100644 --- a/code/modules/power/fusion/magpower.dm +++ b/code/modules/power/fusion/magpower.dm @@ -71,3 +71,6 @@ if (FF.plasma_temperature <= MINIMUM_PLASMA_TEMPERATURE) icon_state = "mag_trap0" return + +#undef ENERGY_PER_K +#undef MINIMUM_PLASMA_TEMPERATURE diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 3c4403c221..a81c88e35b 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -4,10 +4,6 @@ // status values shared between lighting fixtures and items -#define LIGHT_OK 0 -#define LIGHT_EMPTY 1 -#define LIGHT_BROKEN 2 -#define LIGHT_BURNED 3 #define LIGHT_BULB_TEMPERATURE 400 //K - used value for a 60W bulb #define LIGHTING_POWER_FACTOR 2 //5W per luminosity * range //VOREStation Edit: why the fuck are lights eating so much power, 2W per thing #define LIGHT_EMERGENCY_POWER_USE 0.2 //How much power emergency lights will consume per tick @@ -1187,3 +1183,7 @@ var/global/list/light_type_cache = list() icon = 'icons/obj/lighting.dmi' icon_state = "lampshade" w_class = ITEMSIZE_TINY + +#undef LIGHT_BULB_TEMPERATURE +#undef LIGHTING_POWER_FACTOR +#undef LIGHT_EMERGENCY_POWER_USE diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index d4fbd73a41..17896de426 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -417,3 +417,7 @@ //no special effects, but the explosion is pretty big (same as a supermatter shard). explosion(src.loc, 3, 6, 12, 16, 1) qdel(src) + + +#undef TEMPERATURE_DIVISOR +#undef TEMPERATURE_CHANGE_MAX diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm index 4d92e37c4e..51c53138fa 100644 --- a/code/modules/power/singularity/act.dm +++ b/code/modules/power/singularity/act.dm @@ -1,5 +1,3 @@ -#define I_SINGULO "singulo" - /atom/proc/singularity_act() return diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm index e14b59f09b..85b10c8b00 100644 --- a/code/modules/power/singularity/emitter.dm +++ b/code/modules/power/singularity/emitter.dm @@ -1,5 +1,3 @@ -#define EMITTER_DAMAGE_POWER_TRANSFER 450 //used to transfer power to containment field generators - /obj/machinery/power/emitter name = "emitter" desc = "It is a heavy duty industrial laser." diff --git a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm index af901342d5..b0ced621a2 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_smasher.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_smasher.dm @@ -416,4 +416,7 @@ required_atmos_temp_min = 400 required_atmos_temp_max = 20000 - probability = 20 \ No newline at end of file + probability = 20 + +#undef PS_RESULT_STACK +#undef PS_RESULT_ITEM diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index cc8ed45f3b..a64f2c7861 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -3,8 +3,8 @@ GLOBAL_LIST_EMPTY(smeses) -#define SMESMAXCHARGELEVEL 250000 -#define SMESMAXOUTPUT 250000 +//# define SMESMAXCHARGELEVEL 250000 Unused +//# define SMESMAXOUTPUT 250000 Unused /obj/machinery/power/smes name = "power storage unit" @@ -511,4 +511,4 @@ GLOBAL_LIST_EMPTY(smeses) // Description: Sets output setting on this SMES. Trims it if limits are exceeded. /obj/machinery/power/smes/proc/set_output(var/new_output = 0) output_level = between(0, new_output, output_level_max) - update_icon() \ No newline at end of file + update_icon() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 60c42b037c..94d46d8581 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -1,4 +1,4 @@ -//#define SOLAR_MAX_DIST 40 //VOREStation Removal +//# define SOLAR_MAX_DIST 40 //VOREStation Removal #define SOLAR_AUTO_START_NO 0 // Will never start itself. #define SOLAR_AUTO_START_YES 1 // Will always start itself. #define SOLAR_AUTO_START_CONFIG 2 // Will start itself if config allows it (default is no). @@ -552,3 +552,7 @@ GLOBAL_LIST_EMPTY(solars_list) /obj/item/weapon/paper/solar name = "paper- 'Going green! Setup your own solar array instructions.'" info = "

Welcome

At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or phoron! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.

You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!

Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the SSsun.sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the SSsun.sun's movements and to send commands to the solar panels to change direction with the SSsun.sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.

Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.

That's all to it, be safe, be green!

" + +#undef SOLAR_AUTO_START_NO +#undef SOLAR_AUTO_START_YES +#undef SOLAR_AUTO_START_CONFIG diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index dfd733d934..e4d976a3b6 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -550,6 +550,12 @@ STOP_PROCESSING(SSobj, src) return ..() +#undef POWER_FACTOR +#undef DECAY_FACTOR +#undef CRITICAL_TEMPERATURE +#undef CHARGING_FACTOR +#undef DAMAGE_RATE_LIMIT + #undef NITROGEN_RETARDATION_FACTOR #undef THERMAL_RELEASE_MODIFIER #undef PHORON_RELEASE_MODIFIER diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index fe85a12f87..d7440f2315 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -314,3 +314,6 @@ if (EB.energy > 0) EB.energy -= min(EB.energy, max(10, round(EB.energy * 0.05))) // VOREStation Edit End + +#undef TESLA_DEFAULT_POWER +#undef TESLA_MINI_POWER diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm index 772e190282..b9693bf59d 100644 --- a/code/modules/projectiles/ammunition.dm +++ b/code/modules/projectiles/ammunition.dm @@ -89,11 +89,6 @@ if (!BB) . += "This one is spent." -//Gun loading types -#define SINGLE_CASING 1 //The gun only accepts ammo_casings. ammo_magazines should never have this as their mag_type. -#define SPEEDLOADER 2 //Transfers casings from the mag to the gun when used. -#define MAGAZINE 4 //The magazine item itself goes inside the gun - //An item that holds casings and can be used to put them inside guns /obj/item/ammo_magazine name = "magazine" diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm index 689be8359d..40e9d37f96 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm @@ -30,6 +30,10 @@ if(environment.temperature > HEATMODE_TEMP - 30) . = TRUE +#undef LAVALAND_EQUIPMENT_EFFECT_PRESSURE +#undef HEATMODE_ATMOSPHERE +#undef HEATMODE_TEMP + /proc/offsite_environment_check(turf/simulated/T) . = TRUE if(!istype(T)) @@ -343,7 +347,6 @@ var/obj/effect/temp_visual/kinetic_blast/K = new /obj/effect/temp_visual/kinetic_blast(target_turf) K.color = color - //Modkits /obj/item/borg/upgrade/modkit name = "kinetic accelerator modification kit" @@ -732,3 +735,7 @@ /obj/item/borg/upgrade/modkit/tracer/adjustable/attack_self(mob/user) bolt_color = input(user,"","Choose Color",bolt_color) as color|null + +#undef KA_ENVIRO_TYPE_COLD +#undef KA_ENVIRO_TYPE_HOT +#undef KA_ENVIRO_TYPE_OFFSITE diff --git a/code/modules/projectiles/guns/magnetic/bore.dm b/code/modules/projectiles/guns/magnetic/bore.dm index 21077bb05a..b390d48ff0 100644 --- a/code/modules/projectiles/guns/magnetic/bore.dm +++ b/code/modules/projectiles/guns/magnetic/bore.dm @@ -270,3 +270,8 @@ /obj/item/weapon/gun/magnetic/matfed/phoronbore/loaded cell = /obj/item/weapon/cell/apc capacitor = /obj/item/weapon/stock_parts/capacitor + +#undef GEN_STARTING +#undef GEN_OFF +#undef GEN_IDLE +#undef GEN_ACTIVE diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm index 11758b9c8a..4627a611ae 100644 --- a/code/modules/projectiles/guns/projectile.dm +++ b/code/modules/projectiles/guns/projectile.dm @@ -1,7 +1,3 @@ -#define HOLD_CASINGS 0 //do not do anything after firing. Manual action, like pump shotguns, or guns that want to define custom behaviour -#define EJECT_CASINGS 1 //drop spent casings on the ground after firing -#define CYCLE_CASINGS 2 //experimental: cycle casings, like a revolver. Also works for multibarrelled guns - /obj/item/weapon/gun/projectile name = "gun" desc = "A gun that fires bullets." diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index fe438ead6d..d8274ed23e 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -852,3 +852,6 @@ if(silenced) volume = 5 playsound(A, hitsound_wall, volume, 1, -1) + +#undef MOVES_HITSCAN +#undef MUZZLE_EFFECT_PIXEL_INCREMENT diff --git a/code/modules/random_map/automata/automata.dm b/code/modules/random_map/automata/automata.dm index 544b625a33..50b53577c5 100644 --- a/code/modules/random_map/automata/automata.dm +++ b/code/modules/random_map/automata/automata.dm @@ -1,4 +1,3 @@ -#define CELL_ALIVE(VAL) (VAL == cell_live_value) #define KILL_CELL(CELL, NEXT_MAP) NEXT_MAP[CELL] = cell_dead_value; #define REVIVE_CELL(CELL, NEXT_MAP) NEXT_MAP[CELL] = cell_live_value; @@ -68,4 +67,4 @@ return #undef KILL_CELL -#undef REVIVE_CELL \ No newline at end of file +#undef REVIVE_CELL diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm index dace62feee..5e57f76923 100644 --- a/code/modules/random_map/drop/droppod.dm +++ b/code/modules/random_map/drop/droppod.dm @@ -226,3 +226,9 @@ return new /datum/random_map/droppod(null, usr.x-1, usr.y-1, usr.z, supplied_drops = spawned_mobs, automated = automatic_pod) + +#undef SD_FLOOR_TILE +#undef SD_WALL_TILE +#undef SD_DOOR_TILE +#undef SD_EMPTY_TILE +#undef SD_SUPPLY_TILE diff --git a/code/modules/reagents/holder/holder.dm b/code/modules/reagents/holder/holder.dm index 28f133c840..96bd9a6e05 100644 --- a/code/modules/reagents/holder/holder.dm +++ b/code/modules/reagents/holder/holder.dm @@ -1,5 +1,3 @@ -#define PROCESS_REACTION_ITER 5 //when processing a reaction, iterate this many times - /datum/reagents var/list/datum/reagent/reagent_list = list() var/total_volume = 0 diff --git a/code/modules/reagents/machinery/dispenser/_defines.dm b/code/modules/reagents/machinery/dispenser/_defines.dm index 8d52cf5cd0..c3331cb418 100644 --- a/code/modules/reagents/machinery/dispenser/_defines.dm +++ b/code/modules/reagents/machinery/dispenser/_defines.dm @@ -4,5 +4,4 @@ // Chemistry dispenser starts with 21 // ERT dispenser starts with 28 -#define DISPENSER_MAX_CARTRIDGES 30 - +// #define DISPENSER_MAX_CARTRIDGES 30 //changed to var diff --git a/code/modules/reagents/machinery/dispenser/dispenser2.dm b/code/modules/reagents/machinery/dispenser/dispenser2.dm index bd9c85b24c..be5090e2e7 100644 --- a/code/modules/reagents/machinery/dispenser/dispenser2.dm +++ b/code/modules/reagents/machinery/dispenser/dispenser2.dm @@ -14,6 +14,7 @@ var/accept_drinking = 0 var/amount = 30 + var/max_catriges = 30 use_power = USE_POWER_IDLE idle_power_usage = 100 @@ -28,7 +29,7 @@ /obj/machinery/chemical_dispenser/examine(mob/user) . = ..() - . += "It has [cartridges.len] cartridges installed, and has space for [DISPENSER_MAX_CARTRIDGES - cartridges.len] more." + . += "It has [cartridges.len] cartridges installed, and has space for [max_catriges - cartridges.len] more." /obj/machinery/chemical_dispenser/verb/rotate_clockwise() set name = "Rotate Dispenser Clockwise" @@ -47,7 +48,7 @@ to_chat(user, "\The [C] will not fit in \the [src]!") return - if(cartridges.len >= DISPENSER_MAX_CARTRIDGES) + if(cartridges.len >= max_catriges) if(user) to_chat(user, "\The [src] does not have any slots open for \the [C] to fit into!") return @@ -151,7 +152,7 @@ var/chemicals[0] for(var/label in cartridges) var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C = cartridges[label] - chemicals.Add(list(list("title" = label, "id" = label, "amount" = C.reagents.total_volume))) // list in a list because Byond merges the first list... + chemicals.Add(list(list("name" = label, "id" = label, "volume" = C.reagents.total_volume))) // list in a list because Byond merges the first list... data["chemicals"] = chemicals return data diff --git a/code/modules/reagents/reagent_containers/patch.dm b/code/modules/reagents/reagent_containers/patch.dm index 007669286e..e7ed52ea84 100644 --- a/code/modules/reagents/reagent_containers/patch.dm +++ b/code/modules/reagents/reagent_containers/patch.dm @@ -40,7 +40,7 @@ to_chat(H, "\The [src] is placed on your [affecting].") M.drop_from_inventory(src) //icon update if(reagents.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_TOUCH) + reagents.trans_to_mob(M, reagents.total_volume, CHEM_BLOOD) //CHEM_TOUCH qdel(src) return 1 @@ -74,7 +74,7 @@ M.drop_from_inventory(src) //icon update if(reagents.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_TOUCH) + reagents.trans_to_mob(M, reagents.total_volume, CHEM_BLOOD) //CHEM_TOUCH qdel(src) return 1 diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 74434dd9cc..45dcf88de2 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -5,11 +5,14 @@ #define SYRINGE_INJECT 1 #define SYRINGE_BROKEN 2 +#define SYRINGE_CAPPED 10 + + /obj/item/weapon/reagent_containers/syringe name = "syringe" desc = "A syringe." description_fluff = "This could be used to engrave messages on suitable surfaces if you really put your mind to it! Alt-click a floor or wall to engrave with it." //This way it's not a completely hidden, arcane art to engrave. - icon = 'icons/obj/syringe.dmi' + icon = 'icons/goonstation/objects/syringe_vr.dmi' item_state = "syringe_0" icon_state = "0" center_of_mass = list("x" = 16,"y" = 14) @@ -21,14 +24,34 @@ slot_flags = SLOT_EARS sharp = TRUE unacidable = TRUE //glass - var/mode = SYRINGE_DRAW + var/mode = SYRINGE_CAPPED var/image/filling //holds a reference to the current filling overlay var/visible_name = "a syringe" var/time = 30 var/drawing = 0 + var/used = FALSE + var/dirtiness = 0 + var/list/targets + var/list/datum/disease2/disease/viruses drop_sound = 'sound/items/drop/glass.ogg' pickup_sound = 'sound/items/pickup/glass.ogg' + +/obj/item/weapon/reagent_containers/syringe/Initialize() + . = ..() + update_icon() + +/obj/item/weapon/reagent_containers/syringe/Destroy() + QDEL_LIST_NULL(viruses) + LAZYCLEARLIST(targets) + return ..() + +/obj/item/weapon/reagent_containers/syringe/process() + dirtiness = min(dirtiness + targets.len,75) + if(dirtiness >= 75) + STOP_PROCESSING(SSobj, src) + return 1 + /obj/item/weapon/reagent_containers/syringe/on_reagent_change() update_icon() @@ -42,6 +65,9 @@ /obj/item/weapon/reagent_containers/syringe/attack_self(mob/user as mob) switch(mode) + if(SYRINGE_CAPPED) + mode = SYRINGE_DRAW + to_chat(user,"You uncap the syringe.") if(SYRINGE_DRAW) mode = SYRINGE_INJECT if(SYRINGE_INJECT) @@ -229,36 +255,8 @@ to_chat(user, "The syringe is empty.") // dirty(target,affected) //VOREStation Add -- Removed by Request - return -/* VOREStation Edit - See syringes_vr.dm -/obj/item/weapon/reagent_containers/syringe/update_icon() - cut_overlays() - if(mode == SYRINGE_BROKEN) - icon_state = "broken" - return - - var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3)) - if(ismob(loc)) - var/injoverlay - switch(mode) - if (SYRINGE_DRAW) - injoverlay = "draw" - if (SYRINGE_INJECT) - injoverlay = "inject" - add_overlay(injoverlay) - icon_state = "[rounded_vol]" - item_state = "syringe_[rounded_vol]" - - if(reagents.total_volume) - filling = image('icons/obj/reagentfillings.dmi', src, "syringe10") - - filling.icon_state = "syringe[rounded_vol]" - - filling.color = reagents.get_color() - add_overlay(filling) -*/ /obj/item/weapon/reagent_containers/syringe/proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob) if(istype(target, /mob/living/carbon/human)) @@ -390,3 +388,93 @@ ..() //reagents.add_reagent("adrenaline",5) //VOREStation Edit - No thanks. reagents.add_reagent("hyperzine",10) + +/obj/item/weapon/reagent_containers/syringe/proc/dirty(var/mob/living/carbon/human/target, var/obj/item/organ/external/eo) + if(!ishuman(loc)) + return //Avoid borg syringe problems. + LAZYINITLIST(targets) + + //We can't keep a mob reference, that's a bad idea, so instead name+ref should suffice. + var/name_to_use = ismob(target) ? target.real_name : target.name + var/hash = md5(name_to_use + "\ref[target]") + + //Just once! + targets |= hash + + //Grab any viruses they have + if(iscarbon(target) && LAZYLEN(target.virus2.len)) + LAZYINITLIST(viruses) + var/datum/disease2/disease/virus = pick(target.virus2.len) + viruses[hash] = virus.getcopy() + + //Dirtiness should be very low if you're the first injectee. If you're spam-injecting 4 people in a row around you though, + //This gives the last one a 30% chance of infection. + var/infect_chance = dirtiness //Start with dirtiness + if(infect_chance <= 10 && (hash in targets)) //Extra fast uses on target is free + infect_chance = 0 + infect_chance += (targets.len-1)*10 //Extra 10% per extra target + if(prob(infect_chance)) + log_and_message_admins("[loc] infected [target]'s [eo.name] with \the [src].") + infect_limb(eo) + + //75% chance to spread a virus if we have one + if(LAZYLEN(viruses) && prob(75)) + var/old_hash = pick(viruses) + if(hash != old_hash) //Same virus you already had? + var/datum/disease2/disease/virus = viruses[old_hash] + infect_virus2(target,virus.getcopy()) + + if(!used) + START_PROCESSING(SSobj, src) + +/obj/item/weapon/reagent_containers/syringe/proc/infect_limb(var/obj/item/organ/external/eo) + src = null + var/datum/weakref/limb_ref = WEAKREF(eo) + spawn(rand(5 MINUTES,10 MINUTES)) + var/obj/item/organ/external/found_limb = limb_ref.resolve() + if(istype(found_limb)) + eo.germ_level += INFECTION_LEVEL_ONE+30 + +//Allow for capped syringe mode + +//Allow for capped syringes +/obj/item/weapon/reagent_containers/syringe/update_icon() + cut_overlays() + + var/matrix/tf = matrix() + if(isstorage(loc)) + tf.Turn(-90) //Vertical for storing compact-ly + tf.Translate(-3,0) //Could do this with pixel_x but let's just update the appearance once. + transform = tf + + if(mode == SYRINGE_BROKEN) + icon_state = "broken" + return + + if(mode == SYRINGE_CAPPED) + icon_state = "capped" + return + + var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3)) + if(reagents.total_volume) + filling = image(icon, src, "filler[rounded_vol]") + filling.color = reagents.get_color() + add_overlay(filling) + + if(ismob(loc)) + var/injoverlay + switch(mode) + if (SYRINGE_DRAW) + injoverlay = "draw" + if (SYRINGE_INJECT) + injoverlay = "inject" + add_overlay(injoverlay) + + icon_state = "[rounded_vol]" + item_state = "syringe_[rounded_vol]" + +#undef SYRINGE_DRAW +#undef SYRINGE_INJECT +#undef SYRINGE_BROKEN + +#undef SYRINGE_CAPPED diff --git a/code/modules/reagents/reagent_containers/syringes_vr.dm b/code/modules/reagents/reagent_containers/syringes_vr.dm deleted file mode 100644 index 1e69c63322..0000000000 --- a/code/modules/reagents/reagent_containers/syringes_vr.dm +++ /dev/null @@ -1,122 +0,0 @@ -#define SYRINGE_CAPPED 10 - -/obj/item/weapon/reagent_containers/syringe - icon = 'icons/goonstation/objects/syringe_vr.dmi' - mode = SYRINGE_CAPPED //Override - var/used = FALSE - var/dirtiness = 0 - var/list/targets - var/list/datum/disease2/disease/viruses - -/obj/item/weapon/reagent_containers/syringe/Initialize() - . = ..() - update_icon() - -/obj/item/weapon/reagent_containers/syringe/Destroy() - QDEL_LIST_NULL(viruses) - LAZYCLEARLIST(targets) - return ..() - -/obj/item/weapon/reagent_containers/syringe/process() - dirtiness = min(dirtiness + targets.len,75) - if(dirtiness >= 75) - STOP_PROCESSING(SSobj, src) - return 1 - -/obj/item/weapon/reagent_containers/syringe/proc/dirty(var/mob/living/carbon/human/target, var/obj/item/organ/external/eo) - if(!ishuman(loc)) - return //Avoid borg syringe problems. - LAZYINITLIST(targets) - - //We can't keep a mob reference, that's a bad idea, so instead name+ref should suffice. - var/name_to_use = ismob(target) ? target.real_name : target.name - var/hash = md5(name_to_use + "\ref[target]") - - //Just once! - targets |= hash - - //Grab any viruses they have - if(iscarbon(target) && LAZYLEN(target.virus2.len)) - LAZYINITLIST(viruses) - var/datum/disease2/disease/virus = pick(target.virus2.len) - viruses[hash] = virus.getcopy() - - //Dirtiness should be very low if you're the first injectee. If you're spam-injecting 4 people in a row around you though, - //This gives the last one a 30% chance of infection. - var/infect_chance = dirtiness //Start with dirtiness - if(infect_chance <= 10 && (hash in targets)) //Extra fast uses on target is free - infect_chance = 0 - infect_chance += (targets.len-1)*10 //Extra 10% per extra target - if(prob(infect_chance)) - log_and_message_admins("[loc] infected [target]'s [eo.name] with \the [src].") - infect_limb(eo) - - //75% chance to spread a virus if we have one - if(LAZYLEN(viruses) && prob(75)) - var/old_hash = pick(viruses) - if(hash != old_hash) //Same virus you already had? - var/datum/disease2/disease/virus = viruses[old_hash] - infect_virus2(target,virus.getcopy()) - - if(!used) - START_PROCESSING(SSobj, src) - -/obj/item/weapon/reagent_containers/syringe/proc/infect_limb(var/obj/item/organ/external/eo) - src = null - var/datum/weakref/limb_ref = WEAKREF(eo) - spawn(rand(5 MINUTES,10 MINUTES)) - var/obj/item/organ/external/found_limb = limb_ref.resolve() - if(istype(found_limb)) - eo.germ_level += INFECTION_LEVEL_ONE+30 - -//Allow for capped syringe mode -/obj/item/weapon/reagent_containers/syringe/attack_self(mob/user as mob) - switch(mode) - if(SYRINGE_CAPPED) - mode = SYRINGE_DRAW - to_chat(user,"You uncap the syringe.") - if(SYRINGE_DRAW) - mode = SYRINGE_INJECT - if(SYRINGE_INJECT) - mode = SYRINGE_DRAW - if(SYRINGE_BROKEN) - return - update_icon() - -//Allow for capped syringes -/obj/item/weapon/reagent_containers/syringe/update_icon() - cut_overlays() - - var/matrix/tf = matrix() - if(isstorage(loc)) - tf.Turn(-90) //Vertical for storing compact-ly - tf.Translate(-3,0) //Could do this with pixel_x but let's just update the appearance once. - transform = tf - - if(mode == SYRINGE_BROKEN) - icon_state = "broken" - return - - if(mode == SYRINGE_CAPPED) - icon_state = "capped" - return - - var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3)) - if(reagents.total_volume) - filling = image(icon, src, "filler[rounded_vol]") - filling.color = reagents.get_color() - add_overlay(filling) - - if(ismob(loc)) - var/injoverlay - switch(mode) - if (SYRINGE_DRAW) - injoverlay = "draw" - if (SYRINGE_INJECT) - injoverlay = "inject" - add_overlay(injoverlay) - - icon_state = "[rounded_vol]" - item_state = "syringe_[rounded_vol]" - -#undef SYRINGE_CAPPED diff --git a/code/modules/reagents/reagents/core.dm b/code/modules/reagents/reagents/core.dm index 0d803b63d3..c0d0d2dd8e 100644 --- a/code/modules/reagents/reagents/core.dm +++ b/code/modules/reagents/reagents/core.dm @@ -156,6 +156,7 @@ ..() #define WATER_LATENT_HEAT 19000 // How much heat is removed when applied to a hot turf, in J/unit (19000 makes 120 u of water roughly equivalent to 4L) + /datum/reagent/water name = "Water" id = "water" @@ -250,6 +251,8 @@ ..() //VOREStation Edit End, +#undef WATER_LATENT_HEAT + /datum/reagent/fuel name = "Welding fuel" id = "fuel" diff --git a/code/modules/reagents/reagents/dispenser.dm b/code/modules/reagents/reagents/dispenser.dm index 4942567dc0..34440009ff 100644 --- a/code/modules/reagents/reagents/dispenser.dm +++ b/code/modules/reagents/reagents/dispenser.dm @@ -113,7 +113,7 @@ if(issmall(M)) removed *= 2 - var/strength_mod = 3 * M.species.chem_strength_alcohol //Alcohol is 3x stronger when injected into the veins. + var/strength_mod = 3 //Alcohol is 3x stronger when injected into the veins. if(!strength_mod) return @@ -121,19 +121,19 @@ M.add_chemical_effect(CE_ALCOHOL, 1) var/effective_dose = dose * strength_mod * (1 + volume/60) //drinking a LOT will make you go down faster - if(effective_dose >= strength) // Early warning + if(effective_dose >= (strength * M.species.chem_strength_alcohol)) // Early warning M.make_dizzy(18) // It is decreased at the speed of 3 per tick - if(effective_dose >= strength * 2) // Slurring + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 2) // Slurring M.slurring = max(M.slurring, 90) - if(effective_dose >= strength * 3) // Confusion - walking in random directions + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 3) // Confusion - walking in random directions M.Confuse(60) - if(effective_dose >= strength * 4) // Blurry vision + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 4) // Blurry vision M.eye_blurry = max(M.eye_blurry, 30) - if(effective_dose >= strength * 5) // Drowsyness - periodically falling asleep + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 5) // Drowsyness - periodically falling asleep M.drowsyness = max(M.drowsyness, 60) - if(effective_dose >= strength * 6) // Toxic dose + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 6) // Toxic dose M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity*3) - if(effective_dose >= strength * 7) // Pass out + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 7) // Pass out M.Paralyse(60) M.Sleeping(90) @@ -160,26 +160,26 @@ if(M.isSynthetic() && M.nutrition < 500 && M.species.robo_ethanol_proc) M.adjust_nutrition(round(max(0,ep_base_power - strength) * removed)/ep_final_mod) //the stronger it is, the more juice you gain - var/effective_dose = dose * M.species.chem_strength_alcohol + var/effective_dose = dose if(!effective_dose) return if(M.species.robo_ethanol_drunk || !(M.isSynthetic())) M.add_chemical_effect(CE_ALCOHOL, 1) - if(effective_dose >= strength) // Early warning + if(effective_dose >= (strength * M.species.chem_strength_alcohol)) // Early warning M.make_dizzy(6) // It is decreased at the speed of 3 per tick - if(effective_dose >= strength * 2) // Slurring + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 2) // Slurring M.slurring = max(M.slurring, 30) - if(effective_dose >= strength * 3) // Confusion - walking in random directions + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 3) // Confusion - walking in random directions M.Confuse(20) - if(effective_dose >= strength * 4) // Blurry vision + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 4) // Blurry vision M.eye_blurry = max(M.eye_blurry, 10) - if(effective_dose >= strength * 5) // Drowsyness - periodically falling asleep + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 5) // Drowsyness - periodically falling asleep M.drowsyness = max(M.drowsyness, 20) - if(effective_dose >= strength * 6) // Toxic dose + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 6) // Toxic dose M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity) - if(effective_dose >= strength * 7) // Pass out + if(effective_dose >= (strength * M.species.chem_strength_alcohol) * 7) // Pass out M.Paralyse(20) M.Sleeping(30) diff --git a/code/modules/reagents/reagents/vore_vr.dm b/code/modules/reagents/reagents/vore_vr.dm index 42e3906562..4b56d19fc9 100644 --- a/code/modules/reagents/reagents/vore_vr.dm +++ b/code/modules/reagents/reagents/vore_vr.dm @@ -186,3 +186,59 @@ H.change_gender_identity(PLURAL) H.visible_message("[H] suddenly twitches as some of their features seem to contort and reshape, adjusting... In the end, it seems they are now of mixed gender.", "Your body suddenly contorts, feeling very different in various ways... By the time the rushing feeling is over it seems you just became of mixed gender.") + + +////////////////////////// Misc Drugs ////////////////////////// + +/datum/reagent/drugs/rainbow_toxin /// Replaces Space Drugs. + name = "Rainbow Toxin" + id = "rainbowtoxin" + description = "Known for providing a euphoric high, this psychoactive drug is often injected into unknowing prey by serpents and other fanged beasts. Highly valuable and frequently sought after by hypno-enthusiasts and party-goers." + taste_description = "mixed euphoria" + taste_mult = 0.8 //You ARE going to taste this! + scannable = 1 //Sure! If you manage to milk a snake for some of this, go ahead and scan it and mass produce it. Your local club will love you! + +/datum/reagent/drugs/rainbow_toxin/affect_blood(mob/living/carbon/M, var/alien, var/removed) + ..() + var/drug_strength = 20 + M.druggy = max(M.druggy, drug_strength) + +/datum/reagent/drugs/bliss/overdose(var/mob/living/M as mob) + if(prob_proc == TRUE && prob(20)) + M.hallucination = max(M.hallucination, 5) + prob_proc = FALSE + M.adjustBrainLoss(0.25*REM) //Too much isn't good for your long term health... + M.adjustToxLoss(0.01*REM) //Enough that it'll make your HUD dummy update, but not enough that you'll vomit mid scene. (Sorry emetophiliacs!) + ..() + +/datum/reagent/paralysis_toxin + name = "Tetrodotoxin" + id = "paralysistoxin" + description = "A potent toxin commonly found in a plethora of species. When exposed to the toxin, causes extreme, paralysis for a prolonged period, with only essential functions of the body being unhindered. Commonly used by covert operatives and used as a crowd control tool." + taste_description = "bitterness" + reagent_state = LIQUID + color = "#37007f" + metabolism = REM * 0.25 + overdose = REAGENTS_OVERDOSE + scannable = 0 //YOU ARE NOT SCANNING THE FUNNY PARALYSIS TOXIN. NO. BAD. STAY AWAY. + +/datum/reagent/paralysis_toxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + if(M.weakened < 50) //Let's not leave them PERMA stuck, after all. + M.AdjustWeakened(5) //Stand in for paralyze so you can still talk/emote/see + +/datum/reagent/pain_enzyme + name = "Pain Enzyme" + id = "painenzyme" + description = "An enzyme found in a variety of species. When exposed to the toxin, will cause severe, agonizing pain. The effects can last for hours depending on the dose. Only known cure is an equally strong painkiller or dialysis." + taste_description = "sourness" + reagent_state = LIQUID + color = "#04b8fa" //Light blue in honor of Perry. + metabolism = 0.1 //Lasts up to 50 seconds if you give 5 units. + mrate_static = TRUE + overdose = 100 //There is no OD. You already are taking the worst of it. + scannable = 0 //Let's not have medical mechs able to make an extremely strong 'I hit you you fall down in agony' chem. + +/datum/reagent/pain_enzyme/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) + M.add_chemical_effect(CE_PAINKILLER, -200) + if(prob(0.01)) //1 in 10000 chance per tick. Extremely rare. + to_chat(M,"Your body feels as though it's on fire!") diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index e8c31672b1..6075e3e715 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -196,6 +196,10 @@ if((. = ..())) update() +#undef OFF +#undef FORWARDS +#undef BACKWARDS + // the conveyor control switch // // diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 8eff337f57..5bc3241e00 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -1265,7 +1265,7 @@ /obj/structure/disposalpipe/tagger/New() . = ..() dpdir = dir | turn(dir, 180) - if(sort_tag) GLOB.tagger_locations |= sort_tag + if(sort_tag) GLOB.tagger_locations |= list("[sort_tag]" = get_z(src)) updatename() updatedesc() update() @@ -1331,7 +1331,7 @@ /obj/structure/disposalpipe/sortjunction/New() . = ..() - if(sortType) GLOB.tagger_locations |= sortType + if(sortType) GLOB.tagger_locations |= list("[sortType]" = get_z(src)) updatedir() updatename() @@ -1646,3 +1646,7 @@ dirs = alldirs.Copy() src.streak(dirs) + +#undef SEND_PRESSURE +#undef PRESSURE_TANK_VOLUME +#undef PUMP_MAX_FLOW_RATE diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index b8b091444e..a341e07336 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -348,11 +348,23 @@ ui = new(user, src, "DestinationTagger", name) ui.open() +/obj/item/device/destTagger/tgui_static_data(mob/user) + var/list/data = ..() + var/list/taggers = list() + var/list/tagger_levels = list() + for(var/tag in GLOB.tagger_locations) + var/z_level = GLOB.tagger_locations[tag] + taggers += list(list("tag" = tag, "level" = z_level)) + tagger_levels += list(list("z" = z_level, "location" = using_map.get_zlevel_name(z_level))) + data["taggerLevels"] = tagger_levels + data["taggerLocs"] = taggers + + return data + /obj/item/device/destTagger/tgui_data(mob/user, datum/tgui/ui) var/list/data = ..() data["currTag"] = currTag - data["taggerLocs"] = GLOB.tagger_locations return data diff --git a/code/modules/resleeving/designer.dm b/code/modules/resleeving/designer.dm index 294992f9e4..20a9c682e3 100644 --- a/code/modules/resleeving/designer.dm +++ b/code/modules/resleeving/designer.dm @@ -454,3 +454,9 @@ new /obj/item/weapon/disk/body_record(src) #undef MOB_HEX_COLOR + +#undef MENU_MAIN +#undef MENU_BODYRECORDS +#undef MENU_STOCKRECORDS +#undef MENU_SPECIFICRECORD +#undef MENU_OOCNOTES diff --git a/code/modules/scripting/Interpreter/Interpreter.dm b/code/modules/scripting/Interpreter/Interpreter.dm index 66ea0637cf..5287c55dff 100644 --- a/code/modules/scripting/Interpreter/Interpreter.dm +++ b/code/modules/scripting/Interpreter/Interpreter.dm @@ -307,3 +307,6 @@ S - The scope the variable resides in. If it is null, a scope with the varia //TODO: check for invalid name S.variables["[name]"] = value +#undef RETURNING +#undef BREAKING +#undef CONTINUING diff --git a/code/modules/scripting/Parser/Expressions.dm b/code/modules/scripting/Parser/Expressions.dm index 1e25c9be69..480b73f5a9 100644 --- a/code/modules/scripting/Parser/Expressions.dm +++ b/code/modules/scripting/Parser/Expressions.dm @@ -308,3 +308,8 @@ See Also: */ /n_Parser/nS_Parser/proc/ParseParamExpression() return ParseExpression(list(",", ")")) + +#undef OPERATOR +#undef VALUE +#undef SHIFT +#undef REDUCE diff --git a/code/modules/scripting/Scanner/Scanner.dm b/code/modules/scripting/Scanner/Scanner.dm index be391bddde..915540257b 100644 --- a/code/modules/scripting/Scanner/Scanner.dm +++ b/code/modules/scripting/Scanner/Scanner.dm @@ -271,3 +271,4 @@ Reads a comment and outputs the type of comment if(comm == 2) errors+=new/scriptError/UnterminatedComment() +#undef COL diff --git a/code/modules/shuttles/escape_pods.dm b/code/modules/shuttles/escape_pods.dm index 7490887c20..aa966b582a 100644 --- a/code/modules/shuttles/escape_pods.dm +++ b/code/modules/shuttles/escape_pods.dm @@ -55,9 +55,9 @@ . = list( "docking_status" = docking_program.get_docking_status(), "override_enabled" = docking_program.override_enabled, - "exterior_status" = docking_program.memory["door_status"], - "can_force" = pod.can_force() || (emergency_shuttle.departed && pod.can_launch()), //allow players to manually launch ahead of time if the shuttle leaves - "armed" = pod.arming_controller.armed, + "exterior_status" = docking_program.memory["door_status"], // TGUI DATA fails silently when there's no linked pod, leading to UI crashes + "can_force" = pod?.can_force() || (emergency_shuttle.departed && pod?.can_launch()), //allow players to manually launch ahead of time if the shuttle leaves + "armed" = pod?.arming_controller.armed, "internalTemplateName" = "EscapePodConsole", ) diff --git a/code/modules/stockmarket/events.dm b/code/modules/stockmarket/events.dm index 8b6d2c8e70..0b4b595740 100644 --- a/code/modules/stockmarket/events.dm +++ b/code/modules/stockmarket/events.dm @@ -230,4 +230,6 @@ else article += "[tname] has a prior history of similar misdeeds and we're confident the charges will stand. For investors, now would be an ideal time to %sell%" A.article = A.detokenize(article, company.industry.tokens) - return A \ No newline at end of file + return A + +#undef TIME_MULTIPLIER diff --git a/code/modules/tgui/modules/admin/player_notes.dm b/code/modules/tgui/modules/admin/player_notes.dm index 6f20bdc11d..38555479e9 100644 --- a/code/modules/tgui/modules/admin/player_notes.dm +++ b/code/modules/tgui/modules/admin/player_notes.dm @@ -329,3 +329,5 @@ if("filter") PlayerNotesFilterLegacy() return + +#undef PLAYER_NOTES_ENTRIES_PER_PAGE diff --git a/code/modules/tgui/modules/appearance_changer.dm b/code/modules/tgui/modules/appearance_changer.dm index e55296c902..9eeb4de664 100644 --- a/code/modules/tgui/modules/appearance_changer.dm +++ b/code/modules/tgui/modules/appearance_changer.dm @@ -1,4 +1,3 @@ - /datum/tgui_module/appearance_changer name = "Appearance Editor" tgui_id = "AppearanceChanger" @@ -63,6 +62,9 @@ cam_background.del_on_map_removal = FALSE update_active_camera_screen() + if(customize_usr) + if(ishuman(usr)) + H = usr owner = H if(owner) owner.AddComponent(/datum/component/recursive_move) @@ -184,8 +186,8 @@ instance = null if(!istype(instance) && !params["clear"]) return FALSE - owner.ear_style = instance - owner.update_hair() + target.ear_style = instance + target.update_hair() update_dna() changed_hook(APPEARANCECHANGER_CHANGED_HAIRSTYLE) return TRUE @@ -197,7 +199,7 @@ target.g_ears = hex2num(copytext(new_hair, 4, 6)) target.b_ears = hex2num(copytext(new_hair, 6, 8)) update_dna() - owner.update_hair() + target.update_hair() changed_hook(APPEARANCECHANGER_CHANGED_HAIRCOLOR) return 1 if("ears2_color") @@ -208,7 +210,7 @@ target.g_ears2 = hex2num(copytext(new_hair, 4, 6)) target.b_ears2 = hex2num(copytext(new_hair, 6, 8)) update_dna() - owner.update_hair() + target.update_hair() changed_hook(APPEARANCECHANGER_CHANGED_HAIRCOLOR) return 1 if("tail") @@ -218,8 +220,8 @@ instance = null if(!istype(instance) && !params["clear"]) return FALSE - owner.tail_style = instance - owner.update_tail_showing() + target.tail_style = instance + target.update_tail_showing() update_dna() changed_hook(APPEARANCECHANGER_CHANGED_HAIRSTYLE) return TRUE @@ -231,7 +233,7 @@ target.g_tail = hex2num(copytext(new_hair, 4, 6)) target.b_tail = hex2num(copytext(new_hair, 6, 8)) update_dna() - owner.update_tail_showing() + target.update_tail_showing() changed_hook(APPEARANCECHANGER_CHANGED_HAIRCOLOR) return 1 if("tail2_color") @@ -242,7 +244,7 @@ target.g_tail2 = hex2num(copytext(new_hair, 4, 6)) target.b_tail2 = hex2num(copytext(new_hair, 6, 8)) update_dna() - owner.update_tail_showing() + target.update_tail_showing() changed_hook(APPEARANCECHANGER_CHANGED_HAIRCOLOR) return 1 if("wing") @@ -252,8 +254,8 @@ instance = null if(!istype(instance) && !params["clear"]) return FALSE - owner.wing_style = instance - owner.update_wing_showing() + target.wing_style = instance + target.update_wing_showing() update_dna() changed_hook(APPEARANCECHANGER_CHANGED_HAIRSTYLE) return TRUE @@ -265,7 +267,7 @@ target.g_wing = hex2num(copytext(new_hair, 4, 6)) target.b_wing = hex2num(copytext(new_hair, 6, 8)) update_dna() - owner.update_wing_showing() + target.update_wing_showing() changed_hook(APPEARANCECHANGER_CHANGED_HAIRCOLOR) return 1 if("wing2_color") @@ -276,7 +278,7 @@ target.g_wing2 = hex2num(copytext(new_hair, 4, 6)) target.b_wing2 = hex2num(copytext(new_hair, 6, 8)) update_dna() - owner.update_wing_showing() + target.update_wing_showing() changed_hook(APPEARANCECHANGER_CHANGED_HAIRCOLOR) return 1 if("marking") diff --git a/code/modules/tgui/modules/communications.dm b/code/modules/tgui/modules/communications.dm index 6a726aae9c..ab1a5755e4 100644 --- a/code/modules/tgui/modules/communications.dm +++ b/code/modules/tgui/modules/communications.dm @@ -485,3 +485,14 @@ if(M.stat == 0) return 1 return 0 + +#undef COMM_SCREEN_MAIN +#undef COMM_SCREEN_STAT +#undef COMM_SCREEN_MESSAGES + +#undef COMM_AUTHENTICATION_NONE +#undef COMM_AUTHENTICATION_MIN +#undef COMM_AUTHENTICATION_MAX + +#undef COMM_MSGLEN_MINIMUM +#undef COMM_CCMSGLEN_MINIMUM diff --git a/code/modules/tgui/modules/rcon.dm b/code/modules/tgui/modules/rcon.dm index 0a29153d76..7f1f0822a9 100644 --- a/code/modules/tgui/modules/rcon.dm +++ b/code/modules/tgui/modules/rcon.dm @@ -13,7 +13,7 @@ var/number_pages = 0 /datum/tgui_module/rcon/proc/filter_smeslist(var/page) - number_pages = known_SMESs.len / SMES_PER_PAGE + number_pages = known_SMESs.len / SMES_PER_PAGE if(number_pages != round(number_pages)) number_pages = round(number_pages) + 1 @@ -136,7 +136,9 @@ /datum/tgui_module/rcon/ntos ntos = TRUE - + /datum/tgui_module/rcon/robot /datum/tgui_module/rcon/robot/tgui_state(mob/user) - return GLOB.tgui_self_state \ No newline at end of file + return GLOB.tgui_self_state + +#undef SMES_PER_PAGE diff --git a/code/modules/tgui_panel/tgui_panel.dm b/code/modules/tgui_panel/tgui_panel.dm index efb640f25f..e9f6429f25 100644 --- a/code/modules/tgui_panel/tgui_panel.dm +++ b/code/modules/tgui_panel/tgui_panel.dm @@ -54,6 +54,7 @@ // Other setup request_telemetry() addtimer(CALLBACK(src, PROC_REF(on_initialize_timed_out)), 5 SECONDS) + window.send_message("testTelemetryCommand") /** * private diff --git a/code/modules/virus2/diseasesplicer.dm b/code/modules/virus2/diseasesplicer.dm index afc875a76e..cdb7948bdd 100644 --- a/code/modules/virus2/diseasesplicer.dm +++ b/code/modules/virus2/diseasesplicer.dm @@ -82,7 +82,7 @@ if(dish.growth >= 50) var/list/effects[0] for (var/datum/disease2/effectholder/e in dish.virus2.effects) - effects.Add(list(list("name" = (dish.analysed ? e.effect.name : "Unknown"), "stage" = (e.stage), "reference" = "\ref[e]"))) + effects.Add(list(list("name" = (dish.analysed ? e.effect.name : "Unknown"), "stage" = (e.stage), "reference" = "\ref[e]"), "badness" = e.effect.badness)) data["effects"] = effects else data["info"] = "Insufficient cell growth for gene splicing." @@ -191,4 +191,3 @@ if("disk") burning = 10 . = TRUE - diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 21602a1c27..23b0796789 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -8,6 +8,12 @@ // // Parent type of all the various "belly" varieties. // + +#define DM_FLAG_VORESPRITE_TAIL 0x2 +#define DM_FLAG_VORESPRITE_MARKING 0x4 +#define DM_FLAG_VORESPRITE_ARTICLE 0x8 + + /obj/belly name = "belly" // Name of this location desc = "It's a belly! You're in it!" // Flavor text description of inside sight/sound/smells/feels. @@ -60,6 +66,30 @@ var/belly_item_mult = 1 //Multiplier for how filling items are in borg borg bellies. Items are also weighted on item size var/belly_overall_mult = 1 //Multiplier applied ontop of any other specific multipliers + + var/vore_sprite_flags = DM_FLAG_VORESPRITE_ARTICLE + var/tmp/static/list/vore_sprite_flag_list= list( + "Normal Belly Sprite" = DM_FLAG_VORESPRITE_ARTICLE, + //"Tail adjustment" = DM_FLAG_VORESPRITE_TAIL, + //"Marking addition" = DM_FLAG_VORESPRITE_MARKING + ) + var/affects_vore_sprites = FALSE + var/count_absorbed_prey_for_sprite = TRUE + var/absorbed_multiplier = 1 + var/count_liquid_for_sprite = FALSE + var/liquid_multiplier = 1 + var/count_items_for_sprite = FALSE + var/item_multiplier = 1 + var/health_impacts_size = TRUE + var/resist_triggers_animation = TRUE + var/size_factor_for_sprite = 1 + var/belly_sprite_to_affect = "stomach" + var/datum/sprite_accessory/tail/tail_to_change_to = FALSE + var/tail_colouration = FALSE + var/tail_extra_overlay = FALSE + var/tail_extra_overlay2 = FALSE + var/undergarment_chosen = "Underwear, bottom" + // Generally just used by AI var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location var/autotransferwait = 10 // Time between trying to transfer. @@ -345,6 +375,15 @@ "belly_item_mult", "belly_overall_mult", "drainmode", + "vore_sprite_flags", + "affects_vore_sprites", + "count_absorbed_prey_for_sprite", + "resist_triggers_animation", + "size_factor_for_sprite", + "belly_sprite_to_affect", + "health_impacts_size", + "count_items_for_sprite", + "item_multiplier" ) if (save_digest_mode == 1) @@ -426,6 +465,10 @@ if(M.ai_holder) M.ai_holder.handle_eaten() + if (istype(owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/hum = owner + hum.update_fullness() + // Intended for simple mobs if(!owner.client && autotransferlocation && autotransferchance > 0) addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/belly, check_autotransfer), thing, autotransferlocation), autotransferwait) @@ -444,6 +487,10 @@ L.toggle_hud_vis() if((L.stat != DEAD) && L.ai_holder) L.ai_holder.go_wake() + if (istype(owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/hum = owner + hum.update_fullness() + /obj/belly/proc/vore_fx(mob/living/L) if(!istype(L)) @@ -1757,6 +1804,15 @@ dupe.belly_mob_mult = belly_mob_mult dupe.belly_item_mult = belly_item_mult dupe.belly_overall_mult = belly_overall_mult + dupe.vore_sprite_flags = vore_sprite_flags + dupe.affects_vore_sprites = affects_vore_sprites + dupe.count_absorbed_prey_for_sprite = count_absorbed_prey_for_sprite + dupe.resist_triggers_animation = resist_triggers_animation + dupe.size_factor_for_sprite = size_factor_for_sprite + dupe.belly_sprite_to_affect = belly_sprite_to_affect + dupe.health_impacts_size = health_impacts_size + dupe.count_items_for_sprite = count_items_for_sprite + dupe.item_multiplier = item_multiplier //// Object-holding variables //struggle_messages_outside - strings @@ -1955,3 +2011,38 @@ /obj/belly/container_resist(mob/M) return relay_resist(M) + +/obj/belly/proc/GetFullnessFromBelly() + if(!affects_vore_sprites) + return 0 + var/belly_fullness = 0 + for(var/mob/living/M in src) + if(count_absorbed_prey_for_sprite || !M.absorbed) + var/fullness_to_add = M.size_multiplier + fullness_to_add *= M.mob_size / 20 + if(M.absorbed) + fullness_to_add *= absorbed_multiplier + if(health_impacts_size) + fullness_to_add *= M.health / M.getMaxHealth() + belly_fullness += fullness_to_add + if(count_liquid_for_sprite) + belly_fullness += (reagents.total_volume / 100) * liquid_multiplier + if(count_items_for_sprite) + for(var/obj/item/I in src) + var/fullness_to_add = 0 + if(I.w_class == ITEMSIZE_TINY) + fullness_to_add = ITEMSIZE_COST_TINY + else if(I.w_class == ITEMSIZE_SMALL) + fullness_to_add = ITEMSIZE_COST_SMALL + else if(I.w_class == ITEMSIZE_NORMAL) + fullness_to_add = ITEMSIZE_COST_NORMAL + else if(I.w_class == ITEMSIZE_LARGE) + fullness_to_add = ITEMSIZE_COST_LARGE + else if(I.w_class == ITEMSIZE_HUGE) + fullness_to_add = ITEMSIZE_COST_HUGE + else + fullness_to_add = ITEMSIZE_COST_NO_CONTAINER + fullness_to_add /= 32 + belly_fullness += fullness_to_add * item_multiplier + belly_fullness *= size_factor_for_sprite + return belly_fullness diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index b372dc2ce9..9c49d8f93f 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -35,6 +35,10 @@ GLOBAL_LIST_INIT(digest_modes, list()) else SEND_SOUND(L, sound(get_sfx("fancy_death_prey"))) B.handle_digestion_death(L) + if(!L) + if (istype(B.owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/howner = B.owner + howner.update_fullness() if(!B.fancy_vore) return list("to_update" = TRUE, "soundToPlay" = sound(get_sfx("classic_death_sounds"))) return list("to_update" = TRUE, "soundToPlay" = sound(get_sfx("fancy_death_pred"))) @@ -61,6 +65,11 @@ GLOBAL_LIST_INIT(digest_modes, list()) var/offset = (1 + ((L.weight - 137) / 137)) // 130 pounds = .95 140 pounds = 1.02 var/difference = B.owner.size_multiplier / L.size_multiplier + if(B.health_impacts_size) + if (istype(B.owner, /mob/living/carbon/human)) + var/mob/living/carbon/human/howner = B.owner + howner.update_fullness() + consider_healthbar(L, old_health, B.owner) if(isrobot(B.owner)) diff --git a/code/modules/vore/eating/digest_act_vr.dm b/code/modules/vore/eating/digest_act_vr.dm index 1979fc925c..186f1ec215 100644 --- a/code/modules/vore/eating/digest_act_vr.dm +++ b/code/modules/vore/eating/digest_act_vr.dm @@ -11,7 +11,7 @@ P.id = null for(var/mob/living/voice/V in possessed_voice) // Delete voices. - V.Destroy() //Destroy the voice. + qdel(V) for(var/mob/living/M in contents)//Drop mobs from objects(shoes) before deletion M.forceMove(item_storage) for(var/obj/item/O in contents) @@ -44,7 +44,7 @@ if(P.id) P.id = null for(var/mob/living/voice/V in possessed_voice) // Delete voices. - V.Destroy() //Destroy the voice. + qdel(V) for(var/mob/living/M in contents)//Drop mobs from objects(shoes) before deletion M.forceMove(item_storage) for(var/obj/item/O in contents) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index f4bf873316..9e78aebd3d 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -34,6 +34,10 @@ 'sound/effects/mob_effects/xenochimera/regen_5.ogg' ) var/trash_catching = FALSE //Toggle for trash throw vore from chompstation + var/list/trait_injection_reagents = list() //List of all the reagents allowed to be used for injection via venom bite + var/trait_injection_selected = null //RSEdit: What trait reagent you're injecting. + var/trait_injection_amount = 5 //RSEdit: How much you're injecting with traits. + var/trait_injection_verb = "bites" //RSEdit: Which fluffy manner you're doing the injecting. // // Hook for generic creation of stuff on new creatures @@ -256,6 +260,8 @@ P.weight_message_visible = src.weight_message_visible P.weight_messages = src.weight_messages + P.vore_sprite_color = istype(src, /mob/living/carbon/human) ? src:vore_sprite_color : null + var/list/serialized = list() for(var/obj/belly/B as anything in src.vore_organs) serialized += list(B.serialize()) //Can't add a list as an object to another list in Byond. Thanks. @@ -306,6 +312,10 @@ weight_message_visible = P.weight_message_visible weight_messages = P.weight_messages + + if (istype(src, /mob/living/carbon/human)) + src:vore_sprite_color = P.vore_sprite_color + if(bellies) if(isliving(src)) var/mob/living/L = src diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 7888cdb010..d7fe76ed5a 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -69,6 +69,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/step_mechanics_pref = FALSE var/pickup_pref = TRUE + var/vore_sprite_color = list("stomach" = "#000", "taur belly" = "#000") + var/list/belly_prefs = list() var/vore_taste = "nothing in particular" var/vore_smell = "nothing in particular" @@ -193,6 +195,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE weight_message_visible = json_from_file["weight_message_visible"] weight_messages = json_from_file["weight_messages"] eating_privacy_global = json_from_file["eating_privacy_global"] + vore_sprite_color = json_from_file["vore_sprite_color"] //Quick sanitize if(isnull(digestable)) @@ -279,7 +282,8 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE else if(weight_messages.len < 10) while(weight_messages.len < 10) weight_messages.Add("") - + if(isnull(vore_sprite_color)) + vore_sprite_color = list("stomach" = "#000", "taur belly" = "#000") return TRUE /datum/vore_preferences/proc/save_vore() @@ -320,6 +324,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE "weight_message_visible" = weight_message_visible, "weight_messages" = weight_messages, "eating_privacy_global" = eating_privacy_global, + "vore_sprite_color" = vore_sprite_color, ) //List to JSON diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index bb59b7c7ad..d2286f78b5 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -227,7 +227,23 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", "belly_item_mult" = selected.belly_item_mult, "belly_overall_mult" = selected.belly_overall_mult, "drainmode" = selected.drainmode, - + "affects_voresprite" = selected.affects_vore_sprites, + "absorbed_voresprite" = selected.count_absorbed_prey_for_sprite, + "absorbed_multiplier" = selected.absorbed_multiplier, + "liquid_voresprite" = selected.count_liquid_for_sprite, + "liquid_multiplier" = selected.liquid_multiplier, + "item_voresprite" = selected.count_items_for_sprite, + "item_multiplier" = selected.item_multiplier, + "health_voresprite" = selected.health_impacts_size, + "resist_animation" = selected.resist_triggers_animation, + "voresprite_size_factor" = selected.size_factor_for_sprite, + "belly_sprite_to_affect" = selected.belly_sprite_to_affect, + "belly_sprite_option_shown" = istype(host, /mob/living/carbon/human) ? (LAZYLEN(host:vore_icon_bellies) >= 1 ? TRUE : FALSE) : FALSE, // TODO: FIX THIS (It won't be fixed) + "tail_option_shown" = istype(host, /mob/living/carbon/human), + "tail_to_change_to" = selected.tail_to_change_to, + "tail_colouration" = selected.tail_colouration, + "tail_extra_overlay" = selected.tail_extra_overlay, + "tail_extra_overlay2" = selected.tail_extra_overlay2 ) var/list/addons = list() @@ -236,6 +252,13 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", addons.Add(flag_name) selected_list["addons"] = addons + var/list/vs_flags = list() + for(var/flag_name in selected.vore_sprite_flag_list) + if(selected.vore_sprite_flags & selected.vore_sprite_flag_list[flag_name]) + vs_flags.Add(flag_name) + selected_list["vore_sprite_flags"] = vs_flags + + selected_list["egg_type"] = selected.egg_type selected_list["contaminates"] = selected.contaminates selected_list["contaminate_flavor"] = null @@ -609,6 +632,20 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", host.weight_message_visible = !host.weight_message_visible unsaved_changes = TRUE return TRUE + if("set_vs_color") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/belly_choice = tgui_input_list(usr, "Which vore sprite are you going to edit the color of?", "Vore Sprite Color", hhost.vore_icon_bellies) + var/newcolor = input(usr, "Choose a color.", "", hhost.vore_sprite_color[belly_choice]) as color|null + if(newcolor) + hhost.vore_sprite_color[belly_choice] = newcolor + var/multiply = tgui_input_list(usr, "Set the color to be applied multiplicatively or additively? Currently in [hhost.vore_sprite_multiply[belly_choice] ? "Multiply" : "Add"]", "Vore Sprite Color", list("Multiply", "Add")) + if(multiply == "Multiply") + hhost.vore_sprite_multiply[belly_choice] = TRUE + else if(multiply == "Add") + hhost.vore_sprite_multiply[belly_choice] = FALSE + hhost.update_icons_body() + return TRUE /datum/vore_look/proc/pick_from_inside(mob/user, params) var/atom/movable/target = locate(params["pick"]) @@ -1680,6 +1717,98 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", qdel(host.vore_selected) host.vore_selected = host.vore_organs[1] . = TRUE - + if("b_belly_sprite_to_affect") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/belly_choice = tgui_input_list(usr, "Which belly sprite do you want your [lowertext(hhost.vore_selected.name)] to affect?","Select Region", hhost.vore_icon_bellies) + if(!belly_choice) //They cancelled, no changes + return FALSE + else + hhost.vore_selected.belly_sprite_to_affect = belly_choice + hhost.update_fullness() + . = TRUE + if("b_affects_vore_sprites") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + hhost.vore_selected.affects_vore_sprites = !hhost.vore_selected.affects_vore_sprites + hhost.update_fullness() + . = TRUE + if("b_count_absorbed_prey_for_sprites") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + hhost.vore_selected.count_absorbed_prey_for_sprite = !hhost.vore_selected.count_absorbed_prey_for_sprite + hhost.update_fullness() + . = TRUE + if("b_absorbed_multiplier") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/absorbed_multiplier_input = input(user, "Set the impact absorbed prey's size have on your vore sprite. 1 means no scaling, 0.5 means absorbed prey count half as much, 2 means absorbed prey count double. (Range from 0.1 - 3)", "Absorbed Multiplier") as num|null + if(!isnull(absorbed_multiplier_input)) + hhost.vore_selected.absorbed_multiplier = CLAMP(absorbed_multiplier_input, 0.1, 3) + hhost.update_fullness() + . = TRUE + if("b_count_items_for_sprites") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + hhost.vore_selected.count_items_for_sprite = !hhost.vore_selected.count_items_for_sprite + hhost.update_fullness() + . = TRUE + if("b_item_multiplier") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/item_multiplier_input = input(user, "Set the impact items will have on your vore sprite. 1 means a belly with 8 normal-sized items will count as 1 normal sized prey-thing's worth, 0.5 means items count half as much, 2 means items count double. (Range from 0.1 - 10)", "Item Multiplier") as num|null + if(!isnull(item_multiplier_input)) + hhost.vore_selected.item_multiplier = CLAMP(item_multiplier_input, 0.1, 10) + hhost.update_fullness() + . = TRUE + if("b_health_impacts_size") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + hhost.vore_selected.health_impacts_size = !hhost.vore_selected.health_impacts_size + hhost.update_fullness() + . = TRUE + if("b_resist_animation") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + hhost.vore_selected.resist_triggers_animation = !hhost.vore_selected.resist_triggers_animation + . = TRUE + if("b_size_factor_sprites") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/size_factor_input = input(user, "Set the impact all belly content's collective size has on your vore sprite. 1 means no scaling, 0.5 means content counts half as much, 2 means contents count double. (Range from 0.1 - 3)", "Size Factor") as num|null + if(!isnull(size_factor_input)) + hhost.vore_selected.size_factor_for_sprite = CLAMP(size_factor_input, 0.1, 3) + hhost.update_fullness() + . = TRUE + if("b_tail_to_change_to") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/tail_choice = tgui_input_list(usr, "Which tail sprite do you want to use when your [lowertext(host.vore_selected.name)] is filled?","Select Sprite", global.tail_styles_list) + if(!tail_choice) //They cancelled, no changes + return FALSE + else + hhost.vore_selected.tail_to_change_to = tail_choice + . = TRUE + if("b_tail_color") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/newcolor = input(usr, "Choose tail color.", "", hhost.vore_selected.tail_colouration) as color|null + if(newcolor) + hhost.vore_selected.tail_colouration = newcolor + . = TRUE + if("b_tail_color2") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/newcolor = input(usr, "Choose tail secondary color.", "", hhost.vore_selected.tail_extra_overlay) as color|null + if(newcolor) + hhost.vore_selected.tail_extra_overlay = newcolor + . = TRUE + if("b_tail_color3") + if (istype(host, /mob/living/carbon/human)) + var/mob/living/carbon/human/hhost = host + var/newcolor = input(usr, "Choose tail tertiary color.", "", hhost.vore_selected.tail_extra_overlay2) as color|null + if(newcolor) + hhost.vore_selected.tail_extra_overlay2 = newcolor + . = TRUE if(.) unsaved_changes = TRUE diff --git a/code/modules/vore/persist/persist_vr.dm b/code/modules/vore/persist/persist_vr.dm index 69113596fe..67bb1103c0 100644 --- a/code/modules/vore/persist/persist_vr.dm +++ b/code/modules/vore/persist/persist_vr.dm @@ -218,6 +218,9 @@ var/obj/item/device/nif/nif = H.nif + if(nif && H.ckey != nif.owner_key) + return + //If they have one, and if it's not installing without an owner, because //Someone who joins and immediately leaves again (wrong job choice, maybe) //should keep it even though it was probably doing the quick-calibrate, and their diff --git a/code/modules/vore/resizing/crackers.dm b/code/modules/vore/resizing/crackers.dm new file mode 100644 index 0000000000..b88a87cb2a --- /dev/null +++ b/code/modules/vore/resizing/crackers.dm @@ -0,0 +1,177 @@ +//A bluespace cracker item that can be pulled between two characters. +//The winner of the pull has an effect applied to them. +//Crackers do already exist, but these ones are a more memey scene item. + +/obj/item/weapon/cracker + name = "bluespace cracker" //I have no idea why this was called shrink ray when this increased and decreased size. + desc = "A celebratory little game with a bluespace twist! Pull it between two people until it snaps, and the person who recieves the larger end gets a prize!" + icon = 'icons/obj/crackers.dmi' + icon_state = "blue" + item_icons = list( + slot_l_hand_str = 'icons/mob/items/lefthand_cracker.dmi', + slot_r_hand_str = 'icons/mob/items/righthand_cracker.dmi', + ) + item_state = "blue" + var/rigged = 0 //So that they can be rigged by varedits to go one way or the other. positive values mean holder always wins, negative values mean target always wins. + var/list/prizes = list("shrinking","growing","drugged","invisibility","knocked over","teleport","wealth") + var/list/jokes = list( + "When is a boat just like snow? When it’s adrift.", + "What happens to naughty elves? Santa gives them the sack.", + "What do you call an old snowman? Water.", + "Why has Santa been banned from sooty chimneys? Carbon footprints.", + "What goes down but doesn't come up? A yo.", + "What's green and fuzzy, has four legs and would kill you if it fell from a tree? A pool table.", + "Why did the blind man fall into the well? Because he couldn't see that well.", + "What did the pirate get on his report card? Seven Cs", + "What do you call a fish with no eyes? Fsh", + "How do you make an egg roll? You push it.", + "What do you call a deer with no eyes? NO EYED DEER!", + "What's red, and smells like blue paint? Red paint.", + "Where do cows go to dance? A meat ball.", + "What do you call a person who steals all your toenail clippings? A cliptoemaniac.", + "What’s brown and sticky? A stick.", + "What's the best way to kill a circus? Go for the juggler.", + "What do you call a cow with no legs? Ground Beef.", + "Why'd the scarecrow win the Nobel prize? He was outstanding in his field.") + +/obj/item/weapon/cracker/attack(atom/A, mob/living/user, adjacent, params) + var/mob/living/carbon/human/target = A + if(!istype(target)) + return + if(target.stat) + return + if(target == user) + to_chat(user, "You can't pull \the [src] by yourself, that would just be sad!") + return + var/check_pull = tgui_alert(target, "\The [user] is offering to pull \the [src] with you, do you want to pull it?", "Pull Cracker", list("Yes", "No")) + if(check_pull == "No") + to_chat(user, "\The [target] chose not to pull \the [src]!") + return + if(!adjacent) + to_chat(user, "\The [target] is not standing close enough to pull \the [src]!") + return + var/prize = pick(prizes) + var/joke = pick(jokes) + var/mob/living/carbon/human/winner + var/mob/living/carbon/human/loser + if(!rigged) + if(prob(50)) + winner = user + loser = target + else + winner = target + loser = user + else + if(rigged > 0) + winner = user + loser = target + else + winner = target + loser = user + + var/spawnloc = get_turf(winner) + + winner.visible_message("\The [winner] wins the cracker prize!","You win the cracker prize!") + if(prize == "shrinking") + winner.resize(0.25) + winner.visible_message("\The [winner] shrinks suddenly!") + if(prize == "growing") + winner.resize(2) + winner.visible_message("\The [winner] grows in height suddenly.") + if(prize == "drugged") + winner.druggy = max(winner.druggy, 50) + if(prize == "invisibility") + if(!winner.cloaked) + winner.visible_message("\The [winner] vanishes from sight.") + winner.cloak() + spawn(600) + if(winner.cloaked) + winner.uncloak() + winner.visible_message("\The [winner] appears as if from thin air.") + if(prize == "knocked over") + winner.visible_message("\The [winner] is suddenly knocked to the ground.") + winner.weakened = max(winner.weakened,50) + if(prize == "teleport") + if(loser.can_be_drop_pred && loser.vore_selected) + if(winner.devourable && winner.can_be_drop_prey) + winner.visible_message("\The [winner] is teleported to somewhere nearby...") + var/datum/effect/effect/system/spark_spread/spk + spk = new(winner) + + var/T = get_turf(winner) + spk.set_up(5, 0, winner) + spk.attach(winner) + playsound(T, "sparks", 50, 1) + anim(T,winner,'icons/mob/mob.dmi',,"phaseout",,winner.dir) + winner.forceMove(loser.vore_selected) + if(prize == "wealth") + new /obj/random/cash/huge(spawnloc) + new /obj/random/cash/huge(spawnloc) + winner.visible_message("\The [winner] has a whole load of cash fall at their feet!") + + playsound(user, 'sound/effects/snap.ogg', 50, 1) + user.drop_item(src) + new /obj/random/toy(spawnloc) + new /obj/item/clothing/head/paper_crown(spawnloc) + var/obj/item/weapon/paper/cracker_joke/J = new(spawnloc) + J.info = joke + qdel(src) + +/obj/item/weapon/cracker/Initialize() + var/list/styles = list("blue","green","yellow","red","heart","hazard") + var/style = pick(styles) + icon_state = style + item_state = style + ..() + +/obj/item/weapon/cracker/shrinking + name = "shrinking bluespace cracker" + prizes = list("shrinking") + +/obj/item/weapon/cracker/growing + name = "growing bluespace cracker" + prizes = list("growing") + +/obj/item/weapon/cracker/invisibility + name = "cloaking bluespace cracker" + prizes = list("invisibility") + +/obj/item/weapon/cracker/drugged + name = "psychedelic bluespace cracker" + prizes = list("drugged") + +/obj/item/weapon/cracker/knockover + name = "forceful bluespace cracker" + prizes = list("knocked over") + +/obj/item/weapon/cracker/vore + name = "teleporting bluespace cracker" + prizes = list("teleport") + +/obj/item/weapon/cracker/money + name = "fortuitous bluespace cracker" + prizes = list("wealth") + +/obj/item/clothing/head/paper_crown + name = "paper crown" + icon_state = "paper_crown_blue" + item_state = "paper_crown_blue" + item_icons = list(slot_head_str = 'icons/inventory/head/mob.dmi') + desc = "A paper crown so thin that you can see through it." + flags_inv = 0 + body_parts_covered = 0 + armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) + +/obj/item/clothing/head/paper_crown/Initialize() + var/list/styles = list("paper_crown_blue","paper_crown_green","paper_crown_yellow","paper_crown_red","paper_crown_pink") + var/style = pick(styles) + icon_state = style + item_state = style + ..() + +/obj/item/weapon/paper/cracker_joke + name = "joke" + icon_state = "joke" + +/obj/item/weapon/paper/cracker_joke/update_icon() + return diff --git a/code/modules/vore/resizing/sizegun_vr.dm b/code/modules/vore/resizing/sizegun_vr.dm index 4bbaaff043..2bbd601035 100644 --- a/code/modules/vore/resizing/sizegun_vr.dm +++ b/code/modules/vore/resizing/sizegun_vr.dm @@ -15,6 +15,7 @@ origin_tech = list(TECH_BLUESPACE = 4) modifystate = "sizegun-shrink" battery_lock = 1 + var/backfire = 0 var/size_set_to = 1 firemodes = list( list(mode_name = "select size", @@ -133,6 +134,54 @@ size_set_to = clamp((size_select/100), 0, 1000) //eheh to_chat(usr, "You set the size to [size_select]%") +/obj/item/weapon/gun/energy/sizegun/afterattack(atom/A, mob/living/user, adjacent, params) + if(adjacent) return //A is adjacent, is the user, or is on the user's person + + if(backfire) + if(prob(50)) + to_chat(user, "\The [src] backfires and consumes its entire charge!") + Fire(user, user) + power_supply.charge = 0 + var/mob/living/M = loc // TGMC Ammo HUD + if(istype(M)) // TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) + return + else + return ..() + else + return ..() + +/obj/item/weapon/gun/energy/sizegun/attack(atom/A, mob/living/user, adjacent, params) + if(backfire) + if(prob(50)) + to_chat(user, "\The [src] backfires and consumes its entire charge!") + Fire(user, user) + power_supply.charge = 0 + var/mob/living/M = loc // TGMC Ammo HUD + if(istype(M)) // TGMC Ammo HUD + M?.hud_used.update_ammo_hud(M, src) + return + else + return ..() + else + return ..() + + +/obj/item/weapon/gun/energy/sizegun/attackby(var/obj/item/A as obj, mob/user as mob) + if(A.has_tool_quality(TOOL_WIRECUTTER)) + if(backfire) + to_chat(user, "You repair the damage to the \the [src].") + backfire = 0 + name = "size gun" + else + to_chat(user, "You snip a wire on \the [src], making it less reliable.") + backfire = 1 + name = "unstable size gun" + ..() + +/obj/item/weapon/gun/energy/sizegun/backfire + name = "unstable size gun" + backfire = 1 /obj/item/weapon/gun/energy/sizegun/mounted name = "mounted size gun" diff --git a/code/modules/xenobio2/machinery/injector_computer.dm b/code/modules/xenobio2/machinery/injector_computer.dm index 196543a256..e4ac65403a 100644 --- a/code/modules/xenobio2/machinery/injector_computer.dm +++ b/code/modules/xenobio2/machinery/injector_computer.dm @@ -46,6 +46,7 @@ ..() +//Is missing a tgui interface? /obj/machinery/computer/xenobio2/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) if(!user) return diff --git a/code/modules/xenobio2/mob/slime/slime life.dm b/code/modules/xenobio2/mob/slime/slime life.dm index cc784a63d1..f6e91f4912 100644 --- a/code/modules/xenobio2/mob/slime/slime life.dm +++ b/code/modules/xenobio2/mob/slime/slime life.dm @@ -52,4 +52,7 @@ Slime specific life events go here. return 0 //Everything worked okay - return //xeno/Life() returned 0. \ No newline at end of file + return //xeno/Life() returned 0. + +#undef HAPPYLEVEL +#undef ANGRYLEVEL diff --git a/code/modules/xenobio2/mob/slime/slime procs.dm b/code/modules/xenobio2/mob/slime/slime procs.dm index ac03f788c3..2bd5912958 100644 --- a/code/modules/xenobio2/mob/slime/slime procs.dm +++ b/code/modules/xenobio2/mob/slime/slime procs.dm @@ -126,3 +126,7 @@ Slime specific procs go here. GenerateChild() else GenerateAdult() + +#undef SHINYOVERLAY +#undef LIGHTOVERLAY +#undef MAXOVERLAY diff --git a/code/modules/xenobio2/mob/xeno.dm b/code/modules/xenobio2/mob/xeno.dm index 9996be9e61..f53659b17b 100644 --- a/code/modules/xenobio2/mob/xeno.dm +++ b/code/modules/xenobio2/mob/xeno.dm @@ -102,6 +102,5 @@ Also includes Life and New ..() /mob/living/simple_mob/xeno/Destroy() - traitdat.Destroy() //Let's clean up after ourselves. - traitdat = null - ..() \ No newline at end of file + QDEL_NULL(traitdat) + ..() diff --git a/icons/inventory/head/item.dmi b/icons/inventory/head/item.dmi index 538c3a57ee..7897ed2207 100644 Binary files a/icons/inventory/head/item.dmi and b/icons/inventory/head/item.dmi differ diff --git a/icons/inventory/head/mob.dmi b/icons/inventory/head/mob.dmi index 635188fbad..8f7e232b3d 100644 Binary files a/icons/inventory/head/mob.dmi and b/icons/inventory/head/mob.dmi differ diff --git a/icons/mob/human_face_vr.dmi b/icons/mob/human_face_vr.dmi index ea687def73..5da8720d00 100644 Binary files a/icons/mob/human_face_vr.dmi and b/icons/mob/human_face_vr.dmi differ diff --git a/icons/mob/human_races/r_lleill.dmi b/icons/mob/human_races/r_lleill.dmi new file mode 100644 index 0000000000..a3f6d1429b Binary files /dev/null and b/icons/mob/human_races/r_lleill.dmi differ diff --git a/icons/mob/items/lefthand_cracker.dmi b/icons/mob/items/lefthand_cracker.dmi new file mode 100644 index 0000000000..6e2d5776fc Binary files /dev/null and b/icons/mob/items/lefthand_cracker.dmi differ diff --git a/icons/mob/items/righthand_cracker.dmi b/icons/mob/items/righthand_cracker.dmi new file mode 100644 index 0000000000..0818ed3ebc Binary files /dev/null and b/icons/mob/items/righthand_cracker.dmi differ diff --git a/icons/mob/species/lleill/tail.dmi b/icons/mob/species/lleill/tail.dmi new file mode 100644 index 0000000000..3ff9003890 Binary files /dev/null and b/icons/mob/species/lleill/tail.dmi differ diff --git a/icons/mob/vore.dmi b/icons/mob/vore.dmi index 2aabf0438b..e11ef54c8d 100644 Binary files a/icons/mob/vore.dmi and b/icons/mob/vore.dmi differ diff --git a/icons/mob/vore/Bellies.dmi b/icons/mob/vore/Bellies.dmi new file mode 100644 index 0000000000..4f0d94f008 Binary files /dev/null and b/icons/mob/vore/Bellies.dmi differ diff --git a/icons/mob/vore/Taur_Bellies.dmi b/icons/mob/vore/Taur_Bellies.dmi new file mode 100644 index 0000000000..e606c64d18 Binary files /dev/null and b/icons/mob/vore/Taur_Bellies.dmi differ diff --git a/icons/mob/vore/ears_32x64.dmi b/icons/mob/vore/ears_32x64.dmi index cfae3acbcb..1e73072d94 100644 Binary files a/icons/mob/vore/ears_32x64.dmi and b/icons/mob/vore/ears_32x64.dmi differ diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi index 5c0531f5b7..61365297d2 100644 Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ diff --git a/icons/obj/crackers.dmi b/icons/obj/crackers.dmi new file mode 100644 index 0000000000..ac657f46f9 Binary files /dev/null and b/icons/obj/crackers.dmi differ diff --git a/icons/obj/flora/rocks.dmi b/icons/obj/flora/rocks.dmi index 1b5e67e3f7..6b5d942473 100644 Binary files a/icons/obj/flora/rocks.dmi and b/icons/obj/flora/rocks.dmi differ diff --git a/icons/obj/glamour.dmi b/icons/obj/glamour.dmi new file mode 100644 index 0000000000..2682d7badc Binary files /dev/null and b/icons/obj/glamour.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index 866c4136c8..495abac477 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ diff --git a/icons/obj/overmap_vr.dmi b/icons/obj/overmap_vr.dmi index dae175f214..6d756663ae 100644 Binary files a/icons/obj/overmap_vr.dmi and b/icons/obj/overmap_vr.dmi differ diff --git a/icons/obj/props/decor96x96.dmi b/icons/obj/props/decor96x96.dmi index 9aabbf68d2..31130c4220 100644 Binary files a/icons/obj/props/decor96x96.dmi and b/icons/obj/props/decor96x96.dmi differ diff --git a/icons/obj/seeds.dmi b/icons/obj/seeds.dmi index e181299f13..6b5dc5dab5 100644 Binary files a/icons/obj/seeds.dmi and b/icons/obj/seeds.dmi differ diff --git a/icons/obj/stationobjs_vr.dmi b/icons/obj/stationobjs_vr.dmi index aa6df06395..8ce777ec97 100644 Binary files a/icons/obj/stationobjs_vr.dmi and b/icons/obj/stationobjs_vr.dmi differ diff --git a/icons/skybox/virgo5.dmi b/icons/skybox/virgo5.dmi new file mode 100644 index 0000000000..94e275dd15 Binary files /dev/null and b/icons/skybox/virgo5.dmi differ diff --git a/icons/turf/flooring/glamour.dmi b/icons/turf/flooring/glamour.dmi index 74ee643065..8f60748a65 100644 Binary files a/icons/turf/flooring/glamour.dmi and b/icons/turf/flooring/glamour.dmi differ diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi index 86243a853f..b979f1a00e 100644 Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index 53b0689fb1..9c8f8a5ec0 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -720,6 +720,12 @@ macro "hotkeymode" elem name = "U" command = "Rest" + elem + name = "SHIFT+U" + command = "Rest-Left" + elem + name = "CTRL+U" + command = "Rest-Right" elem name = "B" command = "Resist" diff --git a/maps/groundbase/groundbase_defines.dm b/maps/groundbase/groundbase_defines.dm index 219fc11c6c..412e2bd01d 100644 --- a/maps/groundbase/groundbase_defines.dm +++ b/maps/groundbase/groundbase_defines.dm @@ -224,7 +224,8 @@ list("Redgate - Fantasy Dungeon", "Redgate - Fantasy Town"), list("Redgate - Laserdome"), list("Redgate - Cascading Falls"), - list("Redgate - Jungle Underground", "Redgate - Jungle") + list("Redgate - Jungle Underground", "Redgate - Jungle"), + list("Redgate - Facility") ) lateload_gb_north = list( diff --git a/maps/offmap_vr/common_offmaps.dm b/maps/offmap_vr/common_offmaps.dm index b761c46e55..7d97d7b926 100644 --- a/maps/offmap_vr/common_offmaps.dm +++ b/maps/offmap_vr/common_offmaps.dm @@ -351,6 +351,11 @@ /obj/effect/landmark/map_data/jungle height = 2 +/datum/map_template/common_lateload/redgate/facility + name = "Redgate - Facility" + desc = "A facility full of unusual experiments." + mappath = 'maps/redgate/facility.dmm' + ////////////////////////////////////////////////////////////////////////////////////// // Admin-use z-levels for loading whenever an admin feels like #if AWAY_MISSION_TEST diff --git a/maps/redgate/facility.dmm b/maps/redgate/facility.dmm new file mode 100644 index 0000000000..02fa83ec07 --- /dev/null +++ b/maps/redgate/facility.dmm @@ -0,0 +1,37168 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aau" = ( +/obj/structure/closet/secure_closet/medical2, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"abl" = ( +/obj/machinery/light/spot{ + dir = 1; + invisibility = 101 + }, +/turf/simulated/floor/glamour, +/area/redgate/facility/ne) +"abp" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office7) +"aca" = ( +/obj/structure/table/standard, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"adz" = ( +/obj/structure/window/basic/full, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"agb" = ( +/obj/machinery/light/spot{ + dir = 8; + invisibility = 101 + }, +/turf/simulated/floor/glamour, +/area/redgate/facility/ne) +"agH" = ( +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"ahj" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/potion_material/glamour_shard, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"ahx" = ( +/obj/machinery/light/spot{ + dir = 4; + invisibility = 101 + }, +/turf/simulated/floor/glamour, +/area/redgate/facility/ne) +"aih" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7; + pixel_y = 5 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"aix" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/bboulder1, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"aiz" = ( +/obj/structure/table/hardwoodtable, +/obj/item/modular_computer/laptop/preset/custom_loadout/cheap, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"aju" = ( +/obj/structure/closet, +/obj/random/awayloot/nofail, +/obj/random/forgotten_tram, +/obj/random/forgotten_tram, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"ajx" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/shield/riot, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"akB" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/clothing/suit/storage/vest/heavy/officer{ + pixel_x = -4; + pixel_y = 4 + }, +/obj/item/clothing/suit/storage/vest/heavy/officer{ + pixel_x = -4; + pixel_y = -6 + }, +/obj/item/clothing/suit/storage/vest/heavy/officer{ + pixel_x = 5; + pixel_y = -6 + }, +/obj/item/clothing/suit/storage/vest/heavy/officer{ + pixel_x = 5; + pixel_y = 4 + }, +/obj/machinery/light{ + dir = 1; + stat = 0 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"alk" = ( +/obj/structure/table/steel_reinforced, +/obj/random/technology_scanner, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"alo" = ( +/obj/machinery/light{ + dir = 1; + stat = 0 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"alz" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/simulated/floor/grass, +/area/redgate/facility/office1) +"alP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"alV" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/flash/synthetic, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"aml" = ( +/obj/item/modular_computer/console{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"amu" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"amK" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office6) +"ank" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"anp" = ( +/mob/living/simple_mob/vore/wolf/direwolf/sec{ + ai_holder_type = /datum/ai_holder/simple_mob/vore + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"aou" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"apm" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell12) +"apV" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"aqi" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 10 + }, +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/sw) +"aqk" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"aqU" = ( +/obj/structure/table/darkglass, +/obj/item/glamourcrystal, +/turf/simulated/floor/tiled/milspec/raised, +/area/redgate/facility/ne) +"arY" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"asm" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 9 + }, +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/ne) +"asn" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 5 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"asB" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/closet, +/obj/random/forgotten_tram, +/obj/random/forgotten_tram, +/obj/random/coin, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"asX" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/closet, +/obj/random/forgotten_tram, +/obj/random/forgotten_tram, +/obj/random/mainttoyloot/nofail, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"atr" = ( +/obj/effect/floor_decal/corner/white/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"atA" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/ne) +"atH" = ( +/obj/structure/closet/secure_closet/security, +/obj/random/grenade/less_lethal, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"atT" = ( +/obj/structure/table/steel, +/obj/item/weapon/folder/red, +/obj/machinery/light, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"avL" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"aww" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/entrance) +"awQ" = ( +/obj/structure/bed/chair/office/dark, +/obj/effect/floor_decal/spline/plain{ + dir = 9 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"axo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"axq" = ( +/obj/structure/bed/chair/office/dark, +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"axO" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + name = "Research Facility" + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"axR" = ( +/obj/machinery/door/airlock/angled_tgmc/security{ + name = "red door"; + req_access = list(801); + req_one_access = list(801) + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"ayj" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell5) +"ayW" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"azr" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7; + pixel_y = 5 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/nw) +"azC" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/ne) +"aAi" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"aAk" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"aAV" = ( +/obj/random/empty_or_lootable_crate, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"aAZ" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"aBI" = ( +/obj/structure/table/hardwoodtable, +/obj/random/maintenance, +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"aCo" = ( +/obj/structure/table/hardwoodtable, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"aCN" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/ne) +"aDG" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 10 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"aEA" = ( +/obj/machinery/door/airlock/angled_tgmc/engineering{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"aFv" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"aFP" = ( +/obj/structure/railing, +/obj/structure/extinguisher_cabinet{ + dir = 8; + pixel_x = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"aHL" = ( +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/ne) +"aHS" = ( +/obj/structure/flora/ausbushes/reedbush, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell13) +"aIg" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"aIj" = ( +/obj/random/junk, +/turf/simulated/floor, +/area/redgate/facility/ne) +"aIB" = ( +/obj/machinery/light/broken{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"aIF" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/nw) +"aJT" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"aKz" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"aMu" = ( +/obj/structure/closet/hydrant{ + pixel_y = 32 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"aMv" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair/sofa/corp/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"aME" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"aNb" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"aND" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"aOu" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/turf/simulated/floor, +/area/redgate/facility/ne) +"aOv" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/sw) +"aOx" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/obj/random/vendorall, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"aOX" = ( +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"aPN" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/medbay) +"aQv" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"aRG" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"aSb" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"aSw" = ( +/obj/structure/table/reinforced, +/obj/item/broken_device/random, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"aSC" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell11) +"aSR" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"aTL" = ( +/obj/structure/prop/rock/flat, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell20) +"aUc" = ( +/obj/structure/closet, +/obj/random/grenade/less_lethal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"aUp" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"aUF" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"aVC" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"aWd" = ( +/obj/structure/filingcabinet/filingcabinet{ + pixel_x = 11 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"aWA" = ( +/obj/structure/dogbed, +/mob/living/simple_mob/vore/scrubble, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"aWE" = ( +/obj/random/tank, +/obj/structure/table/rack/steel, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"aXn" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell26) +"aXy" = ( +/obj/structure/closet, +/obj/random/maintenance, +/obj/random/bluespace, +/obj/random/forgotten_tram, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"aXB" = ( +/turf/simulated/floor/carpet/green, +/area/redgate/facility/nw) +"aXE" = ( +/obj/machinery/door/blast/multi_tile/three_tile_hor{ + id = "glamour" + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"aXR" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"baa" = ( +/obj/structure/table/woodentable, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/weapon/folder/white, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office9) +"bay" = ( +/obj/structure/closet/walllocker/wooden/east, +/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, +/obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/obj/item/weapon/reagent_containers/food/snacks/cheeseburger, +/obj/item/weapon/reagent_containers/food/snacks/cheeseburger, +/obj/item/weapon/reagent_containers/food/snacks/fishburger, +/obj/item/weapon/reagent_containers/food/snacks/fishburger, +/obj/item/weapon/reagent_containers/food/snacks/jellyburger, +/obj/item/weapon/reagent_containers/food/snacks/jellyburger, +/obj/item/weapon/reagent_containers/food/snacks/superbiteburger, +/obj/item/weapon/reagent_containers/food/snacks/superbiteburger, +/obj/item/weapon/reagent_containers/food/snacks/superbiteburger, +/obj/item/weapon/reagent_containers/food/snacks/bearburger, +/obj/item/weapon/reagent_containers/food/snacks/bearburger, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"baM" = ( +/obj/structure/table/standard, +/obj/random/slimecore, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"bbg" = ( +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/nw) +"bbE" = ( +/obj/structure/closet, +/obj/random/fantasy_item/better, +/obj/random/forgotten_tram, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/nw) +"bbP" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/random/maintenance, +/obj/machinery/light, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/ne) +"bbX" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell6) +"bcD" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell24) +"bcI" = ( +/obj/structure/closet/walllocker_double/science/north, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"bcZ" = ( +/mob/living/simple_mob/vore/raptor, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/redgate/facility/ne) +"beK" = ( +/obj/structure/bed/chair/sofa/corp/left, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"bfA" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bfF" = ( +/obj/structure/bed/chair/sofa/corp{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell9) +"bgg" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/borderfloor, +/obj/random/tetheraid, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bil" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell27) +"bip" = ( +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"bjJ" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"bka" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bkc" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bkn" = ( +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"bkw" = ( +/obj/structure/bed/chair/office/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bkY" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"blh" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"bll" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"blm" = ( +/obj/structure/table/bench/standard, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"blB" = ( +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office5) +"bmu" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"bmy" = ( +/obj/item/modular_computer/console{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bmJ" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 9 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/ne) +"bmY" = ( +/obj/effect/floor_decal/corner/orange/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"bnz" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"bnH" = ( +/obj/structure/table/reinforced, +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"bnU" = ( +/obj/effect/floor_decal/corner/orange/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"boO" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"boT" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7; + pixel_y = 5 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"bpL" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 8 + }, +/turf/simulated/floor/carpet/blue, +/area/redgate/facility/office2) +"bpW" = ( +/obj/item/weapon/paper, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bqd" = ( +/obj/structure/reagent_dispensers/water_cooler/full, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"bqp" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bqM" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"brr" = ( +/obj/effect/floor_decal/atoll/stairs, +/turf/simulated/floor/atoll, +/area/redgate/facility/cell16) +"brA" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/reinforced, +/obj/machinery/microwave/advanced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"btj" = ( +/obj/random/trash_pile, +/turf/simulated/floor, +/area/redgate/facility/nw) +"bua" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/lab5) +"buD" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = 9; + pixel_y = 17 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"buS" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/item/weapon/bone/ribs, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"bvQ" = ( +/turf/simulated/floor/tiled/steel_grid, +/area/redgate/facility/ne) +"bwp" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab1) +"bwG" = ( +/obj/structure/table/glass, +/obj/machinery/microscope, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"bwJ" = ( +/obj/machinery/vending/loadout, +/obj/effect/floor_decal/corner/grey{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"bwP" = ( +/obj/structure/table/borosilicate, +/obj/item/clothing/under/hyperfiber, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell8) +"byg" = ( +/obj/structure/reagent_dispensers/coolanttank, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"byq" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"byD" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"bzV" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/ne) +"bzX" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bAJ" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"bAM" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"bAP" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"bBH" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/effect/floor_decal/steeldecal/steel_decals10, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"bCO" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"bCT" = ( +/obj/machinery/shower{ + dir = 4 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/effect/floor_decal/steeldecal/steel_decals10, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"bDp" = ( +/turf/simulated/floor/tiled/eris/techmaint_cargo, +/area/redgate/facility/sw) +"bEa" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"bEp" = ( +/obj/random/trash_pile, +/turf/simulated/floor, +/area/redgate/facility/se) +"bFb" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/ne) +"bFj" = ( +/turf/simulated/floor/tiled/dark, +/area/redgate/facility/cell10) +"bFr" = ( +/obj/machinery/light/floortube, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"bFt" = ( +/obj/structure/table/bench/steel, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"bFw" = ( +/obj/structure/closet, +/obj/random/cash/big, +/obj/random/bomb_supply, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"bGk" = ( +/obj/structure/closet/l3closet/medical, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"bHr" = ( +/obj/structure/table/hardwoodtable, +/obj/item/modular_computer/laptop, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"bHz" = ( +/obj/structure/closet, +/obj/random/mouseray, +/obj/random/forgotten_tram, +/obj/random/forgotten_tram, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/nw) +"bHE" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/ne) +"bIi" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -24; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"bIj" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bIo" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/ne) +"bIw" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bIQ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"bIT" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/ne) +"bJh" = ( +/mob/living/simple_mob/vore/devil, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"bJm" = ( +/obj/machinery/button/remote/blast_door{ + id = "core_experiment"; + pixel_y = 25 + }, +/obj/effect/floor_decal/corner/orange/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"bJy" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"bJI" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/redgate/facility/ne) +"bKb" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 5 + }, +/obj/effect/floor_decal/transit/orange, +/obj/item/device/geiger/wall/east, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"bKf" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"bKC" = ( +/obj/structure/crystalholder, +/turf/simulated/floor/tiled/eris/bcircuit, +/area/redgate/facility/ne) +"bLQ" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell20) +"bMm" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"bML" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"bMN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/entrance) +"bNV" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/obj/item/weapon/bikehorn/rubberducky, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"bOm" = ( +/obj/item/weapon/circuitboard/fluidpump, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"bOo" = ( +/obj/structure/closet/cabinet, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"bOz" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp/green, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"bOV" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/ne) +"bPs" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell16) +"bPx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"bPy" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bPT" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bQf" = ( +/obj/structure/table/woodentable, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/turf/simulated/floor/carpet/blucarpet, +/area/redgate/facility/office9) +"bRn" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bSl" = ( +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"bSn" = ( +/obj/item/device/geiger/wall/north, +/obj/effect/floor_decal/corner/black/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bSz" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/turf/simulated/floor/wood, +/area/redgate/facility/cell2) +"bSA" = ( +/obj/effect/floor_decal/corner/orange/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/redgate/facility/ne) +"bSN" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/redgate/facility/ne) +"bTo" = ( +/obj/structure/closet/secure_closet/personal{ + name = "Squarepants" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/obj/machinery/light, +/obj/random/forgotten_tram, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"bTz" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"bTV" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/dark, +/area/redgate/facility/cell10) +"bUh" = ( +/obj/structure/table/steel, +/obj/random/maintenance/security, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"bUq" = ( +/obj/structure/filingcabinet/filingcabinet{ + pixel_x = 11 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"bUL" = ( +/obj/structure/closet, +/obj/random/drinkbottle, +/obj/random/drinkbottle, +/obj/random/drinkbottle, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"bVf" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue, +/obj/random/cigarettes, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"bVl" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"bVp" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/greendouble, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"bVI" = ( +/obj/machinery/atmospherics/unary/cryo_cell, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab2) +"bXd" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/orangedouble, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"bXi" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/bluedouble, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"bXk" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell14) +"bXL" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 10 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/nw) +"bXN" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/nw) +"bYo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"bYT" = ( +/obj/machinery/door/blast/regular/open{ + id = "core_experiment" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"bYX" = ( +/obj/machinery/door/blast/regular{ + id = "core_experiment" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"bZr" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"cam" = ( +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/redgate/facility/ne) +"cbQ" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass, +/area/redgate/facility/office1) +"cbV" = ( +/obj/structure/closet/secure_closet/personal/patient, +/obj/effect/floor_decal/corner/blue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"ccG" = ( +/obj/machinery/button/windowtint{ + id = "cell_4"; + pixel_x = 22 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"cdr" = ( +/obj/machinery/crystalexperimenter, +/turf/simulated/floor/tiled/eris/dark/monofloor, +/area/redgate/facility/ne) +"cdC" = ( +/obj/structure/bed/chair/sofa/corp/right, +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"cdP" = ( +/obj/machinery/button/remote/experimenter{ + dir = 8; + pixel_x = 27 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"cdT" = ( +/obj/machinery/door/blast/regular{ + id = "vault1" + }, +/turf/simulated/floor/tiled/eris/bcircuit, +/area/redgate/facility/ne) +"ceb" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"cek" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light/broken, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell22) +"ceo" = ( +/obj/structure/table/steel, +/obj/item/device/integrated_electronics/detailer, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"ceN" = ( +/obj/structure/bed/chair/sofa/left/lime{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"ceR" = ( +/obj/structure/bed/chair/sofa/left/orange{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"cfF" = ( +/obj/effect/floor_decal/corner_steel_grid{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"cfI" = ( +/obj/structure/bed/chair/sofa/left/blue{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"cht" = ( +/obj/effect/floor_decal/corner/orange/border, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/redgate/facility/ne) +"chH" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/random/vendorall, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"chP" = ( +/obj/effect/floor_decal/corner/lime/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"chX" = ( +/obj/structure/railing/grey, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"cie" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/ne) +"ciB" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + dir = 1; + id_tag = "cell_8" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"cjl" = ( +/obj/structure/table/glass, +/obj/item/weapon/book/manual/resleeving, +/obj/effect/floor_decal/borderfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"cjt" = ( +/obj/structure/closet, +/obj/fiftyspawner/glass, +/obj/item/stack/material/plasteel{ + amount = 10 + }, +/obj/random/material/precious, +/obj/random/material/precious, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"cjS" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = 8; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"cka" = ( +/obj/structure/closet, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/item/weapon/melee/baton/cattleprod, +/obj/random/maintenance/morestuff, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"ckD" = ( +/obj/structure/window/reinforced/polarized/full, +/obj/structure/grille, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell21) +"clt" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"cmj" = ( +/mob/living/simple_mob/vore/stalker, +/obj/effect/floor_decal/corner/black/bordercorner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"cmH" = ( +/obj/structure/table/glass, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"cnj" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = 16; + pixel_y = 27 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"cnp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"cnr" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/gun/energy/sizegun, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/lab5) +"cnG" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/redgate/facility/ne) +"cnI" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"cnQ" = ( +/obj/effect/floor_decal/corner/orange/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/redgate/facility/ne) +"cqX" = ( +/obj/machinery/door/blast/regular/open{ + id = "vault4" + }, +/turf/simulated/floor/tiled/eris/bcircuit, +/area/redgate/facility/ne) +"crn" = ( +/obj/structure/salvageable/console, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"crv" = ( +/obj/structure/closet, +/obj/random/contraband/nofail, +/obj/random/fishing_junk, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"crB" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"crQ" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell24) +"crX" = ( +/mob/living/simple_mob/vore/aggressive/corrupthound/prettyboi{ + ai_holder_type = /datum/ai_holder/simple_mob/vore + }, +/turf/simulated/floor/gorefloor, +/area/redgate/facility/ne) +"csa" = ( +/obj/structure/toilet{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"csz" = ( +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"csM" = ( +/obj/machinery/door/airlock/angled_tgmc/personal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"ctF" = ( +/obj/structure/bed/chair/sofa/right/lime{ + dir = 4 + }, +/obj/machinery/button/remote/airlock{ + dir = 1; + id = "facility_dorm_4"; + pixel_y = -24; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"ctH" = ( +/obj/structure/table/woodentable, +/obj/machinery/microwave, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"cuN" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"cvb" = ( +/obj/structure/bed/chair/sofa/right/yellow{ + dir = 4 + }, +/obj/machinery/button/remote/airlock{ + dir = 1; + id = "facility_dorm_5"; + pixel_y = -24; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"cvl" = ( +/obj/structure/toilet/prison{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell18) +"cvm" = ( +/obj/structure/bed/chair/sofa/right/blue{ + dir = 4 + }, +/obj/machinery/button/remote/airlock{ + dir = 1; + id = "facility_dorm_6"; + pixel_y = -24; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"cwq" = ( +/turf/simulated/wall/tgmc/redstripe, +/area/redgate/facility/securitylobby) +"cxn" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"czm" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/nw) +"czn" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = 8; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"czL" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/ne) +"czS" = ( +/obj/structure/closet/secure_closet/engineering_welding/double, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"cBa" = ( +/obj/structure/closet/toolcloset, +/obj/random/tool/alien, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"cBx" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"cCk" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"cCs" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "cell_9" + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"cCu" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"cCV" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"cDe" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell3) +"cDs" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor, +/area/redgate/facility/sw) +"cDt" = ( +/obj/structure/girder, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"cDW" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/ne) +"cEL" = ( +/obj/structure/salvageable/console{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"cFH" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"cFX" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/redgate/facility/ne) +"cGq" = ( +/obj/machinery/door/blast/regular/open{ + id = "vault2" + }, +/turf/simulated/floor/tiled/eris/bcircuit, +/area/redgate/facility/ne) +"cHb" = ( +/obj/random/soap_common, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"cHe" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/structure/bed/chair/sofa/right/brown, +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/sw) +"cHl" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 12; + pixel_y = 3 + }, +/obj/structure/mirror{ + dir = 8; + pixel_x = 26; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"cHD" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/laundry_basket, +/obj/effect/floor_decal/corner/grey{ + dir = 5 + }, +/obj/effect/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"cIQ" = ( +/obj/machinery/power/emitter{ + anchored = 1; + icon_state = "emitter1"; + state = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"cJa" = ( +/obj/structure/undies_wardrobe, +/obj/effect/floor_decal/corner/grey{ + dir = 5 + }, +/obj/effect/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"cJT" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "facility_dorm_4" + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"cJV" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "facility_dorm_5" + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"cJZ" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "facility_dorm_6" + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"cKz" = ( +/obj/item/weapon/reagent_containers/food/snacks/sliceable/bread, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"cKL" = ( +/obj/structure/bed/chair/sofa/corp/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"cLb" = ( +/obj/effect/floor_decal/corner/blue/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"cLj" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/machinery/light/broken{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"cLm" = ( +/obj/structure/disposaloutlet{ + density = 0; + pixel_y = 18 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/redgate/facility/lab5) +"cMH" = ( +/obj/structure/bed/chair/sofa/corp/right, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"cMZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell23) +"cNo" = ( +/obj/effect/floor_decal/corner/pink/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"cNH" = ( +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell21) +"cNI" = ( +/obj/structure/table/glass, +/obj/item/device/sleevemate, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"cPg" = ( +/obj/structure/salvageable/console{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"cPo" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell27) +"cPB" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4; + locked = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/ne) +"cPU" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/toolbox/electrical{ + pixel_x = 1; + pixel_y = 6 + }, +/turf/simulated/floor/tiled/milspec/raised, +/area/redgate/facility/ne) +"cQh" = ( +/obj/machinery/autolathe{ + dir = 1; + hacked = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"cQi" = ( +/obj/item/weapon/circuitboard/broken, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"cQv" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/nw) +"cQR" = ( +/obj/machinery/vending/radren, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"cRb" = ( +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/redgate/facility/ne) +"cRi" = ( +/obj/item/weapon/material/shard, +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "cell_20"; + pixel_x = 25; + specialfunctions = 4 + }, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"cRP" = ( +/obj/structure/closet/radiation, +/obj/random/cargopod, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"cSl" = ( +/obj/structure/bed/chair/bay{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"cSN" = ( +/turf/simulated/shuttle/floor/white, +/area/redgate/facility/tram) +"cUw" = ( +/obj/structure/table/darkglass, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell9) +"cUy" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"cUF" = ( +/obj/effect/floor_decal/corner/orange/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"cUG" = ( +/obj/machinery/light/floortube{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"cUI" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"cWc" = ( +/obj/structure/prop/rock/round, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell20) +"cWB" = ( +/obj/machinery/door/blast/regular{ + id = "vault3" + }, +/turf/simulated/floor/tiled/eris/bcircuit, +/area/redgate/facility/ne) +"cXI" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"cZu" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office7) +"cZA" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/gorefloor, +/area/redgate/facility/ne) +"dao" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"daB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"daP" = ( +/obj/effect/floor_decal/corner/grey/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dbk" = ( +/obj/structure/bed/chair/sofa/corp/right{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dbD" = ( +/obj/structure/table/hardwoodtable, +/obj/random/powercell/device, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/se) +"dcx" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/weapon/reagent_containers/glass/rag, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dcE" = ( +/obj/structure/table/hardwoodtable, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/turf/simulated/floor/carpet/tealcarpet, +/area/redgate/facility/ne) +"ddd" = ( +/obj/structure/closet, +/obj/random/unidentified_medicine/combat_medicine, +/obj/random/forgotten_tram, +/obj/random/forgotten_tram, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/nw) +"ddi" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"deI" = ( +/obj/structure/sign/levels/medical/cloning, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/ne) +"dfe" = ( +/obj/structure/table/glass, +/obj/item/weapon/gun/energy/mouseray/medical, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"dfL" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/cell_charger, +/turf/simulated/floor/tiled/milspec/raised, +/area/redgate/facility/ne) +"dhj" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"dhF" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell7) +"dhM" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/sw) +"djb" = ( +/obj/item/stack/cable_coil, +/turf/simulated/floor/tiled/milspec/raised, +/area/redgate/facility/ne) +"djP" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"dki" = ( +/obj/machinery/mecha_part_fabricator{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"dkR" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 10 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"dlw" = ( +/obj/machinery/gear_painter, +/obj/effect/floor_decal/corner/grey{ + dir = 10 + }, +/obj/effect/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dmN" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/lab3) +"dmQ" = ( +/obj/effect/floor_decal/corner/grey/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dpy" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"dpL" = ( +/obj/structure/loot_pile/mecha/ripley/random_sprite, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"dqe" = ( +/obj/random/multiple/corp_crate/no_weapons, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"drT" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell9) +"dss" = ( +/obj/machinery/clonepod/transhuman, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"dtr" = ( +/obj/effect/floor_decal/corner/black/bordercorner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"dtI" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"dua" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/gorefloor2, +/area/redgate/facility/ne) +"duq" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"duw" = ( +/obj/structure/bed/chair/sofa/right/orange{ + dir = 1 + }, +/obj/effect/floor_decal/corner/black/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"duH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"dvj" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell8) +"dvk" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dvS" = ( +/obj/effect/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dwV" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dwY" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dxJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dxX" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = 8; + pixel_y = -4 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = -4; + pixel_y = 12 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = 8; + pixel_y = 12 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = -4 + }, +/obj/item/weapon/reagent_containers/food/drinks/cup{ + pixel_x = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dyp" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/nw) +"dyR" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/toolbox/mechanical, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"dzj" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/geiger{ + pixel_x = 7; + pixel_y = 6 + }, +/obj/item/device/geiger, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"dzk" = ( +/obj/structure/dispenser{ + phorontanks = 0 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"dzA" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"dzX" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell20) +"dAc" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/steel/gray_perforated, +/area/redgate/facility/ne) +"dAl" = ( +/obj/machinery/recharge_station, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dBA" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"dBC" = ( +/obj/effect/floor_decal/corner/pink/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"dBD" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"dCb" = ( +/obj/structure/closet/secure_closet/personal, +/obj/item/clothing/under/bathrobe, +/obj/effect/floor_decal/corner/grey{ + dir = 10 + }, +/obj/effect/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dCf" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "facility_dorm_1" + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"dCJ" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"dCX" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "facility_dorm_2" + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"dEq" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "facility_dorm_3" + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"dEA" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/chemical_dispenser/bar_coffee/full{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dFt" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/gun/energy/taser, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"dFD" = ( +/obj/structure/table/hardwoodtable, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/nw) +"dGd" = ( +/turf/simulated/floor/water/contaminated, +/area/redgate/facility/office1) +"dGr" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"dGD" = ( +/obj/structure/table/glass, +/obj/item/bodybag/cryobag{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"dGF" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/turf/simulated/floor/carpet/tealcarpet, +/area/redgate/facility/ne) +"dHH" = ( +/obj/structure/closet, +/obj/item/weapon/storage/belt/utility, +/obj/item/weapon/tool/crowbar, +/obj/item/device/multitool{ + pixel_x = 3 + }, +/obj/item/clothing/head/welding/engie, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"dHN" = ( +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/lab3) +"dID" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"dIZ" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell8) +"dJc" = ( +/obj/structure/table/standard, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"dJK" = ( +/obj/structure/table/steel_reinforced, +/obj/random/janusmodule, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"dJR" = ( +/obj/structure/table/hardwoodtable, +/obj/structure/closet/walllocker_double/medical/south, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/sw) +"dKn" = ( +/obj/structure/window/plastitanium/full, +/obj/structure/grille, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"dKH" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"dKV" = ( +/obj/structure/railing, +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/cell4) +"dLa" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dLd" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/machinery/button/remote/blast_door{ + id = "vault1" + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/tiled/eris/steel/monofloor, +/area/redgate/facility/ne) +"dLl" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/machinery/button/remote/blast_door{ + id = "vault2" + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/tiled/eris/steel/monofloor, +/area/redgate/facility/ne) +"dLs" = ( +/obj/structure/curtain/open{ + anchored = 1; + dir = 4; + pixel_x = 32 + }, +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/cell5) +"dNj" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor, +/area/redgate/facility/nw) +"dNQ" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"dOH" = ( +/obj/structure/bed/chair/sofa/left/orange{ + dir = 4 + }, +/obj/machinery/button/remote/airlock{ + id = "facility_dorm_1"; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"dOY" = ( +/obj/structure/bed/chair/sofa/left/purp{ + dir = 4 + }, +/obj/machinery/button/remote/airlock{ + id = "facility_dorm_2"; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"dPQ" = ( +/obj/structure/bed/chair/sofa/left/brown{ + dir = 4 + }, +/obj/machinery/button/remote/airlock{ + id = "facility_dorm_3"; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"dQf" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/weapon/reagent_containers/food/drinks/glass2/square{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/food/drinks/glass2/square{ + pixel_x = 8; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/food/drinks/glass2/square{ + pixel_x = 8; + pixel_y = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"dQn" = ( +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"dQq" = ( +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/nw) +"dSD" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + locked = 1; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"dST" = ( +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"dSW" = ( +/obj/structure/curtain/open{ + anchored = 1; + dir = 4; + pixel_x = -32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"dTg" = ( +/obj/item/modular_computer/console{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"dTI" = ( +/obj/item/modular_computer/console{ + dir = 4 + }, +/obj/structure/railing/grey{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/steel/monofloor, +/area/redgate/facility/ne) +"dTW" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/syringe/steroid, +/obj/structure/closet/walllocker_double/science/north, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"dTZ" = ( +/obj/structure/bed/chair/sofa/left/orange, +/obj/effect/floor_decal/corner/black/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"dUv" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell25) +"dVq" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"dVA" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell20) +"dWb" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/steel/monofloor, +/area/redgate/facility/ne) +"dXn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor, +/area/redgate/facility/nw) +"dXo" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/se) +"dXO" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell26) +"dXS" = ( +/obj/structure/frame, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"dYC" = ( +/obj/effect/floor_decal/arrivals/right, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"dZf" = ( +/obj/structure/bed/chair/sofa/right/orange{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"dZr" = ( +/obj/structure/bed/chair/sofa/right/purp{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"eah" = ( +/obj/structure/bed/chair/sofa/right/brown{ + dir = 4 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"eaI" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"eaR" = ( +/obj/structure/bed/chair/sofa/corp/left{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"eaY" = ( +/obj/structure/bed/chair/sofa/corp/right{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"ebb" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"ebj" = ( +/turf/simulated/floor/glamour, +/area/redgate/facility/ne) +"ebm" = ( +/obj/structure/sink{ + pixel_y = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"ebq" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/bboulder2, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"ebR" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/se) +"ecQ" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"edo" = ( +/obj/structure/railing, +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/nw) +"edp" = ( +/obj/structure/prop/rock/sharp, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell26) +"edZ" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/nw) +"eeb" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell2) +"eet" = ( +/obj/structure/prop/rock, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell26) +"eew" = ( +/turf/simulated/floor, +/area/redgate/facility/nw) +"efc" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office6) +"efA" = ( +/obj/machinery/light, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"efC" = ( +/obj/effect/floor_decal/spline/fancy/wood, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/cell5) +"egX" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell18) +"ehw" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"ehD" = ( +/obj/structure/railing, +/obj/structure/table/steel_reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/obj/item/weapon/storage/toolbox/emergency, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"ehY" = ( +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"eid" = ( +/obj/machinery/door/airlock/angled_tgmc/command{ + dir = 4; + name = "blue door"; + req_access = list(802); + req_one_access = list(802) + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"eiO" = ( +/obj/machinery/light/flicker, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"ejb" = ( +/obj/structure/closet/secure_closet/personal{ + name = "I. P. Freely" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/random/forgotten_tram, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"ejr" = ( +/obj/structure/table/glass, +/obj/item/selectable_item/chemistrykit/gender{ + pixel_y = 11 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office8) +"eku" = ( +/obj/machinery/telecomms/allinone, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab3) +"ekR" = ( +/obj/structure/salvageable/computer, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"elH" = ( +/obj/machinery/door/window, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/redgate/facility/sw) +"emh" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"emH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"eoP" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/reddouble, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"epk" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"epA" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/purpledouble, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"equ" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/office2) +"eqY" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/lab3) +"erk" = ( +/obj/item/weapon/bedsheet/pillow/black, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell9) +"erx" = ( +/obj/structure/table/standard, +/obj/random/soap, +/obj/effect/floor_decal/corner/grey{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"esm" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/browndouble, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"esq" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave/advanced, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"esr" = ( +/obj/structure/bed/chair/sofa/corp/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"esz" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"ete" = ( +/obj/structure/bed/chair/sofa/corp/right{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"etR" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor, +/area/redgate/facility/nw) +"eue" = ( +/obj/effect/floor_decal/corner/black/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"euo" = ( +/obj/effect/floor_decal/corner/black/border, +/obj/machinery/light/broken, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"eus" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"euH" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office10) +"euN" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/toy/desk/newtoncradle, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"evB" = ( +/obj/random/trash_pile, +/obj/structure/railing, +/turf/simulated/floor, +/area/redgate/facility/nw) +"evK" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/railing/grey, +/obj/structure/railing/grey{ + dir = 8 + }, +/obj/machinery/button/remote/blast_door{ + id = "vault3" + }, +/obj/machinery/light/floortube{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/steel/monofloor, +/area/redgate/facility/ne) +"evN" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/railing/grey, +/obj/machinery/button/remote/blast_door{ + id = "vault4" + }, +/obj/machinery/light/floortube{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/steel/monofloor, +/area/redgate/facility/ne) +"ewh" = ( +/obj/machinery/light/broken{ + dir = 4 + }, +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"ewo" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell25) +"ewK" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/ne) +"exj" = ( +/obj/structure/table/borosilicate, +/obj/item/device/radio, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell8) +"exB" = ( +/obj/structure/table/steel_reinforced, +/obj/item/modular_computer/laptop, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"exZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"eyA" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"eyQ" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"ezP" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"eAd" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"eAO" = ( +/obj/item/modular_computer/console, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"eBv" = ( +/obj/structure/table/reinforced, +/obj/random/mug, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"eBS" = ( +/obj/structure/bed/chair/sofa/corp, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"eCd" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light{ + dir = 8 + }, +/obj/random/maintenance/misc, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"eCE" = ( +/obj/structure/railing, +/turf/simulated/floor, +/area/redgate/facility/cell19) +"eCN" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"eCT" = ( +/obj/structure/salvageable/console{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"eDj" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/ne) +"eDD" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/redgate/facility/office9) +"eDG" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"eEs" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner"; + pixel_x = 2; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"eFb" = ( +/obj/structure/flora/ausbushes/leafybush, +/obj/item/weapon/bone, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"eFo" = ( +/obj/machinery/computer/centrifuge, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"eGK" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell27) +"eHZ" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"eIu" = ( +/turf/simulated/wall/tgmc/redstripe, +/area/redgate/facility/security) +"eJr" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/mmi/digital/robot, +/turf/simulated/floor/tiled/steel_grid, +/area/redgate/facility/ne) +"eJY" = ( +/obj/structure/closet/secure_closet/medical_wall/anesthetics, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"eKa" = ( +/obj/structure/closet, +/obj/random/cash/huge, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"eKf" = ( +/obj/structure/table/bench/padded, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"eKG" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office6) +"eKY" = ( +/obj/structure/table/hardwoodtable, +/obj/item/modular_computer/laptop/preset/custom_loadout/rugged, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"eLA" = ( +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/ne) +"eLJ" = ( +/obj/structure/closet{ + name = "experimental tools" + }, +/obj/random/flashlight, +/obj/random/flashlight, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"eMl" = ( +/obj/effect/floor_decal/corner/white/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"eMA" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/trash/rkibble, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"eMJ" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"eMY" = ( +/obj/structure/bed/chair/sofa/corp/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"eNm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/se) +"eNP" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/orangedouble, +/turf/simulated/floor, +/area/redgate/facility/office3) +"eOs" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/lab8) +"eOx" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"eOC" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light, +/obj/item/weapon/toy/desk/fan, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"eOF" = ( +/obj/structure/table/steel_reinforced, +/obj/random/mug, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"eOU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"ePT" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"eQB" = ( +/obj/effect/floor_decal/corner/black/border, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"eRX" = ( +/obj/machinery/appliance/cooker/fryer, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"eSb" = ( +/obj/random/trash_pile, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"eSO" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/hosdouble, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/nw) +"eTa" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/nw) +"eTB" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office10) +"eTL" = ( +/obj/structure/table/glass, +/obj/item/stack/nanopaste, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"eUm" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/firstaid/surgery, +/obj/item/device/robotanalyzer, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"eUE" = ( +/obj/item/modular_computer/console{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"eUU" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"eVn" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"eVD" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor, +/area/redgate/facility/nw) +"eWk" = ( +/obj/item/weapon/weldingtool/mini, +/turf/simulated/floor, +/area/redgate/facility/ne) +"eWF" = ( +/obj/random/cutout, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"eYb" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/ne) +"eYi" = ( +/obj/machinery/light/flicker{ + dir = 4 + }, +/obj/structure/salvageable/server, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"eZe" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell21) +"eZB" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"eZG" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell24) +"faz" = ( +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"fbb" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"fbr" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/glass/bottle/biomass{ + pixel_x = -4; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/glass/bottle/biomass{ + pixel_x = 6; + pixel_y = 8 + }, +/obj/item/weapon/reagent_containers/glass/bottle/biomass{ + pixel_x = -7; + pixel_y = 4 + }, +/obj/item/weapon/reagent_containers/glass/bottle/biomass{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/effect/floor_decal/borderfloor, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"fbT" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/window/northright{ + dir = 2; + name = "Cargo Ordering"; + req_access = list(50) + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"fcf" = ( +/obj/machinery/atmospherics/pipe/vent{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"fcq" = ( +/obj/structure/closet/walllocker_double/generic_civ/west, +/obj/item/weapon/reagent_containers/food/condiment/enzyme{ + layer = 5 + }, +/obj/item/weapon/reagent_containers/food/condiment/enzyme{ + layer = 5 + }, +/obj/item/weapon/storage/box/beakers{ + name = "box of measuring cups"; + pixel_x = 2; + pixel_y = 3; + starts_with = list(/obj/item/weapon/reagent_containers/glass/beaker/measuring_cup = 7) + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"fcr" = ( +/obj/structure/table/hardwoodtable, +/obj/structure/closet/walllocker_double/medical/south, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/sw) +"fcs" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/sink/countertop{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"fcz" = ( +/obj/random/forgotten_tram, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/nw) +"fdh" = ( +/obj/machinery/computer/operating, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"fex" = ( +/obj/machinery/chem_master, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"ffr" = ( +/obj/structure/filingcabinet/chestdrawer{ + desc = "A large drawer filled with autopsy reports."; + name = "Autopsy Reports" + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"ffv" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"ffI" = ( +/obj/item/weapon/storage/box/bodybags, +/obj/item/weapon/storage/box/bodybags, +/obj/item/weapon/storage/box/bodybags, +/obj/structure/closet/walllocker_double/medical/north, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"fgq" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"fgB" = ( +/obj/structure/table/steel, +/obj/item/weapon/card/id/keycard, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"fgH" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/defib_kit/jumper_kit, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"fgM" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"fhd" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor, +/area/redgate/facility/ne) +"fhI" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/sink/countertop{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"fhP" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"fil" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell14) +"fiY" = ( +/obj/structure/table/woodentable, +/obj/random/maintenance/research, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"fjn" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"fjI" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/nw) +"fjS" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/weapon/material/knife/butch, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"fjU" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/random/maintenance, +/turf/simulated/floor/carpet/tealcarpet, +/area/redgate/facility/ne) +"fkl" = ( +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"flb" = ( +/obj/structure/bed/chair/sofa/corp/left, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"flg" = ( +/obj/random/fantasy_item, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell23) +"flt" = ( +/obj/structure/salvageable/implant_container, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"flE" = ( +/obj/structure/closet/l3closet/scientist, +/obj/random/maintenance/morestuff, +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"fms" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/structure/filingcabinet/filingcabinet{ + density = 0; + pixel_x = -6; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"fmt" = ( +/obj/structure/table/hardwoodtable, +/obj/random/maintenance, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"fmS" = ( +/obj/structure/salvageable/autolathe, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"fnl" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"fny" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"fnR" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"foz" = ( +/obj/effect/floor_decal/atoll/moss/random, +/obj/structure/flora/pottedplant/bamboo{ + layer = 4; + pixel_y = 11 + }, +/turf/simulated/floor/atoll, +/area/redgate/facility/cell16) +"fpf" = ( +/obj/machinery/light/floortube{ + dir = 8; + pixel_x = -6 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"fqo" = ( +/obj/machinery/light/floortube{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/nw) +"fqE" = ( +/turf/simulated/floor/maglev, +/area/redgate/facility/nw) +"frw" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell24) +"frx" = ( +/obj/structure/window/reinforced/polarized/full{ + id = "cell_4" + }, +/obj/structure/grille, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"frO" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair/backed_grey{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"frV" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/tree/jungle{ + icon_scale_x = 1.5; + icon_scale_y = 1.5 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell24) +"fse" = ( +/turf/simulated/shuttle/wall, +/area/redgate/facility/tram) +"fsj" = ( +/obj/machinery/light/flamp, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/cell2) +"ftt" = ( +/obj/effect/decal/cleanable/blood, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"ftN" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"fub" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell15) +"fug" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"fuo" = ( +/obj/machinery/washing_machine, +/obj/effect/floor_decal/corner/grey{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"fuY" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/cell10) +"fvf" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"fvM" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/ne) +"fvS" = ( +/obj/item/modular_computer/console, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"fwk" = ( +/obj/structure/table/reinforced, +/obj/effect/floor_decal/spline/plain{ + dir = 10 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"fxe" = ( +/obj/effect/floor_decal/corner/blue/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"fxx" = ( +/obj/structure/closet/chefcloset, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"fys" = ( +/obj/machinery/power/emitter{ + anchored = 1; + icon_state = "emitter1"; + state = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"fyM" = ( +/obj/structure/toilet/prison{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/nw) +"fzd" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair/sofa/corp, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"fzm" = ( +/obj/structure/dancepole, +/mob/living/simple_mob/vore/succubus, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/nw) +"fzq" = ( +/obj/structure/medical_stand, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"fzK" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell27) +"fAc" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"fAe" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/box/monkeycubes, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 28 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"fAs" = ( +/mob/living/simple_mob/vore/alienanimals/succlet, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"fAP" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light{ + dir = 1; + stat = 0 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"fBu" = ( +/obj/structure/closet/walllocker_double/science/south, +/obj/random/maintenance/foodstuff, +/obj/random/maintenance/foodstuff, +/obj/random/maintenance/foodstuff, +/obj/random/maintenance/foodstuff, +/obj/random/maintenance/foodstuff, +/obj/random/maintenance/foodstuff, +/obj/random/maintenance/foodstuff, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"fBP" = ( +/obj/effect/floor_decal/corner/orange/border, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"fBW" = ( +/obj/item/modular_computer/console{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"fCk" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"fCx" = ( +/obj/effect/floor_decal/corner/pink/bordercorner, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"fCI" = ( +/obj/structure/prop/rock/sharp, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell20) +"fEd" = ( +/obj/random/junk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"fEG" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell27) +"fER" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"fFU" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/borderfloorwhite, +/obj/item/weapon/storage/box/gloves, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"fFX" = ( +/obj/structure/table/glass, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office6) +"fGa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"fGx" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"fHh" = ( +/obj/machinery/optable, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"fHH" = ( +/obj/structure/table/steel, +/obj/item/weapon/autopsy_scanner, +/obj/item/weapon/surgical/scalpel, +/obj/item/weapon/surgical/cautery, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"fHQ" = ( +/obj/effect/floor_decal/arrivals, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"fHW" = ( +/obj/machinery/mecha_part_fabricator/pros{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/redgate/facility/ne) +"fIw" = ( +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"fIH" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"fIS" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/computer/arcade, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"fIW" = ( +/obj/structure/table/reinforced, +/obj/random/maintenance/foodstuff, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"fJS" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/tree/jungle_small, +/turf/simulated/floor/grass, +/area/redgate/facility/cell24) +"fKj" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"fKl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"fKo" = ( +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"fKY" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell9) +"fLJ" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell24) +"fLK" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"fLR" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"fMx" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"fNe" = ( +/obj/machinery/chem_master/condimaster, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"fNY" = ( +/obj/effect/decal/cleanable/blood/drip, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"fOy" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"fOI" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/nw) +"fOO" = ( +/obj/structure/table/woodentable, +/obj/item/clothing/glasses/regular, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"fPE" = ( +/turf/simulated/floor, +/area/redgate/facility/sw) +"fPQ" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/medbay) +"fPZ" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office10) +"fQa" = ( +/obj/structure/table/glass, +/obj/item/device/defib_kit/loaded, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"fQY" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/firstaid/surgery, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"fRB" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"fRR" = ( +/obj/structure/morgue, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"fRU" = ( +/obj/structure/morgue{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"fSN" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/flora/pottedplant/crystal, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"fTs" = ( +/obj/effect/floor_decal/techfloor{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"fTR" = ( +/obj/item/clothing/shoes/heels, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"fUe" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"fUG" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"fUR" = ( +/obj/structure/closet, +/obj/random/mainttoyloot/nofail, +/obj/random/forgotten_tram, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"fVc" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/prop/rock/round, +/turf/simulated/floor/grass, +/area/redgate/facility/cell24) +"fVF" = ( +/obj/structure/bed/chair/office/dark, +/obj/effect/floor_decal/carpet/blue, +/turf/simulated/floor/carpet/bcarpet, +/area/redgate/facility/ne) +"fVL" = ( +/obj/item/modular_computer/console{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell24) +"fVM" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = 8; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell24) +"fVS" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/structure/closet/walllocker_double/medical/west, +/obj/item/device/megaphone, +/turf/simulated/floor/wood, +/area/redgate/facility/cell2) +"fVZ" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"fWl" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"fWF" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"fWP" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/corner/blue/border, +/obj/item/device/defib_kit/loaded, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"fXP" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"fYA" = ( +/obj/machinery/door/airlock/angled_tgmc/personal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"fZn" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/nw) +"gaJ" = ( +/obj/random/forgotten_tram, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/nw) +"gba" = ( +/obj/structure/closet/secure_closet/personal{ + name = "Kleiner" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"gbm" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/box/bodybags{ + pixel_x = -1; + pixel_y = -2 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/redgate/facility/ne) +"gbT" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"gcd" = ( +/mob/living/simple_mob/vore/alienanimals/catslug{ + color = "#fda000"; + name = "subject 24601" + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"gcQ" = ( +/obj/structure/table/standard, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gdk" = ( +/obj/machinery/door/window{ + dir = 2 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"gdl" = ( +/obj/structure/smolebuilding/houses, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"gdx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"gee" = ( +/obj/structure/bed/double/padded, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"gen" = ( +/obj/effect/floor_decal/techfloor{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"ghg" = ( +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"ghq" = ( +/obj/structure/disposalpipe/broken{ + dir = 1 + }, +/turf/simulated/floor/water/deep/pool, +/area/redgate/facility/ne) +"ghu" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/item/modular_computer/console, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"ghx" = ( +/obj/effect/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/effect/floor_decal/carpet/blue{ + dir = 1 + }, +/obj/effect/floor_decal/carpet/blue{ + dir = 9 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/redgate/facility/ne) +"ghA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"ghT" = ( +/obj/structure/table/steel, +/obj/item/device/integrated_circuit_printer, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"giI" = ( +/obj/effect/floor_decal/corner_steel_grid{ + dir = 10 + }, +/obj/machinery/bodyscanner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"gka" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/table/rack/steel, +/obj/item/weapon/towel/random, +/obj/random/soap, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office4) +"gki" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"gkp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"gkx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/sw) +"gkS" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/mob/living/simple_mob/vore/raptor/yellow, +/turf/simulated/floor/grass, +/area/redgate/facility/cell24) +"gkW" = ( +/obj/structure/table/glass, +/obj/machinery/chemical_dispenser/full, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"glb" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell24) +"glE" = ( +/turf/simulated/floor/carpet/blue, +/area/redgate/facility/office2) +"glW" = ( +/obj/effect/floor_decal/corner/grey/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"glX" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gmg" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell24) +"gmu" = ( +/turf/simulated/floor/wood, +/area/redgate/facility/cell2) +"gmH" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"gmR" = ( +/obj/machinery/computer/centrifuge, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"gmU" = ( +/obj/structure/table/woodentable, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"gnc" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/storage/briefcase/inflatable{ + pixel_y = 3 + }, +/obj/item/weapon/storage/briefcase/inflatable{ + pixel_x = -3 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"gnn" = ( +/obj/machinery/vending/dinnerware, +/obj/effect/floor_decal/corner/beige{ + dir = 5 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"gnz" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 5 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"gnL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"gpa" = ( +/obj/structure/morgue, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"gpX" = ( +/obj/structure/bed/chair/office/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gqM" = ( +/obj/item/modular_computer/console{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"gqP" = ( +/obj/structure/morgue{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"grC" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"gsA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"gsB" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_grid, +/area/redgate/facility/ne) +"gsU" = ( +/obj/structure/dogbed, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"gsY" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/nw) +"gtm" = ( +/mob/living/simple_mob/vore/alienanimals/succlet/big, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"gtp" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/lab5) +"gty" = ( +/obj/structure/filingcabinet/filingcabinet{ + pixel_x = 11 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gtF" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"gtV" = ( +/obj/effect/floor_decal/techfloor/orange, +/obj/structure/railing, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/tram) +"guK" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/water/deep/pool, +/area/redgate/facility/ne) +"gvW" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/sink{ + pixel_y = 22 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"gvX" = ( +/obj/machinery/light/small, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/button/remote/airlock{ + dir = 1; + id = "cell_17"; + pixel_x = -8; + pixel_y = -24; + specialfunctions = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"gwD" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gxm" = ( +/obj/effect/floor_decal/carpet/blue{ + dir = 8 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/redgate/facility/ne) +"gyj" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell24) +"gyS" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/tram) +"gzb" = ( +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"gzA" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + density = 0; + dir = 8; + pixel_x = 20 + }, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell24) +"gzV" = ( +/obj/structure/closet/walllocker_double/science/east, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell24) +"gAk" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/sw) +"gAm" = ( +/obj/effect/floor_decal/techfloor/orange{ + dir = 1 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/tram) +"gAt" = ( +/obj/structure/closet/secure_closet/engineering_electrical/double{ + anchored = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"gAV" = ( +/obj/effect/floor_decal/spline/plain, +/obj/structure/closet/walllocker_double/medical/west, +/obj/item/clothing/under/suit_jacket/extravagant, +/obj/item/clothing/under/suit_jacket/female/skirt, +/obj/item/clothing/under/suit_jacket, +/obj/item/clothing/shoes/dress, +/turf/simulated/floor/wood, +/area/redgate/facility/cell2) +"gBc" = ( +/obj/structure/closet/wardrobe/pjs, +/obj/effect/floor_decal/corner/grey{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"gBz" = ( +/turf/simulated/floor/tiled/eris/bcircuit, +/area/redgate/facility/ne) +"gBF" = ( +/obj/item/stack/cable_coil, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"gCf" = ( +/turf/simulated/wall/tgmc/darkwall, +/area/redgate/facility/nw) +"gDA" = ( +/obj/effect/floor_decal/corner_steel_grid{ + dir = 10 + }, +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"gDB" = ( +/obj/structure/smolebuilding/warehouses, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"gDM" = ( +/obj/structure/closet/secure_closet/security, +/obj/machinery/light, +/obj/random/grenade/less_lethal, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"gDT" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/obj/machinery/button/windowtint{ + id = "cell_10"; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"gEf" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"gEi" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"gEo" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gFs" = ( +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/nw) +"gFU" = ( +/turf/simulated/floor/tiled/milspec/raised, +/area/redgate/facility/cell14) +"gGp" = ( +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"gGD" = ( +/mob/living/simple_mob/vore/fennec/huge{ + autodoom = 0; + ghostjoin = 1; + vore_bump_chance = 25; + vore_pounce_chance = 50 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"gGG" = ( +/obj/structure/reagent_dispensers/virusfood{ + pixel_x = 32; + pixel_y = -2 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"gHp" = ( +/obj/machinery/disposal/wall{ + dir = 4 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/table/reinforced, +/obj/machinery/button/remote/blast_door{ + dir = 4; + id = "raptor"; + pixel_x = -24 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell24) +"gHz" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gIb" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gJa" = ( +/obj/structure/toilet{ + pixel_y = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"gJq" = ( +/obj/effect/floor_decal/carpet/blue, +/obj/effect/floor_decal/carpet/blue{ + dir = 8 + }, +/obj/effect/floor_decal/carpet/blue{ + dir = 10 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/redgate/facility/ne) +"gJu" = ( +/obj/machinery/recharge_station, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"gJT" = ( +/obj/machinery/door/blast/regular{ + id = "raptor" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell24) +"gKb" = ( +/obj/structure/closet/walllocker_double/science/east, +/obj/random/pouch, +/obj/random/medical/lite, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell24) +"gKi" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab5) +"gLc" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4; + id_tag = "cell_7" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"gNW" = ( +/obj/structure/grille, +/obj/item/weapon/material/shard, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell21) +"gOc" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"gOw" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/office11) +"gOZ" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 4 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"gPt" = ( +/obj/structure/sign/levels/medical/cloning{ + dir = 1 + }, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/ne) +"gPW" = ( +/obj/structure/table/standard, +/obj/structure/table/standard, +/obj/random/forgotten_tram, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"gQm" = ( +/obj/machinery/disease2/isolator, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"gQy" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gQH" = ( +/obj/random/junk, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"gRu" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/office2) +"gRw" = ( +/obj/structure/table/glass, +/obj/item/weapon/tool/wrench, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"gSw" = ( +/obj/machinery/door/airlock/angled_tgmc/prep{ + name = "green door"; + req_access = list(803); + req_one_access = list(803) + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gSI" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"gSZ" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"gTf" = ( +/obj/structure/closet/emcloset, +/obj/random/maintenance/engineering, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/button/remote/blast_door{ + id = "facility_engine"; + pixel_x = 9; + pixel_y = 26 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"gTQ" = ( +/obj/item/weapon/potion_material/glowing_gem, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"gTY" = ( +/obj/structure/railing, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"gUC" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gVF" = ( +/obj/structure/closet, +/obj/random/contraband/nofail, +/obj/random/forgotten_tram, +/obj/item/weapon/card/id/keycard/green, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"gVH" = ( +/obj/structure/table/hardwoodtable, +/obj/machinery/light, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"gVZ" = ( +/obj/structure/flora/log2, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell24) +"gWb" = ( +/obj/item/modular_computer/console{ + dir = 1 + }, +/obj/structure/railing/grey, +/turf/simulated/floor/tiled/eris/steel/monofloor, +/area/redgate/facility/ne) +"gWp" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/item/clothing/accessory/stethoscope, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office6) +"gWC" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"gYD" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell2) +"gYM" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/reagent_dispensers/water_cooler/full, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"gZj" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = 8; + pixel_y = 5 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"gZx" = ( +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"hbE" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4; + id_tag = "cell_10" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"hbP" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light, +/obj/structure/bed/chair/backed_grey{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"hcJ" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/water/deep/pool, +/area/redgate/facility/ne) +"hcR" = ( +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "office_4"; + pixel_x = 25; + specialfunctions = 4 + }, +/obj/structure/bed/psych, +/obj/item/modular_computer/telescreen{ + pixel_y = 25 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/sw) +"hcZ" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/nw) +"hdd" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"hee" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hey" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"hez" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell24) +"heL" = ( +/obj/structure/table/woodentable, +/obj/machinery/microwave/advanced, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"hfA" = ( +/obj/structure/prop/rock/water, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell26) +"hgj" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell20) +"hgB" = ( +/obj/random/trash_pile, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"hgH" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"hgV" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hho" = ( +/obj/machinery/light/broken{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"hhE" = ( +/obj/structure/flora/log1, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell3) +"hhG" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"hhQ" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hhZ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/nw) +"hjm" = ( +/obj/machinery/disposal/wall{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/effect/floor_decal/corner/black/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"hjo" = ( +/turf/simulated/wall/wood, +/area/redgate/facility/ne) +"hjQ" = ( +/obj/structure/reagent_dispensers/coolanttank, +/turf/simulated/floor/water/deep/pool, +/area/redgate/facility/ne) +"hkg" = ( +/mob/living/simple_mob/animal/passive/fish/measelshark, +/turf/simulated/floor/water/deep/pool, +/area/redgate/facility/ne) +"hlm" = ( +/obj/structure/table/standard, +/obj/item/device/mass_spectrometer/adv, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"hly" = ( +/obj/random/junk, +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/ne) +"hmI" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/machinery/light/floortube{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"hnz" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hnA" = ( +/obj/structure/table/glass, +/obj/item/bodybag/cryobag{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag{ + pixel_x = 1; + pixel_y = 1 + }, +/obj/item/bodybag/cryobag{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"hnC" = ( +/turf/unsimulated/wall/glamour, +/area/redgate/facility/ne) +"hom" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hpN" = ( +/obj/structure/bed/chair/shuttle{ + dir = 1 + }, +/turf/simulated/shuttle/floor/white, +/area/redgate/facility/tram) +"hqg" = ( +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/nw) +"hqi" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hqB" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"hqL" = ( +/obj/effect/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hrq" = ( +/obj/structure/closet/masks, +/obj/random/cash, +/turf/simulated/floor, +/area/redgate/facility/nw) +"hrw" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 12; + pixel_y = 3 + }, +/obj/structure/mirror{ + dir = 8; + pixel_x = 26; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hrF" = ( +/obj/structure/table/standard, +/obj/item/weapon/material/kitchen/rollingpin, +/obj/item/weapon/material/knife/butch, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hrI" = ( +/obj/structure/table/borosilicate, +/obj/random/maintenance/engineering, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"hrT" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/obj/random/vendorall, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hsn" = ( +/obj/structure/closet/l3closet/janitor, +/turf/simulated/floor/tiled, +/area/redgate/facility/office3) +"hso" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue, +/turf/simulated/floor/carpet/tealcarpet, +/area/redgate/facility/nw) +"hsx" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"hsB" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/ne) +"htr" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell23) +"htQ" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/dropper, +/obj/item/weapon/reagent_containers/glass/beaker{ + pixel_x = 5 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"htX" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/securitylobby) +"htY" = ( +/obj/structure/filingcabinet/filingcabinet{ + pixel_x = 11 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"hul" = ( +/obj/effect/floor_decal/corner_steel_grid{ + dir = 10 + }, +/obj/machinery/sleep_console{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"hum" = ( +/obj/structure/table/standard, +/obj/item/clothing/gloves/sterile/nitrile, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"huJ" = ( +/obj/item/modular_computer/console{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"hwd" = ( +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/ne) +"hwl" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office2) +"hwo" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"hyx" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"hyG" = ( +/obj/item/modular_computer/console{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hze" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hzN" = ( +/obj/machinery/disposal/wall{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/effect/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hAl" = ( +/obj/effect/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hAX" = ( +/turf/simulated/floor/carpet/bcarpet, +/area/redgate/facility/ne) +"hCa" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + dir = 2 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hEa" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 10 + }, +/turf/simulated/floor/carpet/tealcarpet, +/area/redgate/facility/nw) +"hEA" = ( +/obj/structure/table/glass, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"hFv" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"hFK" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/ne) +"hFS" = ( +/obj/structure/flora/ausbushes/leafybush, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet{ + pixel_y = 18 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/ne) +"hGa" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"hGU" = ( +/obj/structure/extinguisher_cabinet{ + dir = 8; + pixel_x = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"hGY" = ( +/obj/structure/table/glass, +/obj/item/roller, +/obj/item/roller{ + pixel_y = 8 + }, +/obj/item/roller{ + pixel_y = 16 + }, +/obj/effect/floor_decal/corner/blue/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"hHs" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"hHy" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hHB" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell3) +"hHI" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/turf/simulated/floor, +/area/redgate/facility/nw) +"hHS" = ( +/obj/structure/table/standard, +/obj/random/maintenance/foodstuff, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hIB" = ( +/obj/structure/flora/tree/jungle{ + icon_scale_x = 1.5; + icon_scale_y = 1.5 + }, +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, +/area/redgate/facility/ne) +"hIR" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/tree/jungle_small, +/turf/simulated/floor/grass, +/area/redgate/facility/ne) +"hJp" = ( +/obj/structure/closet, +/obj/random/bluespace, +/obj/machinery/light, +/obj/random/carp_plushie, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"hJz" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "office_sec" + }, +/turf/simulated/floor, +/area/redgate/facility/office10) +"hJD" = ( +/obj/structure/closet, +/obj/random/contraband/nofail, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"hJO" = ( +/obj/structure/bed/chair/sofa/corp/corner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hKh" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/item/stack/cable_coil, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell22) +"hKi" = ( +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/nw) +"hKV" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell27) +"hLa" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/stamp/denied{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/item/weapon/stamp/accepted, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"hLq" = ( +/obj/machinery/light{ + dir = 1; + stat = 0 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"hLH" = ( +/turf/unsimulated/wall/dark, +/area/redgate/facility/cell9) +"hLT" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"hMK" = ( +/obj/structure/flora/ausbushes/leafybush, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/structure/disposaloutlet{ + pixel_y = 18 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"hMN" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/nw) +"hNb" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"hNR" = ( +/obj/machinery/door/airlock/angled_tgmc/personal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"hNU" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = 9; + pixel_y = 17 + }, +/obj/random/forgotten_tram, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hNY" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 8 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hOu" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/office9) +"hON" = ( +/obj/structure/closet, +/obj/random/forgotten_tram, +/obj/random/forgotten_tram, +/obj/random/tank, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/nw) +"hOS" = ( +/mob/living/simple_mob/vore/sonadile, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"hOT" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/loading{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"hPg" = ( +/obj/structure/filingcabinet/filingcabinet{ + pixel_x = 11 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"hRM" = ( +/turf/simulated/shuttle/floor/black, +/area/redgate/facility/cell19) +"hRO" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/lab3) +"hSt" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/leafybush, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"hTi" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/bed/chair/sofa/corp{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"hTy" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office6) +"hTz" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"hTP" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4; + id_tag = "cell_2" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell1) +"hTY" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell13) +"hUI" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 10 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hVM" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/office6) +"hWk" = ( +/obj/effect/floor_decal/corner/lime/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"hWM" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"hXi" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"hXt" = ( +/obj/effect/floor_decal/corner/blue/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"hXH" = ( +/obj/structure/bed/chair/sofa/corner/orange{ + dir = 1 + }, +/obj/effect/floor_decal/corner/black/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"hXX" = ( +/obj/item/weapon/paper/crumpled, +/obj/effect/floor_decal/corner/black/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"hYb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"hYC" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/glass/bottle/dermaline, +/obj/item/weapon/reagent_containers/glass/bottle/dermaline, +/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, +/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office7) +"hYS" = ( +/obj/machinery/light/small, +/obj/structure/lattice, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"hZW" = ( +/obj/structure/salvageable/implant_container, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"iai" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"iaS" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"icc" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"icD" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"icP" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 6 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/office1) +"idc" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/stalkybush, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"idD" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"idZ" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/ne) +"ief" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/obj/machinery/disposal/wall{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"iew" = ( +/obj/structure/fireplace{ + dir = 4; + pixel_x = -7 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"ieY" = ( +/obj/machinery/power/rad_collector, +/turf/simulated/floor/tiled/monotile, +/area/redgate/facility/cell29) +"ifo" = ( +/mob/living/simple_mob/vore/cryptdrake/albedo, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell26) +"ifG" = ( +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office10) +"ifI" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/bed/chair/sofa/corp/left{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"igb" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/ne) +"igk" = ( +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/lab3) +"igu" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"igR" = ( +/obj/structure/grille/broken, +/obj/item/weapon/material/shard, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell21) +"igU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"ihg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/nw) +"iiy" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/ne) +"iiS" = ( +/obj/structure/bed/chair/sofa/right/orange{ + dir = 4 + }, +/obj/effect/floor_decal/corner/black/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"ijj" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"ijU" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 6 + }, +/obj/effect/floor_decal/transit/orange{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"ijV" = ( +/obj/effect/floor_decal/corner/red/bordercorner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"ikz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"ikK" = ( +/obj/effect/floor_decal/borderfloorwhite, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"ilo" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"ilT" = ( +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"imo" = ( +/obj/structure/salvageable/data, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"imr" = ( +/obj/machinery/light/broken{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"ims" = ( +/obj/structure/prop/rock/small, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"ino" = ( +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office2) +"inz" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"inN" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/leafybush, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"inU" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 9 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"inW" = ( +/obj/structure/prop/rock/sharp, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"iod" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"iop" = ( +/mob/living/simple_mob/animal/space/alien/drone{ + ai_holder_type = /datum/ai_holder/simple_mob/vore + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell25) +"ioF" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "cell_4" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"ioW" = ( +/obj/structure/closet/secure_closet/personal, +/obj/item/clothing/under/bathrobe, +/obj/effect/floor_decal/corner/grey{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"ipg" = ( +/obj/structure/window/reinforced/polarized/full{ + id = "cell_2" + }, +/obj/structure/grille, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell1) +"ipG" = ( +/obj/effect/floor_decal/corner/white/bordercorner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"ipH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"iqw" = ( +/obj/structure/table/woodentable, +/obj/random/snack, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"iqH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/ne) +"iqJ" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell24) +"irw" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7; + pixel_y = 5 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office9) +"irW" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell13) +"isf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"isi" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"isw" = ( +/obj/machinery/door/airlock/angled_tgmc/engineering{ + dir = 4 + }, +/turf/simulated/floor/tiled/monotile, +/area/redgate/facility/cell29) +"isI" = ( +/obj/random/vendorall{ + dir = 4; + pixel_x = -8 + }, +/obj/effect/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"itM" = ( +/obj/structure/table/hardwoodtable, +/obj/structure/table/hardwoodtable, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"iue" = ( +/obj/machinery/atmospherics/pipe/vent{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iuk" = ( +/obj/structure/girder, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"iuq" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"iuu" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab5) +"iuM" = ( +/obj/item/weapon/paper/crumpled, +/obj/effect/floor_decal/corner/black/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iuQ" = ( +/obj/item/modular_computer/console, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"ivl" = ( +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"ivv" = ( +/obj/structure/table/reinforced, +/obj/random/smes_coil, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"iwj" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"ixw" = ( +/obj/structure/flora/tree/jungle{ + icon_scale_x = 1.5; + icon_scale_y = 1.5 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"ixX" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/vending/snlvend{ + dir = 4; + pixel_x = -8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"ixZ" = ( +/turf/simulated/floor/tiled/milspec/raised, +/area/redgate/facility/ne) +"izU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell23) +"iAU" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"iBl" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"iBw" = ( +/turf/simulated/wall/tgmc/redstripe, +/area/redgate/facility/office10) +"iBR" = ( +/obj/structure/bed/chair/bay/chair/padded/red/bignest, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"iCc" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + id_tag = "office_5" + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office9) +"iCi" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office9) +"iDb" = ( +/obj/structure/closet, +/obj/random/instrument, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iDk" = ( +/obj/machinery/light, +/turf/simulated/floor/water/contaminated, +/area/redgate/facility/ne) +"iEk" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/reinforced, +/obj/structure/sink/countertop{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"iEm" = ( +/obj/structure/bed/chair/sofa/left/orange{ + dir = 4 + }, +/obj/effect/floor_decal/corner/black/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iEH" = ( +/obj/machinery/button/remote/blast_door{ + dir = 8; + id = "creature"; + pixel_x = 25 + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"iEJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"iFb" = ( +/obj/structure/closet, +/obj/random/energy/sec, +/obj/random/flashlight, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iFi" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell23) +"iHH" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"iHJ" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 1 + }, +/obj/structure/sink{ + pixel_y = 16 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"iHL" = ( +/obj/effect/floor_decal/rust, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"iIy" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/vehicle/train/engine{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"iIY" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell25) +"iJi" = ( +/obj/structure/prop/rock/flat, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"iJk" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/vent{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"iJw" = ( +/obj/structure/flora/ausbushes/fullgrass, +/mob/living/simple_mob/vore/aggressive/giant_snake{ + ai_holder_type = /datum/ai_holder/simple_mob/vore; + vore_bump_chance = 50; + vore_default_mode = "Hold"; + vore_digest_chance = 0; + vore_pounce_chance = 100 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"iJy" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/item/weapon/reagent_containers/food/snacks/superbiteburger, +/obj/item/weapon/reagent_containers/food/snacks/superbiteburger, +/obj/item/weapon/reagent_containers/food/snacks/superbiteburger, +/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake, +/obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake, +/obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake, +/obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake, +/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake, +/obj/item/weapon/reagent_containers/food/snacks/pancakes, +/obj/item/weapon/reagent_containers/food/snacks/onionrings, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"iKG" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/reagent_containers/food/snacks/nachos, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"iLu" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "office_5"; + pixel_x = -25; + specialfunctions = 4 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -24; + pixel_y = 9 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/redgate/facility/office9) +"iMT" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"iNs" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/structure/extinguisher_cabinet{ + dir = 8; + pixel_x = 30 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/redgate/facility/office9) +"iPx" = ( +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"iQz" = ( +/obj/item/modular_computer/console{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iQO" = ( +/obj/structure/closet, +/obj/random/tool/alien, +/obj/item/device/megaphone, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iRl" = ( +/obj/item/modular_computer/console, +/obj/machinery/light{ + dir = 1; + stat = 0 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iRw" = ( +/obj/structure/table/standard, +/obj/machinery/microwave, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 1; + stat = 0 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"iSB" = ( +/obj/structure/table/standard, +/obj/random/forgotten_tram, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iSE" = ( +/obj/machinery/door/window{ + dir = 8 + }, +/obj/machinery/door/window, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"iSV" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/turf/unsimulated/shuttle/plating, +/area/redgate/facility/tram) +"iTs" = ( +/obj/structure/railing/grey{ + dir = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/se) +"iTw" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/reagent_containers/food/drinks/teapot, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"iUd" = ( +/obj/structure/bed/chair/sofa/corner/orange{ + dir = 4 + }, +/obj/effect/floor_decal/corner/black/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iUq" = ( +/obj/structure/table/standard, +/obj/random/coin, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iUt" = ( +/mob/living/simple_mob/vore/jelly, +/obj/effect/floor_decal/rust, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"iUA" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 5 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/office1) +"iVl" = ( +/obj/effect/floor_decal/corner/pink/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/vent{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"iVL" = ( +/obj/item/weapon/paper, +/obj/effect/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light/broken{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iWh" = ( +/obj/item/weapon/paper/crumpled/bloody{ + info = "Report: The Canidfelanis specimens have take a sudden disliking to the lights in their study cell. It's becoming difficult to obser + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"iXt" = ( +/obj/structure/table/reinforced, +/obj/random/powercell, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"iXT" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/vehicle/train/trolley{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"iYe" = ( +/turf/simulated/shuttle/floor/alien, +/area/redgate/facility/cell19) +"iYV" = ( +/obj/structure/table/steel_reinforced, +/obj/random/mech_toy, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"iZa" = ( +/obj/structure/table/rack/steel, +/obj/item/weapon/gun/energy/sickshot, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"iZh" = ( +/obj/structure/flora/ausbushes/reedbush, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"jab" = ( +/obj/structure/flora/ausbushes/fernybush, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell27) +"jbs" = ( +/obj/structure/prop/rock, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"jbG" = ( +/obj/effect/floor_decal/corner/grey{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"jbI" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"jbN" = ( +/obj/effect/floor_decal/corner/white/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"jcf" = ( +/obj/structure/table/standard, +/obj/item/weapon/entrepreneur/emf, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell27) +"jcm" = ( +/obj/structure/table/woodentable, +/obj/structure/sink/countertop{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"jcT" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"jcX" = ( +/obj/structure/table/glass, +/obj/item/device/healthanalyzer, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jfC" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "office_5" + }, +/turf/simulated/floor, +/area/redgate/facility/office9) +"jhi" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/potion_base/aqua_regia, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"jhV" = ( +/obj/effect/floor_decal/corner_steel_grid{ + dir = 10 + }, +/obj/structure/medical_stand, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"jiV" = ( +/obj/structure/table/standard, +/obj/item/instrument/saxophone/spectral, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/nw) +"jjY" = ( +/obj/structure/table/standard, +/obj/item/clothing/ears/earmuffs, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jkm" = ( +/obj/structure/prop/machine/alien_tank/starts_broken, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"jkQ" = ( +/obj/structure/table/glass, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office8) +"jkW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"jkX" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen/fountain3, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"jla" = ( +/obj/item/weapon/card/id/keycard/blue, +/turf/simulated/floor, +/area/redgate/facility/nw) +"jlr" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"jlE" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jlP" = ( +/obj/structure/table/reinforced, +/obj/machinery/atmospherics/pipe/vent{ + dir = 1 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"jmv" = ( +/turf/simulated/wall/solidrock, +/area/redgate/facility/cell20) +"jmw" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jmK" = ( +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jmP" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 9 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/office1) +"jmR" = ( +/obj/machinery/disposal/wall, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"jnT" = ( +/obj/structure/table/rack/shelf, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"joV" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"joZ" = ( +/obj/machinery/light/broken, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"jqH" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"jrc" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/vehicle/train/trolley{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"jrI" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"jrO" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "office_4"; + opacity = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"jrR" = ( +/obj/structure/table/reinforced, +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"jsE" = ( +/obj/structure/prop/rock/watersharp, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell3) +"jsN" = ( +/obj/structure/prop/rock/round, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"jtc" = ( +/obj/item/weapon/material/shard, +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell22) +"jvQ" = ( +/obj/structure/flora/tree/jungle, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"jwg" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"jws" = ( +/obj/structure/table/woodentable, +/obj/machinery/microwave, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"jwL" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -24; + pixel_y = -24 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office6) +"jxW" = ( +/obj/structure/bed/chair/office/light{ + dir = 1 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/redgate/facility/office9) +"jxX" = ( +/obj/effect/floor_decal/rust, +/obj/random/maintenance, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"jyY" = ( +/obj/structure/flora/rocks1, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"jzn" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/tram) +"jAq" = ( +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"jAG" = ( +/obj/structure/closet/secure_closet/personal{ + name = "Q. T. Gutslut" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/obj/random/forgotten_tram, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"jAJ" = ( +/obj/structure/table/rack/shelf/wood, +/obj/item/device/slow_sizegun, +/obj/machinery/light, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"jBu" = ( +/obj/structure/closet/cabinet, +/obj/item/clothing/under/dress/bluedress, +/obj/machinery/button/windowtint{ + id = "cell_2"; + pixel_x = 22 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"jBv" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"jCi" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"jCk" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"jCv" = ( +/obj/structure/closet/walllocker_double/science/east, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"jCw" = ( +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"jDE" = ( +/obj/item/weapon/storage/vore_egg/slimeglob{ + name = "sect egg clutch" + }, +/turf/simulated/floor/tiled/dark, +/area/redgate/facility/cell10) +"jDH" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/redgate/facility/office9) +"jEd" = ( +/obj/random/trash_pile, +/turf/simulated/floor, +/area/redgate/facility/cell12) +"jFd" = ( +/obj/structure/bed/chair/bay/chair/padded/red/bignest, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/redgate/facility/office9) +"jFf" = ( +/obj/structure/closet, +/obj/random/unidentified_medicine, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jFi" = ( +/obj/effect/floor_decal/rust, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"jFt" = ( +/mob/living/simple_mob/vore/jelly, +/obj/effect/floor_decal/rust, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"jGJ" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell22) +"jGO" = ( +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jHC" = ( +/obj/machinery/light/floortube{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/nw) +"jHO" = ( +/obj/structure/prop/rock/small/wateralt, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell3) +"jIr" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"jIy" = ( +/turf/simulated/floor/tiled/eris/dark/monofloor, +/area/redgate/facility/ne) +"jIJ" = ( +/obj/machinery/light, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell3) +"jJi" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office8) +"jJk" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/leafybush, +/obj/machinery/light, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"jJy" = ( +/obj/structure/table/glass, +/obj/random/firstaid, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"jKM" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"jLd" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell3) +"jLf" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell23) +"jLi" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"jLq" = ( +/obj/machinery/door/airlock/angled_tgmc/personal, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"jLP" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/office8) +"jMI" = ( +/obj/structure/table/woodentable, +/obj/machinery/recharger, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/cell2) +"jMW" = ( +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jNH" = ( +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jOf" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office9) +"jOx" = ( +/obj/machinery/optable, +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/item/device/mmi/digital/posibrain, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"jOG" = ( +/obj/machinery/button/remote/airlock{ + dir = 1; + id = "office_3"; + pixel_x = 8; + pixel_y = -24; + specialfunctions = 4 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"jPg" = ( +/obj/effect/floor_decal/corner/black/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jPl" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 8 + }, +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"jPE" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 1 + }, +/obj/structure/closet/walllocker_double/medical/north, +/obj/random/medical/pillbottle, +/obj/random/medical/pillbottle, +/obj/random/medical{ + pixel_x = -4; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"jPH" = ( +/obj/structure/curtain/open{ + anchored = 1; + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"jQJ" = ( +/obj/structure/flora/ausbushes/stalkybush, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell26) +"jRh" = ( +/obj/effect/floor_decal/corner/black/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/flicker, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jRo" = ( +/turf/simulated/floor/maglev, +/area/redgate/facility/sw) +"jRK" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"jSd" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"jSy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/sw) +"jSB" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/nw) +"jTs" = ( +/obj/item/weapon/potion_material/folded_dark, +/turf/unsimulated/floor/dark, +/area/redgate/facility/cell9) +"jUm" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"jUM" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/mmi, +/turf/simulated/floor/tiled/steel_grid, +/area/redgate/facility/ne) +"jUS" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jUV" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"jVG" = ( +/obj/machinery/atmospherics/pipe/vent{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"jVL" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"jVY" = ( +/obj/structure/table/glass, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"jWd" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"jWJ" = ( +/obj/structure/closet/walllocker/wooden/north, +/obj/item/toy/russian_revolver/trick_revolver, +/obj/item/toy/russian_revolver/trick_revolver, +/obj/item/clothing/gloves/sterile/nitrile, +/obj/item/clothing/gloves/sterile/nitrile, +/obj/item/clothing/gloves/sterile/nitrile, +/obj/item/clothing/suit/storage/toggle/labcoat, +/turf/simulated/floor, +/area/redgate/facility/office3) +"jXN" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/random/trash_pile, +/turf/simulated/floor, +/area/redgate/facility/nw) +"jYL" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"jYX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor, +/area/redgate/facility/sw) +"jZd" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"jZu" = ( +/obj/structure/bed/chair/backed_grey, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"jZX" = ( +/obj/structure/bed/double/padded{ + icon_scale_x = 2; + icon_scale_y = 2 + }, +/obj/item/weapon/bedsheet/rddouble{ + icon_scale_x = 2; + icon_scale_y = 2 + }, +/obj/item/toy/plushie/bigcat{ + layer = 5 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"kaO" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"kaX" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair/sofa/corp/left, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"kcS" = ( +/obj/machinery/light/broken{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell21) +"kdu" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"kek" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"keC" = ( +/obj/structure/railing, +/obj/structure/closet/boxinggloves, +/turf/simulated/floor, +/area/redgate/facility/nw) +"kfj" = ( +/obj/machinery/vr_sleeper, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/office2) +"kfk" = ( +/obj/structure/closet/secure_closet/personal{ + name = "J. Doe" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"kfs" = ( +/obj/machinery/replicator/vore, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/office2) +"kfZ" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/entrance) +"kgn" = ( +/obj/random/trash_pile, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/ne) +"kgN" = ( +/obj/structure/flora/pottedplant/unusual, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"kgZ" = ( +/turf/simulated/floor/maglev, +/area/redgate/facility/tram) +"khn" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/gun/energy/sizegun, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/office2) +"khA" = ( +/obj/item/weapon/bedsheet/pillow/black, +/turf/unsimulated/floor/dark, +/area/redgate/facility/cell9) +"kjk" = ( +/obj/effect/floor_decal/corner/pink/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"kjq" = ( +/obj/structure/table/steel_reinforced, +/obj/item/clothing/accessory/collar/shock/bluespace, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/office2) +"kjS" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"kkq" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/office2) +"klF" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -24; + pixel_y = -24 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"klI" = ( +/obj/machinery/appliance/cooker/grill, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"klU" = ( +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/techfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"klV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"knI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell24) +"kok" = ( +/obj/machinery/power/emitter{ + anchored = 1; + icon_state = "emitter1"; + state = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"koA" = ( +/obj/effect/decal/cleanable/blood, +/turf/simulated/floor, +/area/redgate/facility/office2) +"koE" = ( +/obj/structure/railing, +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/ne) +"koI" = ( +/turf/simulated/shuttle/floor/alienplating, +/area/redgate/facility/cell19) +"kpd" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell8) +"kpe" = ( +/turf/simulated/floor, +/area/redgate/facility/tram) +"kpi" = ( +/obj/structure/railing, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/nw) +"kqK" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"krr" = ( +/obj/structure/table/steel_reinforced, +/obj/random/tool/power, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/office2) +"ktr" = ( +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/se) +"ktG" = ( +/obj/machinery/optable, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/office2) +"ktI" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/signaler, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/office2) +"ktY" = ( +/obj/machinery/light/broken{ + dir = 8 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"kuz" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor, +/area/redgate/facility/ne) +"kuI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell13) +"kvg" = ( +/obj/machinery/light/floortube{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/tram) +"kvy" = ( +/obj/machinery/light/floortube{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/tram) +"kwc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"kwz" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/office2) +"kxZ" = ( +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/ne) +"kyf" = ( +/turf/simulated/wall/tgmc/whitewall{ + can_open = 1 + }, +/area/redgate/facility/office2) +"kyg" = ( +/obj/item/stack/cable_coil, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"kyI" = ( +/obj/random/trash_pile, +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/ne) +"kzH" = ( +/obj/machinery/computer/security{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"kzP" = ( +/obj/structure/table/standard, +/obj/item/device/flashlight/lamp/green, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"kzS" = ( +/obj/structure/railing, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/nw) +"kAx" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/microscope, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"kBo" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell24) +"kBE" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"kBS" = ( +/obj/effect/floor_decal/corner/pink/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"kBV" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"kCk" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/office3) +"kEd" = ( +/obj/structure/table/steel_reinforced, +/obj/random/maintenance/research, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"kEo" = ( +/obj/machinery/door/blast/regular{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/sw) +"kEE" = ( +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"kEJ" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"kER" = ( +/obj/machinery/power/rad_collector, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"kFg" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/lab2) +"kGt" = ( +/obj/structure/table/woodentable, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"kGK" = ( +/obj/structure/table/borosilicate, +/obj/item/device/pda, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell8) +"kHg" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"kHs" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"kIf" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"kIA" = ( +/obj/structure/table/reinforced, +/obj/random/tech_supply/nofail, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"kKl" = ( +/obj/effect/floor_decal/corner/black/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"kKm" = ( +/obj/structure/bed/double/padded, +/obj/item/weapon/bedsheet/hopdouble, +/turf/simulated/floor/carpet/blue, +/area/redgate/facility/office2) +"kKp" = ( +/obj/structure/flora/ausbushes/fernybush, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell26) +"kKs" = ( +/obj/structure/janitorialcart, +/turf/simulated/floor/tiled, +/area/redgate/facility/office3) +"kKK" = ( +/obj/machinery/door/blast/multi_tile/two_tile_hor{ + id = "lab_explo" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/securitylobby) +"kLg" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"kLu" = ( +/obj/effect/floor_decal/corner/black/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"kLB" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell19) +"kLN" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office10) +"kLO" = ( +/obj/random/vendorall{ + dir = 4; + pixel_x = -8 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"kNc" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/turf/simulated/floor/carpet/tealcarpet, +/area/redgate/facility/ne) +"kNT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"kOt" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"kPd" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"kPt" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"kPP" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/random/vendorall{ + dir = 4; + pixel_x = -8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"kQh" = ( +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "office_2"; + pixel_x = -25; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"kQT" = ( +/obj/structure/table/woodentable, +/obj/item/trash/plate, +/obj/item/weapon/reagent_containers/food/snacks/variable/cookie, +/obj/item/weapon/reagent_containers/food/snacks/variable/cookie, +/obj/item/weapon/reagent_containers/food/snacks/variable/cookie, +/obj/item/weapon/reagent_containers/food/snacks/variable/cookie, +/obj/item/weapon/reagent_containers/food/snacks/variable/cookie, +/obj/item/weapon/reagent_containers/food/snacks/variable/cookie, +/obj/item/weapon/reagent_containers/food/snacks/variable/cookie, +/obj/item/weapon/reagent_containers/food/snacks/variable/cookie, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"kRs" = ( +/obj/structure/smoletrack/roadS, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"kRX" = ( +/obj/structure/flora/ausbushes/reedbush, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell27) +"kSx" = ( +/obj/structure/closet/hydrant{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"kSD" = ( +/obj/machinery/door/window{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office2) +"kTf" = ( +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"kTY" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell24) +"kWe" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/tiled, +/area/redgate/facility/office3) +"kWx" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/fountain3, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"kXk" = ( +/obj/item/weapon/mop, +/obj/item/weapon/reagent_containers/glass/bucket, +/turf/simulated/floor/tiled, +/area/redgate/facility/office3) +"kXM" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/securitylobby) +"kYa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"kYi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/securitylobby) +"kYk" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/computer/security{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office10) +"kZb" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell17) +"kZk" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/nw) +"kZJ" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office10) +"kZK" = ( +/obj/structure/reagent_dispensers/water_cooler/full, +/obj/effect/floor_decal/corner/pink/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"lbm" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"lbB" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/vending/coffee, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"lbD" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/se) +"lbS" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"lcc" = ( +/obj/machinery/porta_turret/lasertag{ + name = "containment turret" + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell22) +"lcG" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"ldG" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/ne) +"leA" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/structure/reagent_dispensers/water_cooler/full, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"leM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"lgq" = ( +/obj/structure/bed/chair/shuttle{ + dir = 1 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/shuttle/floor/white, +/area/redgate/facility/tram) +"lgS" = ( +/obj/random/vendorall{ + dir = 4; + pixel_x = -8 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"lhN" = ( +/turf/simulated/floor, +/area/redgate/facility/cell23) +"lhQ" = ( +/obj/structure/table/standard, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/item/weapon/towel/random, +/obj/effect/floor_decal/corner/grey{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"lil" = ( +/obj/machinery/computer/security{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"lis" = ( +/obj/effect/floor_decal/atoll/border{ + dir = 1 + }, +/turf/simulated/floor/atoll, +/area/redgate/facility/cell16) +"lje" = ( +/obj/machinery/light, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"ljM" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"lkv" = ( +/obj/machinery/deployable/barrier, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/machinery/recharger/wallcharger{ + pixel_x = 4; + pixel_y = 29 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"lkT" = ( +/turf/simulated/floor, +/area/redgate/facility/cell15) +"llb" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/table/woodentable, +/turf/simulated/floor/wood, +/area/redgate/facility/cell2) +"llf" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/structure/curtain/open/shower, +/obj/machinery/shower{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/office2) +"llG" = ( +/obj/structure/closet/cabinet, +/turf/simulated/floor/carpet/blue, +/area/redgate/facility/office2) +"lnj" = ( +/obj/structure/closet/jequipcloset, +/turf/simulated/floor/tiled, +/area/redgate/facility/office3) +"lnr" = ( +/obj/machinery/chem_master, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"lnw" = ( +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "cell_13"; + pixel_x = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"lof" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"lot" = ( +/obj/machinery/button/remote/airlock{ + dir = 1; + id = "custodial_closet_1"; + pixel_y = -24; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/office3) +"loS" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/securitylobby) +"lpm" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/food/snacks/packaged/scotchegg, +/obj/machinery/atmospherics/pipe/vent{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"lqI" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/obj/machinery/button/windowtint{ + id = "office_sec"; + pixel_x = -22 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office10) +"lrk" = ( +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "office_sec"; + pixel_x = 25; + specialfunctions = 4 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 26; + pixel_y = -9 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office10) +"lrp" = ( +/obj/effect/floor_decal/corner/black/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"lrx" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/material/knife/butch, +/obj/effect/floor_decal/industrial/warning, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"lrQ" = ( +/obj/structure/flora/tree/jungle, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"lsa" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"lsB" = ( +/obj/machinery/vending/bepis, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"lsE" = ( +/obj/machinery/porta_turret/lasertag{ + name = "containment turret" + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/securitylobby) +"lsF" = ( +/obj/machinery/porta_turret/lasertag{ + name = "containment turret" + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell2) +"ltn" = ( +/obj/structure/table/woodentable, +/obj/machinery/alembic{ + pixel_y = 7 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"ltK" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"ltM" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/cell10) +"luh" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"luA" = ( +/obj/machinery/recharge_station, +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"luR" = ( +/obj/effect/floor_decal/corner/white/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"lvB" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"lvV" = ( +/obj/structure/smolebuilding/museum, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"lwQ" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "custodial_closet_1"; + name = "custodial closet" + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/office3) +"lwV" = ( +/obj/item/modular_computer/console, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab3) +"lxJ" = ( +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/ne) +"lyw" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/securitylobby) +"lzj" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"lAj" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"lAv" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/securitylobby) +"lAR" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"lBd" = ( +/obj/machinery/door/airlock/angled_tgmc/security{ + id_tag = "office_sec" + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office10) +"lBQ" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/turf/simulated/floor, +/area/redgate/facility/se) +"lCS" = ( +/obj/structure/reagent_dispensers/water_cooler/full{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"lEn" = ( +/obj/machinery/porta_turret/lasertag{ + name = "containment turret" + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell13) +"lEz" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"lFA" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell13) +"lFI" = ( +/obj/structure/table/woodentable, +/obj/structure/sink/countertop, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"lGB" = ( +/obj/item/weapon/reagent_containers/food/snacks/meat, +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"lHt" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell27) +"lHL" = ( +/obj/structure/filingcabinet/filingcabinet{ + pixel_x = 11 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"lJe" = ( +/obj/structure/reagent_dispensers/foam, +/turf/simulated/floor, +/area/redgate/facility/sw) +"lJy" = ( +/obj/structure/closet, +/obj/random/mainttoyloot/nofail, +/obj/random/cargopod, +/obj/random/cargopod, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"lKA" = ( +/obj/structure/flora/tree/jungle_small, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"lLo" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"lLp" = ( +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"lMF" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"lNc" = ( +/obj/machinery/door/blast/regular{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/nw) +"lOs" = ( +/obj/machinery/door/airlock/angled_tgmc/personal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"lOu" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"lPE" = ( +/obj/effect/floor_decal/corner/pink/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"lQg" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"lQM" = ( +/obj/machinery/door/blast/regular/open, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"lQW" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/tram) +"lRc" = ( +/obj/structure/bed/chair/office/dark, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"lRe" = ( +/obj/item/modular_computer/console, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"lRl" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/salvageable/personal, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"lRn" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"lRs" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"lSe" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"lSf" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"lSn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/ne) +"lSt" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + density = 0; + dir = 4; + pixel_x = -20 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"lSA" = ( +/obj/structure/closet, +/obj/random/forgotten_tram, +/obj/item/weapon/folder, +/obj/item/weapon/folder, +/obj/random/material/precious, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office9) +"lTA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/se) +"lTL" = ( +/mob/living/simple_mob/vore/aggressive/frog{ + ai_holder_type = /datum/ai_holder/simple_mob/retaliate + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"lUw" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"lUF" = ( +/obj/structure/flora/tree/jungle_small, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"lUK" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"lWt" = ( +/obj/structure/flora/ausbushes/stalkybush, +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"lWz" = ( +/obj/structure/flora/pottedplant/mysterious{ + pixel_y = 2 + }, +/obj/machinery/door/window{ + dir = 2; + pixel_y = -4 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/office11) +"lWC" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"lXb" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + id_tag = "office_2" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office2) +"lZK" = ( +/obj/structure/closet/walllocker_double/generic_civ/north, +/obj/random/medical/lite, +/obj/random/material/precious, +/obj/random/tool/power, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"maG" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/sw) +"maY" = ( +/obj/structure/bed/chair/shuttle{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/floor/white, +/area/redgate/facility/tram) +"mbN" = ( +/obj/machinery/light/broken{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"mbR" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"mcu" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell22) +"mcS" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"mdz" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"mdO" = ( +/obj/effect/floor_decal/emblem/aronai{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"mdS" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"mdU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/corner/pink/bordercorner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"meR" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"mfa" = ( +/obj/effect/floor_decal/techfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"mfk" = ( +/obj/effect/floor_decal/corner/pink/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"mfn" = ( +/obj/machinery/door/blast/regular/open, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"mgh" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"mgp" = ( +/obj/random/trash_pile, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/cell10) +"mgu" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "cell_22" + }, +/turf/simulated/floor, +/area/redgate/facility/cell27) +"mgJ" = ( +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell12) +"mgQ" = ( +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"mgU" = ( +/obj/machinery/computer/transhuman/resleeving, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"mhH" = ( +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"mim" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/office7) +"miz" = ( +/obj/structure/table/woodentable, +/obj/random/mug, +/turf/simulated/floor/carpet/blucarpet, +/area/redgate/facility/office9) +"miQ" = ( +/obj/machinery/light{ + dir = 1; + stat = 0 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"mjq" = ( +/obj/structure/flora/ausbushes/fernybush, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell13) +"mjP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab5) +"mkd" = ( +/obj/structure/closet, +/obj/item/weapon/gun/energy/sizegun, +/obj/item/weapon/storage/fancy/vials, +/obj/item/weapon/storage/box/syringes, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"mkB" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"mlk" = ( +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"mlo" = ( +/obj/effect/floor_decal/shuttle/handicap/yellow, +/turf/simulated/shuttle/floor/white, +/area/redgate/facility/tram) +"mlx" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"mlM" = ( +/obj/structure/redgate/away, +/turf/simulated/shuttle/floor/white, +/area/redgate/facility/tram) +"mmj" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell27) +"mmm" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/effect/floor_decal/shuttle/loading/yellow{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"mmt" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"mnq" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "facility_Q" + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/nw) +"mnJ" = ( +/obj/structure/table/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"mnQ" = ( +/obj/structure/table/steel, +/obj/item/weapon/storage/box/donut, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"moY" = ( +/obj/structure/grille/broken, +/turf/simulated/floor, +/area/redgate/facility/cell25) +"mpg" = ( +/obj/structure/flora/pottedplant/unusual, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"mpt" = ( +/obj/machinery/button/windowtint{ + id = "office_10"; + pixel_x = -22 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"mqf" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"mqg" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/obj/item/weapon/storage/box/donut, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"mqH" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/fountain5, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"mqU" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"mqZ" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"mrq" = ( +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"mrs" = ( +/obj/structure/table/hardwoodtable, +/obj/item/champagne, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"mse" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "cell_3"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"msm" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office7) +"mtg" = ( +/obj/structure/table/steel, +/obj/item/weapon/circuitboard/telecomms/pda_multicaster, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/lab3) +"mtn" = ( +/obj/machinery/vending/loadout/uniform, +/obj/effect/floor_decal/borderfloor{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"mtA" = ( +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/cell19) +"mub" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"mvC" = ( +/obj/structure/bed/chair/sofa/corp/right, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"mwh" = ( +/obj/machinery/light/broken, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"mwC" = ( +/obj/structure/closet/walllocker_double/security/west, +/obj/item/weapon/melee/baton/cattleprod, +/obj/random/maintenance/security, +/obj/random/maintenance/security, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"mxL" = ( +/obj/structure/table/standard, +/obj/machinery/recharger/wallcharger{ + pixel_y = 23 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"mxS" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/nw) +"mxV" = ( +/obj/structure/table/steel, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"mye" = ( +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"myz" = ( +/obj/structure/table/glass, +/obj/machinery/atmospherics/pipe/vent{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"myT" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"mza" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/corner/blue/border, +/obj/item/device/healthanalyzer, +/obj/item/device/healthanalyzer, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"mzf" = ( +/obj/structure/bookcase/manuals/xenoarchaeology, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"mzU" = ( +/turf/simulated/wall/tgmc/darkwall, +/area/redgate/facility/sw) +"mBz" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/window/plastitanium{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"mBP" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"mCf" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair/backed_grey{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"mCg" = ( +/obj/structure/bed/chair/office/light{ + dir = 1 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office6) +"mDx" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"mEs" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"mEB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"mEK" = ( +/obj/item/broken_device/random, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"mEP" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 1 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"mFv" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"mFW" = ( +/obj/structure/sink{ + pixel_y = 8 + }, +/obj/structure/mirror/raider{ + pixel_y = 27 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"mGb" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"mGI" = ( +/turf/simulated/floor, +/area/redgate/facility/cell25) +"mGO" = ( +/obj/machinery/button/remote/airlock{ + id = "cell_3"; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"mHl" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"mHs" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/vent{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"mHF" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"mHL" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"mHR" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/storage/fancy/vials, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"mHW" = ( +/obj/structure/table/glass, +/obj/item/weapon/material/minihoe, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office11) +"mJl" = ( +/obj/structure/table/steel, +/obj/item/weapon/paper_bin{ + pixel_x = 4; + pixel_y = 7 + }, +/obj/item/weapon/pen/blue{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"mKv" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + id_tag = "office_1" + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"mKC" = ( +/obj/structure/table/woodentable, +/obj/machinery/cell_charger, +/obj/random/powercell, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"mKF" = ( +/obj/structure/closet/secure_closet/personal/patient, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"mKQ" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"mLc" = ( +/turf/simulated/floor/tiled, +/area/redgate/facility/entrance) +"mLn" = ( +/obj/structure/closet, +/obj/item/clothing/under/rank/security/corp, +/obj/item/weapon/handcuffs, +/obj/item/clothing/shoes/boots/duty, +/obj/item/clothing/gloves/black, +/obj/item/clothing/head/helmet/solgov/security, +/obj/item/device/ticket_printer, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office4) +"mMd" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"mMr" = ( +/obj/structure/closet/radiation, +/obj/item/weapon/storage/mre/random, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"mMN" = ( +/obj/structure/table/steel_reinforced, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office4) +"mOM" = ( +/obj/structure/salvageable/machine, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"mPf" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/lavendergrass, +/obj/machinery/door/blast/regular{ + id = "creature" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell13) +"mQI" = ( +/obj/structure/table/woodentable, +/obj/random/mainttoyloot/nofail, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office9) +"mQQ" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/brown, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office4) +"mRw" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "cell_10" + }, +/turf/simulated/floor, +/area/redgate/facility/cell6) +"mRU" = ( +/obj/machinery/door/window/eastright{ + dir = 8 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"mSi" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell12) +"mSx" = ( +/obj/structure/extinguisher_cabinet{ + dir = 8; + pixel_x = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"mSE" = ( +/obj/effect/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"mST" = ( +/obj/item/weapon/inflatable_duck, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell13) +"mTa" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"mTj" = ( +/obj/machinery/light/broken, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell21) +"mTv" = ( +/obj/structure/table/glass, +/obj/item/seeds/random, +/obj/item/seeds/random, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office11) +"mVc" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"mVQ" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + name = "Research Facility" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"mWK" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/corner/blue/border, +/obj/machinery/light, +/obj/random/unidentified_medicine/fresh_medicine, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"mYj" = ( +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"mYN" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = 8 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"mYV" = ( +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "office_1"; + pixel_x = -25; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"mZr" = ( +/obj/structure/closet/walllocker_double/generic_civ/east, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/medical/lite, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"mZu" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"mZN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"nam" = ( +/obj/structure/flora/log1, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell27) +"naL" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 8 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"naO" = ( +/obj/effect/floor_decal/steeldecal/steel_decals_central6, +/obj/effect/floor_decal/corner/pink/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"ndu" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office4) +"ndS" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"nep" = ( +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "sec_2"; + pixel_x = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office4) +"nev" = ( +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/turf/simulated/floor/tiled/monotile, +/area/redgate/facility/cell29) +"nfd" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/se) +"nfr" = ( +/obj/machinery/door/airlock/angled_tgmc/security_glass, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"nfI" = ( +/obj/structure/bed/chair/bay{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"nfT" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"ngo" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"nhG" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell19) +"nhX" = ( +/obj/structure/table/reinforced, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"nix" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell13) +"niR" = ( +/obj/machinery/light, +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"nje" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab2) +"njf" = ( +/obj/structure/bed/chair/office/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"njs" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"njB" = ( +/obj/machinery/light, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell13) +"nkg" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"nkn" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"nll" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -24; + pixel_y = -10 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"nlY" = ( +/obj/structure/prop/rock/small, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell26) +"nmp" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office11) +"nnr" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"nod" = ( +/obj/machinery/door/airlock/angled_tgmc/personal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"nqb" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "office_1" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office1) +"nql" = ( +/obj/structure/closet/walllocker_double/generic_civ/east, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/weapon/storage/belt/utility, +/obj/random/tool/power, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"nqK" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/structure/curtain/open/shower, +/obj/machinery/shower{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/office4) +"nqV" = ( +/obj/machinery/door/airlock/angled_tgmc/security{ + dir = 4; + id_tag = "sec_2" + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office4) +"nrr" = ( +/turf/simulated/wall/tgmc/redstripe, +/area/redgate/facility/se) +"nsc" = ( +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"nsG" = ( +/obj/structure/table/rack/steel, +/obj/item/weapon/gun/energy/netgun, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"nsV" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/redgate/facility/ne) +"nsX" = ( +/obj/machinery/door/airlock/angled_tgmc/security{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"ntp" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell14) +"ntZ" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4; + id_tag = "cell_17" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell23) +"nud" = ( +/obj/structure/closet/alien, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell25) +"nue" = ( +/obj/structure/closet/crate/freezer, +/obj/item/weapon/reagent_containers/blood/OMinus, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"nun" = ( +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell6) +"nuH" = ( +/obj/structure/bed/chair/sofa/corp/left{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"nvI" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell12) +"nwx" = ( +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/nw) +"nyk" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"nyx" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/vent{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"nyG" = ( +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"nyJ" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"nyT" = ( +/obj/machinery/light/broken, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"nzb" = ( +/obj/structure/table/reinforced, +/obj/random/mainttoyloot, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"nzw" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/lavendergrass, +/obj/machinery/door/blast/regular{ + id = "creature" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell13) +"nzY" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "office_10"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office11) +"nAy" = ( +/obj/structure/table/standard, +/obj/machinery/librarypubliccomp, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"nAS" = ( +/obj/effect/floor_decal/corner/white/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"nAU" = ( +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/cell5) +"nAW" = ( +/obj/structure/bed/chair/sofa/corp/left{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"nAY" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/stock_parts/scanning_module{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/device/assembly/prox_sensor{ + pixel_x = -8; + pixel_y = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"nBE" = ( +/turf/simulated/floor/gorefloor, +/area/redgate/facility/ne) +"nCg" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/signevent{ + desc = "Endo ONLY, OV/AV, fulltour."; + pixel_x = -27 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"nDC" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"nDD" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"nFh" = ( +/obj/structure/bed/chair/sofa/corp/corner, +/obj/effect/floor_decal/corner/pink/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"nFj" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"nFA" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"nFM" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"nFY" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"nGm" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"nGv" = ( +/obj/effect/floor_decal/corner/blue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"nGN" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell16) +"nHn" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/securitylobby) +"nHH" = ( +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"nHW" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"nIl" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"nIR" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/obj/random/snack, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"nIW" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/weapon/material/knife/butch, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"nJc" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/glass/bottle/antitoxin, +/obj/item/weapon/reagent_containers/glass/bottle/antitoxin, +/obj/item/weapon/reagent_containers/glass/bottle/spaceacillin, +/obj/item/weapon/reagent_containers/glass/bottle/spaceacillin, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/random/tetheraid, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office7) +"nJx" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"nJF" = ( +/obj/structure/sign/signnew/radiation, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/ne) +"nJN" = ( +/obj/structure/closet/hydrant{ + pixel_y = 32 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"nKq" = ( +/obj/item/stack/cable_coil, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"nKN" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"nLf" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"nLu" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell10) +"nMg" = ( +/obj/structure/bed/chair/sofa/corp/right{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"nMW" = ( +/obj/structure/table/woodentable, +/obj/machinery/microscope, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"nOR" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/obj/structure/curtain/open/shower, +/obj/machinery/shower{ + pixel_y = 15 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/office5) +"nPl" = ( +/obj/machinery/door/airlock/angled_tgmc/security{ + dir = 4; + id_tag = "sec_1" + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office5) +"nPn" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"nPs" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4; + req_one_access = null + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell12) +"nRx" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell12) +"nSZ" = ( +/obj/machinery/vending/loadout/clothing, +/obj/effect/floor_decal/corner/grey{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"nTp" = ( +/obj/structure/bed/chair/sofa/brown, +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/sw) +"nTy" = ( +/obj/structure/table/marble, +/obj/item/weapon/flame/candle/everburn{ + pixel_x = 8 + }, +/obj/item/weapon/flame/candle/everburn{ + pixel_x = -8 + }, +/turf/simulated/floor/atoll, +/area/redgate/facility/cell16) +"nTE" = ( +/obj/random/vendorall{ + dir = 4; + pixel_x = -8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"nUe" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 5 + }, +/obj/item/device/mass_spectrometer/adv, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"nUg" = ( +/obj/effect/floor_decal/corner/red/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"nUy" = ( +/obj/machinery/light, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"nUC" = ( +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"nVk" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"nVy" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"nWh" = ( +/obj/structure/closet/secure_closet/scientist{ + locked = 0 + }, +/obj/item/clothing/gloves/purple, +/obj/item/clothing/suit/storage/hooded/wintercoat/science, +/obj/item/clothing/under/circuitry, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"nYQ" = ( +/obj/structure/closet/l3closet/scientist, +/obj/random/medical/pillbottle, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office8) +"nYS" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"obC" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 6 + }, +/obj/item/weapon/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"obE" = ( +/obj/structure/table/woodentable, +/obj/machinery/microwave, +/turf/simulated/floor/carpet/blue, +/area/redgate/facility/office2) +"obH" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"oce" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell12) +"ocf" = ( +/obj/machinery/light/flicker{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"ocO" = ( +/turf/simulated/floor/tiled/eris/steel/monofloor, +/area/redgate/facility/ne) +"odq" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"odv" = ( +/obj/machinery/light, +/obj/effect/floor_decal/corner/white/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"oeb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/se) +"oew" = ( +/obj/machinery/light, +/obj/effect/floor_decal/corner/pink/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"oex" = ( +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "cell_8"; + pixel_x = -25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"oez" = ( +/obj/effect/floor_decal/corner/white/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"oeH" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/table/reinforced, +/obj/random/snack, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"oeJ" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/green, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"oeT" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"ogp" = ( +/obj/effect/floor_decal/corner_steel_grid{ + dir = 10 + }, +/obj/machinery/body_scanconsole{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"ogF" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/pen, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"ohm" = ( +/obj/structure/closet/crate/wooden, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell20) +"ohR" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp/green, +/obj/machinery/button/windowtint{ + id = "office_1"; + pixel_x = -22 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"oip" = ( +/obj/structure/table/woodentable, +/obj/random/maintenance/research, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"oiG" = ( +/obj/structure/bed/chair/office/dark, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office5) +"oiI" = ( +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "sec_1"; + pixel_x = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office5) +"ojc" = ( +/obj/structure/table/rack/steel, +/obj/item/weapon/handcuffs/legcuffs/bola, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"ojh" = ( +/obj/structure/table/glass, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"ojr" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/lab5) +"ojx" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/storage/box/donut, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"ojH" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -24; + pixel_y = -24 + }, +/obj/machinery/light, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"okv" = ( +/obj/structure/railing, +/turf/simulated/floor, +/area/redgate/facility/nw) +"ola" = ( +/obj/structure/table/woodentable, +/obj/item/modular_computer/laptop/preset/custom_loadout/advanced, +/turf/simulated/floor, +/area/redgate/facility/office3) +"ols" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell12) +"olu" = ( +/obj/effect/mouse_hole_spawner{ + chance_to_spawn = 100; + dir = 1 + }, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"olG" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/disposaloutlet{ + density = 0; + pixel_y = 18 + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell26) +"olP" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"olX" = ( +/obj/structure/smoletrack/roadS{ + dir = 4 + }, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"omE" = ( +/obj/structure/table/reinforced, +/obj/random/miniature, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"omI" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell14) +"omT" = ( +/obj/structure/closet, +/obj/random/projectile/scrapped_dartgun, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"ooI" = ( +/obj/structure/smoletrack/roadturn, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"opw" = ( +/obj/structure/railing, +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/ne) +"opI" = ( +/obj/structure/salvageable/console{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"opJ" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor, +/area/redgate/facility/cell14) +"opR" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "cell_7"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"opZ" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/syringes, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"oqe" = ( +/obj/machinery/seed_storage/random, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"orz" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"orZ" = ( +/obj/machinery/door/window{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/office1) +"osl" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"osz" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"osS" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/item/seeds/random, +/obj/item/weapon/material/minihoe, +/obj/item/device/analyzer/plant_analyzer, +/turf/simulated/floor/grass, +/area/redgate/facility/office1) +"oti" = ( +/obj/structure/closet, +/obj/item/clothing/under/rank/security/corp, +/obj/item/weapon/handcuffs, +/obj/item/clothing/shoes/boots/duty, +/obj/item/clothing/gloves/black, +/obj/item/clothing/head/helmet/solgov/security, +/obj/item/device/ticket_printer, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office5) +"otx" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/food/snacks/egg/rainbow, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"otO" = ( +/obj/structure/table/steel_reinforced, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office5) +"otW" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/brown, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office5) +"oui" = ( +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/se) +"ouy" = ( +/obj/structure/closet/secure_closet/personal{ + locked = 0 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell12) +"ouP" = ( +/obj/item/clothing/glasses/sunglasses, +/obj/structure/table/steel, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell12) +"ovf" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"owm" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"oxv" = ( +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/ne) +"oyh" = ( +/obj/machinery/r_n_d/circuit_imprinter{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"oyl" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"oyG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell5) +"ozg" = ( +/obj/machinery/door/blast/regular/open{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/ne) +"ozi" = ( +/obj/structure/table/reinforced, +/obj/random/material/refined, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"ozD" = ( +/obj/structure/bed/chair/office/dark, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/carpet/tealcarpet, +/area/redgate/facility/ne) +"oAk" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"oAC" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"oAY" = ( +/turf/simulated/wall/tgmc/darkwall, +/area/redgate/facility/cell9) +"oEf" = ( +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"oEx" = ( +/turf/simulated/floor/gorefloor2, +/area/redgate/facility/ne) +"oFg" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor, +/area/redgate/facility/cell15) +"oFO" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, +/area/redgate/facility/ne) +"oGT" = ( +/obj/structure/table/rack, +/obj/random/bluespace, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"oGU" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"oHI" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"oHL" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"oId" = ( +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass, +/area/redgate/facility/office1) +"oIP" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 9 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/nw) +"oJh" = ( +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor, +/area/redgate/facility/se) +"oJR" = ( +/obj/structure/bed/padded, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"oKk" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell9) +"oKF" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"oKR" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -24; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"oKS" = ( +/obj/effect/floor_decal/corner/white/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"oMu" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell20) +"oMH" = ( +/turf/simulated/wall/tgmc/darkwall/deco3, +/area/redgate/facility/cell9) +"oNA" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell14) +"oNI" = ( +/obj/structure/table/rack, +/obj/machinery/light{ + dir = 8 + }, +/obj/item/weapon/gun/energy/sizegun, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"oNV" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"oOd" = ( +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell24) +"oOF" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/lattice, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"oPl" = ( +/obj/machinery/atmospherics/pipe/vent{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"oPv" = ( +/obj/item/weapon/paper/crumpled, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"oRY" = ( +/obj/structure/prop/rock, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell20) +"oSb" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell9) +"oSA" = ( +/turf/simulated/floor, +/area/redgate/facility/entrance) +"oSY" = ( +/obj/structure/table/glass, +/obj/machinery/chemical_dispenser/xenoflora/full, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"oTm" = ( +/obj/structure/reagent_dispensers/watertank/high, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"oTq" = ( +/obj/structure/closet/secure_closet/personal{ + name = "Freewoman" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/obj/item/weapon/tool/crowbar/brass, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"oUz" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"oUS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"oVl" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell26) +"oVu" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor, +/area/redgate/facility/se) +"oVL" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/se) +"oVX" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/se) +"oWf" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"oXb" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/robotanalyzer, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"oXm" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"oXQ" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"oYX" = ( +/obj/structure/flora/pottedplant/overgrown, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office11) +"oZb" = ( +/obj/structure/table/steel_reinforced, +/obj/random/powercell, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell14) +"oZQ" = ( +/obj/structure/table/standard, +/obj/machinery/computer/med_data/laptop, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"oZU" = ( +/obj/structure/closet/secure_closet/medical3, +/obj/item/device/glasses_kit, +/obj/item/weapon/storage/box/bloodpacks, +/obj/item/weapon/storage/box/autoinjectors, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"pag" = ( +/obj/machinery/atmospherics/pipe/vent{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell8) +"pbm" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"pbL" = ( +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/office2) +"pbO" = ( +/obj/structure/table/standard, +/obj/item/device/slime_scanner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"pck" = ( +/obj/structure/flora/lily1, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell27) +"pcs" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/clipboard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell9) +"pdn" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"pdt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"pec" = ( +/obj/effect/floor_decal/corner/pink/border, +/obj/machinery/atmospherics/pipe/vent{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"ped" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"pem" = ( +/obj/structure/table/standard, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"peR" = ( +/obj/structure/extinguisher_cabinet{ + dir = 8; + pixel_x = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"peW" = ( +/obj/structure/prop/rock/small/alt, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell20) +"pfx" = ( +/obj/structure/salvageable/console, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"pfD" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"phT" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor, +/area/redgate/facility/sw) +"piE" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"pjb" = ( +/obj/machinery/computer/rdconsole/robotics{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"pjC" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell27) +"pkp" = ( +/obj/machinery/door/window, +/obj/structure/window/basic, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/redgate/facility/sw) +"pli" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell14) +"pls" = ( +/obj/structure/sink{ + pixel_y = 8 + }, +/obj/structure/mirror{ + pixel_y = 27 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"plz" = ( +/obj/structure/bed/chair/bay/chair/padded/red/bignest, +/turf/simulated/floor/tiled/milspec/raised, +/area/redgate/facility/cell14) +"plJ" = ( +/obj/machinery/autolathe{ + dir = 1; + hacked = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"pnc" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"pol" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"poE" = ( +/obj/effect/floor_decal/corner/blue/bordercorner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"poR" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"ppm" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/floor_decal/corner/paleblue/diagonal, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"ppo" = ( +/obj/structure/bed/chair/sofa/corp, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"pqb" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 1 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"pqC" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"prt" = ( +/obj/structure/table/standard, +/obj/item/weapon/weldingtool, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"prT" = ( +/obj/effect/floor_decal/corner/black/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/broken, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"prX" = ( +/obj/structure/table/bench/steel, +/turf/simulated/floor/tiled, +/area/redgate/facility/entrance) +"psv" = ( +/obj/effect/floor_decal/corner/white/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"psK" = ( +/obj/effect/floor_decal/corner/blue/border, +/obj/random/maintenance/medical, +/obj/random/maintenance/medical, +/obj/item/weapon/cane, +/obj/structure/closet/walllocker_double/medical/south, +/obj/item/weapon/storage/briefcase, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"psL" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/machinery/light, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"psT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"pth" = ( +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/nw) +"ptY" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/vending/sol{ + dir = 8; + pixel_x = 7 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"puv" = ( +/obj/structure/toilet{ + pixel_y = 10 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"puD" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"pvk" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"pvt" = ( +/obj/structure/flora/lily2, +/turf/simulated/floor/water/deep/pool, +/area/redgate/facility/cell27) +"pwj" = ( +/obj/machinery/vending/loadout/accessory, +/obj/effect/floor_decal/corner/grey{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"pwO" = ( +/obj/machinery/seed_extractor, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"pyi" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"pys" = ( +/obj/structure/table/glass, +/obj/item/weapon/autopsy_scanner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"pyE" = ( +/obj/machinery/recharge_station, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"pyK" = ( +/obj/effect/floor_decal/corner/pink/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"pzp" = ( +/obj/effect/floor_decal/corner/pink/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"pzN" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"pzX" = ( +/obj/item/modular_computer/console, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"pAo" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"pAp" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"pAM" = ( +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/lab2) +"pAV" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"pBg" = ( +/obj/structure/table/steel_reinforced, +/obj/random/tool/alien, +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/item/clothing/glasses/goggles, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell14) +"pBJ" = ( +/obj/item/modular_computer/console{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"pCm" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office7) +"pCw" = ( +/turf/simulated/wall/tgmc/whitewall{ + can_open = 1 + }, +/area/redgate/facility/entrance) +"pCN" = ( +/obj/machinery/vending/bepis{ + dir = 8; + pixel_x = 7 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"pDo" = ( +/obj/effect/floor_decal/corner/pink/border, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"pDH" = ( +/obj/structure/closet/radiation, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"pEr" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"pEF" = ( +/obj/effect/floor_decal/corner/pink/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"pFo" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/bone/skull, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"pFq" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab2) +"pFD" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab2) +"pFQ" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"pFR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/white/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"pGy" = ( +/obj/effect/floor_decal/steeldecal/steel_decals_central6, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"pIi" = ( +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"pIE" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"pJA" = ( +/obj/structure/extinguisher_cabinet{ + dir = 8; + pixel_x = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"pJE" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/masks, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"pJK" = ( +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "cell_2"; + pixel_x = 25; + specialfunctions = 4 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 26; + pixel_y = -9 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"pJU" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"pKm" = ( +/turf/simulated/floor, +/area/redgate/facility/office3) +"pLg" = ( +/obj/random/junk, +/turf/simulated/floor, +/area/redgate/facility/sw) +"pLq" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/structure/salvageable/console{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/entrance) +"pLT" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"pMz" = ( +/obj/machinery/door/blast/regular{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/tram) +"pMQ" = ( +/obj/machinery/telecomms/relay/preset/station, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab3) +"pNr" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/turf/simulated/floor, +/area/redgate/facility/entrance) +"pNt" = ( +/obj/structure/table/standard, +/obj/random/donkpocketbox, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"pNv" = ( +/obj/machinery/vending/desatti{ + dir = 8; + pixel_x = 7 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"pNw" = ( +/mob/living/simple_mob/vore/sect_queen{ + ai_holder_type = /datum/ai_holder/simple_mob/vore + }, +/turf/simulated/floor/tiled/dark, +/area/redgate/facility/cell10) +"pOp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"pOB" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell9) +"pOH" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + name = "Hospital Lobby" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"pPr" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/lab2) +"pQb" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + name = "Research Facility" + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"pQc" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/ne) +"pQk" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"pQD" = ( +/obj/structure/table/steel_reinforced, +/obj/random/toolbox, +/obj/machinery/light, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"pQF" = ( +/mob/living/simple_mob/animal/giant_spider{ + ai_holder_type = /datum/ai_holder/simple_mob/passive; + size_multiplier = 2 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"pQY" = ( +/mob/living/simple_mob/vore/alienanimals/teppi{ + size_multiplier = 0.4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"pRa" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"pRC" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"pSC" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"pSF" = ( +/obj/structure/closet/alien, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/random/rigsuit, +/turf/simulated/floor/tiled/dark, +/area/redgate/facility/entrance) +"pSP" = ( +/obj/structure/closet/secure_closet/personal{ + name = "Quacks" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/obj/random/instrument, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"pTl" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/entrance) +"pUk" = ( +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"pVH" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"pVI" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell26) +"pVX" = ( +/obj/structure/sink{ + dir = 1; + pixel_y = -8 + }, +/obj/structure/mirror{ + dir = 1; + pixel_y = -26 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"pXy" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 6 + }, +/obj/structure/flora/pottedplant/large, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"pXQ" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell3) +"pXY" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"pZe" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/bed/chair/sofa/corp/corner, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"pZB" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 9 + }, +/obj/structure/bed/chair/shuttle{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"pZR" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 5 + }, +/obj/structure/bed/chair/shuttle{ + dir = 8 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"pZS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"qax" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/medical, +/obj/effect/floor_decal/corner/blue/border{ + dir = 9 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qaY" = ( +/obj/structure/bed/chair/wheelchair, +/obj/effect/floor_decal/corner/blue/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qbj" = ( +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/cell2) +"qby" = ( +/obj/machinery/light, +/obj/machinery/button/remote/airlock{ + dir = 1; + id = "office_10"; + pixel_y = -24; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"qbY" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/medical, +/obj/effect/floor_decal/corner/blue/border{ + dir = 5 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qcp" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"qcw" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/sw) +"qcE" = ( +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell26) +"qdC" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/grass, +/area/redgate/facility/office1) +"qdH" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/item/weapon/bone, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"qep" = ( +/obj/structure/table/borosilicate, +/obj/item/modular_computer/laptop/preset/custom_loadout/rugged, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell8) +"qeN" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/office1) +"qfn" = ( +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) +"qfF" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair/sofa/corp, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qgk" = ( +/turf/simulated/floor/tiled/techmaint, +/area/redgate/facility/lab5) +"qgE" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"qgN" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"qgS" = ( +/obj/structure/bed/chair/sofa/corner/purp{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"qho" = ( +/obj/machinery/atmospherics/unary/freezer{ + dir = 4 + }, +/obj/structure/sign/signnew/cryogenics{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"qhP" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell19) +"qia" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + id_tag = "cell_20"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"qis" = ( +/obj/item/weapon/material/shard, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell22) +"qiF" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell4) +"qjA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"qjB" = ( +/obj/structure/table/glass, +/obj/structure/sign/signnew/cryogenics{ + pixel_y = 32 + }, +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{ + pixel_x = -4 + }, +/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{ + pixel_x = 7; + pixel_y = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"qjM" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor, +/area/redgate/facility/cell14) +"qki" = ( +/obj/effect/floor_decal/borderfloor, +/turf/simulated/floor/tiled, +/area/redgate/facility/entrance) +"qkm" = ( +/obj/structure/railing, +/obj/machinery/atmospherics/pipe/tank/oxygen, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"qkK" = ( +/obj/item/modular_computer/console{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"qlc" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/structure/bed/chair/shuttle{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qlC" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 4 + }, +/obj/structure/bed/chair/shuttle{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qlX" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/random/medical{ + pixel_x = -4; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qmh" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/corner/blue/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qmv" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/office1) +"qmR" = ( +/obj/machinery/button/windowtint{ + id = "office_4"; + pixel_x = -22 + }, +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -24; + pixel_y = -10 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/sw) +"qoK" = ( +/obj/structure/loot_pile/surface/bones, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell20) +"qpK" = ( +/obj/item/stack/material/plastic, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"qpO" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/obj/machinery/button/windowtint{ + id = "office_5"; + pixel_x = -22; + pixel_y = 21 + }, +/turf/simulated/floor/carpet/blucarpet, +/area/redgate/facility/office9) +"qqv" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/office3) +"qqy" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"qrN" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "office_10" + }, +/turf/simulated/floor, +/area/redgate/facility/office11) +"qsl" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + id_tag = "office_4" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qsu" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"qsy" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"qsE" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/se) +"qsP" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"qsU" = ( +/obj/machinery/disease2/diseaseanalyser, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qtt" = ( +/obj/structure/window/basic, +/obj/item/weapon/storage/vore_egg/rock, +/turf/simulated/floor/tiled/freezer, +/area/redgate/facility/sw) +"qtY" = ( +/obj/structure/closet/hydrant{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"que" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/se) +"qug" = ( +/obj/structure/table/reinforced, +/obj/random/toolbox, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"qux" = ( +/obj/structure/closet/radiation, +/obj/random/bomb_supply, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"quW" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"qvf" = ( +/obj/effect/floor_decal/corner/pink/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qvq" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"qvt" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/turf/simulated/floor/wood, +/area/redgate/facility/cell2) +"qvO" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/ne) +"qwx" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/random/medical/lite, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qwT" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/corner/blue/border{ + dir = 4 + }, +/obj/random/medical/pillbottle, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qxN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"qxW" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"qys" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/sw) +"qyI" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/sw) +"qzQ" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"qAp" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"qBh" = ( +/obj/machinery/sleep_console{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"qBp" = ( +/obj/machinery/cryopod, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"qBK" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/techmaint_cargo, +/area/redgate/facility/sw) +"qBT" = ( +/obj/random/trash_pile, +/turf/simulated/floor, +/area/redgate/facility/ne) +"qCq" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/entrance) +"qCS" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell13) +"qDz" = ( +/obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgoprime{ + name = "Ringed planet" + }, +/turf/unsimulated/fake_space, +/area/redgate/facility/cell15) +"qEg" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"qFr" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 9 + }, +/turf/simulated/floor/carpet/tealcarpet, +/area/redgate/facility/nw) +"qGI" = ( +/obj/structure/closet/secure_closet/hydroponics/sci{ + locked = 0; + req_access = list(77) + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"qGO" = ( +/obj/structure/table/steel_reinforced, +/obj/random/internal_organ, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"qGP" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"qGQ" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell10) +"qGT" = ( +/obj/effect/floor_decal/corner/orange/border, +/obj/machinery/light/floortube{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"qGV" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"qHc" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"qHr" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"qHO" = ( +/obj/random/junk, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"qIt" = ( +/obj/structure/table/reinforced, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"qIQ" = ( +/obj/structure/reagent_dispensers/water_cooler/full{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qJl" = ( +/turf/simulated/floor, +/area/redgate/facility/cell17) +"qJU" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qKi" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell1) +"qKO" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell23) +"qLz" = ( +/obj/structure/bed/chair/sofa/corp/left{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell9) +"qMo" = ( +/obj/machinery/disease2/incubator, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qNh" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"qNC" = ( +/obj/structure/bed/chair/office/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qOd" = ( +/obj/item/broken_device/random, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"qOn" = ( +/turf/simulated/floor, +/area/redgate/facility/ne) +"qPj" = ( +/obj/structure/window/basic, +/obj/item/weapon/storage/vore_egg/slimeglob{ + name = "sect egg clutch" + }, +/turf/simulated/floor/tiled/freezer, +/area/redgate/facility/sw) +"qPn" = ( +/obj/structure/table/hardwoodtable, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/item/modular_computer/laptop/preset/custom_loadout/rugged, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/ne) +"qQl" = ( +/obj/machinery/space_heater, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qQL" = ( +/obj/machinery/computer/diseasesplicer, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qQY" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell18) +"qSb" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qSC" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals_central6, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"qSM" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 10 + }, +/obj/structure/flora/pottedplant/large, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qVa" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/medical, +/obj/effect/floor_decal/corner/blue/border{ + dir = 10 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qVu" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"qVL" = ( +/obj/structure/flora/ausbushes/reedbush, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"qXg" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/medical, +/obj/effect/floor_decal/corner/blue/border{ + dir = 6 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"qYB" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"qZT" = ( +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/sw) +"ram" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/glass/beaker/noreact, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"rbz" = ( +/obj/structure/closet, +/obj/random/plushie, +/obj/random/plushie, +/obj/random/plushie, +/obj/item/clothing/under/rank/medical/scrubs, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/sw) +"rbC" = ( +/obj/machinery/cryopod, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"rbW" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"rbY" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"rcz" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/vent{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"rcN" = ( +/obj/structure/table/standard, +/obj/random/snack, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"rcO" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/structure/closet/hydrant{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell22) +"rdK" = ( +/obj/item/weapon/reagent_containers/food/snacks/snackplanet/phoron, +/turf/unsimulated/fake_space, +/area/redgate/facility/cell15) +"reE" = ( +/obj/effect/floor_decal/industrial/warning/tile, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"rfl" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell10) +"rfz" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"rgk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"rhF" = ( +/mob/living/simple_mob/animal/passive/mouse{ + size_multiplier = 3 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"rie" = ( +/obj/structure/closet/l3closet/scientist, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"riW" = ( +/obj/machinery/botany/editor, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"riY" = ( +/obj/machinery/door/window, +/obj/machinery/door/window{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rjc" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/paper_bin, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell9) +"rjr" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rjK" = ( +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rkz" = ( +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "cell_9"; + pixel_x = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"rkC" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rlC" = ( +/obj/structure/window/basic, +/obj/structure/prop/machine/green_egg, +/turf/simulated/floor/tiled/freezer, +/area/redgate/facility/sw) +"rlN" = ( +/obj/structure/table/standard, +/obj/structure/closet/walllocker_double/science/north, +/obj/item/weapon/storage/box/syringes{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/storage/box/masks, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/weapon/storage/fancy/vials, +/obj/item/weapon/storage/lockbox/vials, +/obj/item/weapon/storage/box/monkeycubes, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rmF" = ( +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rmZ" = ( +/obj/structure/disposalpipe/segment, +/obj/random/forgotten_tram, +/obj/random/maintenance, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell23) +"rnj" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rpb" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "cell_4"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"rpF" = ( +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell27) +"rpQ" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + name = "Hospital Lobby" + }, +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"rpT" = ( +/obj/machinery/door/airlock/angled_tgmc/medical, +/obj/effect/floor_decal/corner/blue/border{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"rpU" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell15) +"rpZ" = ( +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell9) +"rqq" = ( +/obj/structure/closet/walllocker_double/north, +/obj/random/mainttoyloot/nofail, +/obj/random/maintenance/research, +/obj/random/maintenance/security, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"rqR" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab2) +"rqZ" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 5 + }, +/obj/structure/closet/crate/bin{ + anchored = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"rrd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/se) +"rrU" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"rsp" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 12; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"rsr" = ( +/obj/structure/reagent_dispensers/bloodbarrel, +/turf/simulated/floor, +/area/redgate/facility/se) +"rsv" = ( +/obj/effect/mouse_hole_spawner{ + chance_to_spawn = 100 + }, +/obj/effect/floor_decal/industrial/warning/tile, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"rty" = ( +/obj/machinery/biogenerator, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"ruf" = ( +/obj/machinery/light/broken{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell25) +"ruD" = ( +/obj/machinery/botany/extractor, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"ruE" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rvc" = ( +/obj/structure/closet{ + name = "experimental tools" + }, +/obj/item/weapon/gun/energy/taser, +/obj/item/weapon/gun/energy/sizegun, +/obj/item/weapon/material/knife/butch, +/obj/item/weapon/handcuffs/legcuffs, +/obj/item/weapon/handcuffs, +/obj/item/clothing/glasses/sunglasses/thinblindfold, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"rvw" = ( +/turf/simulated/floor/tiled, +/area/redgate/facility/office3) +"rvG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rwj" = ( +/turf/unsimulated/fake_space, +/area/redgate/facility/cell15) +"rwD" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/turf/simulated/floor/tiled/freezer, +/area/redgate/facility/sw) +"rwN" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = 8 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rya" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"ryq" = ( +/obj/item/weapon/material/shard, +/obj/item/broken_device/random, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"ryO" = ( +/obj/structure/closet/hydrant{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"ryZ" = ( +/obj/random/trash_pile, +/turf/simulated/floor, +/area/redgate/facility/sw) +"rzg" = ( +/obj/structure/table/woodentable, +/obj/structure/disposaloutlet{ + density = 0; + pixel_y = 18 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"rzk" = ( +/obj/structure/table/glass, +/obj/random/mug, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"rzP" = ( +/obj/structure/sink{ + pixel_y = 20 + }, +/obj/structure/mirror{ + pixel_y = 38 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"rzR" = ( +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"rzV" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/glass/bottle/bicaridine, +/obj/item/weapon/reagent_containers/glass/bottle/bicaridine, +/obj/item/weapon/reagent_containers/glass/bottle/dexalinp, +/obj/item/weapon/reagent_containers/glass/bottle/dexalinp, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office7) +"rBd" = ( +/turf/simulated/wall/tgmc/redstripe, +/area/redgate/facility/office4) +"rBl" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/medical, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office7) +"rBs" = ( +/obj/machinery/vending/medical, +/obj/effect/floor_decal/corner/blue/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"rBH" = ( +/obj/machinery/door/window/brigdoor/eastleft, +/obj/machinery/door/window/brigdoor/eastleft{ + dir = 8 + }, +/turf/simulated/floor/tiled/techmaint, +/area/redgate/facility/lab5) +"rCl" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 1 + }, +/obj/machinery/vitals_monitor, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"rCY" = ( +/obj/structure/closet, +/obj/item/clothing/suit/storage/toggle/labcoat{ + color = "#ff54f6" + }, +/obj/item/clothing/shoes/slippers, +/obj/item/clothing/under/pants/black, +/obj/random/tetheraid, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office6) +"rDk" = ( +/obj/random/plushielarge, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"rDl" = ( +/obj/structure/table/glass, +/obj/random/firstaid, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"rDt" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/medical, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office6) +"rDZ" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 6 + }, +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab2) +"rEb" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rEw" = ( +/obj/structure/table/glass, +/obj/item/weapon/material/minihoe, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"rFo" = ( +/obj/structure/table/steel, +/obj/item/weapon/storage/toolbox/mechanical{ + pixel_x = 2; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"rGl" = ( +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"rGD" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/office3) +"rHb" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/botanydisk, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"rIw" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"rII" = ( +/obj/structure/filingcabinet/filingcabinet{ + pixel_x = 11 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"rJt" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + name = "Research Facility" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rJR" = ( +/obj/machinery/papershredder, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"rJY" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell26) +"rKF" = ( +/turf/simulated/floor/water/deep/pool, +/area/redgate/facility/cell27) +"rKP" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"rLZ" = ( +/obj/structure/table/woodentable, +/obj/structure/theonepizza{ + pixel_y = 0 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"rMp" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/floor/tiled/dark, +/area/redgate/facility/cell10) +"rMq" = ( +/obj/effect/floor_decal/rust, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"rMx" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office7) +"rNs" = ( +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 26; + pixel_y = -9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office7) +"rNw" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"rNF" = ( +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "medical_2"; + pixel_x = -25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office6) +"rNO" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office6) +"rOo" = ( +/obj/structure/prop/rock/flat, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell26) +"rOM" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/cell10) +"rPE" = ( +/obj/structure/filingcabinet/filingcabinet{ + density = 0; + pixel_x = -11 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"rQg" = ( +/obj/machinery/light/broken{ + dir = 8 + }, +/obj/structure/toilet{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"rQF" = ( +/obj/structure/table/borosilicate, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"rQR" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell17) +"rSt" = ( +/obj/effect/floor_decal/corner/red/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"rSN" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell17) +"rTl" = ( +/obj/structure/loot_pile/surface/bones, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"rTF" = ( +/obj/structure/bed/padded, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"rTK" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/ne) +"rTL" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/redgate/facility/ne) +"rUr" = ( +/obj/structure/table/reinforced, +/obj/item/device/radio/off{ + pixel_x = 6; + pixel_y = 4 + }, +/obj/item/device/radio/off{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"rUI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"rUV" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + name = "Research Facility" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"rUY" = ( +/turf/simulated/floor/water/contaminated, +/area/redgate/facility/ne) +"rVn" = ( +/obj/machinery/atmospherics/pipe/vent, +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"rVR" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/lab2) +"rWr" = ( +/obj/structure/railing/grey, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"rWB" = ( +/obj/structure/closet/l3closet/scientist, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"rWG" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"rWH" = ( +/obj/structure/disposalpipe/segment, +/obj/random/trash_pile, +/obj/structure/railing, +/turf/simulated/floor, +/area/redgate/facility/cell4) +"rXl" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/tree/jungle, +/turf/simulated/floor/grass, +/area/redgate/facility/cell24) +"rXr" = ( +/obj/structure/closet/walllocker/wooden/west, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/reagent_containers/food/condiment/carton/flour, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/reagent_containers/glass/beaker/measuring_cup, +/obj/item/weapon/reagent_containers/glass/beaker/measuring_cup, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/carton/sugar, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"rXY" = ( +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/se) +"rZd" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/machinery/atmospherics/pipe/vent{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"sac" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"saC" = ( +/obj/structure/bed/chair/office/light{ + dir = 1; + icon_scale_x = 1.5; + icon_scale_y = 1.5 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"saX" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/toy/desk/officetoy, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"sbR" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"sbT" = ( +/obj/structure/table/borosilicate, +/obj/item/clothing/gloves/circuitry, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell8) +"sdd" = ( +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/nw) +"sdw" = ( +/obj/machinery/door/airlock/angled_tgmc/personal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"sdL" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"sdT" = ( +/obj/structure/table/reinforced, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"see" = ( +/obj/machinery/button/remote/airlock{ + id = "cell_5"; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell9) +"seU" = ( +/obj/machinery/door/blast/regular/open{ + id = "creature" + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell13) +"sgn" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"sgr" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office7) +"sgt" = ( +/obj/machinery/door/airlock/angled_tgmc/medical{ + dir = 8; + id_tag = "medical_1" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office7) +"sgA" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"sgK" = ( +/obj/structure/filingcabinet/filingcabinet{ + density = 0; + pixel_x = -11 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"sgX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"shc" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"shd" = ( +/obj/structure/flora/lily3, +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell27) +"shr" = ( +/obj/machinery/porta_turret/alien/destroyed{ + dir = 5; + name = "broken containment turret" + }, +/obj/effect/map_effect/interval/effect_emitter/sparks, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell22) +"shD" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell7) +"shU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"siH" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"sjF" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/random/multiple/random_size_crate/no_weapons, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"skx" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell17) +"skO" = ( +/obj/machinery/computer/security{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell17) +"skS" = ( +/obj/random/internal_organ, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"skW" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/se) +"slj" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"slz" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office4) +"slB" = ( +/obj/structure/smolebuilding/houses, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"slW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"smg" = ( +/obj/structure/smoletrack/roadT, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"smu" = ( +/obj/structure/smoletrack/roadturn{ + dir = 8 + }, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"smS" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"smZ" = ( +/obj/structure/grille/broken, +/obj/item/weapon/material/shard, +/turf/simulated/floor, +/area/redgate/facility/cell25) +"snf" = ( +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"snl" = ( +/turf/unsimulated/floor/dark, +/area/redgate/facility/cell9) +"snB" = ( +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/se) +"soz" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"soO" = ( +/obj/structure/extinguisher_cabinet{ + dir = 1; + pixel_y = -32 + }, +/obj/effect/floor_decal/corner/pink/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"soP" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/office2) +"spe" = ( +/obj/effect/floor_decal/corner/pink/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"spC" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell27) +"sqj" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + dir = 2 + }, +/obj/effect/floor_decal/corner/red/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"ssb" = ( +/obj/effect/floor_decal/corner/pink/border, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"stb" = ( +/obj/structure/table/rack/shelf, +/obj/item/weapon/storage/box/monkeycubes, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"stt" = ( +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/sw) +"stZ" = ( +/obj/machinery/disposal/wall{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"sup" = ( +/obj/effect/floor_decal/corner/pink/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"suv" = ( +/obj/structure/table/standard, +/obj/random/soap, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"suF" = ( +/obj/structure/closet/wardrobe/engineering_yellow, +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"suT" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"svl" = ( +/obj/structure/bed/chair/sofa/corp/left, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"svp" = ( +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "cell_1"; + pixel_x = -25; + specialfunctions = 4 + }, +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"svw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor, +/area/redgate/facility/sw) +"svQ" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell2) +"svW" = ( +/obj/structure/prop/rock/small/alt, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell26) +"sww" = ( +/obj/structure/filingcabinet/filingcabinet{ + pixel_x = -11 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office7) +"swP" = ( +/obj/structure/table/glass, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office6) +"sxk" = ( +/obj/structure/table/glass, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"sxL" = ( +/mob/living/simple_mob/vore/stalker, +/obj/effect/floor_decal/corner/black/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"sze" = ( +/obj/structure/disposalpipe/broken, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell25) +"szw" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + id_tag = "cell_11"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell17) +"sAf" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell17) +"sAu" = ( +/obj/item/weapon/bone/arm, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"sAK" = ( +/obj/structure/closet, +/obj/item/clothing/under/rank/security/corp, +/obj/item/weapon/handcuffs, +/obj/item/clothing/shoes/boots/duty, +/obj/item/clothing/gloves/black, +/obj/item/clothing/head/helmet/solgov/security, +/obj/item/device/ticket_printer, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office10) +"sAM" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/smolebrickcase, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"sAQ" = ( +/obj/structure/table/hardwoodtable, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/se) +"sBr" = ( +/turf/simulated/wall/tgmc/window/darkwall, +/area/redgate/facility/cell9) +"sBD" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"sCG" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/multitool{ + pixel_x = 3 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"sCO" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + dir = 8; + pixel_x = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"sEm" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"sEo" = ( +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"sFc" = ( +/obj/structure/cable{ + dir = 1 + }, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"sFz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"sGw" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab5) +"sIe" = ( +/obj/structure/railing/grey{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/random/junk, +/obj/random/mainttoyloot/nofail, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"sIR" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = null; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"sJl" = ( +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office4) +"sKR" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/computer/arcade, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"sMa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell5) +"sMt" = ( +/obj/structure/salvageable/console{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"sML" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"sNw" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office11) +"sNG" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell4) +"sOT" = ( +/obj/machinery/light_switch{ + dir = 4; + pixel_x = -24; + pixel_y = -10 + }, +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "cell_4"; + pixel_x = -25; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"sPR" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/cell_charger, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"sQv" = ( +/obj/structure/bed/chair/sofa/right/purp{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"sQy" = ( +/obj/structure/bed/double/padded{ + icon_scale_x = 3; + icon_scale_y = 3 + }, +/obj/item/weapon/bedsheet/hosdouble{ + icon_scale_x = 3; + icon_scale_y = 3 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"sQK" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"sRk" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office7) +"sRJ" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office7) +"sSE" = ( +/obj/structure/closet, +/obj/item/clothing/suit/storage/toggle/labcoat, +/obj/random/medical/pillbottle, +/obj/random/medical/pillbottle, +/obj/random/tetheraid, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office7) +"sSG" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/corner/blue/border{ + dir = 10 + }, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"sTb" = ( +/obj/effect/floor_decal/corner/grey{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"sTL" = ( +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"sTU" = ( +/obj/effect/floor_decal/corner/blue/border, +/obj/machinery/vending/blood, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"sTZ" = ( +/obj/structure/filingcabinet/filingcabinet{ + pixel_x = -11 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office6) +"sUa" = ( +/obj/machinery/light, +/obj/effect/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"sUI" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/item/weapon/gun/launcher/syringe/rapid, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office7) +"sUQ" = ( +/obj/structure/closet/secure_closet/personal{ + name = "I. M. Board" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"sUT" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"sVc" = ( +/obj/structure/sign/levels/cryo, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab2) +"sVe" = ( +/obj/structure/table/hardwoodtable, +/obj/item/modular_computer/laptop/preset/custom_loadout/standard, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"sVo" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"sVJ" = ( +/obj/structure/prop/transmitter, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab3) +"sVM" = ( +/obj/structure/bed/chair/wood/wings{ + dir = 8 + }, +/turf/simulated/floor/wood/alt/panel, +/area/redgate/facility/cell2) +"sWr" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"sWX" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "cell_11"; + pixel_x = -25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell17) +"sXg" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell17) +"sXk" = ( +/obj/effect/floor_decal/corner/blue/bordercorner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/blue/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"sXx" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/snacks/snackplanet/moon, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"sXK" = ( +/obj/structure/smoletrack/roadT{ + dir = 4 + }, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"sXT" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"sYs" = ( +/obj/structure/smoletrack/roadF, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"sZE" = ( +/obj/structure/table/steel, +/obj/item/device/electronic_assembly/large/default, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"tbG" = ( +/obj/structure/smoletrack/roadT{ + dir = 8 + }, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"tbS" = ( +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell18) +"tdl" = ( +/obj/effect/decal/cleanable/blood/oil, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"tdG" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/se) +"tdP" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell29) +"teZ" = ( +/obj/structure/table/steel, +/obj/item/weapon/storage/toolbox/electrical, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/lab3) +"tfK" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab4) +"tge" = ( +/obj/structure/cable{ + dir = 8 + }, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"tgs" = ( +/obj/effect/floor_decal/carpet/blue, +/turf/simulated/floor/carpet/bcarpet, +/area/redgate/facility/ne) +"tgG" = ( +/obj/machinery/button/remote/airlock{ + dir = 4; + id = "medical_1"; + pixel_x = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office7) +"ths" = ( +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"thx" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell25) +"tiA" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"tiI" = ( +/obj/machinery/button/remote/airlock{ + id = "cell_14b"; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"tiL" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"tiT" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"tjA" = ( +/obj/structure/closet/crate/bin, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"tjQ" = ( +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/random/trash_pile, +/turf/simulated/floor, +/area/redgate/facility/se) +"tjX" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + dir = 8; + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"tkR" = ( +/obj/structure/cable{ + dir = 4 + }, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"tkS" = ( +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"tld" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/redgate/facility/lab5) +"tlP" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"tlQ" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"tmC" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + id_tag = "cell_13"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"tnf" = ( +/obj/structure/table/reinforced, +/obj/random/snack, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"tnq" = ( +/obj/structure/table/steel, +/obj/fiftyspawner/steel, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"tnZ" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/closet/secure_closet/egg/xenomorph, +/obj/random/tool/alien, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"toi" = ( +/obj/machinery/seed_storage/xenobotany, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"toC" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/cell5) +"toO" = ( +/obj/machinery/button/remote/blast_door{ + id = "core_experiment"; + pixel_y = 25 + }, +/obj/effect/floor_decal/corner/black/border{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"tpg" = ( +/obj/effect/floor_decal/corner/pink/bordercorner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"tpr" = ( +/obj/structure/railing, +/turf/simulated/floor, +/area/redgate/facility/cell4) +"tpI" = ( +/obj/structure/bed/chair/sofa/left/purp{ + dir = 1 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"tqa" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab2) +"tqh" = ( +/obj/machinery/button/remote/blast_door{ + id = "creature"; + pixel_y = 25 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell13) +"tqs" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/sw) +"tqN" = ( +/obj/machinery/light, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"trT" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"trZ" = ( +/obj/random/trash_pile, +/obj/structure/railing, +/turf/simulated/floor, +/area/redgate/facility/cell4) +"tsC" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"tsX" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/securitylobby) +"ttF" = ( +/turf/simulated/wall/solidrock/mossyrockpoi, +/area/redgate/facility/cell26) +"tuI" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell17) +"tvf" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/nw) +"tvp" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/turf/simulated/floor, +/area/redgate/facility/medbay) +"tvs" = ( +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"tvO" = ( +/obj/structure/closet/l3closet/general, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"twx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"twT" = ( +/obj/item/broken_device/random, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell21) +"twU" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"txk" = ( +/obj/structure/table/glass, +/obj/random/bomb_supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"txv" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell17) +"txw" = ( +/obj/structure/lightpost/atoll, +/turf/simulated/floor/atoll, +/area/redgate/facility/cell16) +"txy" = ( +/obj/machinery/light{ + stat = 0 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"txD" = ( +/obj/item/weapon/bone/ribs, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"txE" = ( +/obj/effect/floor_decal/corner/brown/diagonal, +/obj/machinery/vending/cigarette, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"txQ" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"tyO" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/lab4) +"tzr" = ( +/obj/machinery/camera{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"tAe" = ( +/obj/item/weapon/bone/skull/tajaran, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"tAi" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"tAu" = ( +/obj/structure/table/standard, +/obj/item/weapon/gun/energy/sizegun, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"tAT" = ( +/obj/structure/smolebuilding/business, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"tBb" = ( +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell3) +"tBu" = ( +/obj/structure/table/reinforced, +/obj/item/device/gps/engineering{ + pixel_y = 3 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"tBC" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"tCe" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + dir = 8; + icon_state = "1-4" + }, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"tCh" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/redgate/facility/lab5) +"tCL" = ( +/obj/structure/closet/hydrant{ + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"tCX" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = -9; + pixel_y = 17 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"tDX" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/box/beakers, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"tEq" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell25) +"tFx" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office6) +"tGn" = ( +/turf/simulated/floor/water/deep/pool, +/area/redgate/facility/ne) +"tGO" = ( +/obj/machinery/vending/bepis{ + dir = 4; + pixel_x = -7 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"tGQ" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 8 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/cell5) +"tHb" = ( +/obj/structure/bed/chair/sofa/corp/left{ + dir = 8 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 4 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"tHl" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/table/rack/steel, +/obj/item/weapon/towel/random, +/obj/random/soap, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office5) +"tHw" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor, +/area/redgate/facility/sw) +"tHA" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/sw) +"tHM" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell13) +"tIw" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/mopbucket, +/turf/simulated/floor, +/area/redgate/facility/office3) +"tIz" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor, +/area/redgate/facility/sw) +"tII" = ( +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/sw) +"tIS" = ( +/obj/machinery/transhuman/resleever, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"tIX" = ( +/obj/structure/table/reinforced, +/obj/random/maintenance/foodstuff, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"tIY" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell20) +"tJa" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"tJz" = ( +/obj/structure/signevent/blue{ + desc = "Head east here to find digestion focused characters"; + pixel_x = 29 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"tKn" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"tLi" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"tLD" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/obj/effect/decal/cleanable/blood/drip, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"tNn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"tPN" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"tPO" = ( +/obj/structure/smoletrack/roadturn{ + dir = 1 + }, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"tRh" = ( +/obj/machinery/recharge_station/ghost_pod_recharger, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell21) +"tRB" = ( +/obj/structure/smoletrack/roadT{ + dir = 1 + }, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"tSC" = ( +/obj/structure/smoletrack/roadturn{ + dir = 4 + }, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"tSQ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"tTv" = ( +/obj/machinery/conveyor{ + dir = 4; + id = "facility_Q" + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/nw) +"tTI" = ( +/obj/structure/table/standard, +/obj/machinery/reagentgrinder, +/obj/item/stack/material/phoron{ + amount = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"tUg" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/se) +"tUz" = ( +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"tVa" = ( +/obj/machinery/processor, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"tVt" = ( +/obj/machinery/vending/snlvend{ + dir = 4; + pixel_x = -8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"tVK" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"tVM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"tWF" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/cell5) +"tXN" = ( +/obj/structure/table/standard, +/obj/random/pouch, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"tXQ" = ( +/obj/effect/floor_decal/corner/orange/bordercorner{ + dir = 8 + }, +/obj/machinery/light/floortube{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"tXR" = ( +/obj/effect/floor_decal/corner/pink/bordercorner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"tYm" = ( +/obj/random/maintenance/engineering, +/turf/simulated/floor/tiled/monotile, +/area/redgate/facility/cell29) +"tYH" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/sw) +"tZu" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/light/small, +/turf/simulated/floor, +/area/redgate/facility/sw) +"uag" = ( +/obj/structure/table/steel_reinforced, +/obj/random/powercell/device, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell14) +"uaM" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/dropper, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office8) +"ubE" = ( +/obj/machinery/vending/loadout/overwear, +/obj/effect/floor_decal/corner/grey{ + dir = 10 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"uce" = ( +/obj/item/modular_computer/console, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"uct" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/gloves, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"ucB" = ( +/obj/structure/prop/fantasy/shinto{ + layer = 5; + pixel_y = 8 + }, +/obj/effect/floor_decal/atoll/border{ + dir = 1 + }, +/turf/simulated/floor/atoll, +/area/redgate/facility/cell16) +"ucM" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/light, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/office5) +"udo" = ( +/obj/machinery/the_singularitygen, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"udQ" = ( +/obj/structure/table/borosilicate, +/obj/random/maintenance/research, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"udW" = ( +/turf/simulated/floor, +/area/redgate/facility/office2) +"ufK" = ( +/obj/structure/table/borosilicate, +/obj/random/technology_scanner, +/obj/effect/floor_decal/techfloor{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"ugf" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/redgate/facility/lab5) +"ugm" = ( +/turf/simulated/wall/tgmc/redstripe, +/area/redgate/facility/office5) +"ugx" = ( +/obj/structure/table/standard, +/obj/item/weapon/gun/energy/taser/xeno, +/obj/item/weapon/melee/baton/slime/loaded, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"ugM" = ( +/obj/machinery/vending/sol{ + dir = 4; + pixel_x = -8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"uhd" = ( +/obj/effect/floor_decal/corner/white/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"uhl" = ( +/obj/structure/dogbed{ + icon_scale_x = 2; + icon_scale_y = 2 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/cell5) +"uhG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"ujd" = ( +/obj/structure/curtain/open{ + anchored = 1; + dir = 4; + pixel_x = 32 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"ujr" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"ujy" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 12; + pixel_y = 3 + }, +/obj/structure/mirror{ + dir = 8; + pixel_x = 26; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"ukh" = ( +/obj/structure/closet/secure_closet/personal{ + name = "Nerd" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"ulm" = ( +/obj/machinery/telecomms/bus, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab3) +"ulv" = ( +/obj/structure/table/glass, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office8) +"ulE" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/ne) +"ulT" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"umj" = ( +/obj/structure/table/glass, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"umG" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office8) +"umQ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "office_3" + }, +/turf/simulated/floor, +/area/redgate/facility/office8) +"una" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 10 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/office1) +"unc" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"uoz" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"uoG" = ( +/obj/structure/table/glass, +/obj/random/flashlight, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"uoO" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"upk" = ( +/obj/structure/closet/secure_closet/personal{ + name = "Sciencemann" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"uta" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/obj/effect/floor_decal/carpet/blue{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/redgate/facility/ne) +"uts" = ( +/obj/structure/closet, +/obj/item/clothing/suit/kimono/blue, +/obj/item/clothing/shoes/sandal, +/obj/item/weapon/storage/box/matches, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"utW" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/techmaint, +/area/redgate/facility/lab5) +"utX" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 + }, +/obj/item/modular_computer/console, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"utZ" = ( +/obj/machinery/appliance/cooker/oven, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 1; + stat = 0 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"uuj" = ( +/obj/structure/table/glass, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"uuI" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/structure/table/rack/steel, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/sw) +"uvV" = ( +/obj/structure/table/glass, +/obj/machinery/chemical_dispenser/biochemistry/full, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"uwd" = ( +/obj/machinery/disposal/wall{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"uxJ" = ( +/obj/structure/closet, +/obj/item/clothing/under/rank/security/corp, +/obj/item/weapon/handcuffs, +/obj/item/clothing/shoes/boots/duty, +/obj/item/clothing/gloves/black, +/obj/item/clothing/head/helmet/solgov/security, +/obj/item/device/ticket_printer, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"uxP" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"uzf" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell12) +"uzn" = ( +/obj/machinery/optable, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"uzu" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/box/syringes, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"uAd" = ( +/obj/structure/girder, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"uAe" = ( +/obj/machinery/vending/radren{ + dir = 4; + pixel_x = -7 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"uAx" = ( +/obj/structure/table/woodentable, +/obj/machinery/microwave, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"uBE" = ( +/obj/machinery/atmospherics/pipe/vent{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"uBR" = ( +/obj/structure/closet/l3closet/janitor, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"uCR" = ( +/obj/structure/table/reinforced, +/obj/structure/salvageable/personal, +/obj/machinery/light{ + dir = 1; + stat = 0 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"uCW" = ( +/obj/effect/floor_decal/borderfloorwhite/corner, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"uDj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"uDl" = ( +/obj/structure/bookcase/manuals/research_and_development, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office1) +"uEG" = ( +/obj/random/junk, +/turf/simulated/floor, +/area/redgate/facility/se) +"uEI" = ( +/turf/simulated/floor/water/pool, +/area/redgate/facility/cell13) +"uFh" = ( +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"uGh" = ( +/obj/structure/table/standard, +/obj/random/flashlight, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"uGi" = ( +/obj/machinery/floodlight{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"uGj" = ( +/obj/machinery/atmospherics/pipe/vent, +/turf/simulated/floor, +/area/redgate/facility/sw) +"uGy" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 9 + }, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"uGz" = ( +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"uGP" = ( +/obj/structure/bed/chair/office/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"uGZ" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"uHs" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4; + id_tag = "cell_14b"; + locked = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"uHK" = ( +/obj/structure/closet/secure_closet/personal{ + name = "Bouqet" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/obj/random/forgotten_tram, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"uHO" = ( +/obj/structure/table/hardwoodtable, +/obj/structure/table/hardwoodtable, +/obj/item/modular_computer/laptop/preset/custom_loadout/rugged, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"uIp" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/structure/bed/chair/sofa/corp/right, +/turf/simulated/floor/carpet/purcarpet, +/area/redgate/facility/cell1) +"uIT" = ( +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"uJD" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/item/weapon/bone/skull, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"uJU" = ( +/obj/machinery/light, +/obj/effect/floor_decal/corner/pink/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"uKk" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/obj/machinery/button/remote/airlock{ + id = "cell_22"; + pixel_y = 25; + specialfunctions = 4 + }, +/obj/machinery/button/windowtint{ + id = "cell_22"; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell27) +"uKS" = ( +/obj/structure/closet/walllocker_double/science/west, +/obj/item/selectable_item/chemistrykit/gender, +/obj/item/selectable_item/chemistrykit/gender, +/obj/item/selectable_item/chemistrykit/gender, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office8) +"uLu" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab3) +"uLv" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"uLz" = ( +/obj/structure/prop/rock/small, +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell20) +"uLN" = ( +/obj/machinery/floodlight{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"uLO" = ( +/obj/structure/bed/chair/sofa/corp/right{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell9) +"uMg" = ( +/obj/machinery/telecomms/server, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab3) +"uMq" = ( +/obj/structure/closet/walllocker_double/science/east, +/obj/item/weapon/book/manual/virology, +/obj/item/device/antibody_scanner, +/obj/item/device/antibody_scanner, +/obj/item/weapon/reagent_containers/glass/beaker, +/obj/item/weapon/virusdish/random, +/obj/item/weapon/virusdish/random, +/obj/item/weapon/virusdish/random, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"uNl" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"uNo" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell26) +"uNu" = ( +/obj/structure/table/glass, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"uNy" = ( +/obj/structure/table/standard, +/obj/item/weapon/storage/firstaid/surgery, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"uOS" = ( +/obj/structure/bed/chair/office/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"uQl" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"uQm" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab5) +"uQp" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab5) +"uRI" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell5) +"uSb" = ( +/obj/effect/floor_decal/corner/pink/bordercorner, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"uSJ" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "lab_office" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"uUk" = ( +/obj/machinery/light, +/obj/structure/bed/chair/sofa/purp{ + dir = 1 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"uUr" = ( +/obj/machinery/vending/desatti{ + dir = 4; + pixel_x = -8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"uUQ" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"uUR" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"uVI" = ( +/obj/structure/curtain/open{ + anchored = 1; + dir = 4; + pixel_x = 32 + }, +/obj/random/plushie, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"uWT" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/turf/simulated/floor/carpet/green, +/area/redgate/facility/sw) +"uXg" = ( +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"uXt" = ( +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "cell_10"; + pixel_x = -25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"uXJ" = ( +/obj/structure/table/steel_reinforced, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"uYc" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor, +/area/redgate/facility/cell6) +"uYg" = ( +/obj/machinery/floodlight{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"uYm" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"uYJ" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"uZl" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/glass/beaker/large, +/obj/item/weapon/reagent_containers/dropper, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"uZo" = ( +/obj/effect/floor_decal/corner/black/bordercorner, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"uZs" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/lab5) +"vbz" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"vcx" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"vcT" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/structure/table/hardwoodtable, +/obj/item/modular_computer/laptop/preset/custom_loadout/elite, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"vdv" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"vdM" = ( +/obj/structure/table/glass, +/obj/random/soap_common, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"vdS" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"veD" = ( +/turf/simulated/floor/grass, +/area/redgate/facility/office1) +"vfp" = ( +/obj/machinery/door/window{ + dir = 8 + }, +/obj/machinery/door/window/eastright, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell18) +"vfQ" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 8 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"vgq" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/random/trash_pile, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"vgS" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"vhe" = ( +/obj/structure/closet/cabinet, +/obj/random/pizzabox, +/obj/random/pizzabox, +/obj/random/pizzabox, +/obj/random/pizzabox, +/obj/random/pizzabox, +/obj/random/pizzabox, +/obj/random/pizzabox, +/obj/random/pizzabox, +/obj/random/pizzabox, +/obj/random/pizzabox, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"vhU" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/bed/chair/sofa/corp/right{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"vhX" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell23) +"vio" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"vjh" = ( +/obj/structure/bed/chair/office/dark{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office11) +"vjk" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/hos, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"vjE" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7; + pixel_y = 5 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/lab5) +"vjP" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/borderfloorwhite, +/obj/item/weapon/storage/box/beakers, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"vjS" = ( +/obj/structure/table/wooden_reinforced, +/obj/item/weapon/clipboard, +/obj/machinery/button/remote/airlock{ + id = "lab_office"; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/lab5) +"vkJ" = ( +/obj/structure/table/glass, +/obj/machinery/chemical_dispenser/biochemistry/full, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office8) +"vkS" = ( +/obj/random/mech/old, +/obj/machinery/mech_recharger, +/turf/simulated/floor/tiled/milspec/raised, +/area/redgate/facility/ne) +"vkW" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/steel/monofloor, +/area/redgate/facility/ne) +"vkZ" = ( +/obj/machinery/vending/cola{ + dir = 4; + pixel_x = -7 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"vlS" = ( +/obj/random/plushie, +/obj/structure/curtain/open{ + anchored = 1; + dir = 4; + pixel_x = -32 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"vmd" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor, +/area/redgate/facility/ne) +"vmf" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"vmt" = ( +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"vmx" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/redgate/facility/cell19) +"vmZ" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + id_tag = "cell_10"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"vnp" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"vok" = ( +/obj/structure/grille/broken, +/turf/simulated/floor, +/area/redgate/facility/cell6) +"vph" = ( +/obj/structure/sign/signnew/cryogenics{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"vpr" = ( +/obj/effect/floor_decal/spline/fancy/wood{ + dir = 4 + }, +/turf/simulated/floor/carpet/blue2, +/area/redgate/facility/office1) +"vpJ" = ( +/turf/simulated/floor/water/deep/pool, +/area/redgate/facility/cell6) +"vqd" = ( +/obj/structure/closet/secure_closet/medical1, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"vqp" = ( +/obj/machinery/power/rad_collector, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"vqJ" = ( +/obj/structure/closet/wardrobe/chemistry_white, +/obj/item/weapon/storage/box/syringes, +/obj/item/weapon/storage/box/syringes, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"vqO" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"vrp" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"vsA" = ( +/obj/structure/table/glass, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"vsY" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/obj/machinery/button/windowtint{ + id = "office_3"; + pixel_x = -22 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"vuD" = ( +/obj/machinery/button/remote/airlock{ + dir = 8; + id = "cell_6"; + pixel_x = -25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"vva" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell18) +"vvH" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"vvJ" = ( +/obj/effect/rune{ + icon_scale_x = 3; + icon_scale_y = 3 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"vvP" = ( +/obj/structure/table/steel_reinforced, +/obj/structure/window/plastitanium{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/vent{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"vvV" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 12; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell18) +"vwv" = ( +/obj/structure/closet/firecloset, +/turf/simulated/floor, +/area/redgate/facility/se) +"vwC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/random/forgotten_tram, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"vzb" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"vzp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"vzJ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + dir = 8; + icon_state = "1-4" + }, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"vAp" = ( +/obj/structure/bed/chair/office/light, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell8) +"vAH" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"vAV" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 26 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/cell5) +"vBj" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + dir = 8; + icon_state = "1-4" + }, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"vBZ" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/lab5) +"vCg" = ( +/obj/structure/closet/secure_closet/egg/xenomorph, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell5) +"vCK" = ( +/obj/item/weapon/material/shard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"vDA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"vEb" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/machinery/injector_maker{ + pixel_x = -27 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"vEL" = ( +/obj/effect/floor_decal/corner/white/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"vFk" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/borderfloorwhite{ + dir = 4 + }, +/obj/random/medical/lite, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"vFv" = ( +/obj/item/weapon/material/shard, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell22) +"vFG" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet/blue, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"vGy" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office11) +"vGF" = ( +/obj/effect/floor_decal/corner/orange/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"vHn" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"vHD" = ( +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"vHH" = ( +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell17) +"vIk" = ( +/obj/structure/table/glass, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"vIA" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell18) +"vIJ" = ( +/obj/structure/table/borosilicate, +/obj/effect/floor_decal/techfloor, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"vJp" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor, +/area/redgate/facility/se) +"vKd" = ( +/obj/structure/closet/walllocker_double/science/east, +/obj/item/weapon/folder/blue, +/obj/item/weapon/folder, +/obj/item/weapon/clipboard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"vKi" = ( +/obj/effect/floor_decal/corner/orange/bordercorner, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"vKH" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"vLF" = ( +/obj/effect/floor_decal/corner/blue/border{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/random/tetheraid, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"vMh" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + id_tag = "cell_6"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"vMw" = ( +/obj/item/device/geiger/wall/north, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"vMO" = ( +/obj/structure/bed/chair/sofa/corp, +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"vNd" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/se) +"vNs" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/bed/chair/sofa/left/brown, +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/sw) +"vNL" = ( +/obj/structure/closet/walllocker_double/science/south, +/obj/random/maintenance/research, +/obj/random/maintenance/research, +/obj/random/toy, +/obj/item/device/camera, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell10) +"vOj" = ( +/obj/item/modular_computer/console{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"vPa" = ( +/obj/item/modular_computer/console{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/security) +"vPf" = ( +/obj/structure/bed/padded, +/obj/item/weapon/bedsheet, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell18) +"vPh" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor, +/area/redgate/facility/ne) +"vPy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor, +/area/redgate/facility/se) +"vPE" = ( +/obj/structure/railing, +/obj/structure/table/bench/steel, +/turf/simulated/floor, +/area/redgate/facility/nw) +"vPG" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance{ + dir = 4; + id_tag = "cell_17" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"vPI" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"vPN" = ( +/obj/structure/table/standard, +/obj/random/drinksoft, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"vQf" = ( +/turf/simulated/floor/tiled/monotile, +/area/redgate/facility/cell29) +"vQz" = ( +/obj/structure/cable, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"vQS" = ( +/obj/structure/cable{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/unsimulated/floor/techfloor_grid{ + name = "singularity flooring" + }, +/area/redgate/facility/cell29) +"vRj" = ( +/obj/machinery/papershredder, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/lab5) +"vSh" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"vSn" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"vSw" = ( +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"vTt" = ( +/obj/effect/floor_decal/borderfloorwhite/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"vTw" = ( +/obj/machinery/door/blast/regular{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell3) +"vUT" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"vUW" = ( +/obj/effect/floor_decal/borderfloorwhite{ + dir = 8 + }, +/obj/structure/flora/pottedplant/overgrown, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"vVp" = ( +/obj/effect/floor_decal/borderfloorwhite/corner, +/obj/structure/extinguisher_cabinet{ + pixel_x = 7; + pixel_y = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"vVM" = ( +/obj/item/modular_computer/console{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"vVP" = ( +/obj/machinery/button/remote/airlock{ + dir = 1; + id = "cell_14"; + pixel_x = -8; + pixel_y = -24; + specialfunctions = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 7; + pixel_y = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"vXh" = ( +/obj/structure/filingcabinet/filingcabinet{ + density = 0; + pixel_x = -11 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"vXi" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 7; + pixel_y = -30 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"vXG" = ( +/obj/machinery/porta_turret/lasertag{ + name = "containment turret" + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"vYw" = ( +/obj/structure/smolebuilding/houses, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/smole, +/area/redgate/facility/cell15) +"vYy" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7; + pixel_y = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"waw" = ( +/obj/structure/bed/chair/sofa/corp/left{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"waV" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell6) +"wbd" = ( +/obj/random/trash_pile, +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/ne) +"wbk" = ( +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor, +/area/redgate/facility/nw) +"wbo" = ( +/obj/structure/closet/hydrant{ + pixel_y = 32 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"wbX" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/food/snacks/chocolateegg, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"wcy" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/lab8) +"wcz" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"wcX" = ( +/obj/structure/railing/grey{ + dir = 1 + }, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/se) +"wdI" = ( +/obj/effect/floor_decal/techfloor{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"wez" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell17) +"wfv" = ( +/obj/structure/closet/walllocker_double/science/north, +/obj/item/weapon/surgical/scalpel, +/obj/item/clothing/gloves/sterile/nitrile, +/obj/item/clothing/gloves/sterile/nitrile, +/obj/item/clothing/gloves/sterile/nitrile, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"wfz" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor, +/area/redgate/facility/nw) +"wgi" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 + }, +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"wgj" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/ne) +"wgM" = ( +/obj/random/multiple/random_size_crate/no_weapons, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"wij" = ( +/obj/structure/closet/walllocker_double/security/east, +/obj/random/contraband/nofail, +/obj/random/contraband/nofail, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"wjn" = ( +/obj/structure/bed/chair/office/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"wkn" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell19) +"wkL" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/obj/machinery/portable_atmospherics/canister/oxygen/prechilled, +/obj/machinery/atmospherics/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/lab2) +"wlM" = ( +/obj/structure/table/borosilicate, +/obj/item/weapon/implantcase/tracking, +/obj/item/weapon/implanter, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell8) +"wlO" = ( +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell26) +"wlS" = ( +/obj/machinery/door/airlock/angled_tgmc/engineering, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"wmm" = ( +/obj/structure/table/steel_reinforced, +/obj/item/weapon/book/manual/robotics_manual, +/turf/simulated/floor/tiled/steel_grid, +/area/redgate/facility/ne) +"wmn" = ( +/obj/machinery/photocopier, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/lab5) +"wmB" = ( +/obj/structure/table/wooden_reinforced, +/obj/machinery/cell_charger, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/lab5) +"wmT" = ( +/obj/structure/table/glass, +/obj/item/device/defib_kit/loaded, +/obj/effect/floor_decal/borderfloor, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"wnn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab8) +"woC" = ( +/turf/simulated/wall/tgmc/rwall, +/area/redgate/facility/cell8) +"wpO" = ( +/obj/machinery/field_generator{ + anchored = 1; + state = 1 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"wpY" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4; + id_tag = "cell_4" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell4) +"wqT" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + name = "Research Facility" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab4) +"wqX" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/polarized/full{ + id = "office_2" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office2) +"wrO" = ( +/obj/structure/bed/chair/sofa/corp/right, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"wsg" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell26) +"wsU" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "cell_14"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"wsW" = ( +/obj/structure/closet/radiation, +/obj/random/maintenance/engineering, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"wtc" = ( +/obj/structure/table/steel, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"wtl" = ( +/obj/structure/table/reinforced, +/obj/item/weapon/reagent_containers/food/snacks/egg/green, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"wty" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/turf/simulated/floor, +/area/redgate/facility/sw) +"wua" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "office_3" + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office8) +"wum" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell2) +"wuJ" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4; + locked = 1 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/sw) +"wuV" = ( +/obj/machinery/organ_printer/flesh, +/obj/effect/floor_decal/borderfloor{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"wvE" = ( +/obj/structure/table/darkglass, +/obj/item/weapon/bikehorn/rubberducky/grey, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"wwn" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"wwB" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell21) +"wxd" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/ne) +"wyg" = ( +/obj/structure/closet/toolcloset, +/obj/random/tool/power, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"wys" = ( +/obj/machinery/light/broken{ + dir = 1 + }, +/obj/structure/table/standard, +/obj/structure/salvageable/personal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"wyO" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"wzb" = ( +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/sw) +"wzE" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"wBd" = ( +/obj/structure/table/glass, +/obj/item/weapon/reagent_containers/glass/beaker/vial/microcillin, +/obj/item/weapon/reagent_containers/glass/beaker/vial/microcillin, +/obj/item/weapon/reagent_containers/glass/beaker/vial/macrocillin, +/obj/item/weapon/reagent_containers/glass/beaker/vial/macrocillin, +/obj/item/weapon/reagent_containers/glass/beaker/vial/normalcillin, +/obj/item/weapon/reagent_containers/glass/beaker/vial/normalcillin, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office11) +"wBO" = ( +/obj/structure/bed/chair/office/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"wCE" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"wCZ" = ( +/obj/machinery/conveyor{ + dir = 8; + id = "facility_Q" + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/nw) +"wDx" = ( +/turf/simulated/wall/solidrock, +/area/redgate/facility/cell26) +"wDL" = ( +/obj/structure/table/woodentable, +/obj/random/forgotten_tram, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office9) +"wDV" = ( +/obj/machinery/sleeper{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"wEe" = ( +/obj/structure/closet/l3closet/janitor, +/obj/random/tool/alien, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"wFo" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + id_tag = "cell_9"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"wFP" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"wGc" = ( +/obj/machinery/media/jukebox, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"wGw" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"wGy" = ( +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"wGJ" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell18) +"wGW" = ( +/obj/random/bluespace, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"wHb" = ( +/turf/simulated/wall/tgmc/darkwall, +/area/redgate/facility/tram) +"wHu" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"wHy" = ( +/obj/structure/closet/secure_closet/personal{ + name = "U. C. Weiner" + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 9 + }, +/obj/effect/floor_decal/corner/lightgrey{ + dir = 6 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/random/forgotten_tram, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"wIG" = ( +/obj/item/weapon/reagent_containers/food/drinks/cans/bepis{ + pixel_x = 13; + pixel_y = 10 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell22) +"wJW" = ( +/obj/structure/bed/chair/backed_grey{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"wKl" = ( +/obj/machinery/button/remote/airlock{ + dir = 1; + id = "cell_15"; + pixel_x = -8; + pixel_y = -24; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"wLb" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4; + locked = 1; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/lab3) +"wLo" = ( +/obj/structure/closet, +/obj/random/contraband/nofail, +/obj/random/meat, +/obj/random/meat, +/obj/random/meat, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"wLp" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"wLs" = ( +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"wMg" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"wMh" = ( +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals6{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"wMB" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"wMW" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"wOa" = ( +/obj/effect/floor_decal/corner/pink/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"wOh" = ( +/obj/effect/floor_decal/corner/pink/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"wOP" = ( +/obj/machinery/door/airlock/angled_tgmc/medical{ + dir = 8; + id_tag = "medical_2" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/office6) +"wPL" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"wQB" = ( +/obj/machinery/door/airlock/angled_tgmc/maintenance, +/turf/simulated/floor, +/area/redgate/facility/cell23) +"wQZ" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/white/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"wRm" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "cell_15"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"wRU" = ( +/obj/structure/curtain/open{ + anchored = 1; + dir = 4; + pixel_x = 32 + }, +/turf/simulated/floor/carpet/oracarpet, +/area/redgate/facility/cell5) +"wSu" = ( +/turf/simulated/floor/tiled/eris/dark/gray_platform, +/area/redgate/facility/cell29) +"wSx" = ( +/obj/random/vendorall, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"wSy" = ( +/obj/structure/particle_accelerator/particle_emitter/left{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/gray_platform, +/area/redgate/facility/cell29) +"wTD" = ( +/obj/structure/particle_accelerator/particle_emitter/center{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/gray_platform, +/area/redgate/facility/cell29) +"wTX" = ( +/obj/structure/particle_accelerator/particle_emitter/right{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/gray_platform, +/area/redgate/facility/cell29) +"wUe" = ( +/obj/structure/extinguisher_cabinet{ + dir = 1; + pixel_y = -32 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab5) +"wVH" = ( +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/carpet/tealcarpet, +/area/redgate/facility/ne) +"wVY" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"wWk" = ( +/obj/effect/floor_decal/corner/pink/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"wWn" = ( +/obj/machinery/door/airlock/angled_tgmc/cell, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"wWT" = ( +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/vent{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"wXX" = ( +/obj/machinery/atmospherics/pipe/vent{ + dir = 1 + }, +/turf/simulated/floor, +/area/redgate/facility/sw) +"wYy" = ( +/obj/structure/closet/hydrant{ + pixel_y = 32 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"wZD" = ( +/obj/effect/floor_decal/industrial/warning, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell15) +"xag" = ( +/obj/effect/floor_decal/rust, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell25) +"xan" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xaD" = ( +/obj/effect/wingrille_spawn/reinforced_phoron, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell8) +"xaM" = ( +/obj/structure/closet/walllocker_double/north, +/obj/random/maintenance/security, +/obj/random/mre, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"xcb" = ( +/obj/structure/filingcabinet/filingcabinet{ + pixel_x = 11 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"xcj" = ( +/obj/structure/prop/machine/alien_tank, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"xcU" = ( +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xdg" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xer" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"xes" = ( +/obj/structure/particle_accelerator/power_box{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/gray_platform, +/area/redgate/facility/cell29) +"xeF" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"xeT" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "cell_5"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell9) +"xeW" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"xfG" = ( +/obj/machinery/portable_atmospherics/canister/empty, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"xgR" = ( +/obj/structure/sink{ + dir = 1; + pixel_y = -8 + }, +/obj/structure/mirror{ + dir = 1; + pixel_y = -26 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/entrance) +"xgW" = ( +/obj/item/weapon/paper/crumpled, +/obj/machinery/light/broken{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"xhK" = ( +/obj/machinery/door/airlock/angled_tgmc/wide/generic_steel{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"xhO" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "cell_16"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"xhT" = ( +/turf/simulated/wall/tgmc/whitewall{ + can_open = 1 + }, +/area/redgate/facility/sw) +"xiu" = ( +/obj/structure/table/standard, +/obj/item/weapon/paper_bin{ + pixel_y = 4 + }, +/obj/item/weapon/pen{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"xiY" = ( +/obj/machinery/light{ + dir = 1; + stat = 0 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"xjD" = ( +/obj/machinery/button/remote/blast_door{ + id = "core_experiment"; + pixel_y = 25 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"xjV" = ( +/obj/machinery/button/windowtint{ + id = "cell_9"; + pixel_x = 22 + }, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"xkn" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"xnp" = ( +/obj/effect/floor_decal/corner/orange/bordercorner{ + dir = 1 + }, +/obj/machinery/light/floortube, +/turf/simulated/floor/tiled/eris/dark/techfloor_grid, +/area/redgate/facility/ne) +"xnq" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xny" = ( +/obj/machinery/light, +/obj/effect/floor_decal/corner/red/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xpa" = ( +/obj/machinery/door/blast/multi_tile/three_tile_hor{ + id = "facility_engine" + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell29) +"xpn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xps" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/bordercorner, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xpu" = ( +/obj/effect/floor_decal/corner/red/border, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xpv" = ( +/obj/item/toy/plushie/slimeplushie, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"xqf" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"xqm" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"xqA" = ( +/obj/machinery/door/airlock/angled_tgmc/personal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xqU" = ( +/obj/machinery/door/blast/regular/open, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell27) +"xrx" = ( +/obj/effect/floor_decal/corner/red/bordercorner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/vent{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xrJ" = ( +/obj/machinery/power/terminal, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"xrN" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"xrX" = ( +/obj/machinery/particle_accelerator/control_box, +/turf/simulated/floor/tiled/eris/dark/gray_platform, +/area/redgate/facility/cell29) +"xsE" = ( +/obj/structure/particle_accelerator/fuel_chamber{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/gray_platform, +/area/redgate/facility/cell29) +"xsN" = ( +/obj/structure/table/hardwoodtable, +/obj/item/weapon/paper_bin, +/obj/item/weapon/pen/blue, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"xth" = ( +/obj/effect/floor_decal/industrial/warning/corner, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/ne) +"xtG" = ( +/obj/structure/cable{ + dir = 8; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"xua" = ( +/obj/effect/floor_decal/carpet/blue{ + dir = 1 + }, +/turf/simulated/floor/carpet/bcarpet, +/area/redgate/facility/ne) +"xuj" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/table/reinforced, +/obj/item/device/t_scanner/advanced, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"xul" = ( +/obj/structure/closet, +/obj/item/weapon/storage/bag/circuits/basic, +/obj/item/integrated_circuit/output/led/blue, +/obj/item/integrated_circuit/output/led/orange, +/obj/item/weapon/circuitboard/gyrotron, +/obj/fiftyspawner/steel, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"xus" = ( +/obj/effect/floor_decal/corner/black/border{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"xuu" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/pink/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"xuI" = ( +/turf/simulated/wall/tgmc/window/redstripe_r, +/area/redgate/facility/security) +"xuW" = ( +/obj/item/modular_computer/console, +/obj/effect/floor_decal/techfloor{ + dir = 9 + }, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell8) +"xvb" = ( +/obj/structure/table/glass, +/obj/random/firstaid, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab1) +"xvi" = ( +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"xwi" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell9) +"xxc" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/bed/chair/office/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"xxi" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"xyp" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell9) +"xyt" = ( +/obj/item/weapon/paper, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"xyV" = ( +/obj/structure/table/steel_reinforced, +/obj/random/maintenance/foodstuff, +/turf/simulated/floor/tiled/eris/steel/gray_platform, +/area/redgate/facility/ne) +"xAG" = ( +/obj/machinery/shower{ + dir = 1 + }, +/obj/structure/curtain/open/shower, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals10{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/cell4) +"xAO" = ( +/obj/structure/closet/walllocker_double/science/east, +/obj/random/maintenance/research, +/obj/random/mainttoyloot, +/obj/random/tool/power, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell9) +"xAT" = ( +/obj/machinery/light, +/turf/simulated/shuttle/floor/alienplating, +/area/redgate/facility/cell19) +"xBb" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"xBi" = ( +/obj/machinery/computer/arcade/battle, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell1) +"xBl" = ( +/turf/simulated/mineral/floor/ignore_cavegen/cave, +/area/redgate/facility/cell20) +"xBu" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/cell26) +"xCz" = ( +/obj/machinery/button/remote/airlock{ + id = "cell_16"; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"xDe" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4; + id_tag = "cell_1" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell8) +"xDC" = ( +/obj/structure/closet/walllocker_double/science/north, +/obj/item/weapon/folder, +/obj/random/mainttoyloot/nofail, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"xDR" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced, +/obj/item/weapon/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/weapon/pen/red{ + pixel_x = 2; + pixel_y = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"xDU" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell3) +"xEc" = ( +/obj/structure/table/standard, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"xEz" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"xFK" = ( +/turf/simulated/wall/tgmc/window/white/reinf, +/area/redgate/facility/lab8) +"xGT" = ( +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"xHm" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/tiled/steel, +/area/redgate/facility/cell11) +"xHt" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "cell_12"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"xHM" = ( +/obj/structure/table/hardwoodtable, +/obj/item/modular_computer/laptop/preset/custom_loadout/hybrid, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/ne) +"xHY" = ( +/obj/machinery/door/airlock/angled_tgmc/personal{ + id_tag = "cell_22"; + name = "Research Facility" + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell27) +"xId" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell25) +"xIi" = ( +/obj/structure/window/reinforced/polarized/full{ + id = "cell_22" + }, +/obj/structure/grille, +/turf/simulated/floor, +/area/redgate/facility/cell27) +"xIs" = ( +/obj/structure/flora/ausbushes/leafybush, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"xIE" = ( +/obj/structure/table/steel_reinforced, +/obj/machinery/button/remote/blast_door{ + id = "lab_explo" + }, +/obj/machinery/door/window/eastright{ + dir = 1 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/securitylobby) +"xIZ" = ( +/obj/structure/reagent_dispensers/water_cooler/full, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell7) +"xJF" = ( +/obj/effect/floor_decal/corner/blue/bordercorner, +/obj/effect/floor_decal/corner/blue/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"xJK" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"xJX" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 10 + }, +/obj/structure/bed/chair/comfy/black{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xKn" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 6 + }, +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xKB" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/vent{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xKL" = ( +/obj/machinery/power/smes, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"xKN" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/corner/blue/border, +/obj/item/bodybag/cryobag, +/obj/item/bodybag/cryobag{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/bodybag/cryobag{ + pixel_x = 1; + pixel_y = 1 + }, +/obj/item/bodybag/cryobag{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/medbay) +"xKP" = ( +/obj/structure/particle_accelerator/end_cap{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/dark/gray_platform, +/area/redgate/facility/cell29) +"xKY" = ( +/obj/structure/flora/tree/palm, +/obj/structure/flora/ausbushes/fullgrass, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"xMp" = ( +/obj/random/maintenance, +/turf/simulated/floor, +/area/redgate/facility/sw) +"xMt" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"xNc" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/se) +"xNA" = ( +/obj/structure/bed/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/techmaint_cargo, +/area/redgate/facility/sw) +"xNS" = ( +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"xNT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell8) +"xNY" = ( +/obj/structure/bed/chair/office/light, +/obj/structure/extinguisher_cabinet{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell9) +"xOB" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"xOO" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell9) +"xOU" = ( +/obj/effect/floor_decal/corner/black/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"xPu" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xQu" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell26) +"xQL" = ( +/obj/structure/disposaloutlet{ + density = 0; + dir = 1; + pixel_y = -20 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/turf/simulated/floor/tiled/techmaint, +/area/redgate/facility/lab5) +"xQR" = ( +/obj/structure/table/bench/standard, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/nw) +"xRa" = ( +/obj/structure/bed/chair/office/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"xRq" = ( +/obj/machinery/portable_atmospherics/canister/empty, +/obj/machinery/light, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell29) +"xRx" = ( +/obj/machinery/button/windowtint{ + id = "office_2"; + pixel_x = -22 + }, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/office2) +"xRG" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"xSi" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"xSp" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/ne) +"xSO" = ( +/turf/simulated/floor/carpet/brown, +/area/redgate/facility/ne) +"xTL" = ( +/obj/random/trash_pile, +/turf/simulated/floor, +/area/redgate/facility/cell19) +"xTS" = ( +/obj/structure/filingcabinet/chestdrawer{ + pixel_x = -7 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"xTT" = ( +/turf/simulated/floor/carpet/blucarpet, +/area/redgate/facility/office9) +"xVt" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/lab2) +"xVy" = ( +/obj/machinery/button/remote/airlock{ + id = "cell_12"; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"xWb" = ( +/obj/effect/floor_decal/corner/pink/border, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/sw) +"xWl" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell16) +"xWX" = ( +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"xWZ" = ( +/obj/structure/grille/broken, +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/cell21) +"xXg" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"xXz" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/fruitspawner/lettuce, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/ne) +"xXX" = ( +/obj/item/modular_computer/console, +/obj/structure/railing/grey{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/steel/monofloor, +/area/redgate/facility/ne) +"xYt" = ( +/obj/structure/closet/walllocker_double/north, +/obj/item/weapon/entrepreneur/spirit_board, +/obj/random/maintenance/research, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell27) +"xZv" = ( +/turf/simulated/wall/tgmc/whitewall, +/area/redgate/facility/cell29) +"xZD" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/redgate/facility/nw) +"xZX" = ( +/obj/structure/flora/ausbushes/fullgrass, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"yaj" = ( +/turf/simulated/floor, +/area/redgate/facility/se) +"yaw" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/ywflowers, +/turf/simulated/floor/grass, +/area/redgate/facility/cell27) +"ybb" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"ycP" = ( +/turf/simulated/floor/tiled/eris/steel/gray_perforated, +/area/redgate/facility/ne) +"ycU" = ( +/obj/machinery/power/smes, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"yel" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"yew" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/light, +/turf/simulated/floor/tiled/eris/dark/orangecorner, +/area/redgate/facility/cell29) +"yeR" = ( +/obj/structure/table/steel, +/obj/item/device/integrated_electronics/debugger{ + pixel_x = -5 + }, +/obj/item/device/integrated_electronics/wirer{ + pixel_x = 5 + }, +/turf/simulated/floor/tiled/eris/techmaint_perforated, +/area/redgate/facility/sw) +"yeS" = ( +/obj/random/junk, +/turf/simulated/floor, +/area/redgate/facility/nw) +"yeY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/steel_ridged, +/area/redgate/facility/cell8) +"yfJ" = ( +/obj/item/modular_computer/console{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell9) +"ygd" = ( +/turf/simulated/floor/tiled/techfloor/grid, +/area/redgate/facility/cell26) +"ygi" = ( +/obj/machinery/door/window{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/tram) +"ygp" = ( +/turf/simulated/floor/tiled/techfloor, +/area/redgate/facility/securitylobby) +"ygq" = ( +/obj/machinery/disposal/wall{ + dir = 1 + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"yhk" = ( +/obj/structure/table/rack/shelf, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell26) +"yhz" = ( +/obj/structure/toilet{ + pixel_y = 4 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell11) +"yhP" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"yid" = ( +/obj/machinery/vending/food, +/turf/simulated/floor/wood/alt, +/area/redgate/facility/cell4) +"yiy" = ( +/obj/structure/bed/chair/office/light, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/cell19) +"yiG" = ( +/obj/machinery/door/airlock/angled_tgmc/cell{ + dir = 4 + }, +/turf/simulated/shuttle/floor/black, +/area/redgate/facility/cell19) +"yjb" = ( +/obj/effect/floor_decal/corner/red/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/redgate/facility/se) +"ykE" = ( +/obj/structure/table/rack/shelf/steel, +/obj/item/weapon/storage/box/trackimp{ + pixel_x = 5; + pixel_y = 1 + }, +/obj/machinery/light{ + dir = 1; + stat = 0 + }, +/turf/simulated/floor/tiled/milspec, +/area/redgate/facility/ne) + +(1,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +mzU +mzU +mzU +mzU +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(2,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gCf +lNc +fqo +cQv +cQv +cQv +cQv +fqo +cQv +cQv +cQv +cQv +fqo +cQv +cQv +cQv +cQv +fqo +cQv +cQv +cQv +cQv +fqo +gAk +gAk +kEo +mzU +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(3,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gCf +lNc +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +gAk +gAk +kEo +mzU +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(4,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gCf +lNc +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +jRo +jRo +kEo +mzU +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(5,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gCf +lNc +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +gAk +gAk +kEo +mzU +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(6,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gCf +lNc +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +gAk +gAk +kEo +mzU +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(7,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gCf +lNc +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +fqE +jRo +jRo +kEo +mzU +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(8,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gCf +lNc +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +cQv +gAk +gAk +kEo +mzU +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(9,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gCf +lNc +fqo +cQv +cQv +cQv +cQv +fqo +cQv +hdd +hmI +hwo +wCZ +hKi +tTv +iai +hmI +iwj +cQv +cQv +cQv +cQv +jHC +gAk +gAk +kEo +mzU +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +fPE +jVL +fPE +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(10,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +gCf +xZD +rzR +mDx +wCZ +mnq +tTv +xEz +rzR +xqm +gCf +gCf +gCf +gCf +gCf +mzU +mzU +mzU +mzU +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +fPE +fPE +fPE +fPE +fPE +qHO +jVL +fPE +fPE +jVL +aOv +iuu +iuu +iuu +iuu +iuu +iuu +iuu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(11,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +rzR +rzR +uoz +hHs +vHn +hOT +xvi +rzR +wgM +hcZ +hcZ +hcZ +hcZ +hcZ +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +fPE +fPE +fPE +aOv +aOv +aOv +aOv +aOv +aOv +fPE +aOv +iuu +qgk +qgk +iuu +qgk +qgk +iuu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(12,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +xrN +tvf +tvf +hcZ +rzR +rzR +rzR +rzR +rzR +rzR +iXt +jqH +hcZ +hcZ +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +fPE +aOv +iuu +tld +qgk +iuu +qgk +utW +iuu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(13,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +fnR +fnR +hyG +hHy +hLa +rzR +iaS +iaS +rzR +rzR +rzR +rzR +hcZ +hcZ +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +qIQ +vrp +ruE +aOv +fPE +aOv +sGw +cLm +qgk +iuu +qgk +xQL +uQm +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(14,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hee +daB +fnR +fbT +wGy +rzR +sjF +sjF +rzR +iIy +iXT +jrc +hcZ +hcZ +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +wSx +vrp +oWf +aOv +fRB +aOv +mjP +rBH +tCh +iuu +ugf +rBH +mjP +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(15,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +aND +rgk +fnR +xDR +mZu +hPg +iaS +sjF +xqm +hcZ +hcZ +hcZ +hcZ +hcZ +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +mzU +mzU +mzU +mzU +mzU +mzU +mzU +aOv +oeJ +vrp +mKF +aOv +rEb +soz +gKi +jmR +sXT +tTI +sXT +uwd +uQp +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(16,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +csa +hcZ +csa +hcZ +dAl +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +rgk +fnR +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +mzU +fPE +fPE +jVL +fPE +fPE +mzU +aOv +aOv +riY +aOv +aOv +twU +kjk +qAp +sXT +sXT +sXT +sXT +wUe +iuu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(17,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +xrN +hcZ +xrN +hcZ +xrN +hcZ +hcZ +hcZ +hcZ +hcZ +kTY +kTY +kTY +kTY +kTY +kTY +kTY +kTY +kTY +kTY +rgk +hze +pXQ +pXQ +pXQ +pXQ +pXQ +pXQ +pXQ +pXQ +pXQ +pXQ +pXQ +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +mzU +fPE +fPE +fPE +fPE +fPE +mzU +aOv +qMo +vrp +vrp +aOv +twU +soO +iuu +tlP +sXT +baM +sXT +wUe +iuu +iuu +iuu +iuu +iuu +iuu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(18,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +trT +fnR +fnR +fnR +ceb +hcZ +hcZ +hcZ +hcZ +hcZ +kTY +iqJ +frw +crQ +crQ +iqJ +gyj +oOd +oOd +kTY +hnz +pvk +pXQ +vmt +hSt +icc +ims +vmt +dST +iZh +jsE +tBb +jHO +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +mzU +fPE +fPE +fPE +pLg +fPE +mzU +aOv +gQm +vrp +oWf +aOv +lQg +kjk +uZs +sXT +sXT +baM +sXT +uxP +iuu +vjE +ojr +vRj +wmn +iuu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(19,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hrw +cHl +daB +ujy +ujy +hcZ +hcZ +hcZ +hcZ +hcZ +kTY +iqJ +rXl +iqJ +fVc +crQ +iqJ +oOd +oOd +kBo +tAi +mSE +vTw +vmt +xDU +vmt +vmt +xDU +iJi +vmt +qVL +hhE +tBb +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +mzU +mzU +mzU +fPE +mzU +mzU +mzU +aOv +oZQ +rjr +vrp +tqs +twU +kjk +uZs +tlQ +sXT +baM +sXT +sXT +uSJ +ojr +ojr +ojr +ojr +iuu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(20,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +pJU +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +kTY +iqJ +iqJ +iqJ +iqJ +crQ +iqJ +iqJ +gVZ +kBo +tAi +mSE +vTw +dST +dST +dST +inz +vmt +vmt +jbs +dST +tBb +jIJ +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +mzU +fPE +mzU +aOv +aOv +aOv +rlN +vrp +vrp +tqs +twU +kjk +uZs +prt +sXT +sXT +sXT +uzu +iuu +vjS +vBZ +ojr +wmB +iuu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(21,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +trT +bBH +bBH +bBH +bBH +ceb +hcZ +cHD +glW +dvS +dCb +hcZ +hcZ +hcZ +hcZ +hcZ +kTY +iqJ +iqJ +fJS +iqJ +iqJ +crQ +iqJ +oOd +kBo +tAi +mSE +pXQ +hLq +dST +xDU +vmt +dST +dST +lUF +vmt +jyY +tBb +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +wHb +kpe +wHb +jzn +aOv +qsU +vrp +vrp +oWf +aOv +twU +kjk +iuu +fAe +tDX +tVa +ugx +pbO +iuu +bua +gtp +gtp +cnr +iuu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(22,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +xQR +fnR +ppm +ppm +ppm +ppm +fnR +hcZ +erx +fnR +rgk +ioW +hcZ +hcZ +hcZ +hcZ +hcZ +kTY +iqJ +iqJ +iqJ +crQ +gkS +crQ +crQ +iqJ +kBo +tAi +mSE +cDe +xDU +vmt +idc +inN +vmt +vmt +vmt +xDU +dST +qVL +jzn +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +wHb +lQW +wHb +wHb +aOv +qQL +qNC +rjK +rvG +rJt +pzN +spe +ayj +ayj +ayj +ayj +ayj +ayj +ayj +ayj +ayj +ayj +iuu +iuu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(23,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +xQR +fnR +hcZ +hcZ +hcZ +hcZ +fnR +hcZ +lhQ +tNn +xqf +nSZ +hcZ +hcZ +hcZ +hcZ +hcZ +kTY +iqJ +frV +iqJ +iqJ +iqJ +iqJ +iqJ +iqJ +kBo +tAi +mSE +cDe +vmt +xDU +xDU +vmt +vmt +xDU +vmt +dST +lUF +vmt +jzn +wHb +pMz +gyS +gyS +kvg +gyS +gyS +gyS +kvg +gyS +gyS +gyS +gyS +gyS +kvg +gyS +gyS +gyS +gyS +gyS +kvg +gyS +gyS +gyS +kvg +gyS +gyS +pMz +wHb +aOv +gmR +gGG +uMq +bUq +aOv +twU +uJU +ayj +tnf +tGO +tVt +ugM +uAe +uUr +vkZ +tIX +ayj +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(24,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +blm +tNn +bCT +bCT +bCT +bCT +tNn +csM +jbG +tNn +xqf +bwJ +hcZ +hcZ +hcZ +hcZ +hcZ +kTY +iqJ +iqJ +fLJ +iqJ +crQ +gzA +iqJ +iqJ +kTY +hom +mSE +cDe +vmt +dST +dST +dST +ixw +idc +xDU +vmt +vmt +vmt +jzn +wHb +pMz +gyS +gyS +gyS +gyS +gyS +gyS +fse +fse +iSV +iSV +fse +fse +fse +fse +iSV +iSV +fse +fse +gyS +gyS +gyS +gyS +gyS +gyS +gyS +pMz +wHb +aOv +aOv +aOv +aOv +aOv +aOv +twU +xWb +ayj +qxW +cBx +cBx +cBx +cBx +cBx +cBx +cBx +ayj +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(25,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +xQR +fnR +ppm +ppm +bNV +ppm +ceb +hcZ +gBc +fnR +rgk +ubE +hcZ +hcZ +hcZ +hcZ +hcZ +kTY +eZG +kTY +kTY +kBo +kBo +knI +gJT +gJT +kTY +tAi +mSE +cDe +fAP +vmt +vmt +vmt +xDU +iJw +hSt +xDU +vmt +jJk +jzn +wHb +pMz +kgZ +kgZ +kgZ +kgZ +kgZ +fse +fse +lgq +hpN +hpN +hpN +mlo +mlo +hpN +hpN +hpN +lgq +fse +fse +kgZ +kgZ +kgZ +kgZ +kgZ +kgZ +pMz +wHb +aOv +qtt +qPj +rlC +rwD +aOv +twU +xWb +sIR +cBx +cBx +tVM +uhG +uBE +uUQ +cBx +cBx +ayj +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(26,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +xQR +fnR +hcZ +hcZ +hcZ +hcZ +fnR +hcZ +fuo +fnR +rgk +pwj +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +eew +hcZ +kTY +fVL +glb +gHp +bcD +bcD +kTY +tAi +mSE +cDe +vmt +xDU +vmt +vmt +vmt +inN +vmt +jsN +vmt +xDU +jzn +wHb +pMz +gyS +gyS +gyS +gyS +gyS +iSV +cSN +hpN +hpN +hpN +hpN +cSN +cSN +hpN +hpN +hpN +hpN +cSN +iSV +gyS +gyS +gyS +gyS +gyS +gyS +pMz +wHb +aOv +pkp +pkp +pkp +elH +aOv +twU +xWb +ayj +cBx +rbY +fIW +rbY +rbY +tIX +rbY +cBx +ayj +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(27,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +xQR +fnR +bBH +bBH +bBH +bBH +fnR +hcZ +fuo +fnR +dwV +sTb +dNj +dXn +emH +exZ +btj +hcZ +eew +hcZ +kTY +bcD +bcD +bcD +bcD +bcD +hez +tAi +mSE +cDe +dST +dST +lUF +xDU +vmt +vmt +xDU +vmt +vmt +vmt +jzn +wHb +pMz +gyS +gyS +gyS +gyS +gyS +iSV +cSN +cSN +cSN +cSN +cSN +mlM +cSN +cSN +cSN +cSN +cSN +cSN +iSV +gyS +gyS +gyS +gyS +gyS +gyS +pMz +wHb +aOv +xRG +vrp +vrp +oWf +aOv +twU +uJU +ayj +ayj +uRI +oyG +uRI +uRI +uRI +uRI +ayj +ayj +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(28,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +trT +ppm +ppm +ppm +ppm +ceb +hcZ +cJa +daP +dmQ +dlw +hcZ +hcZ +yeS +kNT +dXn +eOU +eew +hcZ +kTY +fVM +gmg +gzV +gKb +gmg +kTY +hom +mSE +cDe +xDU +vmt +vmt +inW +vmt +vmt +vmt +vmt +xDU +vmt +jzn +wHb +pMz +gyS +gyS +gyS +gyS +gyS +iSV +cSN +hpN +hpN +hpN +hpN +cSN +cSN +hpN +hpN +hpN +hpN +cSN +iSV +gyS +gyS +gyS +gyS +gyS +gyS +pMz +wHb +aOv +nVk +qQl +rmF +vrp +tqs +twU +xWb +ayj +tnZ +jPH +dSW +jPH +jPH +jPH +vlS +ovf +ayj +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(29,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +fbb +lzj +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +emh +fcf +hcZ +kTY +kTY +kTY +kTY +kTY +kTY +kTY +tAi +mSE +cDe +fAP +vmt +vmt +vmt +dST +dST +dST +jvQ +vmt +jKM +jzn +wHb +pMz +kgZ +kgZ +kgZ +kgZ +kgZ +fse +fse +hpN +hpN +hpN +maY +cSN +cSN +maY +hpN +hpN +hpN +fse +fse +kgZ +kgZ +kgZ +kgZ +kgZ +kgZ +pMz +wHb +aOv +wfv +xkn +wtl +vrp +tqs +rVn +ssb +sMa +kEJ +rDk +kHs +uhG +uBE +cBx +cBx +cBx +ayj +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(30,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +bOo +hqg +ceN +ctF +hcZ +fbb +lzj +hcZ +dOH +dZf +hqg +bOo +hcZ +kNT +mcS +emH +dXn +dXn +dXn +emH +dXn +dXn +dNj +hqi +mSE +cDe +vmt +xDU +vmt +xDU +dST +dST +xDU +vmt +xDU +vmt +jzn +wHb +pMz +gyS +gyS +gyS +gyS +gyS +gyS +fse +fse +iSV +iSV +fse +cSN +cSN +fse +iSV +iSV +fse +fse +gyS +gyS +gyS +gyS +gyS +gyS +gyS +pMz +wHb +aOv +bcI +otx +mMd +vrp +tqs +twU +xWb +ayj +cBx +cBx +cBx +cBx +cBx +cBx +cBx +vCg +ayj +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(31,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hqg +hqg +hqg +hqg +cJT +fbb +lzj +dCf +hqg +hqg +hqg +hqg +hcZ +eew +wum +wum +wum +wum +wum +wum +wum +wum +wum +tAi +hzN +hHB +hMK +vmt +idD +vmt +xDU +vmt +idD +vmt +vmt +dST +jzn +wHb +wHb +wHb +wHb +kvy +gyS +gyS +gyS +gyS +gyS +gtV +lLo +lLo +mmm +mmm +lLo +lLo +lLo +gAm +gyS +gyS +gyS +gyS +gyS +kvy +wHb +wHb +wHb +wHb +aOv +vrp +wbX +lpm +vrp +tqs +twU +xWb +ayj +toC +tGQ +tWF +cBx +cBx +rbY +tIX +ovf +ayj +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(32,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +bOz +bVp +hqg +ctH +hcZ +fbb +dwY +hcZ +ctH +hqg +eoP +bOz +hcZ +nwx +wum +fsj +qbj +fVS +gmu +gAV +qbj +fsj +wum +tAi +sUa +pXQ +pXQ +pXQ +pXQ +pXQ +pXQ +pXQ +pXQ +pXQ +pXQ +jLd +jzn +jzn +jzn +jzn +wHb +wHb +gyS +gyS +gyS +kvy +gyS +gtV +fHQ +wVY +wVY +wVY +wVY +wVY +fHQ +gAm +gyS +kvy +gyS +gyS +gyS +wHb +wHb +jzn +jzn +jzn +aOv +qtY +vrp +pdt +vrp +tqs +twU +uJU +ayj +vAV +uhl +efC +cBx +cBx +tIX +rbY +cBx +ayj +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +iIY +iIY +iIY +iIY +iIY +iIY +iIY +iIY +iIY +iIY +iIY +iIY +iIY +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(33,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +fbb +lzj +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +yeS +wum +jMI +qbj +bSz +llb +qvt +qbj +qbj +eeb +tAi +mSE +hHI +eew +eew +bmu +eew +eew +eew +yeS +bmu +eew +eew +aOv +aOv +aOv +aOv +jzn +wHb +wHb +gyS +gyS +gyS +gyS +gtV +dYC +wVY +wVY +wVY +wVY +wVY +dYC +gAm +gyS +gyS +gyS +gyS +wHb +wHb +jzn +aww +pLq +pSF +aww +esq +vrp +pdt +rwN +aOv +twU +xWb +ayj +nAU +wRU +dLs +ujd +ujd +uVI +ujd +cBx +ayj +fPE +fPE +ujr +fPE +fPE +xMp +ujr +fPE +fPE +fPE +fPE +ujr +pLg +iIY +iIY +tEq +tEq +ewo +tEq +tEq +iIY +iIY +iIY +iIY +iIY +iIY +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(34,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +bOo +hqg +ceR +cvb +hcZ +fbb +lzj +hcZ +dOY +dZr +hqg +bOo +hcZ +eew +wum +qbj +qbj +qbj +qbj +qbj +qbj +qbj +eeb +tAi +mSE +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +eew +fPE +jVL +fPE +fPE +jzn +jzn +wHb +wHb +wHb +wHb +wHb +wHb +jzn +mbR +mnQ +mxV +mJl +mVc +jzn +wHb +wHb +wHb +wHb +wHb +wHb +jzn +jzn +mLc +kfZ +qki +aww +aOv +aOv +rnj +aOv +aOv +twU +xWb +ayj +ayj +uRI +uRI +uRI +uRI +uRI +uRI +ayj +ayj +fRB +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +fPE +iIY +iIY +tEq +iIY +iIY +iIY +tEq +iIY +iIY +iIY +iIY +iIY +iIY +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(35,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hqg +hqg +hqg +hqg +cJV +fbb +lzj +dCX +hqg +hqg +hqg +hqg +hcZ +eew +wum +sVM +sVM +sVM +qbj +sVM +sVM +sVM +eeb +tAi +mSE +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +aOv +aOv +aOv +fPE +kpe +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +wVY +ygi +sUT +gdk +klV +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +jzn +pCw +aww +aww +aww +rEb +qSb +bZr +jUm +jUm +qvf +pEF +jUm +jUm +jUm +jUm +jUm +jUm +jUm +jUm +jUm +jUm +jUm +wMB +soz +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +fPE +iIY +iIY +dUv +iIY +iIY +iIY +dUv +iIY +iIY +iIY +iIY +iIY +iIY +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(36,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +bOz +bXd +hqg +ctH +hcZ +fbb +dwY +hcZ +ctH +hqg +epA +bOz +hcZ +nwx +wum +sVM +sVM +sVM +qbj +sVM +sVM +sVM +eeb +tAi +mSE +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +eew +bmu +eew +hcZ +hcZ +jzn +jzn +jzn +jzn +wVY +jzn +lil +jzn +klV +jzn +jzn +jzn +jzn +aww +aww +oTq +ltK +jcT +jcT +kEE +pSP +aww +twU +pdt +rkC +vbz +vbz +vbz +vbz +rkC +tpg +vrp +tXR +vbz +vbz +rkC +vbz +vbz +vbz +vbz +kBS +kjk +aOv +xul +xMt +yeR +ceo +yeR +xMt +kgN +aOv +fPE +iIY +hZW +cQi +opI +iIY +tEq +tEq +tEq +tEq +tEq +tEq +tEq +iIY +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(37,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +fbb +lzj +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +eew +wum +sVM +sVM +sVM +qbj +sVM +sVM +sVM +eeb +tAi +mSE +qKi +qKi +qKi +qKi +qKi +qKi +qKi +qKi +qKi +qKi +qKi +fIH +jZd +fIH +qKi +hcZ +hcZ +eew +hcZ +hcZ +kLO +lgS +aww +aww +mdz +aww +aww +aww +mVQ +aww +aww +kLO +lgS +aww +aww +ejb +ltK +prX +prX +kEE +bTo +aww +twU +xWb +qiF +qiF +qiF +qiF +qiF +qiF +cdC +ojh +kjk +bbX +bbX +bbX +vmZ +bbX +bbX +bbX +cuN +kjk +aOv +rFo +bDp +bDp +bDp +bDp +bDp +wtc +aOv +stt +iIY +uCR +xyt +qpK +smZ +tEq +tEq +tEq +tEq +tEq +xag +sze +iIY +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(38,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +bOo +hqg +cfI +cvm +hcZ +fbb +lzj +hcZ +dPQ +eah +hqg +bOo +hcZ +eew +wum +sVM +sVM +sVM +qbj +sVM +sVM +sVM +eeb +tAi +sUa +qKi +hNb +fIH +iew +fIH +ixX +iJy +jcm +jws +jAq +qKi +fIH +vvJ +fIH +qKi +hcZ +hcZ +eew +hcZ +hcZ +vEL +oKS +luh +vmf +vmf +vmf +luh +vmf +dhj +vmf +luh +uhd +eMl +aww +aww +kfk +ltK +mLc +mLc +kEE +jAG +aww +twU +xWb +qiF +rya +rJR +rWB +stb +qiF +vMO +ojh +kjk +bbX +uBR +uXt +tiL +tiL +vSh +bbX +cuN +kjk +aOv +ghT +xNA +bDp +bDp +bDp +qBK +tnq +aOv +fPE +iIY +mdS +xId +xId +mGI +tEq +tEq +iop +tEq +xag +xag +tEq +iIY +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(39,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hqg +hqg +hqg +hqg +cJZ +fbb +lzj +dEq +hqg +hqg +hqg +hqg +hcZ +eew +wum +fsj +qbj +qbj +qbj +qbj +qbj +fsj +wum +tAi +mSE +qKi +uIp +pRa +pRa +pRa +dkR +fIH +fIH +fIH +fIH +jLq +fIH +fIH +fIH +qKi +kpi +eew +wbk +hcZ +hcZ +wQZ +jcT +jcT +jcT +jcT +jcT +jcT +jcT +kwc +jcT +jcT +jcT +odv +aww +aww +ukh +ltK +mLc +mLc +kEE +gba +aww +twU +xWb +qiF +lsa +lsa +lsa +fBu +qiF +nFh +tHb +qSC +bbX +sdT +tiL +tiL +tiL +tiL +bbX +cuN +kjk +aOv +sZE +bDp +bDp +bDp +bDp +bDp +wtc +aOv +fPE +iIY +xgW +ryq +odq +moY +tEq +tEq +tEq +tEq +tEq +tEq +xag +iIY +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(40,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +bOz +bXi +hqg +ctH +hcZ +fbb +dwY +hcZ +ctH +hqg +esm +bOz +hcZ +nwx +wum +wum +eeb +eeb +eeb +wum +gLc +wum +wum +tAi +mSE +qKi +eBS +iqw +iqw +fKo +ths +iKG +pqb +fIH +fIH +qKi +qKi +qKi +qKi +qKi +evB +eew +eew +eew +hHI +vEL +jcT +jcT +jcT +jcT +jcT +jcT +jcT +kwc +jcT +jcT +jcT +eMl +aww +aww +wHy +ltK +prX +prX +kEE +sUQ +aww +twU +xWb +rpb +lsa +lsa +lsa +aqk +qiF +qiF +aOv +fRB +bbX +pfx +tiL +tiL +vCK +vSn +bbX +cuN +oew +aOv +uce +xNS +xNS +xNS +xNS +xNS +mpg +aOv +fPE +iIY +wEe +xId +cRi +iIY +nud +thx +tEq +tEq +tEq +ruf +tEq +iIY +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(41,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +fbb +lzj +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +eew +wum +fug +fLK +fWl +fWl +byq +byq +byq +wum +tAi +mSE +qKi +ppo +iqw +iqw +fKo +ths +fOO +pqb +fIH +jAJ +qKi +fIH +jZd +fIH +qKi +kzS +kaO +eew +hcZ +hcZ +vEL +jcT +jcT +jcT +jcT +jcT +mye +uDj +kwc +jcT +jcT +jcT +eMl +aww +aww +upk +pdn +uDj +jcT +kEE +uHK +aww +twU +uJU +qiF +ryO +rKP +lsa +lsa +qiF +tpr +fPE +fPE +bbX +kBV +tiL +tiL +waV +gDT +bbX +cuN +kjk +aOv +aOv +tqs +tqs +tqs +aOv +oXm +aOv +aOv +fRB +iIY +iIY +qia +iIY +iIY +iIY +iIY +iIY +iIY +iIY +iIY +iIY +iIY +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(42,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +fbb +fbb +fbb +lzj +fbb +fbb +fbb +fbb +fbb +hcZ +eew +wum +byq +byq +svQ +byq +gEf +gOc +gOc +wum +hom +mSE +qKi +pZe +hTi +ifI +iod +iAU +fIH +fIH +fIH +fIH +jLq +fIH +jZX +fIH +qKi +hcZ +hcZ +hcZ +hcZ +hcZ +vEL +jcT +ipG +lMF +mdO +pFR +pFR +ljM +ljM +nnr +nAS +gdx +oez +aww +aww +aww +aww +kwc +jcT +aww +aww +aww +twU +xWb +qiF +fGx +ogF +rWG +stZ +sNG +rWH +tHw +tYH +bbX +hbE +uYc +vok +mRw +bbX +bbX +cuN +wWk +qJU +qJU +qJU +qJU +qJU +qJU +qJU +puD +qJU +qJU +qJU +puD +qJU +qJU +qJU +qJU +puD +qSb +jUm +jUm +pXY +osz +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(43,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +cxn +cKL +dbk +xqf +fnR +fnR +eaR +esr +eyA +hcZ +eew +wum +fvS +fMx +byq +byq +oGU +lsF +gYD +wum +tAi +mSE +qKi +xBi +fIH +pJK +fIH +fIH +fIH +fIH +fIH +jBu +qKi +fIH +fIH +fIH +qKi +hcZ +hcZ +hcZ +hcZ +hcZ +vEL +jcT +eMl +aww +nAy +iMT +myT +iMT +iMT +aww +vEL +jcT +jbN +orz +orz +orz +orz +psv +jcT +aww +pTl +pNr +twU +xWb +qiF +frx +frx +qiF +wpY +qiF +qiF +aOv +svw +bbX +tiL +tiL +tiL +tiL +tiL +bbX +wMW +uSb +osl +xuu +osl +osl +osl +osl +osl +osl +osl +osl +osl +osl +osl +nPn +osl +osl +osl +ilo +osl +osl +iVl +xWb +aOv +aMv +vhU +uUR +frO +frO +gYM +aOv +aOv +aOv +aOv +aOv +"} +(44,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +chH +fbb +flb +umj +rgk +fnR +fnR +umj +nuH +fbb +hcZ +ePT +wum +wum +wum +wum +gmH +wum +wum +wum +wum +tAi +mSE +qKi +qKi +hTP +qKi +ipg +ipg +ipg +ipg +ipg +qKi +qKi +qKi +qKi +qKi +qKi +hcZ +hcZ +hcZ +hcZ +hcZ +kOt +gdx +luR +lOs +axo +eZB +jcT +eZB +jcT +nod +vEL +jcT +ipG +kdu +kdu +lvB +kdu +atr +jcT +pNr +oSA +aww +twU +xWb +qiF +vhe +jIr +rXr +jIr +sOT +tpI +aOv +mZN +bbX +uCW +uYm +uYm +uYm +vSw +mRw +cuN +kjk +woC +woC +xaD +xaD +xaD +xaD +xaD +xaD +woC +xDe +woC +woC +aOv +txQ +uLu +uLu +uLu +wLb +uLu +uLu +twU +xWb +tqs +fzd +inU +dVq +jrR +fwk +hbP +aOv +aOv +aOv +aOv +aOv +"} +(45,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +lbB +fbb +fnR +fnR +dxJ +tNn +tNn +tNn +tNn +eyQ +eDG +aME +xJK +xJK +xJK +xJK +xJK +xJK +xJK +xJK +xJK +hqL +hAl +xJK +xJK +xJK +xJK +xJK +xJK +xJK +xJK +xJK +xJK +xJK +jRK +xJK +xJK +xJK +xJK +xJK +xJK +xJK +xJK +hWk +jcT +eMl +aww +xcb +jcT +jcT +jcT +mYN +aww +vEL +jcT +eMl +aww +aww +aww +aww +tCL +jcT +aww +aww +aww +twU +xWb +frx +yid +jIr +jIr +jIr +qcp +uUk +aOv +mZN +bbX +ikK +nun +nun +nun +ezP +mRw +cuN +oew +woC +xuW +wdI +wdI +wdI +wdI +wdI +wdI +svp +wdI +fTs +woC +aOv +slW +uLu +uMg +dmN +dHN +teZ +uLu +twU +sup +gkx +qfF +fKl +ipH +jlP +bnH +mCf +aOv +aOv +aOv +aOv +aOv +"} +(46,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +txE +fbb +fnR +fnR +fnR +fnR +fnR +fnR +fnR +fbb +fnR +qYB +dLa +dLa +dLa +fWF +dLa +dLa +dLa +dLa +fWF +rcz +dLa +dLa +dLa +dLa +fWF +dLa +dLa +dLa +fnR +dLa +dLa +fWF +fVZ +dLa +dLa +dLa +dLa +fWF +dLa +dLa +dLa +chP +jcT +eMl +aww +bMN +qCq +qCq +qCq +qCq +aww +vEL +jcT +eMl +aww +aww +oUz +oUz +kwc +jcT +pNt +pUk +aww +lQg +xWb +ioF +qcp +qcp +jIr +jIr +sQv +qgS +aOv +mZN +bbX +ikK +nun +vpJ +nun +ezP +mRw +cuN +kjk +woC +mgQ +dIZ +dIZ +dIZ +dvj +dIZ +dIZ +kpd +kpd +rQF +woC +aOv +jSy +uLu +ulm +hRO +dHN +dHN +eqY +twU +oew +tqs +kaX +eAd +uGz +naL +jPl +uUR +aOv +aOv +aOv +aOv +aOv +"} +(47,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +leA +fbb +cMH +umj +fnR +fnR +fnR +umj +ete +fbb +hcZ +hcZ +hcZ +xrN +hcZ +hcZ +hcZ +hcZ +tvf +tvf +hcZ +fnR +hCa +hcZ +tvf +hcZ +hOu +hOu +iCc +hOu +jfC +jfC +hOu +hOu +pIE +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +wQZ +jcT +oKS +lOu +gsA +vmf +vmf +vmf +vmf +lOu +uhd +jcT +odv +aww +aww +rcN +pem +psT +gdx +gdx +uDj +qCq +twU +xWb +ioF +qcp +rLZ +saC +jIr +jIr +jIr +aOv +mZN +bbX +ikK +nun +nun +nun +ezP +mRw +cuN +kjk +woC +gJu +dIZ +dIZ +kGK +wlM +qep +dIZ +kpd +kpd +hrI +woC +aOv +slW +uLu +lwV +hRO +dHN +dHN +eqY +twU +kjk +aOv +uUR +eAd +uGz +uGz +nyG +uUR +aOv +aOv +aOv +aOv +aOv +"} +(48,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +cxn +hJO +waw +fnR +fnR +fnR +eaY +eMY +eyA +hcZ +eRX +fcq +vio +fNe +hcZ +gnn +bJy +gOZ +gOZ +hgV +bJy +bJy +gOZ +gOZ +hUI +hOu +irw +jOf +iLu +qpO +xTT +jDH +hOu +gnL +hcZ +hcZ +hcZ +hcZ +hcZ +eew +eew +hHI +vEL +jcT +jcT +jcT +kwc +jcT +jcT +jcT +jcT +jcT +jcT +jcT +eMl +aww +aww +hgH +hgH +jcT +jcT +jcT +kwc +qCq +twU +xWb +qiF +rzg +gmU +jrI +jrI +sQy +tqN +tHA +tZu +bbX +uFh +uYJ +uYJ +uYJ +vTt +mRw +cuN +kjk +woC +ufK +dIZ +dIZ +exj +bwP +sbT +dIZ +kpd +vAp +vIJ +woC +aOv +slW +uLu +pMQ +hRO +dHN +dHN +eqY +twU +kjk +sdw +uUR +eAd +uGz +uGz +nyG +nIR +aOv +aOv +aOv +aOv +aOv +"} +(49,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +fbb +fbb +fbb +fbb +fbb +fbb +fbb +fbb +fbb +hcZ +utZ +vio +vio +vio +xxi +dvk +jZu +aca +buD +wJW +fnR +jZu +iHH +hNU +mEP +hOu +lSA +jOf +eDD +bQf +jxW +xTT +hOu +gnL +kaO +eew +eew +eew +eew +kaO +btj +hcZ +kPt +kdu +lvB +lPE +mdU +kdu +lvB +kdu +kdu +kdu +kdu +kdu +oeT +aww +aww +tjA +peR +ptY +pCN +pNv +kwc +aww +twU +xWb +qiF +heL +jIr +jIr +bay +ccG +jIr +aOv +fPE +bbX +tiL +tiL +tiL +tiL +tiL +bbX +cuN +kjk +woC +aSb +xNT +yeY +pag +dIZ +dIZ +dIZ +kpd +kpd +udQ +woC +aOv +slW +uLu +sVJ +hRO +dHN +dHN +eqY +twU +kjk +aOv +uUR +eAd +uGz +uGz +nyG +iEk +aOv +aOv +aOv +aOv +aOv +"} +(50,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +dcx +xxi +xxi +xxi +vio +hcZ +hcZ +hcZ +klI +vio +vio +vio +xxi +dvk +jZu +aca +tCX +wJW +fnR +jZu +iHH +tCX +mEP +hOu +mQI +jOf +eDD +miz +xTT +xTT +hOu +gnL +hcZ +equ +equ +equ +equ +equ +equ +equ +equ +lXb +equ +twU +xWb +qmv +qmv +mKv +qmv +nqb +nqb +nqb +qmv +qmv +qmv +qmv +aww +aww +aww +aww +kwc +aww +twU +xWb +qiF +qiF +jIr +sbR +qiF +qiF +qiF +aOv +fPE +bbX +bbX +bbX +bbX +bbX +bbX +bbX +cuN +kjk +woC +klU +duH +fhP +gen +gen +gen +gen +fhP +gen +mfa +woC +aOv +jSy +uLu +eku +hRO +mtg +igk +uLu +twU +oew +tqs +sKR +uWT +iBl +iBl +duq +xOB +aOv +aOv +aOv +aOv +aOv +"} +(51,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +pfD +vio +vio +vio +ecQ +hcZ +hcZ +hcZ +qGV +vio +vio +vio +fXP +dvk +fnR +fnR +fnR +fnR +fnR +fnR +fnR +fnR +siH +hOu +wDL +jOf +eDD +xTT +xTT +xTT +hOu +gnL +hcZ +equ +khn +krr +pbL +equ +kAx +kEd +kQh +ojH +equ +twU +xWb +qmv +mzf +klF +mYV +lCS +nAW +nMg +ohR +osS +oId +qdC +aww +puv +nod +jcT +kwc +aww +aMu +uJU +qiF +rzP +lsa +lsa +suv +qiF +trZ +fPE +fPE +pLg +fPE +tII +aOv +aOv +aOv +aOv +cuN +oew +woC +woC +woC +woC +woC +woC +woC +woC +woC +woC +woC +woC +aOv +gQH +uLu +uLu +uLu +uLu +uLu +uLu +twU +kjk +aOv +fIS +uUR +uUR +uUR +oeH +brA +aOv +aOv +aOv +aOv +aOv +"} +(52,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gvW +vio +vio +vio +vio +hcZ +hcZ +hcZ +mkB +vio +vio +vio +xxi +dvk +fnR +fnR +fnR +fnR +fnR +fnR +fnR +fnR +siH +hOu +baa +iCi +iNs +xTT +xTT +jFd +hOu +gnL +hcZ +kfj +soP +soP +pbL +equ +lZK +fLR +fLR +fLR +wqX +twU +xWb +qmv +uDl +fvf +fvf +jmP +qeN +una +fvf +alz +veD +qdC +aww +aww +aww +jcT +xgR +aww +twU +xWb +qiF +gJa +lsa +sdL +xAG +qiF +dKV +fPE +fPE +fPE +uGj +jYX +jYX +vDA +jYX +phT +wOa +kjk +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +njs +fGa +fPE +jVL +fPE +fPE +wty +twU +kjk +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(53,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +dxX +dEA +dQf +hcZ +hcZ +hcZ +hcZ +hrF +vio +vio +vio +xxi +dvk +jZu +gPW +buD +wJW +fnR +jZu +iHH +buD +mEP +hOu +hOu +hOu +hOu +hOu +hOu +hOu +hOu +gnL +hcZ +equ +soP +ktG +kwz +equ +wCE +kGt +kQT +fLR +wqX +twU +xWb +qmv +nWh +fvf +fvf +iUA +vpr +icP +fvf +orZ +veD +qdC +aww +puv +nod +jcT +xgR +aww +twU +xWb +mim +mim +mim +mim +mim +mim +mim +fPE +fPE +ujr +eSb +hgB +aOv +aOv +aOv +aOv +cuN +kjk +wty +fPE +fPE +fPE +jVL +fPE +fPE +fPE +tIz +fPE +jVL +fPE +fPE +oPl +slW +tII +lJe +aOv +aOv +aOv +jLi +nIl +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(54,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +iRw +vio +vio +ecQ +hcZ +dvk +jZu +iHH +tCX +wJW +fnR +jZu +hHS +tCX +mEP +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gnL +hcZ +kfs +soP +soP +pbL +kyf +xRx +tVK +fiY +fLR +wqX +twU +xWb +qmv +uAx +fvf +fvf +fvf +fvf +fvf +fvf +cbQ +veD +dGd +aww +aww +aww +pOp +pVX +aww +twU +xWb +mim +rzV +msm +sgr +sww +sRk +mim +fPE +fPE +tfK +tfK +tfK +tfK +tfK +tfK +tfK +cuN +kjk +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +jSy +aOv +nLu +nLu +nLu +nLu +gSZ +ciB +nLu +nLu +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(55,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +htQ +fcs +fxx +vio +fYA +gnz +gEi +vfQ +vfQ +hhQ +hhQ +hhQ +vfQ +hNY +hWM +hcZ +hcZ +isf +dXn +emH +dXn +dXn +dXn +jSB +hcZ +equ +kjq +ktI +pbL +equ +jSd +fLR +fLR +lje +equ +lQg +xWb +qmv +iTw +mKC +mZr +nql +nAY +nMW +oip +cbQ +dGd +dGd +aww +pyE +nod +iJk +cHb +aww +twU +xWb +mim +hYC +msm +msm +abp +msm +mim +fPE +fPE +tfK +uGy +uZl +vqd +vEb +vUW +tfK +cuN +kjk +oSb +oSb +oSb +oSb +oAY +oAY +oAY +oAY +oAY +oAY +oAY +oAY +oAY +aOv +slW +aOv +nLu +nLu +fAc +gtF +gSZ +gSZ +oex +kPP +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(56,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +iuq +iuq +iuq +hcZ +hcZ +hcZ +hcZ +isf +sFz +hcZ +hcZ +hcZ +hcZ +hcZ +gnL +hcZ +equ +equ +equ +equ +equ +equ +kIf +equ +equ +equ +twU +xWb +qmv +qmv +qmv +qmv +qmv +qmv +qmv +qmv +qmv +qmv +qmv +aww +aww +aww +aww +aww +aww +twU +uJU +mim +nJc +rMx +rMx +sUI +sRJ +mim +fPE +fPE +tfK +uvV +nkn +rUI +pZS +pZS +wqT +wOa +oew +oSb +xwi +xNY +yfJ +sBr +qLz +bfF +bfF +bfF +bfF +uLO +cUw +oAY +aOv +slW +aOv +bFj +rMp +gSZ +gSZ +gSZ +gSZ +gSZ +vNL +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(57,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +aOx +hrT +aOx +hcZ +hcZ +hcZ +hcZ +gnL +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +pIE +hcZ +equ +equ +equ +equ +equ +kBE +fLR +kSD +llf +equ +twU +mfk +jUm +jUm +jUm +naO +jUm +jUm +jUm +jUm +jUm +jUm +jUm +jUm +jUm +slj +jUm +pXY +jUm +qvf +cNo +mim +cZu +cZu +cZu +pCm +cZu +mim +fPE +stt +tfK +lnr +pLT +gkp +pLT +vVp +tfK +cuN +kjk +xeT +oKk +oKk +rjc +sBr +rpZ +rpZ +rpZ +rpZ +erk +rpZ +rpZ +oMH +aOv +slW +aOv +bFj +nLu +aNb +hLT +omE +mBP +nzb +aNb +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(58,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +igU +isi +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gnL +vPE +udW +kkq +udW +equ +equ +lFI +fLR +ino +hwl +equ +twU +dBC +vbz +vbz +rkC +vbz +vbz +vbz +rkC +vbz +vbz +vbz +rkC +vbz +pyK +fCx +vbz +vbz +vbz +vbz +nIl +mim +rBl +rNs +cZu +tgG +sSE +mim +fPE +fPE +tfK +qvq +pZS +dao +pLT +fFU +tyO +cuN +kjk +oSb +xyp +oKk +pcs +sBr +rpZ +rpZ +erk +rpZ +rpZ +rpZ +rpZ +oAY +aOv +slW +aOv +bTV +nLu +nLu +qGQ +qGQ +qGQ +qGQ +nLu +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(59,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +bmu +eew +eew +eew +bmu +yeS +eew +eew +wbk +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gnL +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +emh +vPE +udW +udW +udW +equ +equ +obE +glE +glE +glE +equ +twU +xWb +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +twU +xWb +fPQ +fPQ +aPN +aPN +fPQ +mim +mim +mim +sgt +mim +mim +mim +fPE +fPE +tfK +gkW +kLg +pLT +pLT +vjP +tyO +cuN +kjk +fKY +oKk +oKk +oKk +sBr +rpZ +rpZ +rpZ +rpZ +rpZ +rpZ +snl +hLH +aOv +jSy +aOv +bFj +nLu +bFj +bFj +bFj +bFj +jDE +jDE +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(60,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +btj +dQn +edo +etR +eew +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +nwx +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gnL +hcZ +sdd +sdd +sdd +sdd +sdd +hcZ +jVG +okv +udW +koA +udW +equ +equ +bpL +kKm +glE +llG +equ +lQg +xWb +aOv +rBd +rBd +rBd +rBd +rBd +ugm +ugm +ugm +ugm +aOv +rEb +pzp +uJU +fPQ +pZB +qlc +qlc +qSM +fPQ +rBs +rNw +djP +djP +sSG +fPQ +fPE +fPE +tfK +nUe +pol +vqJ +vFk +obC +tfK +cuN +kjk +fKY +xAO +oKk +oKk +sBr +erk +rpZ +rpZ +erk +rpZ +snl +snl +hLH +aOv +slW +aOv +bFj +rMp +bFj +bFj +bFj +bFj +bFj +jDE +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(61,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +bbg +bmu +btj +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +eew +jla +okv +eew +eew +hcZ +eSO +sdd +fyM +fOI +sdd +hcZ +eew +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gnL +hcZ +fjI +sdd +sdd +sdd +fZn +hcZ +hrq +keC +udW +gRu +udW +equ +equ +equ +equ +equ +equ +equ +aMu +xWb +aOv +rBd +mLn +sJl +nqK +rBd +nOR +blB +oti +ugm +aOv +luA +vrp +xWb +pOH +lAR +aAi +aAi +nGv +rpQ +hXt +aAi +aAi +aAi +xKN +fPQ +fPE +fPE +dhF +dhF +dhF +dhF +dhF +dhF +dhF +cuN +kjk +oSb +oSb +xOO +oSb +oAY +see +rpZ +rpZ +rpZ +snl +jTs +snl +hLH +aOv +slW +aOv +nLu +nLu +bFj +bFj +bFj +bFj +bFj +bFj +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(62,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +jXN +wfz +wfz +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +jXN +wfz +olP +eew +eew +hcZ +fjI +sdd +sdd +sdd +fZn +hcZ +eew +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +btj +gnL +hcZ +sdd +sdd +jiV +sdd +sdd +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +rGD +rGD +kCk +kKs +kWe +lnj +rGD +twU +xWb +aOv +rBd +sJl +sJl +gka +rBd +tHl +blB +blB +ugm +aOv +kZK +vrp +xWb +aAi +lAR +aAi +aAi +poE +mlx +fxe +aAi +sgA +aAi +fWP +fPQ +fPE +fPE +dhF +pVH +pVH +vqO +pVH +dhF +dhF +cuN +oew +oSb +oSb +pOB +pOB +drT +rpZ +rpZ +rpZ +snl +khA +snl +snl +hLH +aOv +slW +fPE +mgp +nLu +bFj +bFj +bFj +bFj +jDE +jDE +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(63,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +eVD +eew +eew +eew +eew +bmu +eew +eew +eew +bmu +eew +eew +eew +wbk +eew +eew +nwx +hcZ +sdd +fcz +sdd +sdd +sdd +hcZ +eew +eew +eew +eew +bmu +eew +eew +eew +eew +ihg +hcZ +sdd +sdd +sdd +sdd +sdd +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +rGD +rGD +ola +qqv +rvw +rvw +lwQ +twU +xWb +aOv +rBd +mMN +sJl +sJl +rBd +blB +blB +otO +ugm +aOv +aOv +twU +xWb +fPQ +pZR +qlC +qlC +pXy +fPQ +iHJ +aAi +hul +aAi +cLb +fPQ +tIz +stt +dhF +pVH +pVH +pVH +pVH +dhF +wrO +cuN +kjk +oSb +oSb +oSb +oSb +oAY +oAY +oAY +oAY +hLH +hLH +hLH +hLH +hLH +aOv +slW +fPE +mgp +nLu +jDE +bFj +pNw +bFj +bFj +jDE +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(64,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +wbk +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +eew +hcZ +fjI +sdd +fzm +sdd +gaJ +hcZ +eew +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gnL +hcZ +fjI +sdd +sdd +sdd +fZn +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +rGD +rGD +jWJ +pKm +rvw +lot +rGD +twU +xWb +aOv +rBd +slz +ndu +sJl +rBd +blB +oiG +ucM +ugm +aOv +aOv +twU +xWb +fPQ +fPQ +fPQ +fPQ +fPQ +fPQ +jPE +aAi +gDA +aAi +cLb +fPQ +fPE +fPE +dhF +pVH +pVH +pVH +pVH +dhF +svl +cuN +kjk +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +slW +fPE +ltM +nLu +bFj +bFj +bFj +bFj +bFj +bFj +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(65,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +azr +gsY +aIF +aXB +bbE +hcZ +eew +hcZ +bHz +pth +pth +pth +czm +hcZ +ddd +dyp +dFD +dQq +edZ +hcZ +eew +hcZ +sdd +sdd +sdd +sdd +sdd +hcZ +gFs +hcZ +gsY +hhZ +gsY +gsY +hhZ +hON +hcZ +gnL +hcZ +sdd +sdd +sdd +sdd +sdd +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +rGD +rGD +eNP +tIw +kXk +hsn +rGD +lQg +xWb +aOv +rBd +sJl +sJl +sJl +rBd +blB +blB +blB +ugm +aOv +aOv +twU +uJU +fPQ +qax +qlX +qwx +qVa +fPQ +nDD +aAi +cfF +aAi +cLb +fPQ +pLg +fPE +dhF +pVH +pVH +pVH +vFG +dhF +xIZ +cuN +kjk +wty +fPE +jVL +fPE +fPE +fPE +pLg +jVL +fPE +fPE +fPE +jVL +fPE +fPE +hYb +fGa +rOM +nLu +jDE +bFj +bFj +bFj +bFj +bFj +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(66,1,1) = {" +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +gsY +gsY +hMN +kZk +aXB +hcZ +nwx +hcZ +pth +pth +bXN +pth +pth +hcZ +gsY +oIP +mxS +bXL +gsY +hcZ +eew +hcZ +eTa +hcZ +tvf +tvf +tvf +hcZ +eew +hcZ +gsY +qFr +hso +hEa +gsY +gsY +hcZ +gnL +hcZ +eTa +hcZ +tvf +tvf +tvf +hcZ +hcZ +hcZ +hcZ +hcZ +hcZ +rGD +rGD +rGD +rGD +rGD +rGD +rGD +twU +xWb +aOv +rBd +mQQ +nep +sJl +rBd +blB +oiI +otW +ugm +aOv +aOv +twU +xWb +aPN +lAR +aAi +aAi +xJF +rpT +sXk +aAi +jhV +aAi +cLb +tvp +fPE +fPE +dhF +uHs +shD +shD +shD +dhF +dhF +cuN +kjk +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +slW +fuY +nLu +jDE +jDE +bFj +bFj +bFj +jDE +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(67,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aAk +sTL +qvO +bIo +bbP +pQc +qOn +pQc +bHE +bOV +qPn +cie +czL +pQc +aAk +lRs +agH +iPx +efA +pQc +qOn +pQc +xWX +xWX +pBJ +vUT +gcQ +pQc +qOn +pQc +sTL +ozD +dcE +wVH +sTL +sTL +pQc +iqH +pQc +xWX +iQz +jjY +nHW +vUT +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +cwq +cwq +cwq +cwq +lQM +mfn +cwq +cwq +cwq +rBd +nqV +rBd +nPl +ugm +ugm +ugm +aOv +aOv +aMu +xWb +aPN +qaY +aAi +aAi +psK +fPQ +lAR +aAi +giI +aAi +cLb +fPQ +fPE +tIz +dhF +tiI +rzk +vsA +vIk +vVM +dhF +cuN +oew +wsg +wsg +xQu +ygd +aXn +rJY +ttF +ttF +ttF +ttF +wDx +wDx +wDx +wDx +wsg +slW +rfl +nLu +jDE +jDE +jDE +bFj +jDE +jDE +nLu +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(68,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +sTL +sTL +sTL +kek +sTL +pQc +qOn +pQc +sTL +sTL +kek +sTL +sTL +pQc +sTL +lof +qHr +rTK +sTL +pQc +aHL +pQc +xXg +xWX +qgE +xWX +jUS +pQc +aHL +pQc +sTL +kNc +fjU +dGF +sTL +sTL +pQc +lSn +pQc +xXg +xWX +xWX +qgE +xWX +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +cwq +ygp +ygp +htX +csz +hey +mqf +csz +csz +eIu +tUz +nCg +tUz +ojc +eIu +nfd +aOv +aOv +twU +xWb +aPN +cbV +aAi +aAi +cLb +aPN +rCl +aAi +ogp +aAi +sTU +fPQ +fPE +stt +dhF +kSx +pVH +igu +pVH +pVH +wsU +cuN +kjk +wsg +wsg +oVl +wsg +wsg +pVI +rJY +dXO +rJY +wlO +edp +wDx +wDx +wDx +wsg +tdl +cDs +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(69,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aAV +sTL +sTL +sTL +sTL +pQc +qOn +pQc +sTL +sTL +sTL +sTL +sTL +pQc +sTL +sTL +sTL +sTL +sTL +pQc +qOn +pQc +lJy +ffv +xWX +xWX +icD +pQc +qOn +pQc +gZj +sTL +sTL +sTL +sTL +sTL +pQc +iqH +pQc +iDb +xWX +xWX +xWX +xWX +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +cwq +ygp +lsE +htX +csz +hey +csz +csz +csz +eIu +nsc +tUz +tUz +nsG +eIu +nfd +oUS +phT +pzN +pDo +aPN +lAR +aAi +aAi +cLb +aPN +vLF +aAi +ngo +aAi +mWK +fPQ +fPE +fPE +dhF +flE +vcx +jCv +vKd +vVP +dhF +cuN +kjk +xBu +xBb +vvH +ygq +uNo +olG +dXO +rJY +wlO +wlO +wlO +wlO +nlY +wDx +wsg +slW +stt +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(70,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQb +pQc +pQc +pQc +igb +pQc +pQc +pQc +pQb +pQc +pQc +pQc +pQc +pQc +pQb +pQc +pQc +pQc +igb +pQc +pQc +pQc +pQc +bzX +pQc +pQc +igb +pQc +ldG +ldG +ldG +pQc +pQb +pQc +pQc +iiy +pQc +pQc +pQc +bzX +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +cwq +kXM +tsX +lyw +csz +hey +mqg +mBz +mRU +eIu +kWx +tUz +tUz +iZa +eIu +nfd +slW +aOv +twU +xWb +aPN +lAR +aAi +aAi +cLb +aPN +oZU +aAi +aAi +aAi +mza +fPQ +fPE +fPE +dhF +dhF +dhF +dhF +dhF +dhF +dhF +cuN +kjk +xBu +vvH +vvH +eUE +xBu +rJY +pVI +wlO +ifo +wlO +wlO +wlO +wlO +wDx +wsg +slW +fPE +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(71,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aAZ +xus +xus +aQv +xus +xus +xus +aQv +xus +xus +xus +aQv +xus +xus +xus +aQv +xus +xus +xus +aQv +xus +xus +xus +xus +aQv +xus +xus +xus +xus +xus +xus +xus +xus +xus +xus +aQv +xus +wyO +xus +aQv +xus +xus +xus +aQv +xus +xus +xus +aQv +xus +xus +xus +aQv +xus +kKK +csz +csz +csz +csz +mgh +vvP +csz +csz +eIu +nDC +nFj +tUz +vPa +eIu +nfd +slW +aOv +twU +uJU +fPQ +qbY +qmh +qwT +qXg +fPQ +rqZ +mlx +mlx +mlx +hGY +fPQ +tII +fPE +ujr +fPE +fPE +fPE +ujr +fPE +wty +cuN +kjk +wsg +xCz +vvH +fKj +xBu +pVI +wlO +wlO +wlO +wlO +wlO +wlO +qcE +wDx +wsg +slW +pLg +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(72,1,1) = {" +pQc +pQc +pQc +pQc +aih +sTL +aou +sTL +sTL +pQc +mKQ +dtr +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +ehY +eue +hXi +hXi +hXi +hXi +hXi +hXi +hXi +hXi +hXi +gQy +gZx +eue +gQy +hXi +hXi +hXi +hXi +lbm +hXi +hXi +hXi +hXi +hXi +hXi +jMW +eue +hXi +hXi +hXi +hXi +hXi +hXi +hXi +kYi +kYa +kYa +kYa +kYa +cUy +xIE +mEs +csz +eIu +nDC +tUz +tUz +uxJ +eIu +nfd +slW +aOv +twU +xWb +fPQ +fPQ +fPQ +fPQ +fPQ +hVM +hVM +hVM +wOP +hVM +hVM +hVM +jLP +jLP +jLP +jLP +jLP +jLP +jLP +jLP +jLP +cuN +kjk +xhO +vvH +xRa +dNQ +xBu +pVI +jQJ +rOo +wlO +wlO +wlO +qcE +qcE +wDx +wsg +slW +fPE +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(73,1,1) = {" +pQc +pQc +pQc +pQc +sTL +ank +xsN +asm +atA +pQc +mKQ +eQB +pQc +pQc +ldG +ldG +ldG +ldG +pQc +pQc +pQc +pQc +pQc +bzX +deI +pQc +pQc +pQc +mKQ +kKl +pQc +pQc +ldG +ldG +ldG +ldG +pQc +pQc +igb +pQc +mKQ +kKl +pQc +pQc +ldG +ldG +ldG +ldG +ldG +pQc +pQc +pQc +igb +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +cwq +nHn +loS +lAv +csz +hey +qqy +csz +csz +nfr +tUz +tUz +tUz +uxJ +eIu +nfd +slW +aOv +twU +xWb +aOv +qcw +qmR +qys +qZT +hVM +rCY +rNF +jwL +eKG +sTZ +hVM +jLP +uaM +ulv +uKS +bAM +vsY +vKH +vXh +jLP +cuN +kjk +wsg +xDC +vvH +dNQ +xBu +eet +svW +wlO +wlO +kKp +qcE +hfA +wDx +wDx +wsg +slW +fPE +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(74,1,1) = {" +pQc +pQc +pQc +pQc +aiz +kTf +fmt +idZ +xSO +axO +mKQ +kKl +pQc +aRG +bfA +bfA +bfA +bfA +bIj +bPy +pQc +cjl +cCk +qVu +qVu +cCk +dGD +pQc +mKQ +kKl +pQc +eEs +eTL +fdh +fzq +fQa +jVY +pQc +qOn +pQc +mKQ +eQB +pQc +oFO +oFO +oFO +rTL +rUY +rUY +rUY +pQc +pQc +qOn +pQc +esz +eQB +pQc +pQc +pQc +pQc +pQc +pQc +pQc +cwq +ygp +lsE +htX +csz +hey +qqy +mFv +csz +eIu +tUz +tUz +tUz +ojx +eIu +nfd +slW +aOv +twU +xWb +jrO +cHe +aqi +dhM +fcr +hVM +amK +efc +hTy +eKG +eKG +hVM +jLP +vkJ +jJi +jJi +vcT +jCw +jkX +jOG +jLP +cuN +oew +wsg +czn +vvH +yhk +wsg +ttF +ttF +ttF +ttF +wDx +wDx +wDx +wDx +wDx +wsg +slW +stt +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(75,1,1) = {" +pQc +pQc +pQc +pQc +sTL +kek +sTL +wgj +xSp +pQc +mKQ +kKl +aJT +ped +xcj +ebb +ebb +ebb +xcj +rfz +pQc +dss +xWX +xWX +xWX +xWX +bgg +ldG +mKQ +eQB +pQc +xWX +kqK +fCk +glX +xWX +jcX +pQc +qOn +pQc +mKQ +kKl +pQc +hFK +hIB +rTL +oFO +rUY +rUY +iDk +pQc +qOn +qOn +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +cwq +ygp +ygp +htX +csz +hey +mqU +kzH +kzH +eIu +tUz +nFA +tUz +lWC +eIu +nfd +slW +aOv +twU +xWb +jrO +nTp +wzb +dhM +dJR +hVM +efc +efc +tFx +swP +eKG +hVM +jLP +nYQ +jJi +jJi +bAM +fOy +eaI +eaI +wua +cuN +kjk +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +wsg +slW +fPE +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(76,1,1) = {" +pQc +pQc +pQc +pQc +aju +sTL +qsy +sTL +sTL +pQc +mKQ +kKl +gPt +ped +xcj +ebb +byg +ebb +jkm +rfz +pQc +mgU +xWX +xWX +xWX +xWX +wmT +ldG +mKQ +kKl +aJT +xWX +asn +uzn +wMh +xWX +aau +pQc +aHL +pQc +mKQ +kKl +ozg +rTL +rTL +bcZ +oFO +oFO +rUY +rUY +pQc +qBT +qOn +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +iBw +cwq +cwq +cwq +cwq +lQM +mfn +cwq +cwq +cwq +eIu +nsX +eIu +nsX +eIu +eIu +nfd +slW +aOv +twU +xWb +jrO +vNs +maG +dhM +dhM +hVM +efc +efc +fFX +mCg +eKG +hVM +jLP +ejr +umG +jJi +bAM +eaI +eaI +vXi +jLP +cuN +kjk +wty +fPE +fPE +jVL +fPE +fPE +fPE +jVL +fPE +fPE +fPE +jVL +fEd +jYX +jYX +gSI +wXX +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(77,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +kKl +pQc +ped +xcj +ebb +ebb +ebb +jkm +rfz +pQc +tIS +xWX +xWX +xWX +xWX +fbr +ldG +mKQ +kKl +pQc +xWX +poR +bll +kjS +xWX +pys +pQc +qOn +pQc +mKQ +kKl +ozg +rTL +oFO +oFO +rTL +oFO +rTL +rUY +pQc +qBT +qOn +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +iBw +kLN +kYk +lqI +iBw +tUg +rrd +nrr +eIu +tUz +nfI +tUz +xuI +tUz +tUz +eIu +nfd +slW +aOv +twU +uJU +aOv +hcR +dhM +qyI +rbz +hVM +rDt +rNO +gWp +eKG +eKG +hVM +jLP +jkQ +jJi +jJi +bAM +eaI +eaI +cka +jLP +cuN +kjk +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +slW +arY +sWr +sWr +sWr +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(78,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +eQB +pQc +aSR +bka +bka +bka +bka +bIw +bPT +pQc +mtn +cCu +cNI +dfe +cCu +wuV +pQc +mKQ +kKl +pQc +eHZ +pJE +rsp +nue +fQY +jVY +pQc +qOn +pQc +mKQ +eQB +pQc +oFO +rTL +oFO +oFO +rTL +oFO +rTL +pQc +qOn +qOn +pQc +esz +eQB +pQc +pQc +pQc +pQc +pQc +pQc +iBw +ifG +eTB +euH +hJz +ktr +rrd +nrr +eIu +tUz +gbT +tUz +xuI +nFj +tUz +eIu +nfd +slW +aOv +twU +xWb +aOv +aOv +qsl +aOv +aOv +hVM +hVM +hVM +hVM +hVM +hVM +hVM +jLP +jLP +umQ +umQ +umQ +umQ +umQ +jLP +jLP +cuN +oew +aOv +xpv +xpv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +slW +uuI +ryZ +ujr +ryZ +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +"} +(79,1,1) = {" +pQc +pQc +pQc +pQc +ajx +qfn +apV +qfn +atH +pQc +mKQ +kKl +pQc +pQc +pQc +pQc +igb +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +mKQ +kKl +ldG +oFO +hIR +oFO +oFO +rTL +rTL +oFO +pQc +qOn +qOn +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +iBw +fPZ +ifG +euH +hJz +ktr +rrd +nrr +eIu +tUz +cSl +tUz +xuI +tUz +nsc +eIu +nfd +slW +aOv +pAp +pEF +jUm +jUm +jUm +pXY +jUm +jUm +jUm +jUm +pXY +jUm +jUm +jUm +jUm +pXY +slj +jUm +jUm +jUm +jUm +pXY +jUm +wOh +pec +xhT +xpv +xpv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +slW +hgj +hgj +hgj +hgj +hgj +hgj +hgj +hgj +hgj +hgj +hgj +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(80,1,1) = {" +pQc +pQc +pQc +pQc +ykE +qfn +eKf +qfn +gDM +pQc +mKQ +kKl +aOu +qOn +aCN +aIj +qOn +qOn +aCN +qOn +vPh +aCN +qOn +qOn +aIj +aCN +qOn +aOu +mKQ +eQB +pQc +aCN +qOn +qOn +qOn +aCN +qOn +qOn +qOn +pQc +mKQ +kKl +ldG +rTL +bcZ +oFO +oFO +hIB +bcZ +oFO +pQc +qOn +qOn +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +iBw +sAK +kZJ +lrk +lBd +ktr +rrd +nrr +eIu +eIu +eIu +eIu +eIu +eIu +eIu +eIu +nfd +slW +aOv +jLi +vbz +vbz +vbz +vbz +vbz +vbz +vbz +vbz +vbz +vbz +vbz +vbz +vbz +vbz +vbz +unc +vbz +vbz +vbz +vbz +vbz +vbz +vbz +qSC +aOv +xpv +xpv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +slW +hgj +jmv +jmv +jmv +jmv +jmv +jmv +jmv +jmv +jmv +jmv +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(81,1,1) = {" +pQc +pQc +pQc +pQc +lkv +anp +eKf +qfn +qfn +axR +mKQ +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +cPB +pQc +pQc +pQc +pQc +mKQ +kKl +pQc +qOn +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +hjm +hsB +hFS +wxd +rTL +oFO +rTL +wxd +oFO +pQc +qOn +qOn +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +iBw +iBw +iBw +iBw +iBw +tUg +rrd +nrr +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +slW +nje +nje +nje +nje +nje +nje +nje +rVR +rVR +rVR +nje +nje +nje +nje +bwp +bwp +fjn +mHl +bwp +bwp +bwp +aOv +tqs +wuJ +tqs +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +aOv +tdl +hgj +jmv +jmv +qoK +xBl +xBl +xBl +cWc +uLz +jmv +jmv +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(82,1,1) = {" +pQc +pQc +pQc +pQc +lkv +qfn +eKf +qfn +qfn +pQc +mKQ +kKl +pQc +aUc +bkc +bmy +ldG +bip +bIQ +bip +pQc +cjt +cCV +lxJ +lxJ +cCV +dID +pQc +mKQ +kKl +pQc +qOn +pQc +ffr +fER +fRR +fRR +gpa +fRR +pQc +mKQ +eQB +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +qOn +pQc +esz +eQB +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +qNh +wFP +lBQ +yaj +yaj +yaj +uEG +yaj +yaj +yaj +yaj +yaj +oeb +nje +nje +nje +nje +qho +qsu +qzQ +wkL +rqR +rDZ +rPE +sgK +sxk +nje +tvO +tJa +fjn +bYo +uLv +uLv +bwp +nfd +vXG +bSl +vXG +aSC +xiu +xEc +bSl +bSl +bSl +jCk +bSl +bSl +bSl +kzP +uGh +nfd +lTA +hgj +jmv +oRY +xBl +xBl +xBl +xBl +xBl +xBl +qoK +jmv +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(83,1,1) = {" +pQc +pQc +pQc +pQc +akB +qfn +eKf +qfn +atT +pQc +mKQ +eQB +pQc +xXg +xWX +nHW +ldG +bip +bip +bip +pQc +dHH +ebb +ebb +ebb +ebb +alV +ldG +mKQ +kKl +pQc +qOn +pQc +lxJ +lxJ +lxJ +lxJ +lxJ +lxJ +pQc +mKQ +kKl +aOu +qOn +qOn +qOn +qOn +qOn +qOn +qOn +qOn +qOn +eLA +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +qNh +wFP +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +oui +vJp +oeb +nje +tqa +pFq +pPr +xVt +mEB +mEB +qxN +qxN +vzp +jCi +jCi +gRw +nje +bGk +fjn +fjn +bYo +fjn +fjn +bwp +nfd +bSl +wvE +bSl +aSC +bSl +bSl +bSl +bSl +uYg +bSl +uYg +bSl +bSl +bSl +uGh +nfd +oeb +hgj +jmv +xBl +xBl +xBl +xBl +xBl +xBl +xBl +ohm +jmv +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(84,1,1) = {" +pQc +pQc +pQc +pQc +dFt +qfn +qfn +qfn +bUh +pQc +mKQ +kKl +aJT +xWX +bkw +nHW +ldG +bip +bJh +bip +pQc +lxJ +ebb +cPU +dfL +ebb +iYV +ldG +mKQ +kKl +aOu +aHL +pQc +ffI +fHh +lxJ +lxJ +lxJ +lxJ +gSw +mKQ +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +qNh +wFP +oce +oce +mgJ +mgJ +nvI +mgJ +mgJ +oce +jEd +yaj +oeb +nje +tqa +bVI +kFg +pAo +jCi +jCi +jCi +jCi +jCi +jCi +sgX +myz +sVc +tKn +fjn +fjn +bYo +fjn +vdv +bwp +nfd +vXG +bSl +vXG +aSC +bSl +bSl +dKn +dKn +dKn +iSE +dKn +dKn +dKn +bSl +bSl +nfd +oeb +hgj +jmv +qoK +xBl +xBl +xBl +peW +xBl +qoK +jmv +jmv +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(85,1,1) = {" +pQc +pQc +pQc +pQc +fnl +fnl +fnl +fnl +fnl +pQc +mKQ +kKl +pQc +aWd +xWX +bmy +ldG +bip +bip +bip +pQc +lxJ +cDt +vkS +ixZ +ebb +lxJ +pQc +mKQ +eQB +pQc +qOn +pQc +lxJ +lxJ +lxJ +lxJ +lxJ +lxJ +pQc +bRn +kKl +pQc +bip +bIQ +bip +bip +bIQ +bip +pQc +iQO +hGa +xWX +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +lRn +wFP +oce +oce +mSi +oce +oce +oce +mgJ +oce +jEd +oJh +oVu +nje +pAM +pAM +pPr +qjA +jCi +jCi +jCi +jCi +jCi +jCi +sML +meR +nje +vph +fjn +uct +uoG +fjn +fjn +bwp +nfd +aSC +aSC +aSC +aSC +bSl +xHm +dKn +sQK +sQK +sQK +wBO +rrU +dKn +uGi +bSl +nfd +oeb +hgj +jmv +jmv +fCI +xBl +xBl +xBl +aTL +jmv +jmv +jmv +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(86,1,1) = {" +pQc +pQc +pQc +pQc +fnl +fnl +fnl +fnl +fnl +pQc +mKQ +kKl +pQc +pQc +bkY +pQc +pQc +bip +bip +bip +pQc +lxJ +tsC +ixZ +djb +ebb +lxJ +dSD +mKQ +kKl +pQc +qOn +pQc +fgB +fHH +fRU +fRU +gqP +fRU +pQc +mKQ +kKl +ldG +bip +bip +bip +bip +bip +bip +bML +xWX +xWX +xWX +ldG +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +qNh +wFP +oce +mGb +hTz +gqM +oce +oce +nPs +oce +oce +nfd +oeb +nje +tqa +bVI +kFg +pAo +jCi +qBh +jCi +qBh +jCi +qBh +sML +jCi +sVo +fjn +fjn +jJy +hEA +fjn +fjn +bwp +nfd +aSC +aSC +aSC +aSC +xiY +bSl +dKn +yhz +sQK +sQK +sQK +rrU +dKn +bSl +txy +nfd +oeb +hgj +jmv +jmv +uLz +xBl +xBl +xBl +jmv +jmv +jmv +jmv +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(87,1,1) = {" +pQc +pQc +pQc +pQc +fnl +fnl +fnl +fnl +fnl +pQc +mKQ +kKl +pQc +pQc +cnI +ebb +byD +bip +lUw +bip +pQc +lxJ +ebb +ebb +ebb +ebb +lxJ +pQc +mKQ +kKl +pQc +qOn +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +kKl +ldG +bip +bip +hOS +bip +bip +bip +pQc +iRl +xWX +xWX +ldG +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +qNh +wFP +mse +hTz +hTz +eBv +apm +mgJ +mgJ +mgJ +ouy +nfd +oeb +nje +tqa +bVI +kFg +pAo +jCi +wDV +jCi +wDV +jCi +wDV +shU +bPx +bPx +twx +twx +xvb +ram +fjn +fjn +bwp +nfd +vYy +wzE +sQK +wWn +bSl +bSl +dKn +ebm +sQK +oJR +sQK +sQK +dKn +bSl +bSl +nfd +oeb +hgj +jmv +jmv +xBl +xBl +xBl +xBl +xBl +dzX +dVA +jmv +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(88,1,1) = {" +pQc +pQc +pQc +pQc +alo +ixZ +ixZ +ixZ +avL +pQc +mKQ +eQB +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +cjS +cEL +cQh +dki +dyR +dJK +pQc +bRn +kKl +pQc +qOn +aCN +qOn +qOn +qOn +qOn +aCN +qOn +aOu +mKQ +kKl +ldG +bip +bip +bip +bip +bip +bip +ldG +vUT +jlE +xWX +pQc +esz +eQB +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +qNh +wFP +oce +mGO +njf +pEr +apm +mgJ +mgJ +mgJ +mgJ +nfd +oVL +nje +pAM +pAM +pPr +qjA +jCi +jCi +jCi +jCi +jCi +jCi +jCi +meR +nje +vph +fjn +uuj +mnJ +fjn +fjn +bwp +nfd +eLJ +sQK +sQK +aSC +bSl +xHm +dKn +sQK +sQK +sQK +sQK +sQK +dKn +uGi +bSl +nfd +lTA +hgj +hgj +hgj +oMu +oMu +oMu +oMu +hgj +hgj +dVA +hgj +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(89,1,1) = {" +pQc +pQc +pQc +pQc +qfn +ixZ +aqU +ixZ +qfn +pQc +mKQ +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +ldG +ldG +pQc +pQc +pQc +mKQ +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +bRn +kKl +ldG +bip +bip +bip +bip +bip +bip +ldG +nHW +xWX +xWX +aJT +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +qNh +wFP +oce +uzf +njf +pEr +apm +mgJ +mgJ +mgJ +mgJ +nfd +oeb +nje +tqa +bVI +kFg +vzp +jCi +jCi +jCi +jCi +jCi +jCi +jCi +hnA +nje +tKn +fjn +fjn +bYo +fjn +vdv +bwp +nfd +sQK +sQK +rrU +cCs +bSl +bSl +dKn +dKn +dKn +dKn +dKn +dKn +dKn +bSl +bSl +nfd +oeb +hgj +hgj +hlm +tIY +aml +aml +hum +ddi +hgj +bLQ +hgj +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(90,1,1) = {" +pQc +pQc +pQc +pQc +alo +ixZ +ixZ +ixZ +avL +pQc +mKQ +xOU +xus +aQv +xus +xus +xus +aQv +xus +xus +xus +aQv +xus +xus +xus +aQv +xus +xus +uXg +kKl +pQc +eJY +eUm +fgH +fHW +bvQ +bvQ +gsB +bvQ +pQc +mKQ +kKl +pQc +bip +lUw +bip +bip +lUw +bip +pQc +iSB +xWX +icD +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +lRn +wFP +oce +rqq +hTz +nfT +apm +mgJ +nRx +ols +ouP +nfd +oeb +nje +tqa +pFD +pPr +jCi +jCi +jCi +jCi +jCi +jCi +jCi +jCi +bwG +nje +txk +fjn +fjn +bYo +fjn +fjn +bwp +nfd +wbo +wBO +wPL +cCs +bSl +bSl +bSl +bSl +uLN +bSl +uLN +bSl +bSl +bSl +bSl +nfd +oeb +hgj +hgj +dTW +bCO +ehw +ehw +ehw +ehw +dzX +dVA +hgj +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(91,1,1) = {" +pQc +pQc +pQc +pQc +qfn +qfn +qfn +qfn +qfn +pQc +gEo +xer +xer +xer +xer +xer +xer +xer +xer +pIi +xWX +cmj +xer +xer +xer +xer +xer +xer +pIi +kKl +ldG +xth +lUK +pSC +cRb +bvQ +gbm +wmm +bvQ +ldG +mKQ +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +qNh +wFP +oce +lHL +mSx +gqM +oce +oce +oce +oce +oce +nfd +oeb +nje +nje +nje +nje +qjB +jCi +qBp +rbC +rbC +rbC +qBp +jCi +rDl +nje +jwg +tJz +fjn +bYo +uNu +vdM +bwp +nfd +rkz +sQK +huJ +aSC +xjV +bSl +bSl +bSl +bSl +bSl +bSl +bSl +bSl +bSl +bSl +nfd +oeb +hgj +hgj +fms +aKz +ehw +lnw +sCO +eFo +hgj +hgj +hgj +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(92,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQb +pQc +pQc +pQc +mKQ +xWX +kKl +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +kKl +ldG +nVy +jOx +kHg +bvQ +bvQ +jUM +eJr +bvQ +ldG +mKQ +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +qNh +wFP +oce +oce +oce +oce +oce +nGm +nTE +oce +oce +nfd +oVX +nje +nje +nje +nje +nje +nje +nje +rVR +rVR +rVR +nje +nje +nje +nje +bwp +bwp +fjn +mHl +bwp +bwp +bwp +nfd +aSC +wFo +aSC +aSC +aSC +cCs +cCs +cCs +cCs +cCs +cCs +cCs +cCs +cCs +aSC +nfd +oVX +hgj +hgj +hgj +hgj +tmC +hgj +hgj +hgj +hgj +hgj +hgj +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(93,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +sTL +aou +sTL +aou +sTL +pQc +mKQ +xWX +kKl +pQc +cQR +bip +dzj +dKH +pQc +mKQ +eQB +pQc +utX +xeW +jbI +bvQ +bvQ +bvQ +bvQ +bvQ +pQc +bRn +kKl +pQc +pQc +pQc +pQc +hXH +iiS +isI +iEm +iUd +pQc +pQc +pQc +esz +eQB +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +qNh +mhH +mub +jUV +jUV +jUV +nyx +jUV +jUV +jUV +jUV +jUV +uGZ +jUV +jUV +jUV +jUV +jUV +jUV +jUV +jUV +jUV +jUV +jUV +jUV +jUV +jUV +jUV +jUV +jUV +uGZ +jUV +jUV +jUV +jUV +jUV +ulT +xPu +xPu +xnq +xPu +xPu +xPu +xPu +xPu +xPu +xPu +xPu +xPu +xPu +bjJ +bnz +xPu +xPu +xPu +bjJ +yjb +sBD +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(94,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aWA +sTL +bmJ +bzV +bFb +pQc +bRn +xWX +kKl +aJT +bip +bip +bip +ulE +pQc +mKQ +kKl +pQc +pQc +pQc +pQc +bzX +pQc +pQc +pQc +pQc +pQc +mKQ +kKl +pQc +pQc +pQc +pQc +dTZ +jVY +xWX +jVY +duw +pQc +pQc +pQc +esz +kKl +pQc +pQc +pQc +pQc +pQc +qOn +qOn +yaj +lbD +yaj +lBQ +lSe +qHc +vAH +vAH +vAH +vAH +xdg +nHH +nUg +vAH +vAH +oKF +tiA +vAH +vAH +vAH +oKF +vAH +vAH +vAH +vAH +oKF +vAH +vAH +vAH +vAH +oKF +vAH +vAH +vAH +tiA +oKF +vAH +vAH +vAH +vAH +xdg +vAH +wWT +rSt +wwn +xSi +wwn +wwn +wwn +wwn +xSi +wwn +wwn +wwn +wwn +wwn +wwn +tkS +ijV +wwn +xKB +ybb +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(95,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +sTL +sTL +eYb +oxv +cDW +pQc +mKQ +xWX +kKl +pQc +bip +bip +bip +bip +pQc +mKQ +xOU +xus +aQv +xus +xus +xus +aQv +xus +xus +xus +aQv +uXg +xOU +aQv +xus +xus +aQv +uXg +ikz +iue +xWX +xOU +aQv +xus +xus +jNH +kKl +pQc +pQc +pQc +pQc +pQc +aHL +pQc +hTY +hTY +hTY +hTY +hTY +crB +hTY +hTY +hTY +hTY +hTY +gki +faz +bXk +bXk +bXk +bXk +bXk +bXk +bXk +bXk +bXk +nfd +vNd +nfd +nfd +tuI +tuI +tuI +szw +tuI +tuI +tuI +tuI +vIA +vIA +vIA +vIA +vMh +vIA +vIA +vIA +qNh +wFP +nhG +nhG +nhG +nhG +nhG +nhG +nhG +nhG +nhG +nhG +nhG +vNd +jGJ +sgn +sqj +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(96,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +sTL +sTL +bIT +azC +fvM +pQc +bSn +xWX +kKl +pQc +cRP +bip +bip +bFt +pQc +mKQ +dtr +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +xer +pIi +uZo +hXi +hXi +hXi +hXi +hXi +hXi +amu +uQl +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +lbS +lrx +lEn +lSf +dpy +mwC +mHF +lAj +nhX +hTY +gki +faz +bXk +oyh +oKR +oXb +piE +bXk +bXk +bXk +qjM +yaj +yaj +yaj +yaj +tuI +rQR +skx +wez +sWX +txv +tuI +tuI +vIA +uNy +vdS +vuD +bIi +rIw +wGw +vIA +qNh +wFP +nhG +xTS +yhP +qkK +nhG +koI +koI +koI +koI +koI +nhG +yaj +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(97,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aXy +qsy +sTL +qsy +epk +pQc +toO +xer +uQl +pQc +mMr +bip +bip +bFt +pQc +mKQ +kKl +pQc +pQc +bzX +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +prT +pQc +pQc +bzX +pQc +ldG +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +iEH +hqB +aUp +ief +dpy +dpy +dpy +mHL +lAj +hTY +nJx +faz +omI +tvs +tvs +tvs +tvs +bXk +bXk +bXk +opJ +yaj +vJp +yaj +rsr +tuI +wez +wez +sAf +wez +wez +tLi +vHH +vIA +dJc +uGP +rIw +rIw +rIw +rIw +vIA +qNh +xny +nhG +shc +bAJ +nyJ +wkn +koI +iYe +iYe +iYe +koI +nhG +snB +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(98,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nJF +bYT +nJF +pQc +pDH +bip +bip +bFt +pQc +mKQ +eQB +pQc +eKa +sTL +sTL +pQc +bip +bip +bip +bip +gTQ +bip +ldG +pzX +hGa +hJp +pQc +mKQ +kLu +pQc +iFb +xWX +hGa +xWX +jFf +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +hTY +seU +seU +kuI +dpy +dpy +dpy +eMJ +nix +hTY +gki +faz +bXk +oyl +tvs +tvs +tvs +pAV +tvs +bXk +bXk +nfd +snB +nfd +nfd +tuI +rSN +skO +kZb +sXg +wez +tuI +vHH +vIA +mxL +rIw +rIw +rIw +wcz +rIw +vIA +qNh +wFP +xHt +bAJ +yiy +dBD +wkn +koI +iYe +iYe +iYe +xAT +nhG +yaj +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(99,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +xjD +ebb +dGr +pQc +qux +bip +bip +bFt +pQc +mKQ +kKl +ldG +sTL +sTL +sTL +pQc +bip +gcd +bip +gGp +bip +bip +ldG +vUT +gpX +xWX +ldG +mKQ +kLu +pQc +xxc +xWX +xWX +xWX +jUS +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +hTY +tqh +lFA +kuI +irW +irW +irW +irW +hTY +hTY +nJN +faz +bXk +alk +tvs +oXQ +pjb +bXk +tvs +bXk +bXk +nfd +yaj +nfd +nfd +tuI +tuI +tuI +tuI +tuI +tuI +tuI +vHH +vIA +rvc +rIw +rIw +vOj +qgN +wGJ +vIA +qNh +wFP +nhG +xVy +bAJ +nyJ +wkn +koI +iYe +iYe +iYe +koI +nhG +yaj +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(100,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +vMw +ebb +dGr +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +kKl +ldG +eKY +xsN +efA +pQc +cKz +bip +gsU +bip +bip +bip +ldG +nHW +xWX +xWX +ldG +mKQ +kLu +pQc +vUT +iUq +jmw +xWX +xWX +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aHL +pQc +hTY +hTY +mPf +nzw +kuI +miQ +gzb +gzb +gzb +niR +hTY +gki +faz +bXk +bXk +fil +fil +bXk +bXk +pFQ +bXk +bXk +nfd +yaj +nfd +nfd +tuI +rTl +ftt +vHH +skS +txD +tuI +fNY +vIA +vIA +vfp +egX +egX +vIA +vIA +vIA +qNh +wFP +nhG +xaM +bAJ +jnT +nhG +koI +koI +koI +koI +koI +nhG +yaj +jGJ +hho +mwh +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(101,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +bYX +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +kKl +pQc +kek +sTL +sTL +pQc +cKz +bip +bip +lUw +bip +bip +bML +xWX +xWX +xWX +ldG +mKQ +kLu +pQc +pQc +ldG +ldG +pQc +joV +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +gzb +gzb +gzb +lSt +rbW +gzb +gzb +gzb +uEI +irW +gki +faz +bXk +oAk +tvs +tvs +tvs +tvs +tvs +tvs +bXk +nfd +yaj +yaj +nfd +tuI +ftt +vHH +fNY +fNY +fNY +tLD +fNY +vIA +vIA +tbS +vva +vva +vIA +vIA +vIA +qNh +xny +nhG +nhG +yiG +nhG +nhG +nhG +yiG +nhG +nhG +nhG +nhG +yaj +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(102,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +bJm +bAP +bAP +bAP +cFH +pQc +pQc +pQc +pQc +pQc +mKQ +kKl +pQc +rII +sTL +sTL +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +bqp +xWX +xWX +ldG +mKQ +kLu +pQc +rMq +rMq +rMq +rMq +rMq +pQc +pQc +pQc +pQc +pQc +pQc +pQc +vPh +pQc +hTY +lcG +rbW +rbW +rbW +lKA +rbW +gzb +mjq +uEI +irW +gki +nUy +bXk +dCJ +ntp +ntp +ntp +ntp +ntp +pQk +bXk +nfd +yaj +snB +nfd +tuI +pFo +ftt +vHH +vHH +vHH +tuI +tuI +vIA +vIA +qQY +tbS +tbS +vIA +vIA +vIA +wYy +wFP +nhG +nhG +hRM +hRM +vmx +hRM +hRM +nhG +xTL +mtA +eCE +yaj +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(103,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +blh +xnp +nsV +cam +cnG +tXQ +cFH +pQc +pQc +pQc +pQc +mKQ +eQB +pQc +pQc +pQc +pQc +pQc +bip +bip +bip +bip +fAs +bip +ldG +pzX +xWX +xWX +ldG +mKQ +prT +pQc +iHL +rMq +rMq +rMq +rMq +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +tHM +lrQ +rbW +rbW +rbW +gzb +gzb +uEI +uEI +irW +gki +faz +bXk +tvs +oNA +oZb +pli +pBg +ntp +tvs +bXk +nfd +yaj +yaj +nfd +tuI +qGO +vHH +ftt +ftt +tzr +tuI +tuI +vIA +vIA +cvl +vvV +vPf +vIA +vIA +vIA +qNh +wFP +nhG +nhG +nhG +nhG +nhG +nhG +nhG +nhG +qhP +qhP +kLB +yaj +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(104,1,1) = {" +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +pQc +pQc +pQc +blh +bmY +aOX +vmd +jIy +cht +aOX +cUF +cFH +pQc +pQc +pQc +mKQ +kKl +pQc +eLA +aCN +fhd +pQc +bip +bip +gtm +gGp +bip +bip +ldG +vUT +gpX +jUS +pQc +mKQ +kLu +ldG +rMq +iUt +rMq +rMq +jFi +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +gzb +rbW +lGB +gzb +gzb +gzb +lWt +uEI +uEI +irW +gki +faz +bXk +tvs +ntp +gFU +gFU +gFU +ntp +tvs +bXk +nfd +yaj +yaj +nfd +tuI +vHH +skS +vHH +vHH +vHH +tuI +tuI +vIA +vIA +vIA +vIA +vIA +vIA +vIA +vIA +qNh +wFP +nfd +nfd +yaj +lbD +yaj +yaj +yaj +lbD +vJp +yaj +yaj +yaj +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(105,1,1) = {" +hnC +ebj +ebj +agb +ebj +ebj +ebj +agb +ebj +ebj +ebj +agb +hnC +pQc +pQc +blh +bmY +aOX +aOX +vmd +jIy +cht +aOX +aOX +cUF +cFH +pQc +pQc +mKQ +kKl +aOu +qOn +eWk +hwd +pQc +bip +bip +bip +fAs +bip +bip +ldG +gcQ +xWX +xWX +aJT +mKQ +kLu +ldG +rMq +rMq +rMq +rMq +rMq +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +gzb +gzb +gzb +lTL +gzb +gzb +uEI +uEI +uEI +irW +gki +faz +bXk +tvs +ntp +gFU +plz +gFU +ntp +tvs +bXk +uEG +yaj +yaj +rXY +tuI +vHH +vHH +sAu +ftt +vHH +tuI +qJl +lbD +yaj +yaj +yaj +yaj +lbD +yaj +lBQ +qNh +wFP +lBQ +yaj +yaj +yaj +yaj +yaj +vJp +yaj +yaj +uEG +yaj +snB +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(106,1,1) = {" +hnC +ebj +hjo +hjo +hjo +ebj +ebj +ebj +ebj +ebj +ebj +ebj +ebj +pQc +blh +bmY +aOX +bFr +nsV +bSA +jIy +cnQ +cnG +cUG +aOX +cUF +cFH +ldG +mKQ +kKl +pQc +pQc +pQc +pQc +pQc +bip +bip +bip +lUw +bip +bip +bML +xWX +xWX +xWX +pQc +mKQ +kLu +ldG +rMq +rMq +rMq +iUt +rMq +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aHL +pQc +hTY +gzb +gzb +gzb +gzb +gzb +gzb +uEI +uEI +uEI +irW +gki +faz +bXk +oEf +ntp +ntp +ntp +ntp +ntp +tvs +bXk +bEp +yaj +yaj +rXY +tuI +rTF +vHH +vHH +vHH +tAe +tuI +qJl +yaj +nfd +nfd +nfd +nfd +nfd +nfd +nfd +qNh +xny +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +vwv +yaj +uEG +yaj +jGJ +hho +eiO +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(107,1,1) = {" +hnC +ebj +adz +ahj +sTL +ebj +ebj +ebj +ebj +ebj +ebj +ebj +ebj +aXE +vGF +aOX +aOX +aOX +vmd +jIy +jIy +jIy +cht +aOX +aOX +aOX +fBP +ldG +mKQ +kKl +pQc +nyk +gWC +fhI +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +bqp +xWX +xWX +ldG +mKQ +kLu +ldG +rMq +rMq +rMq +rMq +rMq +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +gzb +gzb +rbW +gzb +gzb +gzb +uEI +uEI +uEI +irW +gki +nUy +bXk +sPR +ntp +ntp +ntp +ntp +ntp +pQD +bXk +yaj +yaj +yaj +snB +tuI +tuI +tuI +tuI +tuI +tuI +tuI +qJl +yaj +nfd +nfd +vwv +vPy +wcX +nfd +nfd +qNh +wFP +eGK +eGK +eGK +eGK +eGK +eGK +eGK +eGK +eGK +eGK +eGK +nfd +jGJ +mEK +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(108,1,1) = {" +hnC +abl +hjo +ltn +sTL +ebj +ebj +ebj +ebj +ebj +ebj +ebj +ebj +lxJ +vnp +aOX +aOX +aOX +vmd +jIy +cdr +jIy +cht +aOX +aOX +aOX +qGT +ldG +mKQ +kKl +pQc +gWC +gWC +nIW +pQc +fTR +bip +bip +bip +bip +bip +ldG +pzX +xWX +xWX +ldG +mKQ +kLu +ldG +rMq +iUt +rMq +jxX +jFt +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +gzb +gzb +lKA +rbW +gzb +uEI +uEI +uEI +uEI +irW +gki +faz +bXk +uag +tvs +tvs +plJ +tvs +oEf +sCG +bXk +qsE +yaj +uEG +yaj +yaj +yaj +skW +yaj +yaj +yaj +lbD +yaj +yaj +yaj +lbD +yaj +eNm +tjQ +nfd +nfd +qNh +wFP +eGK +xYt +spC +fzK +spC +lHt +eGK +eGK +eGK +eGK +eGK +nfd +jGJ +sgn +mrq +jGJ +ebR +ebR +ebR +ebR +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(109,1,1) = {" +hnC +ebj +hjo +jhi +sTL +ebj +ebj +ebj +ebj +ebj +ebj +ebj +ebj +lxJ +vGF +aOX +aOX +aOX +vmd +jIy +jIy +jIy +cht +aOX +aOX +aOX +fBP +ldG +mKQ +kKl +aJT +gWC +gWC +eVn +pQc +bip +bip +bip +gGp +bip +bip +ldG +vUT +gpX +xWX +ldG +mKQ +kLu +ldG +rMq +rMq +rMq +rMq +rMq +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +lcG +gzb +rbW +gzb +mjq +uEI +uEI +mST +uEI +irW +gki +faz +bXk +bXk +bXk +bXk +bXk +bXk +bXk +bXk +bXk +yaj +yaj +yaj +yaj +yaj +yaj +yaj +yaj +yaj +yaj +uEG +yaj +rXY +nfd +nfd +yaj +eNm +iTs +nfd +nfd +qNh +wFP +xHY +fzK +fzK +fEG +fzK +fzK +hKV +cPo +pjC +eGK +eGK +nfd +jGJ +sgn +mrq +mcu +ebR +dbD +que +ebR +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(110,1,1) = {" +hnC +ebj +hjo +hjo +hjo +ebj +ebj +ebj +ebj +ebj +ebj +ebj +ebj +pQc +mmt +bnU +aOX +bFr +bJI +bSN +bSN +bSN +cFX +cUG +dpL +vKi +cUI +ldG +mKQ +euo +pQc +gWC +gWC +eVn +pQc +bip +bip +bip +gGD +bip +bip +ldG +nHW +xWX +xWX +ldG +mKQ +prT +pQc +iHL +rMq +rMq +rMq +rMq +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +hTY +gzb +gzb +gzb +lWt +qCS +uEI +uEI +aHS +njB +hTY +gki +faz +lBQ +yaj +lbD +yaj +yaj +yaj +uEG +lbD +vJp +yaj +yaj +yaj +bEp +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +jLf +jLf +jLf +vPG +jLf +jLf +jLf +qNh +wFP +eGK +uKk +jcf +bil +bil +mmj +eGK +cPo +cPo +eGK +eGK +nfd +jGJ +sgn +kyg +jGJ +ebR +sAQ +tdG +sAQ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(111,1,1) = {" +hnC +ebj +ebj +ahx +ebj +ebj +ebj +ahx +ebj +ebj +ebj +ahx +hnC +pQc +pQc +mmt +bnU +aOX +aOX +aOX +fpf +aOX +aOX +aOX +vKi +cUI +pQc +pQc +mKQ +kKl +ldG +eMA +gWC +fjS +pQc +fUe +gee +bip +lUw +bip +bip +bML +xWX +xWX +xWX +ldG +mKQ +kLu +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +kgn +kuz +qOn +aHL +pQc +hTY +hTY +hTY +hTY +hTY +hTY +hTY +hTY +hTY +hTY +hTY +gki +faz +rpU +lkT +lkT +lkT +lkT +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +sAM +sXx +tAu +rpU +rpU +rpU +jLf +vgq +vwC +iEJ +wgi +wGW +jLf +qNh +wFP +eGK +eGK +mgu +mgu +mgu +eGK +eGK +xqU +xqU +eGK +eGK +nfd +jGJ +sgn +mrq +hNR +ebR +ebR +xNc +ebR +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(112,1,1) = {" +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +hnC +pQc +pQc +pQc +mmt +bnU +aOX +aOX +aOX +aOX +aOX +vKi +cUI +pQc +pQc +pQc +mKQ +kKl +pQc +nyk +gWC +xXz +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +htY +hGU +hJD +pQc +mKQ +kLu +aOu +aCN +qOn +vPh +aIj +qOn +aCN +qOn +qOn +qOn +qOn +qOn +qOn +qOn +qOn +yaj +yaj +lbD +yaj +yaj +yaj +lbD +yaj +yaj +yaj +lBQ +gki +nUy +rpU +oFg +lkT +lkT +lkT +rpU +sac +sac +sac +rpU +qDz +rwj +rwj +rpU +uIT +slB +uIT +uIT +uIT +slB +uIT +rpU +jLf +oOF +iuk +suT +uAd +hYS +jLf +lRn +wFP +eGK +xZX +xIs +yaw +quW +eUU +xIs +owm +owm +quW +eGK +nfd +jGJ +hho +mwh +jGJ +dXo +ebR +ebR +ebR +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(113,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mmt +bnU +bTz +bTz +bTz +vKi +cUI +pQc +pQc +pQc +pQc +mKQ +kKl +pQc +pQc +ldG +pQc +pQc +pQc +aAZ +xus +gHz +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +kLu +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +fhd +aIj +kxZ +kyI +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +gki +faz +rpU +rpU +rpU +rpU +rpU +rpU +sac +pQF +sac +rpU +rwj +rdK +rwj +rpU +gdl +ooI +kRs +sXK +kRs +tPO +gdl +rpU +jLf +rmZ +cXI +boO +rWr +jBv +jLf +qNh +wFP +xIi +owm +xKY +owm +nam +kRX +quW +ftN +xKY +owm +eGK +nfd +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(114,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +bKb +eus +cdP +eus +ijU +pQc +pQc +pQc +pQc +pQc +mKQ +xOU +xus +xus +xus +xus +xus +xus +uXg +xWX +xOU +xus +xus +xus +xus +xus +xus +xus +uXg +ilT +iuM +xus +xus +xus +xus +iuM +gHz +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +gki +faz +rpU +oGT +oNI +sac +pnc +rpU +sac +sac +sac +rpU +rwj +rwj +rwj +rpU +gdl +olX +gdl +olX +tAT +olX +gdl +rpU +jLf +qKO +ghA +iBR +chX +sIe +jLf +qNh +wFP +mgu +yaw +aix +rpF +rpF +rpF +jab +quW +quW +bKf +eGK +nfd +jGJ +sgn +mrq +jGJ +pls +mbN +mqZ +xqA +ktY +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(115,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +xWX +xWX +xWX +xWX +xWX +dtr +xer +cLj +xer +xer +xer +xer +cLj +xer +xer +xer +cLj +hXX +tPN +hXi +hXi +iVL +hXi +hXi +gZx +jPg +pQc +pQc +pQc +pQc +aHL +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +gki +faz +rpU +hyx +sac +sac +sac +rpU +fub +fub +fub +rpU +fub +fub +fub +rpU +uIT +olX +gdl +olX +gDB +olX +gdl +rpU +jLf +iFi +htr +vhX +alP +gvX +jLf +qNh +wFP +mgu +owm +owm +pck +rKF +rKF +rpF +rpF +eFb +aUF +eGK +nfd +jGJ +sgn +mrq +jGJ +mFW +mqZ +mqZ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(116,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aIj +qOn +aCN +qOn +qOn +aOu +gEo +xer +cLj +xer +xer +pIi +kKl +pQc +pQc +ldG +ldG +ldG +ldG +pQc +pQc +pQc +igb +pQc +pQc +pQc +pQc +bzX +pQc +pQc +pQc +sxL +kLu +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +gki +faz +opR +sac +sac +sac +sac +sac +sac +sac +sac +qsP +wZD +reE +rsv +rpU +olu +smg +kRs +sYs +kRs +tRB +gdl +rpU +jLf +vhX +izU +vhX +cMZ +flg +jLf +qNh +wFP +mgu +xIs +rpF +rpF +rKF +rKF +shd +rpF +owm +owm +eGK +nfd +jGJ +sgn +mrq +hNR +mqZ +mqZ +mqZ +xqA +rQg +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(117,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aCN +qOn +qOn +qOn +aCN +qOn +qOn +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +kKl +pQc +pzX +xWX +ped +qkm +tGn +tGn +pQc +pQc +qOn +pQc +pQc +imo +ivl +xWX +iWh +jmK +pQc +mKQ +kLu +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nKN +faz +rpU +sac +oNV +sac +sac +rpU +fub +fub +fub +rpU +fub +fub +fub +rpU +uIT +olX +lvV +olX +gdl +olX +gdl +rpU +jLf +jLf +ntZ +jLf +jLf +jLf +jLf +qNh +wFP +mgu +owm +kRX +rpF +pvt +rpF +rpF +xIs +quW +ftN +eGK +nfd +jGJ +nKq +mrq +jGJ +pls +mqZ +mqZ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(118,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +vPh +pQc +pQc +pQc +pQc +pQc +pQc +pQc +dqe +dzA +mqH +dTg +dTg +euN +eCd +dqe +pQc +mKQ +euo +pQc +pzX +xWX +ped +qkm +tGn +tGn +pQc +qOn +qOn +qBT +pQc +wys +oPv +xWX +bpW +nyT +pQc +mKQ +prT +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +gki +faz +rpU +oHI +qIt +pbm +pqC +rpU +sac +sac +sac +rpU +sac +sac +sac +rpU +gdl +olX +gDB +olX +gdl +olX +gdl +rpU +jLf +lhN +lhN +jLf +jLf +jLf +jLf +lRn +wFP +mgu +quW +xIs +jab +rpF +kRX +owm +quW +ebq +psL +eGK +nfd +jGJ +ocf +mwh +jGJ +pls +aIB +mqZ +xqA +rQg +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(119,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +gBz +gBz +pQc +pQc +pQc +pQc +hFv +bkn +bkn +aVC +aVC +bkn +bkn +bkn +pQc +mKQ +kKl +aJT +xWX +xWX +ped +gTY +tGn +tGn +pQc +hwd +qOn +aHL +pQc +qEg +nHW +nHW +sMt +xWX +pQc +mKQ +kLu +pQc +pQc +pQc +pQc +aHL +pQc +pQc +pQc +nfd +nfd +nfd +nfd +gOw +gOw +gOw +gOw +gOw +gOw +gOw +gki +faz +rpU +rpU +rpU +rpU +rpU +rpU +sac +pQY +sac +rpU +sac +rhF +sac +rpU +gdl +smu +kRs +tbG +kRs +tSC +gdl +rpU +jLf +lhN +jLf +jLf +lhN +lhN +wQB +qNh +wFP +mgu +owm +xKY +owm +owm +yaw +owm +xKY +owm +uJD +eGK +nfd +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(120,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +bKC +gBz +cdT +cqX +cGq +cWB +bkn +ycP +ycP +ycP +ycP +ycP +ycP +bkn +pQc +mKQ +kKl +pQc +ghg +gty +gIb +ehD +hcJ +hjQ +pQc +qBT +qOn +qOn +pQc +ldG +ldG +ldG +pQc +joV +pQc +mKQ +kLu +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +gOw +mkd +aIg +aIg +mTa +nll +nzY +gki +faz +rpU +rpU +rpU +rpU +rpU +rpU +sac +sac +sac +rpU +sac +sac +sac +rpU +uIT +vYw +gdl +gdl +gdl +vYw +uIT +rpU +jLf +lhN +lhN +vPI +wij +lhN +jLf +qNh +wFP +eGK +xZX +owm +yaw +xIs +qdH +quW +owm +buS +owm +eGK +nfd +jGJ +sgn +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(121,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aHL +pQc +gBz +gBz +pQc +pQc +pQc +pQc +dtI +ycP +dLd +dTI +dTI +evK +ycP +eOx +pQc +mKQ +kKl +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +qOn +pQc +bip +bip +bip +bip +bip +pQc +mKQ +kLu +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +gOw +bEa +aIg +aIg +vjh +qby +gOw +gki +faz +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +rpU +jLf +jLf +jLf +jLf +jLf +jLf +jLf +qNh +wFP +eGK +eGK +eGK +eGK +eGK +eGK +eGK +eGK +eGK +jGJ +jGJ +jGJ +aSw +sgn +bOm +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(122,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aCN +qOn +qOn +qOn +qOn +qOn +pQc +pQc +pQc +pQc +pQc +pQc +pQc +saX +ycP +xXX +ocO +vkW +gWb +ycP +uXJ +pQc +mKQ +euo +pQc +tGn +guK +tGn +tGn +tGn +guK +tGn +pQc +qOn +qOn +pQc +bip +bip +bip +bip +bip +pQc +mKQ +kLu +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +gOw +mvC +aIg +mHR +sVe +mlk +qrN +nLf +nUC +xPu +xPu +xPu +dBA +xPu +xPu +xPu +xPu +dBA +xPu +xPu +xPu +xPu +xPu +dBA +yjb +sBD +bPs +bPs +txw +lis +uoO +uoO +vgS +vzb +fgq +fgq +wHu +bPs +lRn +wFP +nfd +nfd +xZv +cBa +snf +nYS +snf +wyg +xZv +jGJ +wGc +jGJ +lsB +wIG +mrq +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(123,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +pQc +igb +pQc +pQc +pQc +pQc +pQc +pQc +pQc +exB +ycP +xXX +dWb +ocO +gWb +ycP +mqH +pQc +mKQ +kKl +pQc +ghq +tGn +tGn +tGn +tGn +tGn +tGn +pQc +qOn +qOn +pQc +bip +bip +bip +bip +bip +pQc +mKQ +jRh +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +gOw +beK +aIg +fgM +ndS +mpt +qrN +mHs +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +jkW +faz +bPs +bPs +foz +ucB +fgq +uOS +fgq +nGN +vPN +fgq +fgq +bPs +qNh +xpn +xJX +nfd +xZv +qug +vQf +vQf +vQf +rUr +xZv +jGJ +jGJ +jGJ +jGJ +hho +mwh +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(124,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +boT +sTL +bFw +sTL +bUL +aou +crv +sTL +pQc +nFY +ycP +dLl +ocO +ocO +evN +ycP +eOC +pQc +mKQ +kKl +ldG +tGn +tGn +tGn +tGn +tGn +hkg +tGn +pQc +qOn +qBT +pQc +imr +bip +bip +bip +joZ +pQc +mKQ +kLu +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +gOw +fSN +uNl +uNl +uNl +uNl +gOw +nfd +wcy +wcy +wcy +wcy +xFK +xFK +xFK +xFK +xFK +xFK +xFK +xFK +wcy +wcy +wcy +wcy +gki +sEm +bPs +bPs +nTy +brr +fgq +fgq +fgq +nGN +uoO +wjn +fgq +wRm +qNh +xps +xKn +nfd +xZv +gnc +vQf +vQf +vQf +tBu +xZv +nfd +jGJ +jGJ +jGJ +sgn +mrq +jGJ +jGJ +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(125,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +cnj +sTL +sTL +sTL +sTL +sTL +sTL +sTL +pQc +eAO +dAc +ycP +ycP +ycP +ycP +ycP +fBW +pQc +mKQ +kKl +ldG +tGn +tGn +tGn +tGn +tGn +tGn +tGn +pQc +qOn +aHL +pQc +bip +bip +bip +bip +bip +pQc +mKQ +kLu +pQc +pQc +pQc +pQc +aHL +pQc +pQc +pQc +nfd +nfd +nfd +nfd +lWz +vGy +sNw +sNw +sNw +nmp +gOw +gOw +wcy +opZ +oHL +oSY +fex +pyi +pyi +pGy +pyi +pyi +pyi +qGI +rie +rty +rEw +wcy +gki +faz +bPs +bPs +foz +lis +fgq +fgq +fgq +nGN +jYL +fgq +wKl +bPs +qNh +wFP +nfd +nfd +xZv +xZv +xZv +isw +xZv +xZv +xZv +nfd +jGJ +lcc +qis +nkg +nkg +hKh +shr +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(126,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +igb +pQc +pQc +pQc +sTL +sTL +bHr +bMm +bHr +bMm +bHr +bMm +pQc +mqH +bkn +bkn +bkn +bkn +bkn +eCN +exB +pQc +sxL +kKl +pQc +ghu +gwD +gwD +gUC +tGn +tGn +tGn +pQc +qOn +qOn +pQc +bip +bip +bip +bip +bip +pQc +mKQ +kLu +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +gOw +oYX +wBd +mHW +mTv +sNw +nzY +sNw +obH +pyi +pyi +jlr +pyi +pyi +pyi +pyi +pyi +pyi +pyi +pyi +pyi +wnn +rZd +wcy +gki +faz +bPs +bPs +txw +lis +uts +xWl +vjk +bPs +lRe +xWl +wLo +bPs +qNh +wFP +nfd +nfd +xZv +iuQ +snf +snf +snf +suF +xZv +nfd +jGJ +rcO +jtc +nkg +nkg +vFv +cek +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(127,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +asB +sTL +sTL +sTL +sTL +aou +pQc +pQc +bqd +sTL +bqM +sTL +bVf +sTL +xsN +qsy +pQc +xyV +grC +bkn +bkn +bkn +bkn +grC +eOF +pQc +mKQ +euo +pQc +hsx +ffv +xWX +aFP +tGn +hcJ +tGn +pQc +qOn +hwd +pQc +bip +bip +bip +bip +bip +pQc +mKQ +kLu +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +gOw +gOw +gOw +gOw +gOw +gOw +gOw +gOw +wcy +oqe +pyi +pyi +vHD +eOs +eOs +eOs +eOs +eOs +nFM +pyi +pyi +cnp +leM +rUV +smS +faz +bPs +bPs +bPs +bPs +bPs +bPs +bPs +bPs +bPs +bPs +bPs +bPs +xan +xpu +nfd +nfd +xZv +jWd +vQf +vQf +vQf +ivv +xZv +nfd +jGJ +crn +gBF +nkg +nkg +qOd +cPg +jGJ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(128,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +sTL +awQ +ayW +aBI +aDG +sTL +pQc +pQc +pQc +bzX +pQc +ldG +ldG +ldG +ldG +pQc +pQc +pQc +pQc +pQc +pQc +eid +pQc +pQc +pQc +pQc +mKQ +kKl +pQc +pQc +pQc +bzX +pQc +pQc +pQc +pQc +pQc +igb +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +mKQ +prT +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +wcy +toi +pyi +pyi +vHD +eOs +eOs +eOs +eOs +eOs +nFM +pyi +pyi +pyi +pyi +wcy +clt +nUC +dBA +xPu +xPu +xPu +dBA +xPu +xPu +xPu +dBA +xPu +xPu +xPu +xcU +xrx +jUV +sBD +xhK +snf +vQf +vQf +vQf +ozi +xZv +nfd +eZe +eZe +ckD +xWZ +igR +gNW +eZe +eZe +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(129,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +sTL +lRc +mrs +lLp +hhG +sTL +aXR +aAZ +aQv +xus +xus +xus +xus +xus +xus +xus +xus +aQv +xus +xus +xus +xus +xus +xus +xus +xus +fkl +fIw +fUG +fUG +fUG +fUG +fUG +fUG +fUG +fUG +fUG +fUG +fUG +fUG +fUG +fUG +fUG +fUG +fUG +fUG +jGO +lrp +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +wcy +fny +pyi +pyi +pyi +pyi +pyi +pyi +pyi +pyi +pyi +pyi +pyi +pyi +rHb +wcy +lSe +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +wwn +ybb +snf +snf +vQf +vQf +vQf +ozi +xZv +nfd +eZe +cNH +cNH +cNH +cNH +cNH +cNH +eZe +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(130,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +sTL +lRc +kPd +lLp +hhG +sTL +xWX +gEo +xer +xer +xer +xer +bVl +xer +xer +xer +xer +xer +xer +xer +xer +cLj +xer +xer +xer +xer +cLj +xer +xer +xer +xer +xer +cLj +xer +xer +xer +xer +xer +cLj +xer +xer +xer +xer +cLj +xer +xer +xer +uQl +pQc +pQc +pQc +pQc +aHL +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +wcy +pwO +pyi +oTm +pyi +pyi +pyi +pJA +pRC +pyi +pyi +qGP +riW +ruD +cmH +wcy +xZv +xZv +tdP +tdP +tdP +tdP +tdP +tdP +tdP +tdP +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +jWd +vQf +vQf +vQf +kIA +xZv +nfd +eZe +cNH +twT +wwB +wwB +wwB +cNH +eZe +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(131,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +sTL +axq +oAC +aCo +aFv +sTL +pQc +pQc +pQc +bzX +pQc +pQc +pQc +ldG +ldG +ldG +ldG +pQc +pQc +igb +pQc +pQc +bzX +pQc +ldG +ldG +pQc +pQc +pQc +pQc +pQb +pQc +pQc +pQc +igb +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +kgn +koE +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +wcy +wcy +wcy +wcy +wcy +wcy +wcy +wcy +wcy +wcy +wcy +wcy +wcy +wcy +wcy +wcy +xZv +sEo +tge +tge +tge +tge +tge +tge +tge +tge +sEo +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +iuQ +snf +snf +snf +suF +xZv +nfd +eZe +kcS +tRh +wwB +wwB +wwB +mTj +eZe +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(132,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +asX +sTL +sTL +sTL +sTL +qsy +pQc +pQc +xWX +xWX +bmy +ldG +bIQ +bip +nBE +nBE +nBE +dua +pQc +qOn +pQc +ekR +bip +bip +bip +eWF +flt +pQc +fUR +sTL +sTL +sTL +gVF +pQc +qOn +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +wbd +opw +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +xZv +sFc +tiT +tBC +tSQ +tSQ +tSQ +tSQ +tSQ +vzJ +vQz +xZv +wLp +wLs +wLs +xrJ +xKL +ycU +xZv +xZv +xZv +aEA +xZv +xZv +xZv +nfd +eZe +cNH +wwB +wwB +wwB +wwB +cNH +eZe +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(133,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +igb +pQc +pQc +pQc +xWX +xWX +lEz +ldG +bip +nBE +nBE +oEx +oEx +oEx +pQc +qOn +pQc +ulE +bip +bip +bip +bip +bip +pQc +fmt +ghx +gxm +gJq +kTf +pQc +qOn +vPh +aCN +qOn +qOn +qOn +aCN +qOn +qOn +qOn +qOn +aCN +qOn +qOn +qOn +qOn +qOn +qOn +qOn +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +xZv +sFc +tiT +sEo +sEo +sEo +sEo +sEo +sEo +vBj +vQz +tdP +wLs +wSu +wSu +wSu +wSu +yel +xZv +gTf +snf +snf +wpO +rGl +xZv +nfd +eZe +cNH +cNH +cNH +cNH +cNH +cNH +eZe +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(134,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +bqp +xWX +tXN +ldG +bip +nBE +crX +oEx +oEx +oEx +pQc +aHL +pQc +lRl +bip +bip +bip +bip +bip +pQc +itM +xua +hAX +tgs +gVH +pQc +hly +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +xZv +sFc +tiT +sEo +sEo +sEo +sEo +sEo +sEo +vBj +vQz +tdP +wLs +wSy +wSu +xrX +wSu +yel +xpa +dXS +vQf +vQf +nev +mYj +xZv +nfd +eZe +eZe +eZe +eZe +eZe +eZe +eZe +eZe +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(135,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aHL +pQc +pQc +pQc +mOM +xWX +xWX +pQc +bip +nBE +nBE +nBE +oEx +oEx +pQc +qOn +pQc +ulE +ewh +eCT +eCT +eYi +fmS +pQc +uHO +uta +hAX +fVF +xHM +pQc +qOn +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +xZv +sFc +tiT +sEo +sEo +udo +sEo +sEo +sEo +vBj +vQz +tdP +wLs +wTD +xes +xsE +xKP +yel +snf +snf +vQf +vQf +vQf +xGT +xGT +ijj +czS +xfG +xRq +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(136,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +omT +xWX +xWX +bML +bip +lUw +bip +nBE +cZA +oEx +pQc +qOn +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +xsN +xua +hAX +tgs +xsN +pQc +qOn +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +xZv +sFc +tiT +sEo +sEo +sEo +sEo +sEo +sEo +vBj +vQz +tdP +wLs +wTX +wSu +wSu +wSu +yel +snf +snf +vQf +vQf +ieY +kER +xZv +xGT +tYm +vQf +gAt +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(137,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +aIj +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +pQc +ewK +eDj +wbd +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +xZv +sFc +tiT +sEo +sEo +sEo +sEo +sEo +sEo +vBj +vQz +tdP +wLs +wSu +wSu +wSu +wSu +yel +xZv +wsW +dzk +aWE +kER +vqp +xZv +xGT +vQf +vQf +xGT +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(138,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +qOn +qOn +aCN +qOn +qOn +qOn +qOn +aCN +qOn +qOn +qOn +aCN +qOn +qOn +vPh +qOn +aCN +qOn +qOn +qOn +qOn +aCN +qOn +qOn +qOn +qOn +aCN +qOn +qOn +qOn +aHL +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +xZv +sFc +tjX +tCe +tCe +tCe +tCe +tCe +tCe +tjX +vQS +xZv +wLp +wLs +wLs +xtG +wMg +yew +xZv +xZv +xZv +xZv +xZv +xZv +xZv +kok +fys +fys +cIQ +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(139,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +xZv +sEo +tkR +tkR +tkR +tkR +tkR +tkR +tkR +tkR +tBC +wlS +wMg +wMg +xeF +xuj +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} +(140,1,1) = {" +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +pQc +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +xZv +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +nfd +"} diff --git a/maps/redgate/fantasy_dungeon.dmm b/maps/redgate/fantasy_dungeon.dmm index 02cbdea6c8..96aef51a37 100644 --- a/maps/redgate/fantasy_dungeon.dmm +++ b/maps/redgate/fantasy_dungeon.dmm @@ -559,10 +559,7 @@ /turf/simulated/floor/wmarble, /area/redgate/fantasy/dungeon) "me" = ( -/mob/living/simple_mob/vore/demon/engorge{ - ai_holder_type = /datum/ai_holder/simple_mob/vore; - vore_pounce_chance = 50 - }, +/mob/living/simple_mob/vore/sonadile, /turf/simulated/floor/cult, /area/redgate/fantasy/dungeon) "ml" = ( @@ -1625,14 +1622,7 @@ /turf/simulated/floor/concrete, /area/redgate/fantasy/ratbasement) "Hn" = ( -/mob/living/simple_mob/vore/demon{ - ai_holder_type = /datum/ai_holder/simple_mob/vore; - harm_intent_damage = 8; - health = 300; - melee_damage_lower = 5; - melee_damage_upper = 2; - vore_pounce_chance = 50 - }, +/mob/living/simple_mob/vore/devil, /turf/simulated/floor/cult, /area/redgate/fantasy/dungeon) "Hx" = ( @@ -11776,7 +11766,7 @@ kn jI ah ah -Hn +ah ah Xp hR @@ -12346,7 +12336,7 @@ ah ah ah ah -Hn +ah ah kn kn diff --git a/maps/redgate/jungle.dmm b/maps/redgate/jungle.dmm index 4c5e0f0f1e..9308753680 100644 --- a/maps/redgate/jungle.dmm +++ b/maps/redgate/jungle.dmm @@ -728,14 +728,7 @@ /turf/simulated/shuttle/wall, /area/redgate/jungle/westcaves) "ik" = ( -/mob/living/simple_mob/vore/demon{ - ai_holder_type = /datum/ai_holder/simple_mob/vore; - harm_intent_damage = 8; - health = 300; - melee_damage_lower = 5; - melee_damage_upper = 2; - vore_pounce_chance = 50 - }, +/mob/living/simple_mob/vore/devil, /turf/simulated/floor/gorefloor, /area/redgate/jungle/temple) "il" = ( @@ -3510,13 +3503,6 @@ }, /turf/simulated/floor/outdoors/grass/forest, /area/redgate/jungle/aboveground) -"PG" = ( -/mob/living/simple_mob/vore/demon/engorge{ - ai_holder_type = /datum/ai_holder/simple_mob/vore; - vore_pounce_chance = 50 - }, -/turf/simulated/floor/gorefloor2, -/area/redgate/jungle/temple) "PK" = ( /obj/item/weapon/bedsheet/pillow, /turf/simulated/mineral/floor/cave, @@ -9402,7 +9388,7 @@ Ji Ji pL GT -ik +GT GT GT rI @@ -9545,7 +9531,7 @@ Ji ue GT GT -GT +ik GT rI rI @@ -9689,7 +9675,7 @@ GT GT GT rI -PG +rI rI pL pL diff --git a/maps/stellar_delight/stellar_delight1.dmm b/maps/stellar_delight/stellar_delight1.dmm index afafa0fa2f..944baf45ec 100644 --- a/maps/stellar_delight/stellar_delight1.dmm +++ b/maps/stellar_delight/stellar_delight1.dmm @@ -15656,13 +15656,6 @@ /turf/simulated/floor, /area/stellardelight/deck1/explobriefing) "Hf" = ( -/obj/machinery/door/airlock/angled_bay/standard/glass{ - dir = 4; - door_color = "#333333"; - name = "Auxiliary EVA Equipment Room"; - req_one_access = list(18,19,43); - stripe_color = "#5a19a8" - }, /obj/structure/cable/green{ color = "#42038a"; icon_state = "1-2" @@ -15671,6 +15664,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/angled_bay/hatch{ + door_color = "#333333"; + name = "Auxiliary EVA Equipment"; + req_one_access = list(18,19,43); + stripe_color = "#5a19a8" + }, /turf/simulated/floor, /area/stellardelight/deck1/exploequipment) "Hg" = ( diff --git a/maps/stellar_delight/stellar_delight_defines.dm b/maps/stellar_delight/stellar_delight_defines.dm index 6393c600ff..450a72379d 100644 --- a/maps/stellar_delight/stellar_delight_defines.dm +++ b/maps/stellar_delight/stellar_delight_defines.dm @@ -181,7 +181,8 @@ list("Redgate - Fantasy Dungeon", "Redgate - Fantasy Town"), list("Redgate - Laserdome"), list("Redgate - Cascading Falls"), - list("Redgate - Jungle Underground", "Redgate - Jungle") + list("Redgate - Jungle Underground", "Redgate - Jungle"), + list("Redgate - Facility") ) ai_shell_restricted = TRUE diff --git a/maps/tether/tether_defines.dm b/maps/tether/tether_defines.dm index 88f85e616e..4afd2103c2 100644 --- a/maps/tether/tether_defines.dm +++ b/maps/tether/tether_defines.dm @@ -211,7 +211,8 @@ list("Redgate - Fantasy Dungeon", "Redgate - Fantasy Town"), list("Redgate - Laserdome"), list("Redgate - Cascading Falls"), - list("Redgate - Jungle Underground", "Redgate - Jungle") + list("Redgate - Jungle Underground", "Redgate - Jungle"), + list("Redgate - Facility") ) ai_shell_restricted = TRUE diff --git a/sound/effects/plop.ogg b/sound/effects/plop.ogg new file mode 100644 index 0000000000..11f138e24c Binary files /dev/null and b/sound/effects/plop.ogg differ diff --git a/tgui/packages/common/type-utils.ts b/tgui/packages/common/type-utils.ts new file mode 100644 index 0000000000..a73c0c1d59 --- /dev/null +++ b/tgui/packages/common/type-utils.ts @@ -0,0 +1,41 @@ +/** + * Helps visualize highly complex ui data on the fly. + * @example + * ```tsx + * const { data } = useBackend(); + * logger.log(getShallowTypes(data)); + * ``` + */ +export function getShallowTypes( + data: Record, +): Record { + const output = {}; + + for (const key in data) { + if (Array.isArray(data[key])) { + const arr: any[] = data[key]; + + // Return the first array item if it exists + if (data[key].length > 0) { + output[key] = arr[0]; + continue; + } + + output[key] = 'emptyarray'; + } else if (typeof data[key] === 'object' && data[key] !== null) { + // Please inspect it further and make a new type for it + output[key] = 'object (inspect) || Record'; + } else if (typeof data[key] === 'number') { + const num = Number(data[key]); + + // 0 and 1 could be booleans from byond + if (num === 1 || num === 0) { + output[key] = `${num}, BooleanLike?`; + continue; + } + output[key] = data[key]; + } + } + + return output; +} diff --git a/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx b/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx index 903dacf284..f101d7da03 100644 --- a/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx +++ b/tgui/packages/tgui-panel/audio/NowPlayingWidget.jsx @@ -7,6 +7,7 @@ import { toFixed } from 'common/math'; import { useDispatch, useSelector } from 'tgui/backend'; import { Button, Collapsible, Flex, Knob, Section } from 'tgui/components'; + import { useSettings } from '../settings'; import { selectAudio } from './selectors'; diff --git a/tgui/packages/tgui-panel/chat/middleware.js b/tgui/packages/tgui-panel/chat/middleware.js index 57dab303b5..f1745b353b 100644 --- a/tgui/packages/tgui-panel/chat/middleware.js +++ b/tgui/packages/tgui-panel/chat/middleware.js @@ -170,7 +170,7 @@ export const chatMiddleware = (store) => { settings.interleaveColor, ); // Load the chat once settings are loaded - if (!initialized && settings.initialized) { + if (!initialized && (settings.initialized || settings.firstLoad)) { initialized = true; setInterval(() => { saveChatToStorage(store); diff --git a/tgui/packages/tgui-panel/chat/renderer.jsx b/tgui/packages/tgui-panel/chat/renderer.jsx index 1461491b4f..37538350ff 100644 --- a/tgui/packages/tgui-panel/chat/renderer.jsx +++ b/tgui/packages/tgui-panel/chat/renderer.jsx @@ -88,6 +88,11 @@ const interleaveMessage = (node, interleave, color) => { return node; }; +const stripNewLineFlood = (text) => { + text = text.replace(/((\n)\2{2})\2+/g, '$1'); + return text; +}; + const createReconnectedNode = () => { const node = document.createElement('div'); node.className = 'Chat__reconnected'; @@ -507,12 +512,14 @@ class ChatRenderer { node = createMessageNode(); // Payload is plain text if (message.text) { + message.text = stripNewLineFlood(message.text); // Do not allow more than 3 new lines in a row node.textContent = this.prependTimestamps ? getChatTimestamp(message) + message.text : message.text; } // Payload is HTML else if (message.html) { + message.html = stripNewLineFlood(message.html); // Do not allow more than 3 new lines in a row node.innerHTML = this.prependTimestamps ? getChatTimestamp(message) + message.html : message.html; diff --git a/tgui/packages/tgui-panel/settings/reducer.js b/tgui/packages/tgui-panel/settings/reducer.js index cf5467831c..c34ccf554a 100644 --- a/tgui/packages/tgui-panel/settings/reducer.js +++ b/tgui/packages/tgui-panel/settings/reducer.js @@ -57,6 +57,7 @@ const initialState = { exportEnd: 0, lastId: null, initialized: false, + firstLoad: false, storedTypes: {}, hideImportantInAdminTab: false, interleave: false, @@ -82,6 +83,7 @@ export const settingsReducer = (state = initialState, action) => { if (type === loadSettings.type) { // Validate version and/or migrate state if (!payload?.version) { + state.firstLoad = true; return state; } diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index a92d02427c..e39563df93 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -1235,6 +1235,24 @@ $border-width-px: $border-width * 1px; flex-direction: column; } +.ooc_alert { + background: #4d4100; + border: 1px solid #cca300; + margin: 0.5em; + padding: 0.5em 0.5em 0.5em 0.2em; + color: #ffffff; + font-weight: bold; + display: flex; + flex-direction: column; +} + +.ooc_announcement_text { + color: #cca300; + padding: 0.5em 0 0 0.35em; + display: flex; + flex-direction: column; +} + @each $color-name, $color-value in $alert-stripe-colors { .chat_alert_#{$color-name} { color: #ffffff; @@ -1400,4 +1418,5 @@ $border-width-px: $border-width * 1px; font-size: 150%; font-weight: bold; font-family: 'Gabriola', cursive, sans-serif; + line-height: 0.3; } diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index 5d83c32be2..749da15f90 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -1262,6 +1262,24 @@ $border-width-px: $border-width * 1px; flex-direction: column; } +.ooc_alert { + background: #bdc8ff; + border: 1px solid #002eb8; + margin: 0.5em; + padding: 0.5em 0.5em 0.5em 0.2em; + color: #00283a; + font-weight: bold; + display: flex; + flex-direction: column; +} + +.ooc_announcement_text { + color: #002eb8; + padding: 0.5em 0 0 0.35em; + display: flex; + flex-direction: column; +} + @each $color-name, $color-value in $alert-stripe-colors { .chat_alert_#{$color-name} { color: #ffffff; @@ -1433,4 +1451,5 @@ $border-width-px: $border-width * 1px; font-size: 150%; font-weight: bold; font-family: 'Gabriola', cursive, sans-serif; + line-height: 0.3; } diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss index aa15f6ee67..ea6251931b 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatdark.scss @@ -1236,6 +1236,24 @@ $border-width-px: $border-width * 1px; flex-direction: column; } +.ooc_alert { + background: #4d4100; + border: 1px solid #cca300; + margin: 0.5em; + padding: 0.5em 0.5em 0.5em 0.2em; + color: #ffffff; + font-weight: bold; + display: flex; + flex-direction: column; +} + +.ooc_announcement_text { + color: #cca300; + padding: 0.5em 0 0 0.35em; + display: flex; + flex-direction: column; +} + @each $color-name, $color-value in $alert-stripe-colors { .chat_alert_#{$color-name} { color: #ffffff; @@ -1401,4 +1419,5 @@ $border-width-px: $border-width * 1px; font-size: 150%; font-weight: bold; font-family: 'Gabriola', cursive, sans-serif; + line-height: 0.3; } diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss index 279dd7bc21..0d8f5347a3 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-vchatlight.scss @@ -1260,6 +1260,24 @@ $border-width-px: $border-width * 1px; flex-direction: column; } +.ooc_alert { + background: #bdc8ff; + border: 1px solid #002eb8; + margin: 0.5em; + padding: 0.5em 0.5em 0.5em 0.2em; + color: #00283a; + font-weight: bold; + display: flex; + flex-direction: column; +} + +.ooc_announcement_text { + color: #002eb8; + padding: 0.5em 0 0 0.35em; + display: flex; + flex-direction: column; +} + @each $color-name, $color-value in $alert-stripe-colors { .chat_alert_#{$color-name} { color: #ffffff; @@ -1431,4 +1449,5 @@ $border-width-px: $border-width * 1px; font-size: 150%; font-weight: bold; font-family: 'Gabriola', cursive, sans-serif; + line-height: 0.3; } diff --git a/tgui/packages/tgui-panel/telemetry.js b/tgui/packages/tgui-panel/telemetry.js index 3b1eb9a950..581d32f306 100644 --- a/tgui/packages/tgui-panel/telemetry.js +++ b/tgui/packages/tgui-panel/telemetry.js @@ -36,6 +36,14 @@ export const telemetryMiddleware = (store) => { Byond.sendMessage('telemetry', { connections }); return; } + // For whatever reason we didn't get the telemetry, re-request + if (type === 'testTelemetryCommand') { + setTimeout(() => { + if (!telemetry) { + Byond.sendMessage('ready'); + } + }, 500); + } // Keep telemetry up to date if (type === 'backend/update') { next(action); diff --git a/tgui/packages/tgui/backend.ts b/tgui/packages/tgui/backend.ts index 4af2e7418c..9d10d3f41f 100644 --- a/tgui/packages/tgui/backend.ts +++ b/tgui/packages/tgui/backend.ts @@ -262,6 +262,8 @@ type BackendState = { status: number; interface: string; refreshing: boolean; + map: string; // Vorestation Add + mapZLevel: number; // Vorestation Add window: { key: string; size: [number, number]; diff --git a/tgui/packages/tgui/components/Collapsible.tsx b/tgui/packages/tgui/components/Collapsible.tsx index b470ed5ce6..8f53e7d92b 100644 --- a/tgui/packages/tgui/components/Collapsible.tsx +++ b/tgui/packages/tgui/components/Collapsible.tsx @@ -13,11 +13,12 @@ type Props = Partial<{ buttons: ReactNode; open: boolean; title: ReactNode; + child_mt: number; // Vorestation Add }> & BoxProps; export function Collapsible(props: Props) { - const { children, color, title, buttons, ...rest } = props; + const { children, color, title, buttons, child_mt = 1, ...rest } = props; const [open, setOpen] = useState(props.open); return ( @@ -38,7 +39,7 @@ export function Collapsible(props: Props) {
{buttons}
)} - {open && {children}} + {open && {children}} ); } diff --git a/tgui/packages/tgui/components/NoticeBox.tsx b/tgui/packages/tgui/components/NoticeBox.tsx index db4f821d6b..73abc74322 100644 --- a/tgui/packages/tgui/components/NoticeBox.tsx +++ b/tgui/packages/tgui/components/NoticeBox.tsx @@ -11,7 +11,7 @@ import { Box, BoxProps } from './Box'; type Props = ExclusiveProps & BoxProps; /** You MUST use only one or none */ -type NoticeType = 'info' | 'success' | 'danger'; +type NoticeType = 'info' | 'success' | 'warning' | 'danger'; type None = { [K in NoticeType]?: undefined; @@ -25,12 +25,15 @@ type ExclusiveProps = | (Omit & { success: boolean; }) + | (Omit & { + warning: boolean; + }) | (Omit & { danger: boolean; }); export function NoticeBox(props: Props) { - const { className, color, info, success, danger, ...rest } = props; + const { className, color, info, success, danger, warning, ...rest } = props; return ( void; rightSlot: ReactNode; @@ -57,6 +58,7 @@ const Tab = (props: TabProps) => { selected, color, icon, + iconSpin, // Vorestation Add leftSlot, rightSlot, children, @@ -87,7 +89,7 @@ const Tab = (props: TabProps) => { {(canRender(leftSlot) &&
{leftSlot}
) || (!!icon && (
- +
))}
{children}
diff --git a/tgui/packages/tgui/interfaces/AICard.jsx b/tgui/packages/tgui/interfaces/AICard.tsx similarity index 86% rename from tgui/packages/tgui/interfaces/AICard.jsx rename to tgui/packages/tgui/interfaces/AICard.tsx index 1c2125e5d7..2d4dc59ad7 100644 --- a/tgui/packages/tgui/interfaces/AICard.jsx +++ b/tgui/packages/tgui/interfaces/AICard.tsx @@ -1,11 +1,26 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, LabeledList, ProgressBar, Section } from '../components'; import { Window } from '../layouts'; +type Data = { + name: string; + has_ai: BooleanLike; + integrity: number; + backup_capacitor: number; + flushing: BooleanLike; + has_laws: BooleanLike; + laws: string[]; + wireless: BooleanLike; + radio: BooleanLike; +}; + export const AICard = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { + name, has_ai, integrity, backup_capacitor, @@ -16,7 +31,7 @@ export const AICard = (props) => { radio, } = data; - if (has_ai === 0) { + if (!has_ai) { return ( @@ -29,7 +44,7 @@ export const AICard = (props) => { ); } else { - let integrityColor = null; // Handles changing color of the integrity bar + let integrityColor: string | undefined; // Handles changing color of the integrity bar if (integrity >= 75) { integrityColor = 'green'; } else if (integrity >= 25) { @@ -38,7 +53,7 @@ export const AICard = (props) => { integrityColor = 'red'; } - let powerColor = null; + let powerColor: string | undefined; if (backup_capacitor >= 75) { powerColor = 'green'; } @@ -52,7 +67,7 @@ export const AICard = (props) => {
- +

{name}

@@ -77,7 +92,7 @@ export const AICard = (props) => { {(!!has_laws && ( {laws.map((value, key) => ( - + {value} ))} diff --git a/tgui/packages/tgui/interfaces/APC.jsx b/tgui/packages/tgui/interfaces/APC.tsx similarity index 67% rename from tgui/packages/tgui/interfaces/APC.jsx rename to tgui/packages/tgui/interfaces/APC.tsx index 032e5fb8bb..9df33fc68a 100644 --- a/tgui/packages/tgui/interfaces/APC.jsx +++ b/tgui/packages/tgui/interfaces/APC.tsx @@ -1,3 +1,5 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, @@ -12,14 +14,46 @@ import { Window } from '../layouts'; import { FullscreenNotice } from './common/FullscreenNotice'; import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox'; +type Data = { + gridCheck: BooleanLike; + failTime: number; + locked: BooleanLike; + normallyLocked: BooleanLike; + siliconUser: BooleanLike; + externalPower; + chargingStatus; + powerChannels: { + title: string; + powerLoad: number; + status: number; + topicParams: { + auto: Record; + on: Record; + off: Record; + }[]; + }; + powerCellStatus: number; + emagged: BooleanLike; + isOperating: BooleanLike; + chargeMode: BooleanLike; + totalCharging: number; + totalLoad: number; + coverLocked: BooleanLike; + nightshiftLights: BooleanLike; + nightshiftSetting: number; + emergencyLights: boolean; +}; + export const APC = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); + + const { gridCheck, failTime } = data; let body = ; - if (data.gridCheck) { + if (gridCheck) { body = ; - } else if (data.failTime) { + } else if (failTime) { body = ; } @@ -30,7 +64,13 @@ export const APC = (props) => { ); }; -const powerStatusMap = { +type powerStatus = { + color: string; + externalPowerText: string; + chargingText: string; +}; + +const powerStatusMap: Record = { 2: { color: 'good', externalPowerText: 'External Power', @@ -48,7 +88,10 @@ const powerStatusMap = { }, }; -const malfMap = { +const malfMap: Record< + number, + { icon: string; content: string; action: string } +> = { 1: { icon: 'terminal', content: 'Override Programming', @@ -72,21 +115,38 @@ const malfMap = { }; const ApcContent = (props) => { - const { act, data } = useBackend(); - const locked = data.locked && !data.siliconUser; - const normallyLocked = data.normallyLocked; - const externalPowerStatus = - powerStatusMap[data.externalPower] || powerStatusMap[0]; - const chargingStatus = - powerStatusMap[data.chargingStatus] || powerStatusMap[0]; - const channelArray = data.powerChannels || []; + const { act, data } = useBackend(); + + const { + locked, + siliconUser, + externalPower, + chargingStatus, + powerChannels, + powerCellStatus, + emagged, + isOperating, + chargeMode, + totalCharging, + totalLoad, + coverLocked, + nightshiftSetting, + emergencyLights, + } = data; + + const is_locked: BooleanLike = locked && !siliconUser; + const externalPowerStatus: powerStatus = + powerStatusMap[externalPower] || powerStatusMap[0]; + const chargingPowerStatus: powerStatus = + powerStatusMap[chargingStatus] || powerStatusMap[0]; + const channelArray: any = powerChannels || []; // const malfStatus = malfMap[data.malfStatus] || null; - const adjustedCellChange = data.powerCellStatus / 100; + const adjustedCellChange: number = powerCellStatus / 100; return ( <> @@ -103,13 +163,13 @@ const ApcContent = (props) => { color={externalPowerStatus.color} buttons={ } > @@ -120,19 +180,19 @@ const ApcContent = (props) => { act('charge')} > - {data.chargeMode ? 'Auto' : 'Off'} + {chargeMode ? 'Auto' : 'Off'} } > - [ {chargingStatus.chargingText} ] + [ {chargingPowerStatus.chargingText} ]
@@ -156,26 +216,26 @@ const ApcContent = (props) => { } /> @@ -228,7 +288,7 @@ const ApcContent = (props) => { <> } /> @@ -299,7 +359,9 @@ const GridCheck = (props) => { }; const ApcFailure = (props) => { - const { data, act } = useBackend(); + const { data, act } = useBackend(); + + const { locked, siliconUser, failTime } = data; let rebootOptions = ( ); - if (data.locked && !data.siliconUser) { + if (locked && !siliconUser) { rebootOptions = Swipe an ID card for manual reboot.; } @@ -321,7 +383,7 @@ const ApcFailure = (props) => { I/O regulators malfunction detected! Waiting for system reboot...
- Automatic reboot in {data.failTime} seconds... + Automatic reboot in {failTime} seconds... {rebootOptions} ); diff --git a/tgui/packages/tgui/interfaces/AccountsTerminal.jsx b/tgui/packages/tgui/interfaces/AccountsTerminal.tsx similarity index 82% rename from tgui/packages/tgui/interfaces/AccountsTerminal.jsx rename to tgui/packages/tgui/interfaces/AccountsTerminal.tsx index 9831a56063..ba2fd43bb5 100644 --- a/tgui/packages/tgui/interfaces/AccountsTerminal.jsx +++ b/tgui/packages/tgui/interfaces/AccountsTerminal.tsx @@ -1,3 +1,5 @@ +import { BooleanLike } from 'common/react'; + import { useBackend, useSharedState } from '../backend'; import { Box, @@ -10,8 +12,36 @@ import { } from '../components'; import { Window } from '../layouts'; +type Data = { + id_inserted: BooleanLike; + id_card: string; + access_level: number; + machine_id: string; + creating_new_account: BooleanLike; + detailed_account_view: boolean; + station_account_number: number; + account_number: number | null; + owner_name: string | null; + money: number | null; + suspended: BooleanLike; + transactions: { + date: string; + time: string; + target_name: string; + purpose: string; + amount: number; + source_terminal: string; + }[]; + accounts: { + account_number: number; + owner_name: string; + suspended: string; + account_index: number; + }[]; +}; + export const AccountsTerminal = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { id_inserted, id_card, access_level, machine_id } = data; @@ -41,7 +71,7 @@ export const AccountsTerminal = (props) => { }; const AccountTerminalContent = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { creating_new_account, detailed_account_view } = data; @@ -56,18 +86,14 @@ const AccountTerminalContent = (props) => { Home act('create_account')} > New Account {!creating_new_account ? ( - act('print')} - > + act('print')}> Print ) : ( @@ -81,13 +107,13 @@ const AccountTerminalContent = (props) => { }; const NewAccountView = (props) => { - const { act } = useBackend(); + const { act } = useBackend(); const [holder, setHolder] = useSharedState('holder', ''); const [newMoney, setMoney] = useSharedState('money', ''); return ( -
+
setHolder(val)} /> @@ -115,7 +141,7 @@ const NewAccountView = (props) => { }; const DetailedView = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { access_level, @@ -130,7 +156,6 @@ const DetailedView = (props) => { return (
{ {suspended ? 'SUSPENDED' : 'Active'} -
+
{
{access_level >= 2 && ( -
+
@@ -178,7 +203,7 @@ const DetailedView = (props) => {
)} -
+
Timestamp @@ -205,18 +230,18 @@ const DetailedView = (props) => { }; const ListView = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { accounts } = data; return ( -
+
{(accounts.length && ( {accounts.map((acc) => ( )} diff --git a/tgui/packages/tgui/interfaces/AiAirlock.jsx b/tgui/packages/tgui/interfaces/AiAirlock.tsx similarity index 54% rename from tgui/packages/tgui/interfaces/AiAirlock.jsx rename to tgui/packages/tgui/interfaces/AiAirlock.tsx index e13cf1331b..169a0ea897 100644 --- a/tgui/packages/tgui/interfaces/AiAirlock.jsx +++ b/tgui/packages/tgui/interfaces/AiAirlock.tsx @@ -1,8 +1,40 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Button, LabeledList, Section } from '../components'; import { Window } from '../layouts'; -const dangerMap = { +type Data = { + power: { + main: number; + main_timeleft: number; + backup: number; + backup_timeleft: number; + }; + wires: { + main_1: BooleanLike; + main_2: BooleanLike; + backup_1: BooleanLike; + backup_2: BooleanLike; + shock: BooleanLike; + id_scanner: BooleanLike; + bolts: BooleanLike; + lights: BooleanLike; + safe: BooleanLike; + timing: BooleanLike; + }; + shock: number; + shock_timeleft: number; + id_scanner: BooleanLike; + lights: BooleanLike; + locked: BooleanLike; + safe: BooleanLike; + speed: BooleanLike; + opened: BooleanLike; + welded: BooleanLike; +}; + +const dangerMap: Record = { 2: { color: 'good', localStatusText: 'Optimal', @@ -18,10 +50,25 @@ const dangerMap = { }; export const AiAirlock = (props) => { - const { act, data } = useBackend(); - const statusMain = dangerMap[data.power.main] || dangerMap[0]; - const statusBackup = dangerMap[data.power.backup] || dangerMap[0]; - const statusElectrify = dangerMap[data.shock] || dangerMap[0]; + const { act, data } = useBackend(); + + const { + power, + wires, + shock, + shock_timeleft, + id_scanner, + lights, + locked, + safe, + speed, + opened, + welded, + } = data; + + const statusMain = dangerMap[power.main] || dangerMap[0]; + const statusBackup = dangerMap[power.backup] || dangerMap[0]; + const statusElectrify = dangerMap[shock] || dangerMap[0]; return ( @@ -33,18 +80,16 @@ export const AiAirlock = (props) => { buttons={ } > - {data.power.main ? 'Online' : 'Offline'}{' '} - {((!data.wires.main_1 || !data.wires.main_2) && - '[Wires have been cut!]') || - (data.power.main_timeleft > 0 && - `[${data.power.main_timeleft}s]`)} + {power.main ? 'Online' : 'Offline'}{' '} + {((!wires.main_1 || !wires.main_2) && '[Wires have been cut!]') || + (power.main_timeleft > 0 && `[${power.main_timeleft}s]`)} { buttons={ } > - {data.power.backup ? 'Online' : 'Offline'}{' '} - {((!data.wires.backup_1 || !data.wires.backup_2) && + {power.backup ? 'Online' : 'Offline'}{' '} + {((!wires.backup_1 || !wires.backup_2) && '[Wires have been cut!]') || - (data.power.backup_timeleft > 0 && - `[${data.power.backup_timeleft}s]`)} + (power.backup_timeleft > 0 && `[${power.backup_timeleft}s]`)} { <>
@@ -108,16 +152,16 @@ export const AiAirlock = (props) => { color="bad" buttons={ } > - {!data.wires.id_scanner && '[Wires have been cut!]'} + {!wires.id_scanner && '[Wires have been cut!]'} { color="bad" buttons={ } > - {!data.wires.bolts && '[Wires have been cut!]'} + {!wires.bolts && '[Wires have been cut!]'} act('light-toggle')} > - {data.lights ? 'Enabled' : 'Disabled'} + {lights ? 'Enabled' : 'Disabled'} } > - {!data.wires.lights && '[Wires have been cut!]'} + {!wires.lights && '[Wires have been cut!]'} act('safe-toggle')} > - {data.safe ? 'Enabled' : 'Disabled'} + {safe ? 'Enabled' : 'Disabled'} } > - {!data.wires.safe && '[Wires have been cut!]'} + {!wires.safe && '[Wires have been cut!]'} act('speed-toggle')} > - {data.speed ? 'Enabled' : 'Disabled'} + {speed ? 'Enabled' : 'Disabled'} } > - {!data.wires.timing && '[Wires have been cut!]'} + {!wires.timing && '[Wires have been cut!]'} { color="bad" buttons={ } > - {!!(data.locked || data.welded) && ( + {!!(locked || welded) && ( - [Door is {data.locked ? 'bolted' : ''} - {data.locked && data.welded ? ' and ' : ''} - {data.welded ? 'welded' : ''}!] + [Door is {locked ? 'bolted' : ''} + {locked && welded ? ' and ' : ''} + {welded ? 'welded' : ''}!] )} diff --git a/tgui/packages/tgui/interfaces/AiRestorer.jsx b/tgui/packages/tgui/interfaces/AiRestorer.tsx similarity index 87% rename from tgui/packages/tgui/interfaces/AiRestorer.jsx rename to tgui/packages/tgui/interfaces/AiRestorer.tsx index c6b4c81cca..7db847a58c 100644 --- a/tgui/packages/tgui/interfaces/AiRestorer.jsx +++ b/tgui/packages/tgui/interfaces/AiRestorer.tsx @@ -1,3 +1,5 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, @@ -9,6 +11,17 @@ import { } from '../components'; import { Window } from '../layouts'; +type Data = { + AI_present: boolean; + error: string | null; + name: string; + laws: string[]; + isDead: boolean; + restoring: BooleanLike; + health: number; + ejectable: boolean; +}; + export const AiRestorer = () => { return ( @@ -20,7 +33,7 @@ export const AiRestorer = () => { }; export const AiRestorerContent = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { AI_present, error, @@ -81,7 +94,7 @@ export const AiRestorerContent = (props) => { > Begin Reconstruction -
+
{laws.map((law) => ( {law} diff --git a/tgui/packages/tgui/interfaces/AiSupermatter.jsx b/tgui/packages/tgui/interfaces/AiSupermatter.tsx similarity index 87% rename from tgui/packages/tgui/interfaces/AiSupermatter.jsx rename to tgui/packages/tgui/interfaces/AiSupermatter.tsx index 0e8105c65c..bf46960446 100644 --- a/tgui/packages/tgui/interfaces/AiSupermatter.jsx +++ b/tgui/packages/tgui/interfaces/AiSupermatter.tsx @@ -1,13 +1,21 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Icon, LabeledList, ProgressBar, Section } from '../components'; import { Window } from '../layouts'; import { FullscreenNotice } from './common/FullscreenNotice'; -export const AiSupermatter = (props) => { - const { data } = useBackend(); +type Data = { + detonating: BooleanLike; + integrity_percentage: number; + ambient_temp: number; + ambient_pressure: number; +}; - const { integrity_percentage, ambient_temp, ambient_pressure, detonating } = - data; +export const AiSupermatter = (props) => { + const { data } = useBackend(); + + const { detonating } = data; let body = ; if (detonating) { @@ -38,7 +46,7 @@ const AiSupermatterDetonation = (props) => ( ); const AiSupermatterContent = (props) => { - const { data } = useBackend(); + const { data } = useBackend(); const { integrity_percentage, ambient_temp, ambient_pressure } = data; diff --git a/tgui/packages/tgui/interfaces/AirAlarm.jsx b/tgui/packages/tgui/interfaces/AirAlarm.tsx similarity index 78% rename from tgui/packages/tgui/interfaces/AirAlarm.jsx rename to tgui/packages/tgui/interfaces/AirAlarm.tsx index 451c1c1b61..ebdbdaf331 100644 --- a/tgui/packages/tgui/interfaces/AirAlarm.jsx +++ b/tgui/packages/tgui/interfaces/AirAlarm.tsx @@ -1,4 +1,5 @@ import { toFixed } from 'common/math'; +import { BooleanLike } from 'common/react'; import { Fragment, useState } from 'react'; import { useBackend } from '../backend'; @@ -6,10 +7,57 @@ import { Box, Button, LabeledList, Section } from '../components'; import { getGasColor, getGasLabel } from '../constants'; import { Window } from '../layouts'; import { Scrubber, Vent } from './common/AtmosControls'; +import { single_scrubber, single_vent } from './common/CommonTypes'; import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox'; +type Data = { + locked: BooleanLike; + siliconUser: BooleanLike; + remoteUser: BooleanLike; + environment_data: { + name: string; + value: number; + unit: string; + danger_level: number; + }[]; + danger_level: number; + target_temperature: string; + rcon: number; + atmos_alarm: BooleanLike; + fire_alarm: BooleanLike; + emagged: BooleanLike; // Seems unused + mode: number; + thresholds: thresholds[]; + scrubbers: single_scrubber[]; + vents: single_vent[]; + modes: { + name: string; + mode: number; + selected: BooleanLike; + danger: BooleanLike; + }[]; +}; + +type thresholds = { + name: string; + settings: { + env: string; + val: number; + selected: { + oxygen: number[]; + carbon_dioxide: number; + phoron: number; + other: number; + pressure: number; + temperature: number; + }; + }[]; +}; + export const AirAlarm = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); + + const { locked, siliconUser, remoteUser } = data; const [screen, setScreen] = useState(''); @@ -17,14 +65,14 @@ export const AirAlarm = (props) => { setScreen(value); } - const locked = data.locked && !data.siliconUser && !data.remoteUser; + const is_locked: BooleanLike = locked && !siliconUser && !remoteUser; return ( - {!locked && ( + {!is_locked && ( )} @@ -33,24 +81,28 @@ export const AirAlarm = (props) => { }; const AirAlarmStatus = (props) => { - const { data } = useBackend(); - const entries = (data.environment_data || []).filter( + const { data } = useBackend(); + + const { environment_data, atmos_alarm, fire_alarm, emagged } = data; + + const entries = (environment_data || []).filter( (entry) => entry.value >= 0.01, ); - const dangerMap = { - 0: { - color: 'good', - localStatusText: 'Optimal', - }, - 1: { - color: 'average', - localStatusText: 'Caution', - }, - 2: { - color: 'bad', - localStatusText: 'Danger (Internals Required)', - }, - }; + const dangerMap: Record = + { + 0: { + color: 'good', + localStatusText: 'Optimal', + }, + 1: { + color: 'average', + localStatusText: 'Caution', + }, + 2: { + color: 'bad', + localStatusText: 'Danger (Internals Required)', + }, + }; const localStatus = dangerMap[data.danger_level] || dangerMap[0]; return (
@@ -75,10 +127,10 @@ const AirAlarmStatus = (props) => { - {(data.atmos_alarm && 'Atmosphere Alarm') || - (data.fire_alarm && 'Fire Alarm') || + {(atmos_alarm && 'Atmosphere Alarm') || + (fire_alarm && 'Fire Alarm') || 'Nominal'} @@ -87,7 +139,7 @@ const AirAlarmStatus = (props) => { Cannot obtain air sample for analysis. )} - {!!data.emagged && ( + {!!emagged && ( Safety measures offline. Device may exhibit abnormal behavior. @@ -98,7 +150,7 @@ const AirAlarmStatus = (props) => { }; const AirAlarmUnlockedControl = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { target_temperature, rcon } = data; return (
@@ -179,7 +231,7 @@ const AirAlarmControl = (props) => { // -------------------------------------------------------- const AirAlarmControlHome = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { mode, atmos_alarm } = data; return ( <> @@ -226,7 +278,7 @@ const AirAlarmControlHome = (props) => { // -------------------------------------------------------- const AirAlarmControlVents = (props) => { - const { data } = useBackend(); + const { data } = useBackend(); const { vents } = data; if (!vents || vents.length === 0) { return 'Nothing to show'; @@ -238,7 +290,7 @@ const AirAlarmControlVents = (props) => { // -------------------------------------------------------- const AirAlarmControlScrubbers = (props) => { - const { data } = useBackend(); + const { data } = useBackend(); const { scrubbers } = data; if (!scrubbers || scrubbers.length === 0) { return 'Nothing to show'; @@ -252,7 +304,7 @@ const AirAlarmControlScrubbers = (props) => { // -------------------------------------------------------- const AirAlarmControlModes = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { modes } = data; if (!modes || modes.length === 0) { return 'Nothing to show'; @@ -276,7 +328,7 @@ const AirAlarmControlModes = (props) => { // -------------------------------------------------------- const AirAlarmControlThresholds = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { thresholds } = data; return (
diff --git a/tgui/packages/tgui/interfaces/AlgaeFarm.jsx b/tgui/packages/tgui/interfaces/AlgaeFarm.tsx similarity index 88% rename from tgui/packages/tgui/interfaces/AlgaeFarm.jsx rename to tgui/packages/tgui/interfaces/AlgaeFarm.tsx index a8a219f82d..3774fdd5ce 100644 --- a/tgui/packages/tgui/interfaces/AlgaeFarm.jsx +++ b/tgui/packages/tgui/interfaces/AlgaeFarm.tsx @@ -12,8 +12,28 @@ import { } from '../components'; import { Window } from '../layouts'; +type Data = { + usePower: number; + materials: { + name: string; + display: string; + qty: number; + max: number; + percent: number; + }[]; + last_flow_rate: number; + last_power_draw: number; + inputDir: string; + outputDir: string; + input: gas; + output: gas; + errorText: string | null; +}; + +type gas = { pressure: number; name: string; percent: number; moles: number }; + export const AlgaeFarm = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { usePower, materials, @@ -31,7 +51,7 @@ export const AlgaeFarm = (props) => { {errorText && ( - + {errorText} diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger.jsx b/tgui/packages/tgui/interfaces/AppearanceChanger.jsx deleted file mode 100644 index 9a7d0fb83b..0000000000 --- a/tgui/packages/tgui/interfaces/AppearanceChanger.jsx +++ /dev/null @@ -1,523 +0,0 @@ -import { sortBy } from 'common/collections'; -import { capitalize, decodeHtmlEntities } from 'common/string'; -import { useState } from 'react'; - -import { useBackend } from '../backend'; -import { - Box, - Button, - ByondUi, - ColorBox, - Flex, - LabeledList, - Section, - Tabs, -} from '../components'; -import { Window } from '../layouts'; - -export const AppearanceChanger = (props) => { - const { act, config, data } = useBackend(); - - const { - name, - specimen, - gender, - gender_id, - hair_style, - facial_hair_style, - ear_style, - tail_style, - wing_style, - markings, - change_race, - change_gender, - change_eye_color, - change_skin_tone, - change_skin_color, - change_hair_color, - change_facial_hair_color, - change_hair, - change_facial_hair, - mapRef, - } = data; - - const { title } = config; - - const change_color = - change_eye_color || - change_skin_tone || - change_skin_color || - change_hair_color || - change_facial_hair_color; - - let firstAccesibleTab = -1; - if (change_race) { - firstAccesibleTab = 0; - } else if (change_gender) { - firstAccesibleTab = 1; - } else if (change_color) { - firstAccesibleTab = 2; - } else if (change_hair) { - firstAccesibleTab = 4; - } else if (change_facial_hair) { - firstAccesibleTab = 5; - } - - const [tabIndex, setTabIndex] = useState(firstAccesibleTab); - - return ( - - -
- - - - {name} - - {specimen} - - - {gender ? capitalize(gender) : 'Not Set'} - - - {gender_id ? capitalize(gender_id) : 'Not Set'} - - - {hair_style ? capitalize(hair_style) : 'Not Set'} - - - {facial_hair_style - ? capitalize(facial_hair_style) - : 'Not Set'} - - - {ear_style ? capitalize(ear_style) : 'Not Set'} - - - {tail_style ? capitalize(tail_style) : 'Not Set'} - - - {wing_style ? capitalize(wing_style) : 'Not Set'} - - - - - - - -
- - {change_race ? ( - setTabIndex(0)}> - Race - - ) : null} - {change_gender ? ( - setTabIndex(1)}> - Gender & Sex - - ) : null} - {change_color ? ( - setTabIndex(2)}> - Colors - - ) : null} - {change_hair ? ( - <> - setTabIndex(3)} - > - Hair - - setTabIndex(5)} - > - Ear - - setTabIndex(6)} - > - Tail - - setTabIndex(7)} - > - Wing - - setTabIndex(8)} - > - Markings - - - ) : null} - {change_facial_hair ? ( - setTabIndex(4)}> - Facial Hair - - ) : null} - - - {change_race && tabIndex === 0 ? : null} - {change_gender && tabIndex === 1 ? : null} - {change_color && tabIndex === 2 ? : null} - {change_hair && tabIndex === 3 ? : null} - {change_facial_hair && tabIndex === 4 ? ( - - ) : null} - {change_hair && tabIndex === 5 ? : null} - {change_hair && tabIndex === 6 ? : null} - {change_hair && tabIndex === 7 ? : null} - {change_hair && tabIndex === 8 ? : null} - -
-
- ); -}; - -const AppearanceChangerSpecies = (props) => { - const { act, data } = useBackend(); - const { species, specimen } = data; - - const sortedSpecies = sortBy((val) => val.specimen)(species || []); - - return ( -
- {sortedSpecies.map((spec) => ( - - ))} -
- ); -}; - -const AppearanceChangerGender = (props) => { - const { act, data } = useBackend(); - - const { gender, gender_id, genders, id_genders } = data; - - return ( -
- - - {genders.map((g) => ( - - ))} - - - {id_genders.map((g) => ( - - ))} - - -
- ); -}; - -const AppearanceChangerColors = (props) => { - const { act, data } = useBackend(); - - const { - change_eye_color, - change_skin_tone, - change_skin_color, - change_hair_color, - change_facial_hair_color, - eye_color, - skin_color, - hair_color, - facial_hair_color, - ears_color, - ears2_color, - tail_color, - tail2_color, - wing_color, - wing2_color, - } = data; - - return ( -
- {change_eye_color ? ( - - - - - ) : null} - {change_skin_tone ? ( - - - - ) : null} - {change_skin_color ? ( - - - - - ) : null} - {change_hair_color ? ( - <> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ) : null} - {change_facial_hair_color ? ( - - - - - ) : null} -
- ); -}; - -const AppearanceChangerHair = (props) => { - const { act, data } = useBackend(); - - const { hair_style, hair_styles } = data; - - return ( -
- {hair_styles.map((hair) => ( - - ))} -
- ); -}; - -const AppearanceChangerFacialHair = (props) => { - const { act, data } = useBackend(); - - const { facial_hair_style, facial_hair_styles } = data; - - return ( -
- {facial_hair_styles.map((hair) => ( - - ))} -
- ); -}; - -const AppearanceChangerEars = (props) => { - const { act, data } = useBackend(); - - const { ear_style, ear_styles } = data; - - return ( -
- - {sortBy((e) => e.name.toLowerCase())(ear_styles).map((ear) => ( - - ))} -
- ); -}; - -const AppearanceChangerTails = (props) => { - const { act, data } = useBackend(); - - const { tail_style, tail_styles } = data; - - return ( -
- - {sortBy((e) => e.name.toLowerCase())(tail_styles).map((tail) => ( - - ))} -
- ); -}; - -const AppearanceChangerWings = (props) => { - const { act, data } = useBackend(); - - const { wing_style, wing_styles } = data; - - return ( -
- - {sortBy((e) => e.name.toLowerCase())(wing_styles).map((wing) => ( - - ))} -
- ); -}; - -const AppearanceChangerMarkings = (props) => { - const { act, data } = useBackend(); - - const { markings } = data; - - return ( -
- - - - - {markings.map((m) => ( - - - - - - - - ))} - -
- ); -}; diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerBody.tsx b/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerBody.tsx new file mode 100644 index 0000000000..66cfcbb886 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerBody.tsx @@ -0,0 +1,139 @@ +import { sortBy } from 'common/collections'; + +import { useBackend } from '../../backend'; +import { Button, LabeledList, Section } from '../../components'; +import { Data, species, styles } from './types'; + +export const AppearanceChangerSpecies = (props) => { + const { act, data } = useBackend(); + const { species, specimen } = data; + + const sortedSpecies = sortBy((val: species) => val.specimen)(species || []); + + return ( +
+ {sortedSpecies.map((spec) => ( + + ))} +
+ ); +}; + +export const AppearanceChangerGender = (props) => { + const { act, data } = useBackend(); + + const { gender, gender_id, genders, id_genders } = data; + + return ( +
+ + + {genders.map((g) => ( + + ))} + + + {id_genders.map((g) => ( + + ))} + + +
+ ); +}; + +export const AppearanceChangerEars = (props) => { + const { act, data } = useBackend(); + + const { ear_style, ear_styles } = data; + + return ( +
+ + {sortBy((e: styles) => e.name.toLowerCase())(ear_styles).map((ear) => ( + + ))} +
+ ); +}; + +export const AppearanceChangerTails = (props) => { + const { act, data } = useBackend(); + + const { tail_style, tail_styles } = data; + + return ( +
+ + {sortBy((e: styles) => e.name.toLowerCase())(tail_styles).map((tail) => ( + + ))} +
+ ); +}; + +export const AppearanceChangerWings = (props) => { + const { act, data } = useBackend(); + + const { wing_style, wing_styles } = data; + + return ( +
+ + {sortBy((e: styles) => e.name.toLowerCase())(wing_styles).map((wing) => ( + + ))} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerDetails.tsx b/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerDetails.tsx new file mode 100644 index 0000000000..c5d2f403b7 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerDetails.tsx @@ -0,0 +1,142 @@ +import { useBackend } from '../../backend'; +import { Box, Button, ColorBox, LabeledList, Section } from '../../components'; +import { Data } from './types'; + +export const AppearanceChangerColors = (props) => { + const { act, data } = useBackend(); + + const { + change_eye_color, + change_skin_tone, + change_skin_color, + change_hair_color, + change_facial_hair_color, + eye_color, + skin_color, + hair_color, + facial_hair_color, + ears_color, + ears2_color, + tail_color, + tail2_color, + wing_color, + wing2_color, + } = data; + + return ( +
+ {change_eye_color ? ( + + + + + ) : ( + '' + )} + {change_skin_tone ? ( + + + + ) : ( + '' + )} + {change_skin_color ? ( + + + + + ) : ( + '' + )} + {change_hair_color ? ( + <> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ) : null} + {change_facial_hair_color ? ( + + + + + ) : null} +
+ ); +}; + +export const AppearanceChangerMarkings = (props) => { + const { act, data } = useBackend(); + + const { markings } = data; + + return ( +
+ + + + + {markings.map((m) => ( + + + + + + + + ))} + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerHairs.tsx b/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerHairs.tsx new file mode 100644 index 0000000000..9e61a2c1a7 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AppearanceChanger/AppearanceChangerHairs.tsx @@ -0,0 +1,45 @@ +import { useBackend } from '../../backend'; +import { Button, Section } from '../../components'; +import { Data } from './types'; + +export const AppearanceChangerHair = (props) => { + const { act, data } = useBackend(); + + const { hair_style, hair_styles } = data; + + return ( +
+ {hair_styles.map((hair) => ( + + ))} +
+ ); +}; + +export const AppearanceChangerFacialHair = (props) => { + const { act, data } = useBackend(); + + const { facial_hair_style, facial_hair_styles } = data; + + return ( +
+ {facial_hair_styles.map((hair) => ( + + ))} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger/index.tsx b/tgui/packages/tgui/interfaces/AppearanceChanger/index.tsx new file mode 100644 index 0000000000..48935191fa --- /dev/null +++ b/tgui/packages/tgui/interfaces/AppearanceChanger/index.tsx @@ -0,0 +1,269 @@ +import { capitalize, decodeHtmlEntities } from 'common/string'; +import { useState } from 'react'; + +import { useBackend } from '../../backend'; +import { + Box, + ByondUi, + Flex, + LabeledList, + Section, + Tabs, +} from '../../components'; +import { Window } from '../../layouts'; +import { + AppearanceChangerEars, + AppearanceChangerGender, + AppearanceChangerSpecies, + AppearanceChangerTails, + AppearanceChangerWings, +} from './AppearanceChangerBody'; +import { + AppearanceChangerColors, + AppearanceChangerMarkings, +} from './AppearanceChangerDetails'; +import { + AppearanceChangerFacialHair, + AppearanceChangerHair, +} from './AppearanceChangerHairs'; +import { Data } from './types'; + +export const AppearanceChanger = (props) => { + const { act, config, data } = useBackend(); + + const { + name, + specimen, + gender, + gender_id, + hair_style, + facial_hair_style, + ear_style, + tail_style, + wing_style, + change_race, + change_gender, + change_eye_color, + change_skin_tone, + change_skin_color, + change_hair_color, + change_facial_hair_color, + change_hair, + change_facial_hair, + mapRef, + } = data; + + const { title } = config; + + const tab: React.JSX.Element[] = []; + + const change_color = + change_eye_color || + change_skin_tone || + change_skin_color || + change_hair_color || + change_facial_hair_color; + + const disabled = ; + + tab[-1] = ; + tab[0] = change_race ? ( + + ) : ( + + ); + tab[1] = change_gender ? ( + + ) : ( + + ); + tab[2] = change_color ? ( + + ) : ( + + ); + tab[3] = change_hair ? ( + + ) : ( + + ); + tab[4] = change_facial_hair ? ( + + ) : ( + + ); + tab[5] = change_hair ? ( + + ) : ( + + ); + tab[6] = change_hair ? ( + + ) : ( + + ); + tab[7] = change_hair ? ( + + ) : ( + + ); + tab[8] = change_hair ? ( + + ) : ( + + ); + + let firstAccesibleTab = -1; + if (change_race) { + firstAccesibleTab = 0; + } else if (change_gender) { + firstAccesibleTab = 1; + } else if (change_color) { + firstAccesibleTab = 2; + } else if (change_hair) { + firstAccesibleTab = 4; + } else if (change_facial_hair) { + firstAccesibleTab = 5; + } + + const [tabIndex, setTabIndex] = useState(firstAccesibleTab); + + return ( + + +
+ + + + {name} + + {specimen} + + + {gender ? capitalize(gender) : 'Not Set'} + + + {gender_id ? capitalize(gender_id) : 'Not Set'} + + + {hair_style ? capitalize(hair_style) : 'Not Set'} + + + {facial_hair_style + ? capitalize(facial_hair_style) + : 'Not Set'} + + + {ear_style ? capitalize(ear_style) : 'Not Set'} + + + {tail_style ? capitalize(tail_style) : 'Not Set'} + + + {wing_style ? capitalize(wing_style) : 'Not Set'} + + + + + + + +
+ + {change_race ? ( + setTabIndex(0)}> + Race + + ) : null} + {change_gender ? ( + setTabIndex(1)}> + Gender & Sex + + ) : null} + {change_color ? ( + setTabIndex(2)}> + Colors + + ) : null} + {change_hair ? ( + <> + setTabIndex(3)} + > + Hair + + setTabIndex(5)} + > + Ear + + setTabIndex(6)} + > + Tail + + setTabIndex(7)} + > + Wing + + setTabIndex(8)} + > + Markings + + + ) : null} + {change_facial_hair ? ( + setTabIndex(4)}> + Facial Hair + + ) : null} + + {tab[tabIndex]} +
+
+ ); +}; + +export const AppearanceChangerDefaultError = (props) => { + return Disabled; +}; diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger/types.ts b/tgui/packages/tgui/interfaces/AppearanceChanger/types.ts new file mode 100644 index 0000000000..4d62e13177 --- /dev/null +++ b/tgui/packages/tgui/interfaces/AppearanceChanger/types.ts @@ -0,0 +1,53 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + name: string; + specimen: string; + species: species[]; + gender: string; + gender_id: string; + hair_style: string; + facial_hair_style: string; + ear_style: string; + ear_styles: styles[]; + wing_style: string; + wing_styles: styles[]; + tail_style: string; + tail_styles: styles[]; + markings: { marking_name: string; marking_color: string }[]; + change_race: BooleanLike; + change_gender: BooleanLike; + genders: genders; + id_genders: genders; + change_eye_color: BooleanLike; + change_skin_tone: BooleanLike; + change_skin_color: BooleanLike; + change_hair_color: BooleanLike; + change_facial_hair_color: BooleanLike; + change_hair: BooleanLike; + change_facial_hair: BooleanLike; + mapRef: string; + eye_color: string; + skin_color: string; + hair_color: string; + facial_hair_color: string; + ears_color: string; + ears2_color: string; + tail_color: string; + tail2_color: string; + wing_color: string; + wing2_color: string; + facial_hair_styles: { facialhairstyle: string }[]; + hair_styles: { hairstyle: string }[]; +}; + +type genders = { gender_name: string; gender_key: string }[]; + +export type styles = { + name: string; + instance: string; + color: boolean; + second_color: boolean; +}; + +export type species = { specimen: string }; diff --git a/tgui/packages/tgui/interfaces/ArcadeBattle.jsx b/tgui/packages/tgui/interfaces/ArcadeBattle.tsx similarity index 93% rename from tgui/packages/tgui/interfaces/ArcadeBattle.jsx rename to tgui/packages/tgui/interfaces/ArcadeBattle.tsx index 9ffead3baf..f1300c7338 100644 --- a/tgui/packages/tgui/interfaces/ArcadeBattle.jsx +++ b/tgui/packages/tgui/interfaces/ArcadeBattle.tsx @@ -1,3 +1,5 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, @@ -9,18 +11,27 @@ import { } from '../components'; import { Window } from '../layouts'; +type Data = { + name: string; + temp: string; + enemyAction: string; + enemyName: string; + playerHP: number; + playerMP: number; + enemyHP: number; + gameOver: BooleanLike; +}; + export const ArcadeBattle = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { - name, temp, enemyAction, enemyName, playerHP, playerMP, enemyHP, - enemyMP, gameOver, } = data; diff --git a/tgui/packages/tgui/interfaces/AreaScrubberControl.jsx b/tgui/packages/tgui/interfaces/AreaScrubberControl.tsx similarity index 88% rename from tgui/packages/tgui/interfaces/AreaScrubberControl.jsx rename to tgui/packages/tgui/interfaces/AreaScrubberControl.tsx index e9aa25cc8a..22e404dc84 100644 --- a/tgui/packages/tgui/interfaces/AreaScrubberControl.jsx +++ b/tgui/packages/tgui/interfaces/AreaScrubberControl.tsx @@ -1,3 +1,4 @@ +import { BooleanLike } from 'common/react'; import { toTitleCase } from 'common/string'; import { useState } from 'react'; @@ -5,10 +6,24 @@ import { useBackend } from '../backend'; import { Box, Button, Flex, LabeledList, Section } from '../components'; import { Window } from '../layouts'; -export const AreaScrubberControl = (props) => { - const { act, data } = useBackend(); +type scrubber = { + id: string; + name: string; + on: BooleanLike; + pressure: number; + flow_rate: number; + load: number; + area: string; +}; - const [showArea, setShowArea] = useState(false); +type Data = { + scrubbers: scrubber[]; +}; + +export const AreaScrubberControl = (props) => { + const { act, data } = useBackend(); + + const [showArea, setShowArea] = useState(false); const { scrubbers } = data; @@ -83,7 +98,7 @@ export const AreaScrubberControl = (props) => { ); }; -const BigScrubber = (props) => { +const BigScrubber = (props: { scrubber: scrubber; showArea: boolean }) => { const { act } = useBackend(); const { scrubber, showArea } = props; diff --git a/tgui/packages/tgui/interfaces/AssemblyProx.jsx b/tgui/packages/tgui/interfaces/AssemblyProx.tsx similarity index 81% rename from tgui/packages/tgui/interfaces/AssemblyProx.jsx rename to tgui/packages/tgui/interfaces/AssemblyProx.tsx index 7e1761bef7..a08e6f768a 100644 --- a/tgui/packages/tgui/interfaces/AssemblyProx.jsx +++ b/tgui/packages/tgui/interfaces/AssemblyProx.tsx @@ -1,12 +1,21 @@ import { round } from 'common/math'; +import { BooleanLike } from 'common/react'; import { useBackend } from '../backend'; import { Button, LabeledList, NumberInput, Section } from '../components'; import { formatTime } from '../format'; import { Window } from '../layouts'; +type Data = { + timing: number; + time: number; + range: number; + maxRange: number; + scanning: BooleanLike; +}; + export const AssemblyProx = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { timing, time, range, maxRange, scanning } = data; return ( @@ -31,8 +40,8 @@ export const AssemblyProx = (props) => { value={time} minValue={0} maxValue={600} - format={(val) => formatTime(round(val * 10))} - onDrag={(e, val) => act('set_time', { time: val })} + format={(val: number) => formatTime(round(val * 10, 0))} + onDrag={(e, val: string) => act('set_time', { time: val })} /> @@ -44,7 +53,7 @@ export const AssemblyProx = (props) => { minValue={1} value={range} maxValue={maxRange} - onDrag={(e, val) => act('range', { range: val })} + onDrag={(e, val: string) => act('range', { range: val })} /> diff --git a/tgui/packages/tgui/interfaces/AssemblyTimer.jsx b/tgui/packages/tgui/interfaces/AssemblyTimer.tsx similarity index 81% rename from tgui/packages/tgui/interfaces/AssemblyTimer.jsx rename to tgui/packages/tgui/interfaces/AssemblyTimer.tsx index 02d6f8b0e6..9fd6c8fb94 100644 --- a/tgui/packages/tgui/interfaces/AssemblyTimer.jsx +++ b/tgui/packages/tgui/interfaces/AssemblyTimer.tsx @@ -5,8 +5,10 @@ import { Button, LabeledList, NumberInput, Section } from '../components'; import { formatTime } from '../format'; import { Window } from '../layouts'; +type Data = { timing: number; time: number }; + export const AssemblyTimer = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { timing, time } = data; return ( @@ -31,8 +33,8 @@ export const AssemblyTimer = (props) => { value={time} minValue={0} maxValue={600} - format={(val) => formatTime(round(val * 10))} - onDrag={(e, val) => act('set_time', { time: val })} + format={(val: number) => formatTime(round(val * 10, 0))} + onDrag={(e, val: string) => act('set_time', { time: val })} /> diff --git a/tgui/packages/tgui/interfaces/AtmosAlertConsole.jsx b/tgui/packages/tgui/interfaces/AtmosAlertConsole.tsx similarity index 74% rename from tgui/packages/tgui/interfaces/AtmosAlertConsole.jsx rename to tgui/packages/tgui/interfaces/AtmosAlertConsole.tsx index c722c954c0..b2658aa66b 100644 --- a/tgui/packages/tgui/interfaces/AtmosAlertConsole.jsx +++ b/tgui/packages/tgui/interfaces/AtmosAlertConsole.tsx @@ -2,19 +2,24 @@ import { useBackend } from '../backend'; import { Button, Section } from '../components'; import { Window } from '../layouts'; +type alarm = { name: string; ref: string }; + +type Data = { priority_alarms: alarm[]; minor_alarms: alarm[] }; + export const AtmosAlertConsole = (props) => { - const { act, data } = useBackend(); - const priorityAlerts = data.priority_alarms || []; - const minorAlerts = data.minor_alarms || []; + const { act, data } = useBackend(); + + const { priority_alarms = [], minor_alarms = [] } = data; + return (
    - {priorityAlerts.length === 0 && ( + {priority_alarms.length === 0 && (
  • No Priority Alerts
  • )} - {priorityAlerts.map((alert) => ( + {priority_alarms.map((alert) => (
  • ))} - {minorAlerts.length === 0 && ( + {minor_alarms.length === 0 && (
  • No Minor Alerts
  • )} - {minorAlerts.map((alert) => ( + {minor_alarms.map((alert) => (
  • val + ' L/s'} /> + onDrag={(e, value: number) => act('rate', { rate: value, }) @@ -49,7 +61,7 @@ export const AtmosFilter = (props) => { - {filterTypes.map((filter) => ( + {filter_types.map((filter) => ( + onChange={(e, value: number) => act('pressure', { pressure: value, }) @@ -36,7 +59,7 @@ export const AtmosMixer = (props) => { { + const { act } = useBackend(); + const { bodyrecords } = props; + return ( +
    act('menu', { menu: 'Main' })}> + Back + + } + > + {bodyrecords + ? bodyrecords.map((record) => ( + + )) + : ''} +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerMain.tsx b/tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerMain.tsx new file mode 100644 index 0000000000..5da0f60516 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerMain.tsx @@ -0,0 +1,16 @@ +import { useBackend } from '../../backend'; +import { Button, Section } from '../../components'; + +export const BodyDesignerMain = (props) => { + const { act } = useBackend(); + return ( +
    + + +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerOOCNotes.tsx b/tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerOOCNotes.tsx new file mode 100644 index 0000000000..f57b2f868c --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerOOCNotes.tsx @@ -0,0 +1,29 @@ +import { useBackend } from '../../backend'; +import { Button, Section } from '../../components'; +import { activeBodyRecord } from './types'; + +export const BodyDesignerOOCNotes = (props: { + activeBodyRecord: activeBodyRecord; +}) => { + const { act } = useBackend(); + const { activeBodyRecord } = props; + return ( +
    act('menu', { menu: 'Specific Record' })} + > + Back + + } + style={{ wordBreak: 'break-all' }} + > + {(activeBodyRecord && activeBodyRecord.booc) || + 'ERROR: Body record not found!'} +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyDesigner.jsx b/tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerSpecificRecord.tsx similarity index 66% rename from tgui/packages/tgui/interfaces/BodyDesigner.jsx rename to tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerSpecificRecord.tsx index 3a9fcd4483..b6fd5e67f4 100644 --- a/tgui/packages/tgui/interfaces/BodyDesigner.jsx +++ b/tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerSpecificRecord.tsx @@ -1,6 +1,6 @@ import { capitalize } from 'common/string'; -import { useBackend } from '../backend'; +import { useBackend } from '../../backend'; import { Box, Button, @@ -9,115 +9,15 @@ import { Flex, LabeledList, Section, -} from '../components'; -import { Window } from '../layouts'; +} from '../../components'; +import { activeBodyRecord } from './types'; -export const BodyDesigner = (props) => { - const { act, data } = useBackend(); - - const { menu, disk, diskStored, activeBodyRecord } = data; - - let body = MenuToTemplate[menu]; - - return ( - - - {disk ? ( - - - - - - ) : null} - {body} - - - ); -}; - -const BodyDesignerMain = (props) => { - const { act, data } = useBackend(); - return ( -
    - - -
    - ); -}; - -const BodyDesignerBodyRecords = (props) => { - const { act, data } = useBackend(); - const { bodyrecords } = data; - return ( -
    act('menu', { menu: 'Main' })}> - Back - - } - > - {bodyrecords - ? bodyrecords.map((record) => ( - - )) - : ''} -
    - ); -}; - -const BodyDesignerStockRecords = (props) => { - const { act, data } = useBackend(); - const { stock_bodyrecords } = data; - return ( -
    act('menu', { menu: 'Main' })}> - Back - - } - > - {stock_bodyrecords.map((record) => ( - - ))} -
    - ); -}; - -const BodyDesignerSpecificRecord = (props) => { - const { act, data } = useBackend(); - const { activeBodyRecord, mapRef } = data; +export const BodyDesignerSpecificRecord = (props: { + activeBodyRecord: activeBodyRecord; + mapRef: string; +}) => { + const { act } = useBackend(); + const { activeBodyRecord, mapRef } = props; return activeBodyRecord ? ( @@ -325,35 +225,3 @@ const BodyDesignerSpecificRecord = (props) => { ERROR: Record Not Found! ); }; - -const BodyDesignerOOCNotes = (props) => { - const { act, data } = useBackend(); - const { activeBodyRecord } = data; - return ( -
    act('menu', { menu: 'Specific Record' })} - > - Back - - } - style={{ 'word-break': 'break-all' }} - > - {(activeBodyRecord && activeBodyRecord.booc) || - 'ERROR: Body record not found!'} -
    - ); -}; - -const MenuToTemplate = { - Main: , - 'Body Records': , - 'Stock Records': , - 'Specific Record': , - 'OOC Notes': , -}; diff --git a/tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerStockRecords.tsx b/tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerStockRecords.tsx new file mode 100644 index 0000000000..71195d4f6d --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyDesigner/BodyDesignerStockRecords.tsx @@ -0,0 +1,29 @@ +import { useBackend } from '../../backend'; +import { Button, Section } from '../../components'; + +export const BodyDesignerStockRecords = (props: { + stock_bodyrecords: string[]; +}) => { + const { act } = useBackend(); + const { stock_bodyrecords } = props; + return ( +
    act('menu', { menu: 'Main' })}> + Back + + } + > + {stock_bodyrecords.map((record) => ( + + ))} +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyDesigner/index.tsx b/tgui/packages/tgui/interfaces/BodyDesigner/index.tsx new file mode 100644 index 0000000000..be2178696f --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyDesigner/index.tsx @@ -0,0 +1,71 @@ +import { useBackend } from '../../backend'; +import { Box, Button } from '../../components'; +import { Window } from '../../layouts'; +import { BodyDesignerBodyRecords } from './BodyDesignerBodyRecords'; +import { BodyDesignerMain } from './BodyDesignerMain'; +import { BodyDesignerOOCNotes } from './BodyDesignerOOCNotes'; +import { BodyDesignerSpecificRecord } from './BodyDesignerSpecificRecord'; +import { BodyDesignerStockRecords } from './BodyDesignerStockRecords'; +import { Data } from './types'; + +export const BodyDesigner = (props) => { + const { act, data } = useBackend(); + + const { + menu, + disk, + diskStored, + activeBodyRecord, + stock_bodyrecords, + bodyrecords, + mapRef, + } = data; + + const MenuToTemplate = { + Main: , + 'Body Records': , + 'Stock Records': ( + + ), + 'Specific Record': ( + + ), + 'OOC Notes': , + }; + + let body = MenuToTemplate[menu]; + + return ( + + + {disk ? ( + + + + + + ) : ( + '' + )} + {body} + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyDesigner/types.ts b/tgui/packages/tgui/interfaces/BodyDesigner/types.ts new file mode 100644 index 0000000000..3ec032ee1e --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyDesigner/types.ts @@ -0,0 +1,63 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + mapRef: string; + bodyrecords: bodyrecord[]; + stock_bodyrecords: string[]; + activeBodyRecord: activeBodyRecord; + menu: string; + temp: { + styleHref: string; + style: string; + color: string | undefined; + colorHref: string | undefined; + color2?: string | undefined; + colorHref2?: string | undefined; + }; + disk: BooleanLike; + diskStored: BooleanLike; +}; + +export type bodyrecord = { name: string; recref: string }; + +export type activeBodyRecord = { + real_name: string; + speciesname: string; + gender: string; + synthetic: string; + locked: string; + scale: string; + booc: string; + styles: { + Ears: colourableStyle; + Tail: colourableStyle; + Wing: colourableStyle; + Hair: simpleStyle; + Facial: simpleStyle; + Eyes: colourStyle; + 'Body Color': colourStyle; + Bodytype: { styleHref: string; style: string }; + }; + markings: { name: Record }; // Record entries match BP regions +}; + +type colourableStyle = { + styleHref: string; + style: string; + color: string | undefined; + colorHref: string | undefined; + color2: string | undefined; + colorHref2: string | undefined; +}; + +type simpleStyle = { + styleHref: string; + style: string; + colorHref: string; + color: string; +}; + +type colourStyle = { + colorHref: string; + color: string; +}; diff --git a/tgui/packages/tgui/interfaces/BodyScanner.jsx b/tgui/packages/tgui/interfaces/BodyScanner.jsx deleted file mode 100644 index 9afdb71823..0000000000 --- a/tgui/packages/tgui/interfaces/BodyScanner.jsx +++ /dev/null @@ -1,500 +0,0 @@ -import { round } from 'common/math'; - -import { useBackend } from '../backend'; -import { - AnimatedNumber, - Box, - Button, - Flex, - Icon, - LabeledList, - ProgressBar, - Section, - Table, - Tooltip, -} from '../components'; -import { Window } from '../layouts'; - -const stats = [ - ['good', 'Alive'], - ['average', 'Unconscious'], - ['bad', 'DEAD'], -]; - -const abnormalities = [ - [ - 'hasBorer', - 'bad', - (occupant) => - 'Large growth detected in frontal lobe,' + - ' possibly cancerous. Surgical removal is recommended.', - ], - ['hasVirus', 'bad', (occupant) => 'Viral pathogen detected in blood stream.'], - ['blind', 'average', (occupant) => 'Cataracts detected.'], - [ - 'colourblind', - 'average', - (occupant) => 'Photoreceptor abnormalities detected.', - ], - ['nearsighted', 'average', (occupant) => 'Retinal misalignment detected.'], - /* VOREStation Add */ - [ - 'humanPrey', - 'average', - (occupant) => { - return 'Foreign Humanoid(s) detected: ' + occupant.humanPrey; - }, - ], - [ - 'livingPrey', - 'average', - (occupant) => { - return 'Foreign Creature(s) detected: ' + occupant.livingPrey; - }, - ], - [ - 'objectPrey', - 'average', - (occupant) => { - return 'Foreign Object(s) detected: ' + occupant.objectPrey; - }, - ], - /* VOREStation Add End */ -]; - -const damages = [ - ['Respiratory', 'oxyLoss'], - ['Brain', 'brainLoss'], - ['Toxin', 'toxLoss'], - ['Radiation', 'radLoss'], - ['Brute', 'bruteLoss'], - ['Genetic', 'cloneLoss'], - ['Burn', 'fireLoss'], - ['Paralysis', 'paralysis'], -]; - -const damageRange = { - average: [0.25, 0.5], - bad: [0.5, Infinity], -}; - -const mapTwoByTwo = (a, c) => { - let result = []; - for (let i = 0; i < a.length; i += 2) { - result.push(c(a[i], a[i + 1], i)); - } - return result; -}; - -const reduceOrganStatus = (A) => { - return A.length > 0 - ? A.reduce((a, s) => - a === null ? ( - s - ) : ( - <> - {a} - {!!s && {s}} - - ), - ) - : null; -}; - -const germStatus = (i) => { - if (i > 100) { - if (i < 300) { - return 'mild infection'; - } - if (i < 400) { - return 'mild infection+'; - } - if (i < 500) { - return 'mild infection++'; - } - if (i < 700) { - return 'acute infection'; - } - if (i < 800) { - return 'acute infection+'; - } - if (i < 900) { - return 'acute infection++'; - } - if (i >= 900) { - return 'septic'; - } - } - - return ''; -}; - -export const BodyScanner = (props) => { - const { data } = useBackend(); - const { occupied, occupant = {} } = data; - const body = occupied ? ( - - ) : ( - - ); - return ( - - - {body} - - - ); -}; - -const BodyScannerMain = (props) => { - const { occupant } = props; - return ( - - - - - - - - - ); -}; - -const BodyScannerMainOccupant = (props) => { - const { act, data } = useBackend(); - const { occupant } = data; - return ( -
    - - - - } - > - - {occupant.name} - - - - - {stats[occupant.stat][1]} - - - - °C,  - - °F - - - {' '} - units ( - - %) - - {/* VOREStation Add */} - - {round(data.occupant.weight) + - 'lbs, ' + - round(data.occupant.weight / 2.20463) + - 'kgs'} - - {/* VOREStation Add End */} - -
    - ); -}; - -const BodyScannerMainReagents = (props) => { - const { occupant } = props; - - return ( - <> -
    - {occupant.reagents ? ( -
- - Reagent - Amount - - {occupant.reagents.map((reagent) => ( - - {reagent.name} - - {reagent.amount} Units{' '} - {reagent.overdose ? OVERDOSING : null} - - - ))} -
- ) : ( - No Blood Reagents Detected - )} -
-
- {occupant.ingested ? ( - - - Reagent - Amount - - {occupant.ingested.map((reagent) => ( - - {reagent.name} - - {reagent.amount} Units{' '} - {reagent.overdose ? OVERDOSING : null} - - - ))} -
- ) : ( - No Stomach Reagents Detected - )} -
- - ); -}; - -const BodyScannerMainAbnormalities = (props) => { - const { occupant } = props; - - let hasAbnormalities = - occupant.hasBorer || - occupant.blind || - occupant.colourblind || - occupant.nearsighted || - occupant.hasVirus; - - /* VOREStation Add */ - hasAbnormalities = - hasAbnormalities || - occupant.humanPrey || - occupant.livingPrey || - occupant.objectPrey; - /* VOREStation Add End */ - - if (!hasAbnormalities) { - return ( -
- No abnormalities found. -
- ); - } - - return ( -
- {abnormalities.map((a, i) => { - if (occupant[a[0]]) { - return ( - - {a[2](occupant)} - - ); - } - })} -
- ); -}; - -const BodyScannerMainDamage = (props) => { - const { occupant } = props; - return ( -
- - {mapTwoByTwo(damages, (d1, d2, i) => ( - <> - - {d1[0]}: - {!!d2 && d2[0] + ':'} - - - - - - - {!!d2 && } - - - - ))} -
-
- ); -}; - -const BodyScannerMainDamageBar = (props) => { - return ( - - {round(props.value, 0)} - - ); -}; - -const BodyScannerMainOrgansExternal = (props) => { - if (props.organs.length === 0) { - return ( -
- N/A -
- ); - } - - return ( -
- - - Name - Damage - Injuries - - {props.organs.map((o, i) => ( - - {o.name} - - 0 && '0.5rem'} - value={o.totalLoss / 100} - ranges={damageRange} - > - - {!!o.bruteLoss && ( - - - {round(o.bruteLoss, 0)}  - - - )} - {!!o.fireLoss && ( - - - {round(o.fireLoss, 0)} - - - )} - - {round(o.totalLoss, 0)} - - - - - {reduceOrganStatus([ - o.internalBleeding && 'Internal bleeding', - !!o.status.bleeding && 'External bleeding', - o.lungRuptured && 'Ruptured lung', - o.destroyed && 'Destroyed', - !!o.status.broken && o.status.broken, - germStatus(o.germ_level), - !!o.open && 'Open incision', - ])} - - - {reduceOrganStatus([ - !!o.status.splinted && 'Splinted', - !!o.status.robotic && 'Robotic', - !!o.status.dead && DEAD, - ])} - {reduceOrganStatus( - o.implants.map((s) => (s.known ? s.name : 'Unknown object')), - )} - - - - ))} -
-
- ); -}; - -const BodyScannerMainOrgansInternal = (props) => { - if (props.organs.length === 0) { - return ( -
- N/A -
- ); - } - - return ( -
- - - Name - Damage - Injuries - - {props.organs.map((o, i) => ( - - {o.name} - - 0 && '0.5rem'} - ranges={damageRange} - > - {round(o.damage, 0)} - - - - - {reduceOrganStatus([ - germStatus(o.germ_level), - !!o.inflamed && 'Appendicitis detected.', - ])} - - - {reduceOrganStatus([ - o.robotic === 1 && 'Robotic', - o.robotic === 2 && 'Assisted', - !!o.dead && DEAD, - ])} - - - - ))} -
-
- ); -}; - -const BodyScannerEmpty = () => { - return ( -
- - - -
- No occupant detected. -
-
-
- ); -}; diff --git a/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerEmpty.tsx b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerEmpty.tsx new file mode 100644 index 0000000000..e6f0f4bae9 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerEmpty.tsx @@ -0,0 +1,15 @@ +import { Flex, Icon, Section } from '../../components'; + +export const BodyScannerEmpty = () => { + return ( +
+ + + +
+ No occupant detected. +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMain.tsx b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMain.tsx new file mode 100644 index 0000000000..28237b0b04 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMain.tsx @@ -0,0 +1,22 @@ +import { Box } from '../../components'; +import { BodyScannerMainAbnormalities } from './BodyScannerMainAbnormalities'; +import { BodyScannerMainDamage } from './BodyScannerMainDamage'; +import { BodyScannerMainOccupant } from './BodyScannerMainOccupant'; +import { BodyScannerMainOrgansExternal } from './BodyScannerMainOrgansExternal'; +import { BodyScannerMainOrgansInternal } from './BodyScannerMainOrgansInternal'; +import { BodyScannerMainReagents } from './BodyScannerMainReagents'; +import { occupant } from './types'; + +export const BodyScannerMain = (props: { occupant: occupant }) => { + const { occupant } = props; + return ( + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainAbnormalities.tsx b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainAbnormalities.tsx new file mode 100644 index 0000000000..e68604d909 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainAbnormalities.tsx @@ -0,0 +1,42 @@ +import { Box, Section } from '../../components'; +import { abnormalities } from './constants'; +import { occupant } from './types'; + +export const BodyScannerMainAbnormalities = (props: { occupant: occupant }) => { + const { occupant } = props; + + let hasAbnormalities = + occupant.hasBorer || + occupant.blind || + occupant.colourblind || + occupant.nearsighted || + occupant.hasVirus; + + hasAbnormalities = + hasAbnormalities || + occupant.humanPrey || + occupant.livingPrey || + occupant.objectPrey; + + if (!hasAbnormalities) { + return ( +
+ No abnormalities found. +
+ ); + } + + return ( +
+ {abnormalities.map((a, i) => { + if (occupant[a[0] as string]) { + return ( + + {(a[2] as (occupant: occupant) => string)(occupant)} + + ); + } + })} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainDamage.tsx b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainDamage.tsx new file mode 100644 index 0000000000..6b84636138 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainDamage.tsx @@ -0,0 +1,54 @@ +import { toFixed } from 'common/math'; + +import { ProgressBar, Section, Table } from '../../components'; +import { damageRange, damages } from './constants'; +import { mapTwoByTwo } from './functions'; +import { occupant } from './types'; + +export const BodyScannerMainDamage = (props: { occupant: occupant }) => { + const { occupant } = props; + return ( +
+ + {mapTwoByTwo(damages, (d1: string[], d2: string[], i: number) => ( + <> + + {d1[0]}: + {!!d2 && d2[0] + ':'} + + + + + + + {!!d2 && } + + + + ))} +
+
+ ); +}; + +const BodyScannerMainDamageBar = (props: { + value: number; + marginBottom?: boolean; +}) => { + const { value, marginBottom } = props; + return ( + + {toFixed(value)} + + ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainOccupant.tsx b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainOccupant.tsx new file mode 100644 index 0000000000..95f54a5cd9 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainOccupant.tsx @@ -0,0 +1,81 @@ +import { toFixed } from 'common/math'; + +import { useBackend } from '../../backend'; +import { + AnimatedNumber, + Button, + LabeledList, + ProgressBar, + Section, +} from '../../components'; +import { stats } from './constants'; +import { occupant } from './types'; + +export const BodyScannerMainOccupant = (props: { occupant: occupant }) => { + const { act } = useBackend(); + const { occupant } = props; + return ( +
+ + + + } + > + + {occupant.name} + + + + + {stats[occupant.stat][1]} + + + toFixed(value)} + /> + °C,  + toFixed(value)} + /> + °F + + + toFixed(value)} + /> + units ( + toFixed(value)} + /> + %) + + + {toFixed(occupant.weight) + + 'lbs, ' + + toFixed(occupant.weight / 2.20463) + + 'kgs'} + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainOrgansExternal.tsx b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainOrgansExternal.tsx new file mode 100644 index 0000000000..cd32c84a4a --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainOrgansExternal.tsx @@ -0,0 +1,99 @@ +import { toFixed } from 'common/math'; + +import { + Box, + Icon, + ProgressBar, + Section, + Table, + Tooltip, +} from '../../components'; +import { damageRange } from './constants'; +import { germStatus, reduceOrganStatus } from './functions'; +import { externalOrgan } from './types'; + +export const BodyScannerMainOrgansExternal = (props: { + organs: externalOrgan[]; +}) => { + const { organs } = props; + + if (organs.length === 0) { + return ( +
+ N/A +
+ ); + } + + return ( +
+ + + Name + Damage + Injuries + + {organs.map((o, i) => ( + + {o.name} + + 0 && '0.5rem'} + value={o.totalLoss / 100} + ranges={damageRange} + > + + {!!o.bruteLoss && ( + + + {toFixed(o.bruteLoss)}  + + + )} + {!!o.fireLoss && ( + + + {toFixed(o.fireLoss)} + + + )} + + {toFixed(o.totalLoss)} + + + + + {reduceOrganStatus([ + o.internalBleeding && 'Internal bleeding', + !!o.status.bleeding && 'External bleeding', + o.lungRuptured && 'Ruptured lung', + o.status.destroyed && 'Destroyed', + !!o.status.broken && o.status.broken, + germStatus(o.germ_level), + !!o.open && 'Open incision', + ])} + + + {reduceOrganStatus([ + !!o.status.splinted && 'Splinted', + !!o.status.robotic && 'Robotic', + !!o.status.dead && DEAD, + ])} + {reduceOrganStatus( + o.implants.map((s) => (s.known ? s.name : 'Unknown object')), + )} + + + + ))} +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainOrgansInternal.tsx b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainOrgansInternal.tsx new file mode 100644 index 0000000000..af44217f2d --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainOrgansInternal.tsx @@ -0,0 +1,63 @@ +import { toFixed } from 'common/math'; + +import { Box, ProgressBar, Section, Table } from '../../components'; +import { damageRange } from './constants'; +import { germStatus, reduceOrganStatus } from './functions'; +import { internalOrgan } from './types'; + +export const BodyScannerMainOrgansInternal = (props: { + organs: internalOrgan[]; +}) => { + const { organs } = props; + + if (organs.length === 0) { + return ( +
+ N/A +
+ ); + } + + return ( +
+ + + Name + Damage + Injuries + + {organs.map((o, i) => ( + + {o.name} + + 0 && '0.5rem'} + ranges={damageRange} + > + {toFixed(o.damage)} + + + + + {reduceOrganStatus([ + germStatus(o.germ_level), + !!o.inflamed && 'Appendicitis detected.', + ])} + + + {reduceOrganStatus([ + o.robotic === 1 && 'Robotic', + o.robotic === 2 && 'Assisted', + !!o.dead && DEAD, + ])} + + + + ))} +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainReagents.tsx b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainReagents.tsx new file mode 100644 index 0000000000..922cb4059a --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/BodyScannerMainReagents.tsx @@ -0,0 +1,53 @@ +import { Box, Section, Table } from '../../components'; +import { occupant } from './types'; + +export const BodyScannerMainReagents = (props: { occupant: occupant }) => { + const { occupant } = props; + + return ( + <> +
+ {occupant.reagents ? ( + + + Reagent + Amount + + {occupant.reagents.map((reagent) => ( + + {reagent.name} + + {reagent.amount} Units{' '} + {reagent.overdose ? OVERDOSING : null} + + + ))} +
+ ) : ( + No Blood Reagents Detected + )} +
+
+ {occupant.ingested ? ( + + + Reagent + Amount + + {occupant.ingested.map((reagent) => ( + + {reagent.name} + + {reagent.amount} Units{' '} + {reagent.overdose ? OVERDOSING : null} + + + ))} +
+ ) : ( + No Stomach Reagents Detected + )} +
+ + ); +}; diff --git a/tgui/packages/tgui/interfaces/BodyScanner/constants.ts b/tgui/packages/tgui/interfaces/BodyScanner/constants.ts new file mode 100644 index 0000000000..14dfe60770 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/constants.ts @@ -0,0 +1,62 @@ +import { occupant } from './types'; + +export const stats: string[][] = [ + ['good', 'Alive'], + ['average', 'Unconscious'], + ['bad', 'DEAD'], +]; + +export const abnormalities: (string | ((occupant: occupant) => string))[][] = [ + [ + 'hasBorer', + 'bad', + (occupant) => + 'Large growth detected in frontal lobe,' + + ' possibly cancerous. Surgical removal is recommended.', + ], + ['hasVirus', 'bad', (occupant) => 'Viral pathogen detected in blood stream.'], + ['blind', 'average', (occupant) => 'Cataracts detected.'], + [ + 'colourblind', + 'average', + (occupant) => 'Photoreceptor abnormalities detected.', + ], + ['nearsighted', 'average', (occupant) => 'Retinal misalignment detected.'], + [ + 'humanPrey', + 'average', + (occupant) => { + return 'Foreign Humanoid(s) detected: ' + occupant.humanPrey; + }, + ], + [ + 'livingPrey', + 'average', + (occupant) => { + return 'Foreign Creature(s) detected: ' + occupant.livingPrey; + }, + ], + [ + 'objectPrey', + 'average', + (occupant) => { + return 'Foreign Object(s) detected: ' + occupant.objectPrey; + }, + ], +]; + +export const damages: string[][] = [ + ['Respiratory', 'oxyLoss'], + ['Brain', 'brainLoss'], + ['Toxin', 'toxLoss'], + ['Radiation', 'radLoss'], + ['Brute', 'bruteLoss'], + ['Genetic', 'cloneLoss'], + ['Burn', 'fireLoss'], + ['Paralysis', 'paralysis'], +]; + +export const damageRange: Record = { + average: [0.25, 0.5], + bad: [0.5, Infinity], +}; diff --git a/tgui/packages/tgui/interfaces/BodyScanner/functions.tsx b/tgui/packages/tgui/interfaces/BodyScanner/functions.tsx new file mode 100644 index 0000000000..3c43d892f0 --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/functions.tsx @@ -0,0 +1,58 @@ +import { BooleanLike } from 'common/react'; + +import { Box } from '../../components'; + +/* + */ +export function mapTwoByTwo(a: any[][], c: any) { + let result: any[] = []; + for (let i = 0; i < a.length; i += 2) { + result.push(c(a[i], a[i + 1], i)); + } + return result; +} + +export function reduceOrganStatus( + A: (string | BooleanLike | React.ReactElement)[], +) { + return A.length > 0 + ? A.reduce((a, s) => + a === null ? ( + s + ) : ( + <> + {a} + {!!s && {s}} + + ), + ) + : null; +} + +export function germStatus(i: number): string { + if (i > 100) { + if (i < 300) { + return 'mild infection'; + } + if (i < 400) { + return 'mild infection+'; + } + if (i < 500) { + return 'mild infection++'; + } + if (i < 700) { + return 'acute infection'; + } + if (i < 800) { + return 'acute infection+'; + } + if (i < 900) { + return 'acute infection++'; + } + if (i >= 900) { + return 'septic'; + } + } + + return ''; +} diff --git a/tgui/packages/tgui/interfaces/BodyScanner/index.tsx b/tgui/packages/tgui/interfaces/BodyScanner/index.tsx new file mode 100644 index 0000000000..d44bc0d78b --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/index.tsx @@ -0,0 +1,23 @@ +import { useBackend } from '../../backend'; +import { Window } from '../../layouts'; +import { BodyScannerEmpty } from './BodyScannerEmpty'; +import { BodyScannerMain } from './BodyScannerMain'; +import { Data, occupant } from './types'; + +export const BodyScanner = (props) => { + const { data } = useBackend(); + const { occupied, occupant = {} as occupant } = data; + const body = occupied ? ( + + ) : ( + + ); + return ( + + + {body} + + + ); +}; +6; diff --git a/tgui/packages/tgui/interfaces/BodyScanner/types.ts b/tgui/packages/tgui/interfaces/BodyScanner/types.ts new file mode 100644 index 0000000000..45aacd61ce --- /dev/null +++ b/tgui/packages/tgui/interfaces/BodyScanner/types.ts @@ -0,0 +1,77 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + occupied: BooleanLike; + occupant: occupant; +}; + +export type occupant = { + name: string; + stat: number; + health: number; + maxHealth: number; + hasVirus: number; + bruteLoss: number; + oxyLoss: number; + toxLoss: number; + fireLoss: number; + radLoss: number; + cloneLoss: number; + brainLoss: number; + paralysis: number; + paralysisSeconds: number; + bodyTempC: number; + bodyTempF: number; + hasBorer: BooleanLike; + colourblind: BooleanLike; + blood: { volume: number; percent: number }; + reagents: reagent[]; + ingested: reagent[]; + extOrgan: externalOrgan[]; + intOrgan: internalOrgan[]; + blind: BooleanLike; + nearsighted: BooleanLike; + livingPrey: number; + humanPrey: number; + objectPrey: number; + weight: number; +}; + +type reagent = { name: string; amount: number; overdose: BooleanLike }; + +export type internalOrgan = { + name: string; + desc: string | null; + germ_level: number; + damage: number; + maxHealth: number; + bruised: number; + broken: number; + robotic: BooleanLike; + dead: BooleanLike; + inflamed: BooleanLike; +}; + +export type externalOrgan = { + name: string; + open: BooleanLike; + germ_level: number; + bruteLoss: number; + fireLoss: number; + totalLoss: number; + maxHealth: number; + bruised: number; + broken: number; + implants: { name: string; known: BooleanLike }[]; + implants_len: number; + status: { + destroyed: BooleanLike; + broken: string; + robotic: BooleanLike; + splinted: BooleanLike; + bleeding: BooleanLike; + dead: BooleanLike; + }; + lungRuptured: BooleanLike; + internalBleeding: BooleanLike; +}; diff --git a/tgui/packages/tgui/interfaces/BombTester.jsx b/tgui/packages/tgui/interfaces/BombTester.tsx similarity index 88% rename from tgui/packages/tgui/interfaces/BombTester.jsx rename to tgui/packages/tgui/interfaces/BombTester.tsx index c1e1a2afe9..1fe140210f 100644 --- a/tgui/packages/tgui/interfaces/BombTester.jsx +++ b/tgui/packages/tgui/interfaces/BombTester.tsx @@ -1,11 +1,23 @@ +import { BooleanLike } from 'common/react'; import { Component } from 'react'; import { useBackend } from '../backend'; import { Box, Button, Icon, LabeledList, Section, Slider } from '../components'; import { Window } from '../layouts'; +type Data = { + simulating: BooleanLike; + mode: number; + tank1: string; + tank1ref: string; + tank2: string; + tank2ref: string; + canister: string | null; + sim_canister_output: number; +}; + export const BombTester = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { simulating, @@ -96,7 +108,7 @@ export const BombTester = (props) => { minValue={0} value={sim_canister_output} maxValue={1013.25} - onDrag={(e, val) => + onDrag={(e, val: number) => act('set_can_pressure', { pressure: val }) } /> @@ -120,16 +132,26 @@ export const BombTester = (props) => { ); }; +type stateType = { + reverseX: boolean; + reverseY: boolean; + x: number; + y: number; +}; + class BombTesterSimulation extends Component { + process: NodeJS.Timeout; + state: stateType; + constructor(props) { super(props); - const BOUND_X = 340; - const BOUND_Y = 205; - const MOVEMENT_SPEED = 2; + const BOUND_X: number = 340; + const BOUND_Y: number = 205; + const MOVEMENT_SPEED: number = 2; - let startRight = Math.random() > 0.5; - let startBottom = Math.random() > 0.5; + let startRight: boolean = Math.random() > 0.5; + let startBottom: boolean = Math.random() > 0.5; this.state = { x: startRight ? BOUND_X : 0, @@ -139,7 +161,7 @@ class BombTesterSimulation extends Component { }; this.process = setInterval(() => { - this.setState((prevState) => { + this.setState((prevState: stateType) => { const state = { ...prevState }; if (state.reverseX) { if (state.x - MOVEMENT_SPEED < -5) { diff --git a/tgui/packages/tgui/interfaces/BotanyEditor.jsx b/tgui/packages/tgui/interfaces/BotanyEditor.tsx similarity index 88% rename from tgui/packages/tgui/interfaces/BotanyEditor.jsx rename to tgui/packages/tgui/interfaces/BotanyEditor.tsx index 5210e31dd7..b870981289 100644 --- a/tgui/packages/tgui/interfaces/BotanyEditor.jsx +++ b/tgui/packages/tgui/interfaces/BotanyEditor.tsx @@ -1,9 +1,20 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, LabeledList, NoticeBox, Section } from '../components'; import { Window } from '../layouts'; +type Data = { + activity: BooleanLike; + degradation: number; + disk: BooleanLike; + loaded: string | number; + sourceName: string; + locus: string[]; +}; + export const BotanyEditor = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { activity, degradation, disk, sourceName, locus, loaded } = data; diff --git a/tgui/packages/tgui/interfaces/BotanyIsolator.jsx b/tgui/packages/tgui/interfaces/BotanyIsolator.tsx similarity index 91% rename from tgui/packages/tgui/interfaces/BotanyIsolator.jsx rename to tgui/packages/tgui/interfaces/BotanyIsolator.tsx index b46e434268..12c8e45e2c 100644 --- a/tgui/packages/tgui/interfaces/BotanyIsolator.jsx +++ b/tgui/packages/tgui/interfaces/BotanyIsolator.tsx @@ -1,9 +1,21 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, LabeledList, NoticeBox, Section } from '../components'; import { Window } from '../layouts'; +type Data = { + geneMasks: { tag: string; mask: string }[]; + activity: BooleanLike; + degradation: number; + disk: BooleanLike; + loaded: string | number; + hasGenetics: BooleanLike; + sourceName: string; +}; + export const BotanyIsolator = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { geneMasks, diff --git a/tgui/packages/tgui/interfaces/BrigTimer.jsx b/tgui/packages/tgui/interfaces/BrigTimer.tsx similarity index 60% rename from tgui/packages/tgui/interfaces/BrigTimer.jsx rename to tgui/packages/tgui/interfaces/BrigTimer.tsx index 44e693a609..a0ab78e35d 100644 --- a/tgui/packages/tgui/interfaces/BrigTimer.jsx +++ b/tgui/packages/tgui/interfaces/BrigTimer.tsx @@ -1,12 +1,36 @@ import { round } from 'common/math'; +import { BooleanLike } from 'common/react'; import { useBackend } from '../backend'; import { Button, Flex, NumberInput, Section } from '../components'; import { formatTime } from '../format'; import { Window } from '../layouts'; +type Data = { + time_left: number; + max_time_left: number; + timing: BooleanLike; + flash_found: BooleanLike; + flash_charging: BooleanLike; + preset_short: number; + preset_medium: number; + preset_long: number; +}; + export const BrigTimer = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); + + const { + time_left, + max_time_left, + timing, + flash_found, + flash_charging, + preset_short, + preset_medium, + preset_long, + } = data; + return ( @@ -16,18 +40,18 @@ export const BrigTimer = (props) => { <> - {(data.flash_found && ( + {(flash_found && ( )) || null} @@ -37,11 +61,11 @@ export const BrigTimer = (props) => { formatTime(round(val * 10))} - onDrag={(e, val) => act('time', { time: val })} + maxValue={max_time_left / 10} + format={(val: number) => formatTime(round(val * 10, 0))} + onDrag={(e, val: number) => act('time', { time: val })} /> @@ -50,7 +74,7 @@ export const BrigTimer = (props) => { icon="hourglass-start" onClick={() => act('preset', { preset: 'short' })} > - {'Add ' + formatTime(data.preset_short)} + {'Add ' + formatTime(preset_short)} @@ -59,7 +83,7 @@ export const BrigTimer = (props) => { icon="hourglass-start" onClick={() => act('preset', { preset: 'medium' })} > - {'Add ' + formatTime(data.preset_medium)} + {'Add ' + formatTime(preset_medium)} @@ -68,7 +92,7 @@ export const BrigTimer = (props) => { icon="hourglass-start" onClick={() => act('preset', { preset: 'long' })} > - {'Add ' + formatTime(data.preset_long)} + {'Add ' + formatTime(preset_long)} diff --git a/tgui/packages/tgui/interfaces/CameraConsole.jsx b/tgui/packages/tgui/interfaces/CameraConsole.tsx similarity index 74% rename from tgui/packages/tgui/interfaces/CameraConsole.jsx rename to tgui/packages/tgui/interfaces/CameraConsole.tsx index 29ee68a38a..f558de6398 100644 --- a/tgui/packages/tgui/interfaces/CameraConsole.jsx +++ b/tgui/packages/tgui/interfaces/CameraConsole.tsx @@ -1,6 +1,6 @@ import { filter, sortBy } from 'common/collections'; import { flow } from 'common/fp'; -import { classes } from 'common/react'; +import { BooleanLike, classes } from 'common/react'; import { createSearch } from 'common/string'; import { useState } from 'react'; @@ -8,11 +8,25 @@ import { useBackend } from '../backend'; import { Button, ByondUi, Dropdown, Flex, Input, Section } from '../components'; import { Window } from '../layouts'; +type activeCamera = { name: string; status: BooleanLike } | null; + +type camera = { name: string; networks: string[] }; + +export type Data = { + activeCamera: activeCamera; + mapRef: string; + cameras: camera[]; + allNetworks: string[]; +}; + /** * Returns previous and next camera names relative to the currently * active camera. */ -export const prevNextCamera = (cameras, activeCamera) => { +export const prevNextCamera = ( + cameras: camera[], + activeCamera: activeCamera, +) => { if (!activeCamera) { return []; } @@ -22,32 +36,43 @@ export const prevNextCamera = (cameras, activeCamera) => { return [cameras[index - 1]?.name, cameras[index + 1]?.name]; }; +function notEmpty(value: TValue | null | undefined): value is TValue { + return value !== null && value !== undefined; +} + /** * Camera selector. * * Filters cameras, applies search terms and sorts the alphabetically. */ -export const selectCameras = (cameras, searchText = '', networkFilter = '') => { - const testSearch = createSearch(searchText, (camera) => camera.name); +export const selectCameras = ( + cameras: camera[], + searchText: string = '', + networkFilter: string = '', +) => { + const testSearch = createSearch(searchText, (camera: camera) => camera.name); return flow([ // Null camera filter - filter((camera) => camera?.name), + filter((camera: camera) => notEmpty(camera?.name)), // Optional search term searchText && filter(testSearch), // Optional network filter networkFilter && - filter((camera) => camera.networks.includes(networkFilter)), + filter((camera: camera) => camera.networks.includes(networkFilter)), // Slightly expensive, but way better than sorting in BYOND - sortBy((camera) => camera.name), + sortBy((camera: camera) => camera.name), ])(cameras); }; export const CameraConsole = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { mapRef, activeCamera } = data; - const cameras = selectCameras(data.cameras); - const [prevCameraName, nextCameraName] = prevNextCamera( - cameras, + + const { cameras } = data; + + const selected_cameras: camera[] = selectCameras(cameras); + const [prevCameraName, nextCameraName]: string[] = prevNextCamera( + selected_cameras, activeCamera, ); return ( @@ -101,12 +126,16 @@ export const CameraConsole = (props) => { }; export const CameraConsoleContent = (props) => { - const { act, data } = useBackend(); - const [searchText, setSearchText] = useState(''); - const [networkFilter, setNetworkFilter] = useState(''); - const { activeCamera, allNetworks } = data; + const { act, data } = useBackend(); + const [searchText, setSearchText] = useState(''); + const [networkFilter, setNetworkFilter] = useState(''); + const { activeCamera, allNetworks, cameras } = data; allNetworks.sort(); - const cameras = selectCameras(data.cameras, searchText, networkFilter); + const selected_cameras: camera[] = selectCameras( + cameras, + searchText, + networkFilter, + ); return ( @@ -115,7 +144,7 @@ export const CameraConsoleContent = (props) => { fluid mt={1} placeholder="Search for a camera" - onInput={(e, value) => setSearchText(value)} + onInput={(e, value: string) => setSearchText(value)} /> @@ -147,7 +176,7 @@ export const CameraConsoleContent = (props) => {
- {cameras.map((camera) => ( + {selected_cameras.map((camera) => ( // We're not using the component here because performance // would be absolutely abysmal (50+ ms for each re-render).
{ - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { connected, can_relabel, @@ -66,7 +79,7 @@ export const Canister = (props) => { minValue={minReleasePressure} maxValue={maxReleasePressure} stepPixelSize={1} - onDrag={(e, value) => + onDrag={(e, value: number) => act('pressure', { pressure: value, }) diff --git a/tgui/packages/tgui/interfaces/Canvas.jsx b/tgui/packages/tgui/interfaces/Canvas.tsx similarity index 69% rename from tgui/packages/tgui/interfaces/Canvas.jsx rename to tgui/packages/tgui/interfaces/Canvas.tsx index 4d5d7015ee..d54eb7e66c 100644 --- a/tgui/packages/tgui/interfaces/Canvas.jsx +++ b/tgui/packages/tgui/interfaces/Canvas.tsx @@ -1,4 +1,5 @@ -import { Component, createRef } from 'react'; +import { BooleanLike } from 'common/react'; +import { Component, createRef, RefObject } from 'react'; import { useBackend } from '../backend'; import { Box, Button } from '../components'; @@ -6,7 +7,17 @@ import { Window } from '../layouts'; const PX_PER_UNIT = 24; -class PaintCanvas extends Component { +type PaintCanvasProps = Partial<{ + onCanvasClick: (x: number, y: number) => void; + value: string[][]; + dotsize: number; + res: number; +}>; + +class PaintCanvas extends Component { + canvasRef: RefObject; + onCVClick: (x: number, y: number) => void; + constructor(props) { super(props); this.canvasRef = createRef(); @@ -21,16 +32,20 @@ class PaintCanvas extends Component { this.drawCanvas(this.props); } - drawCanvas(propSource) { - const ctx = this.canvasRef.current.getContext('2d'); + drawCanvas(propSource: PaintCanvasProps) { + const canvas = this.canvasRef.current!; + const ctx = canvas.getContext('2d')!; const grid = propSource.value; + if (!grid) { + return; + } const x_size = grid.length; if (!x_size) { return; } const y_size = grid[0].length; - const x_scale = Math.round(this.canvasRef.current.width / x_size); - const y_scale = Math.round(this.canvasRef.current.height / y_size); + const x_scale = Math.round(canvas.width / x_size); + const y_scale = Math.round(canvas.height / y_size); ctx.save(); ctx.scale(x_scale, y_scale); for (let x = 0; x < grid.length; x++) { @@ -44,14 +59,19 @@ class PaintCanvas extends Component { ctx.restore(); } - clickwrapper(event) { - const x_size = this.props.value.length; + clickwrapper(event: React.MouseEvent) { + const value = this.props.value; + if (!value) { + return; + } + const x_size = value.length; if (!x_size) { return; } const y_size = this.props.value[0].length; - const x_scale = this.canvasRef.current.width / x_size; - const y_scale = this.canvasRef.current.height / y_size; + const canvas = this.canvasRef.current!; + const x_scale = canvas.width / x_size; + const y_scale = canvas.height / y_size; const x = Math.floor(event.nativeEvent.offsetX / x_scale) + 1; const y = Math.floor(event.nativeEvent.offsetY / y_scale) + 1; this.onCVClick(x, y); @@ -80,8 +100,15 @@ const getImageSize = (value) => { return [width, height]; }; +type Data = { + grid: string[][]; + name: string; + finalized: BooleanLike; +}; + export const Canvas = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); + const dotsize = PX_PER_UNIT; const [width, height] = getImageSize(data.grid); return ( diff --git a/tgui/packages/tgui/interfaces/CasinoPrizeDispenser.jsx b/tgui/packages/tgui/interfaces/CasinoPrizeDispenser.tsx similarity index 81% rename from tgui/packages/tgui/interfaces/CasinoPrizeDispenser.jsx rename to tgui/packages/tgui/interfaces/CasinoPrizeDispenser.tsx index 8e03666a51..6c13f446db 100644 --- a/tgui/packages/tgui/interfaces/CasinoPrizeDispenser.jsx +++ b/tgui/packages/tgui/interfaces/CasinoPrizeDispenser.tsx @@ -13,26 +13,36 @@ import { } from '../components'; import { Window } from '../layouts'; +type Data = { + items: Record; +}; + +type sortable = { + name: string; + affordable: number; + price: number; + restriction: string; +}; + const sortTypes = { - Alphabetical: (a, b) => a.name > b.name, - 'By availability': (a, b) => -(a.affordable - b.affordable), - 'By price': (a, b) => a.price - b.price, + Alphabetical: (a: sortable, b: sortable) => a.name > b.name, + 'By price': (a: sortable, b: sortable) => a.price - b.price, }; export const CasinoPrizeDispenser = () => { - const [searchText, setSearchText] = useState(''); - const [sortOrder, setSortOrder] = useState('Alphabetical'); - const [descending, setDescending] = useState(false); + const [searchText, setSearchText] = useState(''); + const [sortOrder, setSortOrder] = useState('Alphabetical'); + const [descending, setDescending] = useState(false); - function handleSearchText(value) { + function handleSearchText(value: string) { setSearchText(value); } - function handleSortOrder(value) { + function handleSortOrder(value: string) { setSortOrder(value); } - function handleDescending(value) { + function handleDescending(value: boolean) { setDescending(value); } @@ -52,9 +62,6 @@ export const CasinoPrizeDispenser = () => { searchText={searchText} sortOrder={sortOrder} descending={descending} - onSearchText={handleSearchText} - onSortOrder={handleSortOrder} - onDescending={handleDescending} /> @@ -98,19 +105,18 @@ const CasinoPrizeDispenserSearch = (props) => { }; const CasinoPrizeDispenserItems = (props) => { - const { act, data } = useBackend(); - const { points, items } = data; + const { act, data } = useBackend(); + const { items } = data; // Search thingies const searcher = createSearch(props.searchText, (item) => { return item[0]; }); let has_contents = false; - let contents = Object.entries(items).map((kv, _i) => { + let contents = Object.entries(items).map((kv) => { let items_in_cat = Object.entries(kv[1]) .filter(searcher) .map((kv2) => { - kv2[1].affordable = points >= kv2[1].price; return kv2[1]; }) .sort(sortTypes[props.sortOrder]); @@ -143,15 +149,19 @@ const CasinoPrizeDispenserItems = (props) => { ); }; -const CasinoPrizeDispenserItemsCategory = (props) => { - const { act, data } = useBackend(); +const CasinoPrizeDispenserItemsCategory = (props: { + key: string; + title: string; + items: sortable[]; +}) => { + const { act } = useBackend(); const { title, items, ...rest } = props; return ( {items.map((item) => ( { +const getTagColor = (tag: string) => { switch (tag) { case 'Unset': return 'label'; @@ -23,19 +24,36 @@ const getTagColor = (tag) => { } }; +type Data = { + personalVisibility: BooleanLike; + personalTag: string; + personalErpTag: string; + directory: character[]; +}; + +type character = { + name: string; + species: string; + ooc_notes: string; + tag: string; + erptag: string; + character_ad: string; + flavor_text: string; +}; + export const CharacterDirectory = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { personalVisibility, personalTag, personalErpTag } = data; - const [overlay, setOverlay] = useState(null); - const [overwritePrefs, setOverwritePrefs] = useState(false); + const [overlay, setOverlay] = useState(null); + const [overwritePrefs, setOverwritePrefs] = useState(false); - function handleOverlay(value) { + function handleOverlay(value: character | null) { setOverlay(value); } return ( - + {(overlay && ( @@ -119,29 +137,29 @@ const ViewCharacter = (props) => { } > -
+
{props.overlay.species}
-
+
{props.overlay.tag}
-
+
{props.overlay.erptag}
-
- +
+ {props.overlay.character_ad || 'Unset.'}
-
- +
+ {props.overlay.ooc_notes || 'Unset.'}
-
- +
+ {props.overlay.flavor_text || 'Unset.'}
@@ -150,17 +168,17 @@ const ViewCharacter = (props) => { }; const CharacterDirectoryList = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { directory } = data; - const [sortId, setSortId] = useState('name'); - const [sortOrder, setSortOrder] = useState('name'); + const [sortId, setSortId] = useState('name'); + const [sortOrder, setSortOrder] = useState('name'); - function handleSortId(value) { + function handleSortId(value: string) { setSortId(value); } - function handleSortOrder(value) { + function handleSortOrder(value: string) { setSortOrder(value); } @@ -243,9 +261,14 @@ const CharacterDirectoryList = (props) => { ); }; -const SortButton = (props) => { - const { act, data } = useBackend(); - +const SortButton = (props: { + id: string; + sortId: string; + sortOrder: string; + onSortId: Function; + onSortOrder: Function; + children: ReactNode | string; +}) => { const { id, children } = props; // Hey, same keys mean same data~ diff --git a/tgui/packages/tgui/interfaces/CheckboxInput.tsx b/tgui/packages/tgui/interfaces/CheckboxInput.tsx index 30ed63d08b..de6fe94eff 100644 --- a/tgui/packages/tgui/interfaces/CheckboxInput.tsx +++ b/tgui/packages/tgui/interfaces/CheckboxInput.tsx @@ -97,7 +97,7 @@ export const CheckboxInput = (props) => { setSearchQuery(value)} + onInput={(e, value: string) => setSearchQuery(value)} /> diff --git a/tgui/packages/tgui/interfaces/ChemDispenser.jsx b/tgui/packages/tgui/interfaces/ChemDispenser.jsx deleted file mode 100644 index 801fe33dd3..0000000000 --- a/tgui/packages/tgui/interfaces/ChemDispenser.jsx +++ /dev/null @@ -1,175 +0,0 @@ -import { useBackend } from '../backend'; -import { Box, Button, Flex, LabeledList, Section, Slider } from '../components'; -import { BeakerContents } from '../interfaces/common/BeakerContents'; -import { Window } from '../layouts'; - -const dispenseAmounts = [5, 10, 20, 30, 40, 60]; -const removeAmounts = [1, 5, 10]; - -export const ChemDispenser = (props) => { - return ( - - - - - - - - ); -}; - -const ChemDispenserSettings = (properties) => { - const { act, data } = useBackend(); - const { amount } = data; - return ( -
- - - {dispenseAmounts.map((a, i) => ( - - ))} - - - - act('amount', { - amount: value, - }) - } - /> - - -
- ); -}; - -const ChemDispenserChemicals = (properties) => { - const { act, data } = useBackend(); - const { chemicals = [] } = data; - const flexFillers = []; - for (let i = 0; i < (chemicals.length + 1) % 3; i++) { - flexFillers.push(true); - } - return ( -
- - {chemicals.map((c, i) => ( - - - - ))} - {flexFillers.map((_, i) => ( - - ))} - -
- ); -}; - -const ChemDispenserBeaker = (properties) => { - const { act, data } = useBackend(); - const { - isBeakerLoaded, - beakerCurrentVolume, - beakerMaxVolume, - beakerContents = [], - } = data; - return ( -
- {!!isBeakerLoaded && ( - - {beakerCurrentVolume} / {beakerMaxVolume} units - - )} - - - } - > - ( - <> - - {removeAmounts.map((a, i) => ( - - ))} - - - )} - /> -
- ); -}; diff --git a/tgui/packages/tgui/interfaces/ChemDispenser/ChemDispenserBeaker.tsx b/tgui/packages/tgui/interfaces/ChemDispenser/ChemDispenserBeaker.tsx new file mode 100644 index 0000000000..b9946802ac --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemDispenser/ChemDispenserBeaker.tsx @@ -0,0 +1,81 @@ +import { useBackend } from '../../backend'; +import { Box, Button, Section } from '../../components'; +import { BeakerContents } from '.././common/BeakerContents'; +import { removeAmounts } from './constants'; +import { Data } from './types'; + +export const ChemDispenserBeaker = (props) => { + const { act, data } = useBackend(); + const { + isBeakerLoaded, + beakerCurrentVolume, + beakerMaxVolume, + beakerContents = [], + } = data; + return ( +
+ {!!isBeakerLoaded && ( + + {beakerCurrentVolume} / {beakerMaxVolume} units + + )} + + + } + > + ( + <> + + {removeAmounts.map((a, i) => ( + + ))} + + + )} + /> +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemDispenser/ChemDispenserChemicals.tsx b/tgui/packages/tgui/interfaces/ChemDispenser/ChemDispenserChemicals.tsx new file mode 100644 index 0000000000..06160da65f --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemDispenser/ChemDispenserChemicals.tsx @@ -0,0 +1,41 @@ +import { useBackend } from '../../backend'; +import { Button, Flex, Section } from '../../components'; +import { Data } from './types'; + +export const ChemDispenserChemicals = (props) => { + const { act, data } = useBackend(); + const { chemicals = [] } = data; + const flexFillers: boolean[] = []; + for (let i = 0; i < (chemicals.length + 1) % 3; i++) { + flexFillers.push(true); + } + return ( +
+ + {chemicals.map((c, i) => ( + + + + ))} + {flexFillers.map((_, i) => ( + + ))} + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemDispenser/ChemDispenserSettings.tsx b/tgui/packages/tgui/interfaces/ChemDispenser/ChemDispenserSettings.tsx new file mode 100644 index 0000000000..2a55775822 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemDispenser/ChemDispenserSettings.tsx @@ -0,0 +1,46 @@ +import { useBackend } from '../../backend'; +import { Button, LabeledList, Section, Slider } from '../../components'; +import { dispenseAmounts } from './constants'; +import { Data } from './types'; + +export const ChemDispenserSettings = (props) => { + const { act, data } = useBackend(); + const { amount } = data; + return ( +
+ + + {dispenseAmounts.map((a, i) => ( + + ))} + + + + act('amount', { + amount: value, + }) + } + /> + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemDispenser/constants.ts b/tgui/packages/tgui/interfaces/ChemDispenser/constants.ts new file mode 100644 index 0000000000..8555508f50 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemDispenser/constants.ts @@ -0,0 +1,2 @@ +export const dispenseAmounts: number[] = [5, 10, 20, 30, 40, 60]; +export const removeAmounts: number[] = [1, 5, 10]; diff --git a/tgui/packages/tgui/interfaces/ChemDispenser/index.tsx b/tgui/packages/tgui/interfaces/ChemDispenser/index.tsx new file mode 100644 index 0000000000..9e47296c17 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemDispenser/index.tsx @@ -0,0 +1,16 @@ +import { Window } from '../../layouts'; +import { ChemDispenserBeaker } from './ChemDispenserBeaker'; +import { ChemDispenserChemicals } from './ChemDispenserChemicals'; +import { ChemDispenserSettings } from './ChemDispenserSettings'; + +export const ChemDispenser = (props) => { + return ( + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemDispenser/types.ts b/tgui/packages/tgui/interfaces/ChemDispenser/types.ts new file mode 100644 index 0000000000..f558816663 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemDispenser/types.ts @@ -0,0 +1,13 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + amount: number; + isBeakerLoaded: BooleanLike; + glass: BooleanLike; + beakerContents: reagent[]; + beakerCurrentVolume: number | null; + beakerMaxVolume: number | null; + chemicals: reagent[]; +}; + +type reagent = { name: string; id: string; volume: number }; diff --git a/tgui/packages/tgui/interfaces/ChemMaster.jsx b/tgui/packages/tgui/interfaces/ChemMaster.jsx deleted file mode 100644 index 8e154bf0b9..0000000000 --- a/tgui/packages/tgui/interfaces/ChemMaster.jsx +++ /dev/null @@ -1,496 +0,0 @@ -import { classes } from '../.././common/react'; -import { useBackend } from '../backend'; -import { Box, Button, Flex, Icon, LabeledList, Section } from '../components'; -import { Window } from '../layouts'; -import { BeakerContents } from './common/BeakerContents'; -import { - ComplexModal, - modalOpen, - modalRegisterBodyOverride, -} from './common/ComplexModal'; - -const transferAmounts = [1, 5, 10, 30, 60]; -const bottleStyles = [ - 'bottle.png', - 'small_bottle.png', - 'wide_bottle.png', - 'round_bottle.png', - 'reagent_bottle.png', -]; - -const analyzeModalBodyOverride = (modal) => { - const { act, data } = useBackend(); - const result = modal.args.analysis; - return ( -
- - - {result.name} - - {(result.desc || '').length > 0 ? result.desc : 'N/A'} - - {result.blood_type && ( - <> - - {result.blood_type} - - - {result.blood_dna} - - - )} - {!data.condi && ( - - )} - - -
- ); -}; - -export const ChemMaster = (props) => { - const { data } = useBackend(); - const { - condi, - beaker, - beaker_reagents = [], - buffer_reagents = [], - mode, - } = data; - return ( - - - - 0} - /> - - 0} - /> - {/* */} - - - ); -}; - -const ChemMasterBeaker = (props) => { - const { act, data } = useBackend(); - const { beaker, beakerReagents, bufferNonEmpty } = props; - - let headerButton = bufferNonEmpty ? ( - act('eject')} - > - Eject and Clear Buffer - - ) : ( - - ); - - return ( -
- {beaker ? ( - ( - - - {transferAmounts.map((am, j) => ( - - ))} - - - - )} - /> - ) : ( - No beaker loaded. - )} -
- ); -}; - -const ChemMasterBuffer = (props) => { - const { act } = useBackend(); - const { mode, bufferReagents = [] } = props; - return ( -
- Transferring to  - - - } - > - {bufferReagents.length > 0 ? ( - ( - - - {transferAmounts.map((am, i) => ( - - ))} - - - - )} - /> - ) : ( - Buffer is empty. - )} -
- ); -}; - -const ChemMasterProduction = (props) => { - const { act, data } = useBackend(); - if (!props.bufferNonEmpty) { - return ( -
act('ejectp')} - > - {data.loaded_pill_bottle - ? data.loaded_pill_bottle_name + - ' (' + - data.loaded_pill_bottle_contents_len + - '/' + - data.loaded_pill_bottle_storage_slots + - ')' - : 'No pill bottle loaded'} - - } - > - - - -
- Buffer is empty. -
-
-
- ); - } - - return ( -
act('ejectp')} - > - {data.loaded_pill_bottle - ? data.loaded_pill_bottle_name + - ' (' + - data.loaded_pill_bottle_contents_len + - '/' + - data.loaded_pill_bottle_storage_slots + - ')' - : 'No pill bottle loaded'} - - } - > - {!props.isCondiment ? ( - - ) : ( - - )} -
- ); -}; - -const ChemMasterProductionChemical = (props) => { - const { act, data } = useBackend(); - return ( - - - - -
- -
- - - - - - - -
- -
-
- ); -}; - -const ChemMasterProductionCondiment = (props) => { - const { act } = useBackend(); - return ( - <> - -
- - - ); -}; - -// const ChemMasterCustomization = (props) => { -// const { act, data } = useBackend(); -// if (!data.loaded_pill_bottle) { -// return ( -//
-// -// None loaded. -// -//
-// ); -// } - -// return ( -//
-// -//
-// ); -// }; - -modalRegisterBodyOverride('analyze', analyzeModalBodyOverride); diff --git a/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterAnalyzeModalBodyOverride.tsx b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterAnalyzeModalBodyOverride.tsx new file mode 100644 index 0000000000..f51100d3e1 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterAnalyzeModalBodyOverride.tsx @@ -0,0 +1,53 @@ +import { useBackend } from '../../backend'; +import { Box, Button, LabeledList, Section } from '../../components'; +import { Data, modalData } from './types'; + +export const analyzeModalBodyOverride = (modal: modalData) => { + const { act, data } = useBackend(); + const result = modal.args.analysis; + return ( +
+ + + {result.name} + + {(result.desc || '').length > 0 ? result.desc : 'N/A'} + + {result.blood_type && ( + <> + + {result.blood_type} + + + {result.blood_dna} + + + )} + {!data.condi && ( + + )} + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterBeaker.tsx b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterBeaker.tsx new file mode 100644 index 0000000000..e42b4a3207 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterBeaker.tsx @@ -0,0 +1,94 @@ +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../../backend'; +import { Box, Button, Section } from '../../components'; +import { BeakerContents } from '.././common/BeakerContents'; +import { modalOpen } from '.././common/ComplexModal'; +import { transferAmounts } from './constants'; +import { reagent } from './types'; + +export const ChemMasterBeaker = (props: { + beaker: BooleanLike; + beakerReagents: reagent[]; + bufferNonEmpty: BooleanLike; +}) => { + const { act } = useBackend(); + const { beaker, beakerReagents, bufferNonEmpty } = props; + + let headerButton = bufferNonEmpty ? ( + act('eject')} + > + Eject and Clear Buffer + + ) : ( + + ); + + return ( +
+ {beaker ? ( + ( + + + {transferAmounts.map((am, j) => ( + + ))} + + + + )} + /> + ) : ( + No beaker loaded. + )} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterBuffer.tsx b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterBuffer.tsx new file mode 100644 index 0000000000..3bd477b685 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterBuffer.tsx @@ -0,0 +1,92 @@ +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../../backend'; +import { Box, Button, Section } from '../../components'; +import { BeakerContents } from '.././common/BeakerContents'; +import { modalOpen } from '.././common/ComplexModal'; +import { transferAmounts } from './constants'; +import { reagent } from './types'; + +export const ChemMasterBuffer = (props: { + mode: BooleanLike; + bufferReagents: reagent[]; +}) => { + const { act } = useBackend(); + const { mode, bufferReagents = [] } = props; + return ( +
+ Transferring to  + + + } + > + {bufferReagents.length > 0 ? ( + ( + + + {transferAmounts.map((am, i) => ( + + ))} + + + + )} + /> + ) : ( + Buffer is empty. + )} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterCustomization.tsx b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterCustomization.tsx new file mode 100644 index 0000000000..3e70da5f8e --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterCustomization.tsx @@ -0,0 +1,55 @@ +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../../backend'; +import { Box, Button, Section } from '../../components'; +import { modalOpen } from '.././common/ComplexModal'; + +export const ChemMasterCustomization = (props: { + loaded_pill_bottle: BooleanLike; + loaded_pill_bottle_name: string; + loaded_pill_bottle_contents_len: number; + loaded_pill_bottle_storage_slots: number; +}) => { + const { act } = useBackend(); + + const { + loaded_pill_bottle, + loaded_pill_bottle_name, + loaded_pill_bottle_contents_len, + loaded_pill_bottle_storage_slots, + } = props; + + if (!loaded_pill_bottle) { + return ( +
+ None loaded. +
+ ); + } + + return ( +
+ + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterProduction.tsx b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterProduction.tsx new file mode 100644 index 0000000000..59f9619c64 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterProduction.tsx @@ -0,0 +1,97 @@ +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../../backend'; +import { Button, Flex, Icon, Section } from '../../components'; +import { ChemMasterProductionChemical } from './ChemMasterProductionChemical'; +import { ChemMasterProductionCondiment } from './ChemMasterProductionCondiment'; + +export const ChemMasterProduction = (props: { + bufferNonEmpty: boolean; + isCondiment: BooleanLike; + loaded_pill_bottle: BooleanLike; + loaded_pill_bottle_name: string; + loaded_pill_bottle_contents_len: number; + loaded_pill_bottle_storage_slots: number; + pillsprite: string; + bottlesprite: string; +}) => { + const { act } = useBackend(); + + const { + bufferNonEmpty, + isCondiment, + loaded_pill_bottle, + loaded_pill_bottle_name, + loaded_pill_bottle_contents_len, + loaded_pill_bottle_storage_slots, + pillsprite, + bottlesprite, + } = props; + + if (!bufferNonEmpty) { + return ( +
act('ejectp')} + > + {loaded_pill_bottle + ? loaded_pill_bottle_name + + ' (' + + loaded_pill_bottle_contents_len + + '/' + + loaded_pill_bottle_storage_slots + + ')' + : 'No pill bottle loaded'} + + } + > + + + +
+ Buffer is empty. +
+
+
+ ); + } + + return ( +
act('ejectp')} + > + {loaded_pill_bottle + ? loaded_pill_bottle_name + + ' (' + + loaded_pill_bottle_contents_len + + '/' + + loaded_pill_bottle_storage_slots + + ')' + : 'No pill bottle loaded'} + + } + > + {!isCondiment ? ( + + ) : ( + + )} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterProductionChemical.tsx b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterProductionChemical.tsx new file mode 100644 index 0000000000..3b7a4c2e13 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterProductionChemical.tsx @@ -0,0 +1,111 @@ +import { classes } from '../../.././common/react'; +import { Box, Button, LabeledList } from '../../components'; +import { modalOpen } from '.././common/ComplexModal'; + +export const ChemMasterProductionChemical = (props: { + pillsprite: string; + bottlesprite: string; +}) => { + const { pillsprite, bottlesprite } = props; + + return ( + + + + +
+ +
+ + + + + + + +
+ +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterProductionCondiment.tsx b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterProductionCondiment.tsx new file mode 100644 index 0000000000..fd58ec8228 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemMaster/ChemMasterProductionCondiment.tsx @@ -0,0 +1,26 @@ +import { useBackend } from '../../backend'; +import { Button } from '../../components'; +import { modalOpen } from '.././common/ComplexModal'; + +export const ChemMasterProductionCondiment = (props) => { + const { act } = useBackend(); + return ( + <> + +
+ + + ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemMaster/constants.ts b/tgui/packages/tgui/interfaces/ChemMaster/constants.ts new file mode 100644 index 0000000000..8fa1d18fa3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemMaster/constants.ts @@ -0,0 +1,8 @@ +export const transferAmounts: number[] = [1, 5, 10, 30, 60]; +export const bottleStyles: string[] = [ + 'bottle.png', + 'small_bottle.png', + 'wide_bottle.png', + 'round_bottle.png', + 'reagent_bottle.png', +]; diff --git a/tgui/packages/tgui/interfaces/ChemMaster/index.tsx b/tgui/packages/tgui/interfaces/ChemMaster/index.tsx new file mode 100644 index 0000000000..658ffc8f3c --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemMaster/index.tsx @@ -0,0 +1,65 @@ +import { useBackend } from '../../backend'; +import { Window } from '../../layouts'; +import { + ComplexModal, + modalRegisterBodyOverride, +} from '.././common/ComplexModal'; +import { analyzeModalBodyOverride } from './ChemMasterAnalyzeModalBodyOverride'; +import { ChemMasterBeaker } from './ChemMasterBeaker'; +import { ChemMasterBuffer } from './ChemMasterBuffer'; +import { ChemMasterProduction } from './ChemMasterProduction'; +import { Data } from './types'; + +export const ChemMaster = (props) => { + const { data } = useBackend(); + const { + condi, + beaker, + beaker_reagents = [], + buffer_reagents = [], + mode, + loaded_pill_bottle, + loaded_pill_bottle_name, + loaded_pill_bottle_contents_len, + loaded_pill_bottle_storage_slots, + pillsprite, + bottlesprite, + } = data; + return ( + + + + 0} + /> + + 0} + loaded_pill_bottle={loaded_pill_bottle} + loaded_pill_bottle_name={loaded_pill_bottle_name || ''} + loaded_pill_bottle_contents_len={loaded_pill_bottle_contents_len || 0} + loaded_pill_bottle_storage_slots={ + loaded_pill_bottle_storage_slots || 0 + } + pillsprite={pillsprite} + bottlesprite={bottlesprite} + /> + {/* Vorestation Remove + + */} + + + ); +}; + +modalRegisterBodyOverride('analyze', analyzeModalBodyOverride); diff --git a/tgui/packages/tgui/interfaces/ChemMaster/types.ts b/tgui/packages/tgui/interfaces/ChemMaster/types.ts new file mode 100644 index 0000000000..a5b6dcdca0 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ChemMaster/types.ts @@ -0,0 +1,40 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + condi: BooleanLike; + loaded_pill_bottle: BooleanLike; + loaded_pill_bottle_name: string | undefined; + loaded_pill_bottle_contents_len: number | undefined; + loaded_pill_bottle_storage_slots: number | undefined; + beaker: BooleanLike; + beaker_reagents: reagent[] | undefined; + buffer_reagents: reagent[] | undefined; + pillsprite: string; + bottlesprite: string; + mode: BooleanLike; + printing: BooleanLike; + modal: modalData; +}; + +export type reagent = { + name: string; + volume: number; + description: string; + id: string; +}; + +export type modalData = { + id: string; + text: string; + args: { + analysis: { + idx: string; + name: string; + desc: string; + blood_type: string | null; + blood_dna: string | null; + }; + beaker: number; + }; + type: string; +}; diff --git a/tgui/packages/tgui/interfaces/ClawMachine.jsx b/tgui/packages/tgui/interfaces/ClawMachine.tsx similarity index 91% rename from tgui/packages/tgui/interfaces/ClawMachine.jsx rename to tgui/packages/tgui/interfaces/ClawMachine.tsx index a25e9e0395..3b43c19352 100644 --- a/tgui/packages/tgui/interfaces/ClawMachine.jsx +++ b/tgui/packages/tgui/interfaces/ClawMachine.tsx @@ -2,8 +2,15 @@ import { useBackend } from '../backend'; import { Box, Button, LabeledList, ProgressBar } from '../components'; import { Window } from '../layouts'; +type Data = { + wintick: number; + instructions: string; + gameStatus: string; + winscreen: string; +}; + export const ClawMachine = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { wintick, instructions, gameStatus, winscreen } = data; let body; @@ -39,7 +46,7 @@ export const ClawMachine = (props) => { average: [1, 7], good: [8, Infinity], }} - value={data.wintick} + value={wintick} minValue={0} maxValue={10} /> diff --git a/tgui/packages/tgui/interfaces/Cleanbot.jsx b/tgui/packages/tgui/interfaces/Cleanbot.tsx similarity index 91% rename from tgui/packages/tgui/interfaces/Cleanbot.jsx rename to tgui/packages/tgui/interfaces/Cleanbot.tsx index 09632130d3..e66624a11e 100644 --- a/tgui/packages/tgui/interfaces/Cleanbot.jsx +++ b/tgui/packages/tgui/interfaces/Cleanbot.tsx @@ -1,9 +1,27 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, LabeledList, Section } from '../components'; import { Window } from '../layouts'; +type Data = { + on: BooleanLike; + open: BooleanLike; + locked: BooleanLike; + patrol: BooleanLike; + vocal: BooleanLike; + wet_floors: BooleanLike; + spray_blood: BooleanLike; + version: string; + blood: BooleanLike; + rgbpanel: BooleanLike; + red_switch: BooleanLike; + green_switch: BooleanLike; + blue_switch: BooleanLike; +}; + export const Cleanbot = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { on, @@ -11,7 +29,6 @@ export const Cleanbot = (props) => { locked, version, blood, - patrol, vocal, wet_floors, spray_blood, diff --git a/tgui/packages/tgui/interfaces/CloningConsole.jsx b/tgui/packages/tgui/interfaces/CloningConsole.jsx deleted file mode 100644 index 99d10942ef..0000000000 --- a/tgui/packages/tgui/interfaces/CloningConsole.jsx +++ /dev/null @@ -1,458 +0,0 @@ -import { round } from 'common/math'; - -import { resolveAsset } from '../assets'; -import { useBackend } from '../backend'; -import { - Box, - Button, - Flex, - Icon, - LabeledList, - NoticeBox, - ProgressBar, - Section, - Tabs, -} from '../components'; -import { COLORS } from '../constants'; -import { - ComplexModal, - modalRegisterBodyOverride, -} from '../interfaces/common/ComplexModal'; -import { Window } from '../layouts'; - -const viewRecordModalBodyOverride = (modal) => { - const { act, data } = useBackend(); - const { activerecord, realname, health, unidentity, strucenzymes } = - modal.args; - const damages = health.split(' - '); - return ( -
- - {realname} - - {damages.length > 1 ? ( - <> - - {damages[0]} - -  |  - - {damages[2]} - -  |  - - {damages[3]} - -  |  - - {damages[1]} - - - ) : ( - Unknown - )} - - - {unidentity} - - - {strucenzymes} - - - - act('disk', { - option: 'load', - }) - } - > - Import - - - - - - - - - - -
- ); -}; - -export const CloningConsole = (props) => { - const { act, data } = useBackend(); - const { menu } = data; - modalRegisterBodyOverride('view_rec', viewRecordModalBodyOverride); - return ( - - - - - - -
- -
-
-
- ); -}; - -const CloningConsoleNavigation = (props) => { - const { act, data } = useBackend(); - const { menu } = data; - return ( - - - act('menu', { - num: 1, - }) - } - > - Main - - - act('menu', { - num: 2, - }) - } - > - Records - - - ); -}; - -const CloningConsoleBody = (props) => { - const { data } = useBackend(); - const { menu } = data; - let body; - if (menu === 1) { - body = ; - } else if (menu === 2) { - body = ; - } - return body; -}; - -const CloningConsoleMain = (props) => { - const { act, data } = useBackend(); - const { - loading, - scantemp, - occupant, - locked, - can_brainscan, - scan_mode, - numberofpods, - pods, - selected_pod, - } = data; - const isLocked = locked && !!occupant; - return ( - <> -
- - Scanner Lock:  - - - - - } - > - - - {loading ? ( - - -   Scanning... - - ) : ( - {scantemp.text} - )} - - {!!can_brainscan && ( - - - - )} - - -
-
- {numberofpods ? ( - pods.map((pod, i) => { - let podAction; - if (pod.status === 'cloning') { - podAction = ( - - {round(pod.progress, 0) + '%'} - - ); - } else if (pod.status === 'mess') { - podAction = ( - - ERROR - - ); - } else { - podAction = ( - - ); - } - - return ( - - - Pod #{i + 1} - = 150 ? 'good' : 'bad'} inline> - = 150 ? 'circle' : 'circle-o'} /> -   - {pod.biomass} - - {podAction} - - ); - }) - ) : ( - No pods detected. Unable to clone. - )} -
- - ); -}; - -const CloningConsoleRecords = (props) => { - const { act, data } = useBackend(); - const { records } = data; - if (!records.length) { - return ( - - - -
- No records found. -
-
- ); - } - return ( - - {records.map((record, i) => ( - - ))} - - ); -}; - -const CloningConsoleTemp = (props) => { - const { act, data } = useBackend(); - const { temp } = data; - if (!temp || !temp.text || temp.text.length <= 0) { - return; - } - - const tempProp = { [temp.style]: true }; - return ( - - - {temp.text} - - - - )} - - - } - > - - - {scanner ? ( - Connected - ) : ( - Not connected! - )} - - - {numberofpods ? ( - {numberofpods} connected - ) : ( - None connected! - )} - - -
- ); -}; diff --git a/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleBodyOverride.tsx b/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleBodyOverride.tsx new file mode 100644 index 0000000000..fb6a649152 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleBodyOverride.tsx @@ -0,0 +1,115 @@ +import { useBackend } from '../../backend'; +import { Box, Button, LabeledList, Section } from '../../components'; +import { COLORS } from '../../constants'; +import { Data, modalData } from './types'; + +export const viewRecordModalBodyOverride = (modal: modalData) => { + const { act, data } = useBackend(); + + const { disk, podready } = data; + + const { activerecord, realname, health, unidentity, strucenzymes } = + modal.args; + const damages = health.split(' - '); + return ( +
+ + {realname} + + {damages.length > 1 ? ( + <> + + {damages[0]} + +  |  + + {damages[2]} + +  |  + + {damages[3]} + +  |  + + {damages[1]} + + + ) : ( + Unknown + )} + + + {unidentity} + + + {strucenzymes} + + + + act('disk', { + option: 'load', + }) + } + > + Import + + + + + + + + + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleNavigation.tsx b/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleNavigation.tsx new file mode 100644 index 0000000000..d06866ca50 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleNavigation.tsx @@ -0,0 +1,34 @@ +import { useBackend } from '../../backend'; +import { Tabs } from '../../components'; +import { Data } from './types'; + +export const CloningConsoleNavigation = (props) => { + const { act, data } = useBackend(); + const { menu } = data; + return ( + + + act('menu', { + num: 1, + }) + } + > + Main + + + act('menu', { + num: 2, + }) + } + > + Records + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleStatus.tsx b/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleStatus.tsx new file mode 100644 index 0000000000..4034d3fed6 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleStatus.tsx @@ -0,0 +1,92 @@ +import { useBackend } from '../../backend'; +import { Box, Button, LabeledList, NoticeBox, Section } from '../../components'; +import { Data } from './types'; + +export const CloningConsoleTemp = (props) => { + const { act, data } = useBackend(); + const { temp } = data; + if (!temp || !temp.text || temp.text.length <= 0) { + return; + } + + const tempProp = { [temp.style]: true }; + return ( + + + {temp.text} + + + + )} + + + } + > + + + {scanner ? ( + Connected + ) : ( + Not connected! + )} + + + {numberofpods ? ( + {numberofpods} connected + ) : ( + None connected! + )} + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleTabs.tsx b/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleTabs.tsx new file mode 100644 index 0000000000..4399d2a3b5 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CloningConsole/CloningConsoleTabs.tsx @@ -0,0 +1,192 @@ +import { toFixed } from 'common/math'; + +import { resolveAsset } from '../../assets'; +import { useBackend } from '../../backend'; +import { + Box, + Button, + Flex, + Icon, + Image, + LabeledList, + ProgressBar, + Section, +} from '../../components'; +import { Data } from './types'; + +export const CloningConsoleMain = (props) => { + const { act, data } = useBackend(); + const { + loading, + scantemp, + occupant, + locked, + can_brainscan, + scan_mode, + numberofpods, + pods, + selected_pod, + } = data; + const isLocked = locked && !!occupant; + return ( + <> +
+ + Scanner Lock:  + + + + + } + > + + + {loading ? ( + + +   Scanning... + + ) : ( + {scantemp.text} + )} + + {!!can_brainscan && ( + + + + )} + + +
+
+ {numberofpods ? ( + pods.map((pod, i) => { + let podAction; + if (pod.status === 'cloning') { + podAction = ( + + {toFixed(pod.progress) + '%'} + + ); + } else if (pod.status === 'mess') { + podAction = ( + + ERROR + + ); + } else { + podAction = ( + + ); + } + + return ( + + + Pod #{i + 1} + = 150 ? 'good' : 'bad'} inline> + = 150 ? 'circle' : 'circle-o'} /> +   + {pod.biomass} + + {podAction} + + ); + }) + ) : ( + No pods detected. Unable to clone. + )} +
+ + ); +}; + +export const CloningConsoleRecords = (props) => { + const { act, data } = useBackend(); + const { records } = data; + if (!records.length) { + return ( + + + +
+ No records found. +
+
+ ); + } + return ( + + {records.map((record, i) => ( + + ))} + + ); +}; diff --git a/tgui/packages/tgui/interfaces/CloningConsole/index.tsx b/tgui/packages/tgui/interfaces/CloningConsole/index.tsx new file mode 100644 index 0000000000..7957732fd7 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CloningConsole/index.tsx @@ -0,0 +1,44 @@ +import { useBackend } from '../../backend'; +import { Box, Section } from '../../components'; +import { + ComplexModal, + modalRegisterBodyOverride, +} from '../../interfaces/common/ComplexModal'; +import { Window } from '../../layouts'; +import { viewRecordModalBodyOverride } from './CloningConsoleBodyOverride'; +import { CloningConsoleNavigation } from './CloningConsoleNavigation'; +import { + CloningConsoleStatus, + CloningConsoleTemp, +} from './CloningConsoleStatus'; +import { + CloningConsoleMain, + CloningConsoleRecords, +} from './CloningConsoleTabs'; +import { Data } from './types'; + +export const CloningConsole = (props) => { + const { data } = useBackend(); + + const { menu } = data; + + const tab: React.JSX.Element[] = []; + + tab[1] = ; + tab[2] = ; + + modalRegisterBodyOverride('view_rec', viewRecordModalBodyOverride); + return ( + + + + + + +
+ {tab[menu] || Error} +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/CloningConsole/types.ts b/tgui/packages/tgui/interfaces/CloningConsole/types.ts new file mode 100644 index 0000000000..1c82f25fcd --- /dev/null +++ b/tgui/packages/tgui/interfaces/CloningConsole/types.ts @@ -0,0 +1,41 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + menu: number; + scanner: string | null; + numberofpods: number | null; + pods: { + pod: string; + name: string; + biomass: number; + status: string; + progress: number; + }[]; + loading: BooleanLike; + autoprocess: BooleanLike; + can_brainscan: BooleanLike; + scan_mode: BooleanLike; + autoallowed: BooleanLike; + occupant: string; + locked: BooleanLike; + temp: { text: string; style: string }; + scantemp: { text: string; color: string }; + disk: string | null; + selected_pod: string; + records: { record: string; realname: string }[]; + podready: BooleanLike; + modal: modalData; +}; + +export type modalData = { + id: string; + text: string; + args: { + activerecord: string; + realname: string; + health: string; + unidentity: string; + strucenzymes: string; + }; + modal_type: string; +}; diff --git a/tgui/packages/tgui/interfaces/ColorMate.jsx b/tgui/packages/tgui/interfaces/ColorMate.jsx deleted file mode 100644 index dab5b5dd37..0000000000 --- a/tgui/packages/tgui/interfaces/ColorMate.jsx +++ /dev/null @@ -1,401 +0,0 @@ -import { useBackend } from '../backend'; -import { - Button, - Icon, - NoticeBox, - NumberInput, - Section, - Slider, - Table, - Tabs, -} from '../components'; -import { Window } from '../layouts'; - -export const ColorMate = (props, context) => { - const { act, data } = useBackend(context); - const { activemode, temp } = data; - const item = data.item || []; - return ( - - -
- {temp ? {temp} : null} - {Object.keys(item).length ? ( - <> - - -
-
Item:
- -
-
- -
-
Preview:
- -
-
-
- - - act('switch_modes', { - mode: 1, - }) - } - > - Tint coloring (Simple) - - - act('switch_modes', { - mode: 2, - }) - } - > - HSV coloring (Normal) - - - act('switch_modes', { - mode: 3, - }) - } - > - Matrix coloring (Advanced) - - -
Coloring: {item.name}
- - - - - - - - {activemode === 1 ? ( - - ) : activemode === 2 ? ( - - ) : ( - - )} - -
- - ) : ( -
No item inserted.
- )} -
-
-
- ); -}; - -export const ColorMateTint = (props, context) => { - const { act, data } = useBackend(context); - return ( - - ); -}; - -export const ColorMateMatrix = (props, context) => { - const { act, data } = useBackend(context); - const matrixcolors = data.matrixcolors || []; - return ( - - - - RR:{' '} - - act('set_matrix_color', { - color: 1, - value, - }) - } - /> - - - GR:{' '} - - act('set_matrix_color', { - color: 4, - value, - }) - } - /> - - - BR:{' '} - - act('set_matrix_color', { - color: 7, - value, - }) - } - /> - - - - - RG:{' '} - - act('set_matrix_color', { - color: 2, - value, - }) - } - /> - - - GG:{' '} - - act('set_matrix_color', { - color: 5, - value, - }) - } - /> - - - BG:{' '} - - act('set_matrix_color', { - color: 8, - value, - }) - } - /> - - - - - RB:{' '} - - act('set_matrix_color', { - color: 3, - value, - }) - } - /> - - - GB:{' '} - - act('set_matrix_color', { - color: 6, - value, - }) - } - /> - - - BB:{' '} - - act('set_matrix_color', { - color: 9, - value, - }) - } - /> - - - - - CR:{' '} - - act('set_matrix_color', { - color: 10, - value, - }) - } - /> - - - CG:{' '} - - act('set_matrix_color', { - color: 11, - value, - }) - } - /> - - - CB:{' '} - - act('set_matrix_color', { - color: 12, - value, - }) - } - /> - - - - RG means red will become - this much green. -
- CR means this much red will - be added. -
-
- ); -}; - -export const ColorMateHSV = (props, context) => { - const { act, data } = useBackend(context); - const { buildhue, buildsat, buildval } = data; - return ( - - -
Hue:
- - - act('set_hue', { - buildhue: value, - }) - } - /> - -
- -
Saturation:
- - - act('set_sat', { - buildsat: value, - }) - } - /> - -
- -
Value:
- - - act('set_val', { - buildval: value, - }) - } - /> - -
-
- ); -}; diff --git a/tgui/packages/tgui/interfaces/ColorMate/ColorMateColor.tsx b/tgui/packages/tgui/interfaces/ColorMate/ColorMateColor.tsx new file mode 100644 index 0000000000..a5efd4024a --- /dev/null +++ b/tgui/packages/tgui/interfaces/ColorMate/ColorMateColor.tsx @@ -0,0 +1,76 @@ +import { toFixed } from 'common/math'; + +import { useBackend } from '../../backend'; +import { Button, Slider, Table } from '../../components'; +import { Data } from './types'; + +export const ColorMateTint = (props) => { + const { act } = useBackend(); + + return ( + + ); +}; + +export const ColorMateHSV = (props) => { + const { act, data } = useBackend(); + + const { buildhue, buildsat, buildval } = data; + return ( + + +
Hue:
+ + toFixed(value)} + onDrag={(e, value: number) => + act('set_hue', { + buildhue: value, + }) + } + /> + +
+ +
Saturation:
+ + toFixed(value, 2)} + onDrag={(e, value: number) => + act('set_sat', { + buildsat: value, + }) + } + /> + +
+ +
Value:
+ + toFixed(value, 2)} + onDrag={(e, value: number) => + act('set_val', { + buildval: value, + }) + } + /> + +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ColorMate/ColorMateMatrix.tsx b/tgui/packages/tgui/interfaces/ColorMate/ColorMateMatrix.tsx new file mode 100644 index 0000000000..c9c0c5fc0d --- /dev/null +++ b/tgui/packages/tgui/interfaces/ColorMate/ColorMateMatrix.tsx @@ -0,0 +1,235 @@ +import { toFixed } from 'common/math'; + +import { useBackend } from '../../backend'; +import { Icon, NumberInput, Table } from '../../components'; +import { Data } from './types'; + +export const ColorMateMatrix = (props) => { + const { act, data } = useBackend(); + + const { matrixcolors } = data; + + return ( + + + + RR: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 1, + value, + }) + } + /> + + + GR: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 4, + value, + }) + } + /> + + + BR: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 7, + value, + }) + } + /> + + + + + RG: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 2, + value, + }) + } + /> + + + GG: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 5, + value, + }) + } + /> + + + BG: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 8, + value, + }) + } + /> + + + + + RB: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 3, + value, + }) + } + /> + + + GB: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 6, + value, + }) + } + /> + + + BB: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 9, + value, + }) + } + /> + + + + + CR: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 10, + value, + }) + } + /> + + + CG: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 11, + value, + }) + } + /> + + + CB: + toFixed(value, 2)} + onChange={(e, value: number) => + act('set_matrix_color', { + color: 12, + value, + }) + } + /> + + + + RG means red will become + this much green. +
+ CR means this much red will + be added. +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ColorMate/index.tsx b/tgui/packages/tgui/interfaces/ColorMate/index.tsx new file mode 100644 index 0000000000..8bbe62e705 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ColorMate/index.tsx @@ -0,0 +1,120 @@ +import { useBackend } from '../../backend'; +import { + Box, + Button, + Image, + NoticeBox, + Section, + Table, + Tabs, +} from '../../components'; +import { Window } from '../../layouts'; +import { ColorMateHSV, ColorMateTint } from './ColorMateColor'; +import { ColorMateMatrix } from './ColorMateMatrix'; +import { Data } from './types'; + +export const ColorMate = (props) => { + const { act, data } = useBackend(); + + const { activemode, temp, item } = data; + + const tab: React.JSX.Element[] = []; + + tab[1] = ; + tab[2] = ; + tab[3] = ; + + return ( + + +
+ {temp ? {temp} : null} + {item && Object.keys(item).length ? ( + <> + + +
+
Item:
+ +
+
+ +
+
Preview:
+ +
+
+
+ + + act('switch_modes', { + mode: 1, + }) + } + > + Tint coloring (Simple) + + + act('switch_modes', { + mode: 2, + }) + } + > + HSV coloring (Normal) + + + act('switch_modes', { + mode: 3, + }) + } + > + Matrix coloring (Advanced) + + +
Coloring: {item.name}
+ + + + + + + + {tab[activemode] || Error} + +
+ + ) : ( +
No item inserted.
+ )} +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ColorMate/types.ts b/tgui/packages/tgui/interfaces/ColorMate/types.ts new file mode 100644 index 0000000000..a56bab9c7b --- /dev/null +++ b/tgui/packages/tgui/interfaces/ColorMate/types.ts @@ -0,0 +1,22 @@ +export type Data = { + activemode: number; + matrixcolors: { + rr: number; + rg: number; + rb: number; + gr: number; + gg: number; + gb: number; + br: number; + bg: number; + bb: number; + cr: number; + cg: number; + cb: number; + }; + buildhue: number; + buildsat: number; + buildval: number; + temp: string | null; + item: { name: string; sprite: string; preview: string } | null; +}; diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx b/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx deleted file mode 100644 index 857364e55d..0000000000 --- a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx +++ /dev/null @@ -1,364 +0,0 @@ -import { useBackend } from '../backend'; -import { Box, Button, LabeledList, Section } from '../components'; -import { Window } from '../layouts'; - -export const CommunicationsConsole = (props) => { - return ( - - - - - - ); -}; - -export const CommunicationsConsoleContent = (props) => { - const { act, data } = useBackend(); - - const { menu_state } = data; - - let mainTemplate = ( - - ERRROR. Unknown menu_state: {menu_state} - Please report this to NT Technical Support. - - ); - - // 1 = main screen - if (menu_state === 1) { - mainTemplate = ; - } else if (menu_state === 2) { - // 2 = status screen - mainTemplate = ; - } else if (menu_state === 3) { - // 3 = messages screen - mainTemplate = ; - } - - return ( - <> - - {mainTemplate} - - ); -}; - -const CommunicationsConsoleMain = (props) => { - const { act, data } = useBackend(); - - const { - messages, - msg_cooldown, - emagged, - cc_cooldown, - str_security_level, - levels, - authmax, - security_level, - security_level_color, - authenticated, - atcsquelch, - boss_short, - } = data; - - let reportText = 'View (' + messages.length + ')'; - let announceText = 'Make Priority Announcement'; - if (msg_cooldown > 0) { - announceText += ' (' + msg_cooldown + 's)'; - } - let ccMessageText = emagged ? 'Message [UNKNOWN]' : 'Message ' + boss_short; - if (cc_cooldown > 0) { - ccMessageText += ' (' + cc_cooldown + 's)'; - } - - let alertLevelText = str_security_level; - let alertLevelButtons = levels.map((slevel) => { - return ( - - ); - }); - - return ( - <> -
- - - - - {(!!emagged && ( - - - - - )) || ( - - - - )} - -
-
- - - {alertLevelText} - - - {alertLevelButtons} - - - - - - - - - - - -
- - ); -}; - -const CommunicationsConsoleAuth = (props) => { - const { act, data } = useBackend(); - - const { authenticated, is_ai, esc_status, esc_callable, esc_recallable } = - data; - - let authReadable; - if (!authenticated) { - authReadable = 'Not Logged In'; - } else if (is_ai) { - authReadable = 'AI'; - } else if (authenticated === 1) { - authReadable = 'Command'; - } else if (authenticated === 2) { - authReadable = 'Site Director'; - } else { - authReadable = 'ERROR: Report This Bug!'; - } - - return ( - <> -
- - {(is_ai && ( - AI - )) || ( - - - - )} - -
-
- - {!!esc_status && ( - {esc_status} - )} - {!!esc_callable && ( - - - - )} - {!!esc_recallable && ( - - - - )} - -
- - ); -}; - -const CommunicationsConsoleMessage = (props) => { - const { act, data } = useBackend(); - - const { message_current, message_deletion_allowed, authenticated, messages } = - data; - - if (message_current) { - return ( -
act('messagelist')} - > - Return To Message List - - } - > - {message_current.contents} -
- ); - } - - let messageRows = messages.map((m) => { - return ( - - - - - ); - }); - - return ( -
act('main')}> - Back To Main Menu - - } - > - - {(messages.length && messageRows) || ( - - No messages. - - )} - -
- ); -}; - -const CommunicationsConsoleStatusDisplay = (props) => { - const { act, data } = useBackend(); - - const { stat_display, authenticated } = data; - - let presetButtons = stat_display['presets'].map((pb) => { - return ( - - ); - }); - return ( -
act('main')}> - Back To Main Menu - - } - > - - {presetButtons} - - - - - - - -
- ); -}; diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleAuth.tsx b/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleAuth.tsx new file mode 100644 index 0000000000..24b814ebee --- /dev/null +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleAuth.tsx @@ -0,0 +1,74 @@ +import { useBackend } from '../../backend'; +import { Button, LabeledList, Section } from '../../components'; +import { Data } from './types'; + +export const CommunicationsConsoleAuth = (props) => { + const { act, data } = useBackend(); + + const { authenticated, is_ai, esc_status, esc_callable, esc_recallable } = + data; + + let authReadable; + if (!authenticated) { + authReadable = 'Not Logged In'; + } else if (is_ai) { + authReadable = 'AI'; + } else if (authenticated === 1) { + authReadable = 'Command'; + } else if (authenticated === 2) { + authReadable = 'Site Director'; + } else { + authReadable = 'ERROR: Report This Bug!'; + } + + return ( + <> +
+ + {(is_ai && ( + AI + )) || ( + + + + )} + +
+
+ + {!!esc_status && ( + {esc_status} + )} + {!!esc_callable && ( + + + + )} + {!!esc_recallable && ( + + + + )} + +
+ + ); +}; diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleContent.tsx b/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleContent.tsx new file mode 100644 index 0000000000..57826b88f3 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleContent.tsx @@ -0,0 +1,37 @@ +import { useBackend } from '../../backend'; +import { Box } from '../../components'; +import { CommunicationsConsoleAuth } from './CommunicationsConsoleAuth'; +import { CommunicationsConsoleMain } from './CommunicationsConsoleMain'; +import { CommunicationsConsoleMessage } from './CommunicationsConsoleMessage'; +import { CommunicationsConsoleStatusDisplay } from './CommunicationsConsoleStatusDisplay'; +import { Data } from './types'; + +export const CommunicationsConsoleContent = (props) => { + const { data } = useBackend(); + + const { menu_state } = data; + + const tab: React.JSX.Element[] = []; + + tab[1] = ; + tab[2] = ; + tab[3] = ; + + return ( + <> + + {tab[menu_state] || } + + ); +}; + +const DefaultError = (props: { menu_state: string }) => { + const { menu_state } = props; + + return ( + + ERRROR. Unknown menu_state: {menu_state} + Please report this to NT Technical Support. + + ); +}; diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleMain.tsx b/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleMain.tsx new file mode 100644 index 0000000000..caa937b1fc --- /dev/null +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleMain.tsx @@ -0,0 +1,132 @@ +import { useBackend } from '../../backend'; +import { Button, LabeledList, Section } from '../../components'; +import { Data } from './types'; + +export const CommunicationsConsoleMain = (props) => { + const { act, data } = useBackend(); + + const { + messages, + msg_cooldown, + emagged, + cc_cooldown, + str_security_level, + levels, + authmax, + security_level, + security_level_color, + authenticated, + atcsquelch, + boss_short, + } = data; + + const reportText = 'View (' + messages.length + ')'; + let announceText = 'Make Priority Announcement'; + if (msg_cooldown > 0) { + announceText += ' (' + msg_cooldown + 's)'; + } + let ccMessageText = emagged ? 'Message [UNKNOWN]' : 'Message ' + boss_short; + if (cc_cooldown > 0) { + ccMessageText += ' (' + cc_cooldown + 's)'; + } + + const alertLevelText = str_security_level; + const alertLevelButtons = levels.map((slevel) => { + return ( + + ); + }); + + return ( + <> +
+ + + + + {(!!emagged && ( + + + + + )) || ( + + + + )} + +
+
+ + + {alertLevelText} + + + {alertLevelButtons} + + + + + + + + + + + +
+ + ); +}; diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleMessage.tsx b/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleMessage.tsx new file mode 100644 index 0000000000..e70a61bae5 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleMessage.tsx @@ -0,0 +1,69 @@ +import { useBackend } from '../../backend'; +import { Box, Button, LabeledList, Section } from '../../components'; +import { Data } from './types'; + +export const CommunicationsConsoleMessage = (props) => { + const { act, data } = useBackend(); + + const { message_current, message_deletion_allowed, authenticated, messages } = + data; + + if (message_current) { + return ( +
act('messagelist')} + > + Return To Message List + + } + > + {message_current.contents} +
+ ); + } + + let messageRows = messages.map((m) => { + return ( + + + + + ); + }); + + return ( +
act('main')}> + Back To Main Menu + + } + > + + {(messages.length && messageRows) || ( + + No messages. + + )} + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleStatusDisplay.tsx b/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleStatusDisplay.tsx new file mode 100644 index 0000000000..6ea5a7c319 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole/CommunicationsConsoleStatusDisplay.tsx @@ -0,0 +1,54 @@ +import { useBackend } from '../../backend'; +import { Button, LabeledList, Section } from '../../components'; +import { Data } from './types'; + +export const CommunicationsConsoleStatusDisplay = (props) => { + const { act, data } = useBackend(); + + const { stat_display, authenticated } = data; + + let presetButtons = stat_display['presets'].map((pb) => { + return ( + + ); + }); + return ( +
act('main')}> + Back To Main Menu + + } + > + + {presetButtons} + + + + + + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole/index.tsx b/tgui/packages/tgui/interfaces/CommunicationsConsole/index.tsx new file mode 100644 index 0000000000..891947d278 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole/index.tsx @@ -0,0 +1,12 @@ +import { Window } from '../../layouts'; +import { CommunicationsConsoleContent } from './CommunicationsConsoleContent'; + +export const CommunicationsConsole = (props) => { + return ( + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole/types.ts b/tgui/packages/tgui/interfaces/CommunicationsConsole/types.ts new file mode 100644 index 0000000000..3b3d1ac327 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole/types.ts @@ -0,0 +1,33 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + is_ai: BooleanLike; + menu_state: string; + emagged: BooleanLike; + authenticated: BooleanLike; + authmax: BooleanLike; + atcsquelch: BooleanLike; + boss_short: string; + stat_display: { + type: string; + line_1: string; + line_2: string; + presets: { name: string; label: string; desc: string }[]; + }; + security_level: number; + security_level_color: string; + str_security_level: string; + levels: { id: number; name: string; icon: string }[]; + messages: message[]; + message_deletion_allowed: BooleanLike; + message_current_id: number; + message_current: message; + current_viewing_message: number; + msg_cooldown: number; + cc_cooldown: number; + esc_callable: BooleanLike; + esc_recallable: BooleanLike; + esc_status: BooleanLike | string; +}; + +type message = { id: string; title: String; contents: string }; diff --git a/tgui/packages/tgui/interfaces/Communicator.tsx b/tgui/packages/tgui/interfaces/Communicator.tsx deleted file mode 100644 index 0bd2dd4d6b..0000000000 --- a/tgui/packages/tgui/interfaces/Communicator.tsx +++ /dev/null @@ -1,1307 +0,0 @@ -import { filter } from 'common/collections'; -import { BooleanLike } from 'common/react'; -import { decodeHtmlEntities, toTitleCase } from 'common/string'; -import { useState } from 'react'; - -import { useBackend } from '../backend'; -import { - Box, - Button, - ByondUi, - Flex, - Icon, - Input, - LabeledList, - Section, - Table, -} from '../components'; -import { Window } from '../layouts'; -import { CrewManifestContent } from './CrewManifest'; - -const HOMETAB = 1; -const PHONTAB = 2; -const CONTTAB = 3; -const MESSTAB = 4; -const MESSSUBTAB = 40; -const NEWSTAB = 5; -const NOTETAB = 6; -const WTHRTAB = 7; -const MANITAB = 8; -const SETTTAB = 9; - -let TABS = [ - HOMETAB, - PHONTAB, - CONTTAB, - MESSTAB, - MESSSUBTAB, - NEWSTAB, - NOTETAB, - WTHRTAB, - MANITAB, - SETTTAB, -]; - -let TabToTemplate = {}; // Populated under each template - -type Data = { - // GENERAL - currentTab: number; - video_comm: BooleanLike; - mapRef: string; - - // FOOTER - time: string; - connectionStatus: BooleanLike; - owner: string; - occupation: string; - - // HEADER - flashlight: BooleanLike; - - // HOMETAB - homeScreen: { number: number; module: string; icon: string }[]; - - // PHONETAB - targetAddress: string; - voice_mobs: { name: string; true_name: string; ref: string }[]; - communicating: { - address: string; - name: string; - true_name: string; - ref: string; - }[]; - requestsReceived: { address: string; name: string; ref: string }[]; - invitesSent: { address: string; name: string }[]; - phone_video_comm: string; - selfie_mode: BooleanLike; - - // MESSAGING - imContacts: { address: string; name: string }[]; - targetAddressName: string; - imList: { address: string; to_address: string; im: string }[]; - - // SETTINGS - address: string; - visible: BooleanLike; - ring: BooleanLike; - - // NEWSTAB - feeds: { index: number; name: string }[]; - target_feed: { name: string; author: string; messages: NewsMessage[] }; - latest_news: NewsMessage[]; - - // NOTETAB - note: string; -}; - -type NewsMessage = { - ref: string; - body: string; - img: string; - caption: string; - message_type: string; - author: string; - time_stamp: string; - - index: number; - channel: string; -}; - -function notFound(val) { - return TABS.includes(val); -} - -export const Communicator = (props) => { - const { act, data } = useBackend(); - - const { - currentTab, - video_comm, - owner, - occupation, - connectionStatus, - address, - visible, - ring, - selfie_mode, - homeScreen, - targetAddress, - voice_mobs, - phone_video_comm, - communicating, - requestsReceived, - invitesSent, - imContacts, - targetAddressName, - imList, - feeds, - target_feed, - latest_news, - note, - } = data; - - const validCharacters = [ - '0', - '1', - '2', - '3', - '4', - '5', - '6', - '7', - '8', - '9', - 'A', - 'B', - 'C', - 'D', - 'E', - 'F', - ]; - - let buttonArray = validCharacters.map((char) => ( - - )); - - let finalArray: any[] = []; - - for (let i = 0; i < buttonArray.length; i += 4) { - finalArray.push( - - {buttonArray[i]} - {buttonArray[i + 1]} - {buttonArray[i + 2]} - {buttonArray[i + 3]} - , - ); - } - /* 0: Fullscreen Video - * 1: Popup Video - * 2: Minimized Video - */ - const [videoSetting, setVideoSetting] = useState(0); - const [clipboardMode, setClipboardMode] = useState(false); - - return ( - - - {video_comm && ( - - )} - {(!video_comm || videoSetting !== 0) && ( - <> - - - {(currentTab === HOMETAB && ( - - {homeScreen.map((app) => ( - - - {app.module} - - ))} - - )) || - (currentTab === PHONTAB && ( -
- - - - - - act('write_target_address', { val: val }) - } - /> - - - - Dial - - {/* Message */} - - - Message - - {/* Hang Up */} - - - Hang Up - - - - -
- - - - - -
- {(!!voice_mobs.length && ( - - {voice_mobs.map((mob) => ( - - - - ))} - - )) || No connections} -
-
- {(!!communicating.length && ( - - {communicating.map((comm) => ( - - - {decodeHtmlEntities(comm.name)} - - - - {(video_comm === null && ( - - )) || - (phone_video_comm === comm.ref && ( - - ))} - - - ))} -
- )) || No connections} -
-
- {(!!requestsReceived.length && ( - - {requestsReceived.map((request) => ( - - {decodeHtmlEntities(request.address)} - - - - - - ))} - - )) || No requests received.} -
-
- {(!!invitesSent.length && ( - - {invitesSent.map((invite) => ( - - {decodeHtmlEntities(invite.address)} - - - - - ))} - - )) || No invites sent.} -
-
-
- )) || - (currentTab === CONTTAB && ) || - (currentTab === MESSTAB && ( -
- {(imContacts.length && ( - - {imContacts.map((device) => ( - - - {decodeHtmlEntities(device.name)}: - - - {device.address} - - - - - - ))} -
- )) || ( - - You haven't sent any messages yet. - - - )} -
- )) || - (currentTab === MESSSUBTAB && - (clipboardMode ? ( -
- {enforceLengthLimit( - 'Conversation with ', - decodeHtmlEntities(targetAddressName), - 30, - )} - - } - buttons={ - -
- ) : ( -
- {enforceLengthLimit( - 'Conversation with ', - decodeHtmlEntities(targetAddressName), - 30, - )} - - } - buttons={ - -
- ))) || - (currentTab === NEWSTAB && ( -
- {(!feeds.length && ( - - Error: No newsfeeds available. Please try again later. - - )) || - (target_feed && ( -
- act('newsfeed', { newsfeed: null }) - } - > - Back - - } - > - {target_feed.messages.map((message) => ( -
- - {decodeHtmlEntities(message.body)} - {!!message.img && ( - - - {decodeHtmlEntities(message.caption) || null} - - )} - - [{message.message_type} by{' '} - {decodeHtmlEntities(message.author)} -{' '} - {message.time_stamp}] - -
- ))} -
- )) || ( - <> -
-
- {latest_news.map((news) => ( - -
- {decodeHtmlEntities(news.channel)} - -
- - {decodeHtmlEntities(news.body)} - {!!news.img && ( - - [image omitted, view story for more - details] - {news.caption || null} - - )} - - [{news.message_type} by{' '} - - {news.author} - {' '} - - {news.time_stamp}] - -
- ))} -
-
-
- {feeds.map((feed) => ( - - ))} -
- - )} -
- )) || - (currentTab === NOTETAB && ( -
act('edit')}> - Edit Notes - - } - > -
- {note} -
-
- )) || - (currentTab === WTHRTAB && ) || - (currentTab === MANITAB && ) || - (currentTab === SETTTAB && ( -
- - - - - - - - - {decodeHtmlEntities(occupation)} - - - {connectionStatus === 1 ? ( - Connected - ) : ( - Disconnected - )} - - - {address} - - - act('toggle_visibility')} - > - {visible - ? 'This device can be seen by other devices.' - : 'This device is invisible to other devices.'} - - - - act('toggle_ringer')} - > - {ring ? 'Ringer on.' : 'Ringer off.'} - - - - -
- )) || - (notFound(currentTab) && )} -
- - - )} -
-
- ); -}; - -const VideoComm = (props) => { - const { act, data } = useBackend(); - - const { video_comm, mapRef } = data; - - const { videoSetting, setVideoSetting } = props; - - if (videoSetting === 0) { - return ( - - - - -
- - - ); - } - return null; -}; - -const TemplateError = (props) => { - const { act, data } = useBackend(); - - const { currentTab } = data; - - return ( -
- You tried to access tab #{currentTab}, but there was no template defined! -
- ); -}; - -const CommunicatorHeader = (props) => { - const { act, data } = useBackend(); - - const { time, connectionStatus, owner, occupation } = data; - - return ( -
- - {time} - - - - {decodeHtmlEntities(owner)} - {decodeHtmlEntities(occupation)} - -
- ); -}; - -const CommunicatorFooter = (props) => { - const { act, data } = useBackend(); - - const { flashlight } = data; - - const { videoSetting, setVideoSetting } = props; - - return ( - - -
+ + + ); + } + return null; +}; diff --git a/tgui/packages/tgui/interfaces/Communicator/CommunicatorHomeTab.tsx b/tgui/packages/tgui/interfaces/Communicator/CommunicatorHomeTab.tsx new file mode 100644 index 0000000000..9e8809cc77 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Communicator/CommunicatorHomeTab.tsx @@ -0,0 +1,67 @@ +import { useBackend } from '../../backend'; +import { Box, Button, Flex, Icon } from '../../components'; +import { Data } from './types'; + +export const CommunicatorHomeTab = (props) => { + const { act, data } = useBackend(); + + const { homeScreen } = data; + + return ( + + {homeScreen.map((app) => ( + + + {app.module} + + ))} + + ); +}; + +/* Helper for notifications (yes this is a mess, but whatever, it works) */ +const hasNotifications = (app: string | null) => { + const { data } = useBackend(); + + const { + /* Phone Notifications */ + voice_mobs, + communicating, + requestsReceived, + invitesSent, + video_comm, + } = data; + + if (app === 'Phone') { + if ( + voice_mobs.length || + communicating.length || + requestsReceived.length || + invitesSent.length || + video_comm + ) { + return true; + } + } + + return false; +}; diff --git a/tgui/packages/tgui/interfaces/Communicator/CommunicatorMessageSubTab.tsx b/tgui/packages/tgui/interfaces/Communicator/CommunicatorMessageSubTab.tsx new file mode 100644 index 0000000000..5e15ccfb36 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Communicator/CommunicatorMessageSubTab.tsx @@ -0,0 +1,190 @@ +import { decodeHtmlEntities } from 'common/string'; + +import { useBackend } from '../../backend'; +import { Box, Button, Section } from '../../components'; +import { Data } from './types'; + +export const CommunicatorMessageSubTab = (props: { + clipboardMode: boolean; + onClipboardMode: Function; +}) => { + const { act, data } = useBackend(); + + const { clipboardMode, onClipboardMode } = props; + + const { targetAddress, targetAddressName, imList } = data; + + return clipboardMode ? ( +
+ {enforceLengthLimit( + 'Conversation with ', + decodeHtmlEntities(targetAddressName), + 30, + )} + + } + buttons={ + +
+ ) : ( +
+ {enforceLengthLimit( + 'Conversation with ', + decodeHtmlEntities(targetAddressName), + 30, + )} + + } + buttons={ + +
+ ); +}; + +/* Actual messaging conversation */ +const IsIMOurs = ( + im: { address: string; to_address: string; im: string }, + targetAddress: string, +) => { + return im.address !== targetAddress; +}; + +const enforceLengthLimit = (prefix: string, name: string, length: number) => { + if ((prefix + name).length > length) { + if (name.length > length) { + return name.slice(0, length) + '...'; + } + return name; + } + return prefix + name; +}; + +const findClassMessage = ( + im: { address: string; to_address: string; im: string }, + targetAddress: string, + lastIndex: number, + filterArray: { + address: string; + to_address: string; + im: string; + }[], +) => { + if (lastIndex < 0 || lastIndex > filterArray.length) { + return IsIMOurs(im, targetAddress) + ? 'TinderMessage_First_Sent' + : 'TinderMessage_First_Received'; + } + + let thisSent = IsIMOurs(im, targetAddress); + let lastSent = IsIMOurs(filterArray[lastIndex], targetAddress); + if (thisSent && lastSent) { + return 'TinderMessage_Subsequent_Sent'; + } else if (!thisSent && !lastSent) { + return 'TinderMessage_Subsequent_Received'; + } + return thisSent ? 'TinderMessage_First_Sent' : 'TinderMessage_First_Received'; +}; diff --git a/tgui/packages/tgui/interfaces/Communicator/CommunicatorMessageTab.tsx b/tgui/packages/tgui/interfaces/Communicator/CommunicatorMessageTab.tsx new file mode 100644 index 0000000000..6fe344719a --- /dev/null +++ b/tgui/packages/tgui/interfaces/Communicator/CommunicatorMessageTab.tsx @@ -0,0 +1,63 @@ +import { decodeHtmlEntities } from 'common/string'; + +import { useBackend } from '../../backend'; +import { Box, Button, Section, Table } from '../../components'; +import { CONTTAB, MESSSUBTAB } from './constants'; +import { Data } from './types'; + +export const CommunicatorMessageTab = (props) => { + const { act, data } = useBackend(); + + const { imContacts } = data; + + return ( +
+ {(imContacts.length && ( + + {imContacts.map((device) => ( + + + {decodeHtmlEntities(device.name)}: + + + {device.address} + + + + + + ))} +
+ )) || ( + + You haven't sent any messages yet. + + + )} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/Communicator/CommunicatorNewsTab.tsx b/tgui/packages/tgui/interfaces/Communicator/CommunicatorNewsTab.tsx new file mode 100644 index 0000000000..5ed6049bfd --- /dev/null +++ b/tgui/packages/tgui/interfaces/Communicator/CommunicatorNewsTab.tsx @@ -0,0 +1,105 @@ +import { decodeHtmlEntities } from 'common/string'; + +import { useBackend } from '../../backend'; +import { Box, Button, Section } from '../../components'; +import { Data } from './types'; + +export const CommunicatorNewsTab = (props) => { + const { act, data } = useBackend(); + + const { feeds, target_feed, latest_news } = data; + + return ( +
+ {(!feeds.length && ( + + Error: No newsfeeds available. Please try again later. + + )) || + (target_feed && ( +
act('newsfeed', { newsfeed: null })} + > + Back + + } + > + {target_feed.messages.map((message) => ( +
+ - {decodeHtmlEntities(message.body)} + {!!message.img && ( + + + {decodeHtmlEntities(message.caption) || null} + + )} + + [{message.message_type} by{' '} + {decodeHtmlEntities(message.author)} - {message.time_stamp}] + +
+ ))} +
+ )) || ( + <> +
+
+ {latest_news.map((news) => ( + +
+ {decodeHtmlEntities(news.channel)} + +
+ - {decodeHtmlEntities(news.body)} + {!!news.img && ( + + [image omitted, view story for more details] + {news.caption || null} + + )} + + [{news.message_type} by{' '} + + {news.author} + {' '} + - {news.time_stamp}] + +
+ ))} +
+
+
+ {feeds.map((feed) => ( + + ))} +
+ + )} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/Communicator/CommunicatorNoteTab.tsx b/tgui/packages/tgui/interfaces/Communicator/CommunicatorNoteTab.tsx new file mode 100644 index 0000000000..35edfc6a61 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Communicator/CommunicatorNoteTab.tsx @@ -0,0 +1,34 @@ +import { useBackend } from '../../backend'; +import { Button, Section } from '../../components'; +import { Data } from './types'; + +export const CommunicatorNoteTab = (props) => { + const { act, data } = useBackend(); + + const { note } = data; + + return ( +
act('edit')}> + Edit Notes + + } + > +
+ {note} +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/Communicator/CommunicatorPhoneTab.tsx b/tgui/packages/tgui/interfaces/Communicator/CommunicatorPhoneTab.tsx new file mode 100644 index 0000000000..4e50303131 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Communicator/CommunicatorPhoneTab.tsx @@ -0,0 +1,328 @@ +import { decodeHtmlEntities } from 'common/string'; + +import { useBackend } from '../../backend'; +import { + Box, + Button, + Flex, + Icon, + Input, + LabeledList, + Section, + Table, +} from '../../components'; +import { MESSTAB } from './constants'; +import { Data } from './types'; + +export const CommunicatorPhoneTab = (props) => { + const { act, data } = useBackend(); + + const { selfie_mode, targetAddress } = data; + + const validCharacters = [ + '0', + '1', + '2', + '3', + '4', + '5', + '6', + '7', + '8', + '9', + 'A', + 'B', + 'C', + 'D', + 'E', + 'F', + ]; + + const buttonArray = validCharacters.map((char) => ( + + )); + + let finalArray: React.JSX.Element[] = []; + + for (let i = 0; i < buttonArray.length; i += 4) { + finalArray.push( + + {buttonArray[i]} + {buttonArray[i + 1]} + {buttonArray[i + 2]} + {buttonArray[i + 3]} + , + ); + } + + return ( +
+ + + + + act('write_target_address', { val: val })} + /> + + + + Dial + + {/* Message */} + + + Message + + {/* Hang Up */} + + + Hang Up + + + + +
+ + + + + + + + + +
+
+ ); +}; + +const CommunicatorPhoneTabExternal = (props) => { + const { act, data } = useBackend(); + + const { voice_mobs } = data; + + return ( +
+ {(!!voice_mobs.length && ( + + {voice_mobs.map((mob) => ( + + + + ))} + + )) || No connections} +
+ ); +}; + +const CommunicatorPhoneTabInternal = (props) => { + const { act, data } = useBackend(); + + const { communicating, video_comm, phone_video_comm } = data; + + return ( +
+ {(!!communicating.length && ( + + {communicating.map((comm) => ( + + + {decodeHtmlEntities(comm.name)} + + + + {(video_comm === null && ( + + )) || + (phone_video_comm === comm.ref && ( + + ))} + + + ))} +
+ )) || No connections} +
+ ); +}; + +const CommunicatorPhoneTabRequest = (props) => { + const { act, data } = useBackend(); + + const { requestsReceived } = data; + + return ( +
+ {(!!requestsReceived.length && ( + + {requestsReceived.map((request) => ( + + {decodeHtmlEntities(request.address)} + + + + + + ))} + + )) || No requests received.} +
+ ); +}; + +const CommunicatorPhoneTabInvite = (props) => { + const { act, data } = useBackend(); + + const { invitesSent } = data; + + return ( +
+ {(!!invitesSent.length && ( + + {invitesSent.map((invite) => ( + + {decodeHtmlEntities(invite.address)} + + + + + ))} + + )) || No invites sent.} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/Communicator/CommunicatorSettingsTab.tsx b/tgui/packages/tgui/interfaces/Communicator/CommunicatorSettingsTab.tsx new file mode 100644 index 0000000000..3cfcb217b1 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Communicator/CommunicatorSettingsTab.tsx @@ -0,0 +1,74 @@ +import { decodeHtmlEntities } from 'common/string'; + +import { useBackend } from '../../backend'; +import { Box, Button, LabeledList, Section } from '../../components'; +import { Data } from './types'; + +export const CommunicatorSettingsTab = (props) => { + const { act, data } = useBackend(); + + const { + address, + selfie_mode, + owner, + occupation, + connectionStatus, + visible, + ring, + } = data; + + return ( +
+ + + + + + + + + {decodeHtmlEntities(occupation)} + + + {connectionStatus === 1 ? ( + Connected + ) : ( + Disconnected + )} + + + {address} + + + act('toggle_visibility')} + > + {visible + ? 'This device can be seen by other devices.' + : 'This device is invisible to other devices.'} + + + + act('toggle_ringer')} + > + {ring ? 'Ringer on.' : 'Ringer off.'} + + + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/Communicator/CommunicatorWeatherTab.tsx b/tgui/packages/tgui/interfaces/Communicator/CommunicatorWeatherTab.tsx new file mode 100644 index 0000000000..5c7412253d --- /dev/null +++ b/tgui/packages/tgui/interfaces/Communicator/CommunicatorWeatherTab.tsx @@ -0,0 +1,97 @@ +import { filter } from 'common/collections'; +import { decodeHtmlEntities, toTitleCase } from 'common/string'; + +import { useBackend } from '../../backend'; +import { Box, LabeledList, Section } from '../../components'; +import { AirContent, WeatherTabData } from './types'; + +export const CommunicatorWeatherTab = (props) => { + const { act, data } = useBackend(); + + const { aircontents, weather } = data; + + const deg: string = '\u00B0'; + + return ( +
+
+ + {filter( + (i: AirContent) => + i.val !== '0' || + i.entry === 'Pressure' || + i.entry === 'Temperature', + )(aircontents).map((item: AirContent) => ( + + {item.val} + {decodeHtmlEntities(item.units)} + + ))} + +
+
+ {(!!weather.length && ( + + {weather.map((wr) => ( + + + {wr.Time} + + {toTitleCase(wr.Weather)} + + + Current: {wr.Temperature.toFixed()} {deg}C | High:{' '} + {wr.High.toFixed()} {deg}C | Low: {wr.Low.toFixed()} {deg}C + + + {wr.WindDir} + + + {wr.WindSpeed} + + + {decodeHtmlEntities(wr.Forecast)} + + + + ))} + + )) || ( + + No weather reports available. Please check back later. + + )} +
+
+ ); +}; + +/* Weather App */ +const getItemColor = ( + value: number, + min2: number, + min1: number, + max1: number, + max2: number, +) => { + if (value < min2) { + return 'bad'; + } else if (value < min1) { + return 'average'; + } else if (value > max1) { + return 'average'; + } else if (value > max2) { + return 'bad'; + } + return 'good'; +}; diff --git a/tgui/packages/tgui/interfaces/Communicator/constants.ts b/tgui/packages/tgui/interfaces/Communicator/constants.ts new file mode 100644 index 0000000000..f37d974320 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Communicator/constants.ts @@ -0,0 +1,27 @@ +export const HOMETAB = 1; +export const PHONTAB = 2; +export const CONTTAB = 3; +export const MESSTAB = 4; +export const MESSSUBTAB = 40; +export const NEWSTAB = 5; +export const NOTETAB = 6; +export const WTHRTAB = 7; +export const MANITAB = 8; +export const SETTTAB = 9; + +export const tabs = [ + HOMETAB, + PHONTAB, + CONTTAB, + MESSTAB, + MESSSUBTAB, + NEWSTAB, + NOTETAB, + WTHRTAB, + MANITAB, + SETTTAB, +]; + +export function notFound(val) { + return tabs.includes(val); +} diff --git a/tgui/packages/tgui/interfaces/Communicator/index.tsx b/tgui/packages/tgui/interfaces/Communicator/index.tsx new file mode 100644 index 0000000000..0194169071 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Communicator/index.tsx @@ -0,0 +1,88 @@ +import { useState } from 'react'; + +import { useBackend } from '../../backend'; +import { Box } from '../../components'; +import { Window } from '../../layouts'; +import { CrewManifestContent } from '../CrewManifest'; +import { CommunicatorContactTab } from './CommunicatorContactTab'; +import { + CommunicatorFooter, + CommunicatorHeader, + TemplateError, + VideoComm, +} from './CommunicatorGeneral'; +import { CommunicatorHomeTab } from './CommunicatorHomeTab'; +import { CommunicatorMessageSubTab } from './CommunicatorMessageSubTab'; +import { CommunicatorMessageTab } from './CommunicatorMessageTab'; +import { CommunicatorNewsTab } from './CommunicatorNewsTab'; +import { CommunicatorNoteTab } from './CommunicatorNoteTab'; +import { CommunicatorPhoneTab } from './CommunicatorPhoneTab'; +import { CommunicatorSettingsTab } from './CommunicatorSettingsTab'; +import { CommunicatorWeatherTab } from './CommunicatorWeatherTab'; +import { notFound, tabs } from './constants'; +import { Data } from './types'; + +export const Communicator = () => { + const { act, data } = useBackend(); + + const { currentTab, video_comm } = data; + + const tab: React.JSX.Element[] = []; + + const [videoSetting, setVideoSetting] = useState(0); + const [clipboardMode, setClipboardMode] = useState(false); + + function handleClipboardMode(value: boolean) { + setClipboardMode(value); + } + + tab[tabs[0]] = ; + tab[tabs[1]] = ; + tab[tabs[2]] = ; + tab[tabs[3]] = ; + tab[tabs[4]] = ( + + ); + tab[tabs[5]] = ; + tab[tabs[6]] = ; + tab[tabs[7]] = ; + tab[tabs[8]] = ; + tab[tabs[9]] = ; + + return ( + + + {video_comm && ( + + )} + {(!video_comm || videoSetting !== 0) && ( + <> + + + {tab[currentTab] || + (notFound(currentTab) && ( + + ))} + + + + )} + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Communicator/types.ts b/tgui/packages/tgui/interfaces/Communicator/types.ts new file mode 100644 index 0000000000..7d32b0e34b --- /dev/null +++ b/tgui/packages/tgui/interfaces/Communicator/types.ts @@ -0,0 +1,96 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + // GENERAL + currentTab: number; + video_comm: BooleanLike; + mapRef: string; + + // FOOTER + time: string; + connectionStatus: BooleanLike; + owner: string; + occupation: string; + + // HEADER + flashlight: BooleanLike; + + // HOMETAB + homeScreen: { number: number; module: string; icon: string }[]; + + // PHONETAB + targetAddress: string; + voice_mobs: { name: string; true_name: string; ref: string }[]; + communicating: { + address: string; + name: string; + true_name: string; + ref: string; + }[]; + requestsReceived: { address: string; name: string; ref: string }[]; + invitesSent: { address: string; name: string }[]; + phone_video_comm: string; + selfie_mode: BooleanLike; + + // MESSAGING + imContacts: { address: string; name: string }[]; + targetAddressName: string; + imList: { address: string; to_address: string; im: string }[]; + + // SETTINGS + address: string; + visible: BooleanLike; + ring: BooleanLike; + + // NEWSTAB + feeds: { index: number; name: string }[]; + target_feed: { name: string; author: string; messages: NewsMessage[] } | null; + latest_news: NewsMessage[]; + + // NOTETAB + note: string; +}; + +type NewsMessage = { + ref: string; + body: string; + img: string; + caption: string; + message_type: string; + author: string; + time_stamp: string; + + index: number; + channel: string; +}; + +export type ContactsTabData = { + knownDevices: { address: string; name: string }[]; +}; + +export type WeatherTabData = { + aircontents: AirContent[]; + weather: Weather[]; +}; + +export type AirContent = { + entry: string; + val; + bad_low: number; + poor_low: number; + poor_high: number; + bad_high: number; + units; +}; + +type Weather = { + Planet: string; + Time: string; + Weather: string; + Temperature; + High; + Low; + WindDir; + WindSpeed; + Forecast: string; +}; diff --git a/tgui/packages/tgui/interfaces/ComputerFabricator/CfStep1.tsx b/tgui/packages/tgui/interfaces/ComputerFabricator/CfStep1.tsx new file mode 100644 index 0000000000..e950bdad7c --- /dev/null +++ b/tgui/packages/tgui/interfaces/ComputerFabricator/CfStep1.tsx @@ -0,0 +1,53 @@ +import { useBackend } from '../../backend'; +import { Box, Button, Section, Table } from '../../components'; + +// This had a pretty gross backend so this was unfortunately one of the +// best ways of doing it. +export const CfStep1 = (props) => { + const { act } = useBackend(); + return ( +
+ + Choose your Device + + + + + + + + + + + +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ComputerFabricator.jsx b/tgui/packages/tgui/interfaces/ComputerFabricator/CfStep2.tsx similarity index 67% rename from tgui/packages/tgui/interfaces/ComputerFabricator.jsx rename to tgui/packages/tgui/interfaces/ComputerFabricator/CfStep2.tsx index 619f5c0feb..6975129674 100644 --- a/tgui/packages/tgui/interfaces/ComputerFabricator.jsx +++ b/tgui/packages/tgui/interfaces/ComputerFabricator/CfStep2.tsx @@ -1,91 +1,31 @@ import { multiline } from 'common/string'; -import { useBackend } from '../backend'; -import { Box, Button, Section, Table, Tooltip } from '../components'; -import { Window } from '../layouts'; +import { useBackend } from '../../backend'; +import { Box, Button, Section, Table, Tooltip } from '../../components'; +import { Data } from './types'; -export const ComputerFabricator = (props) => { - const { act, data } = useBackend(); - return ( - - -
- Your perfect device, only three steps away... -
- {data.state !== 0 && ( - - )} - {data.state === 0 && } - {data.state === 1 && } - {data.state === 2 && } - {data.state === 3 && } -
-
- ); -}; +export const CfStep2 = (props) => { + const { act, data } = useBackend(); -// This had a pretty gross backend so this was unfortunately one of the -// best ways of doing it. -const CfStep1 = (props) => { - const { act, data } = useBackend(); - return ( -
- - Choose your Device - - - - - - - - - - - -
-
-
- ); -}; + const { + totalprice, + hw_battery, + hw_disk, + hw_netcard, + hw_nanoprint, + hw_card, + devtype, + hw_cpu, + hw_tesla, + } = data; -const CfStep2 = (props) => { - const { act, data } = useBackend(); return (
- {data.totalprice}â‚® + {totalprice}â‚® } > @@ -103,7 +43,7 @@ const CfStep2 = (props) => { - {data.devtype !== 2 && ( + {devtype !== 2 && ( Processor Unit: @@ -329,7 +269,7 @@ const CfStep2 = (props) => {
); }; - -const CfStep3 = (props) => { - const { act, data } = useBackend(); - return ( -
- - Your device is ready for fabrication... - - - Please swipe your ID now to authorize payment of: -   - - {data.totalprice}â‚® - - -
- ); -}; - -const CfStep4 = (props) => { - return ( -
- - Thank you for your purchase! - - - If you experience any difficulties with your new device, please contact - your local network administrator. - -
- ); -}; diff --git a/tgui/packages/tgui/interfaces/ComputerFabricator/CfStep3.tsx b/tgui/packages/tgui/interfaces/ComputerFabricator/CfStep3.tsx new file mode 100644 index 0000000000..668b739f29 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ComputerFabricator/CfStep3.tsx @@ -0,0 +1,19 @@ +import { Box, Section } from '../../components'; + +export const CfStep3 = (props: { totalprice: number }) => { + const { totalprice } = props; + return ( +
+ + Your device is ready for fabrication... + + + Please swipe your ID now to authorize payment of: +   + + {totalprice}â‚® + + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ComputerFabricator/CfStep4.tsx b/tgui/packages/tgui/interfaces/ComputerFabricator/CfStep4.tsx new file mode 100644 index 0000000000..62fb59fa85 --- /dev/null +++ b/tgui/packages/tgui/interfaces/ComputerFabricator/CfStep4.tsx @@ -0,0 +1,15 @@ +import { Box, Section } from '../../components'; + +export const CfStep4 = (props) => { + return ( +
+ + Thank you for your purchase! + + + If you experience any difficulties with your new device, please contact + your local network administrator. + +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ComputerFabricator/index.tsx b/tgui/packages/tgui/interfaces/ComputerFabricator/index.tsx new file mode 100644 index 0000000000..b3919e0d0a --- /dev/null +++ b/tgui/packages/tgui/interfaces/ComputerFabricator/index.tsx @@ -0,0 +1,37 @@ +import { useBackend } from '../../backend'; +import { Button, Section } from '../../components'; +import { Window } from '../../layouts'; +import { CfStep1 } from './CfStep1'; +import { CfStep2 } from './CfStep2'; +import { CfStep3 } from './CfStep3'; +import { CfStep4 } from './CfStep4'; +import { Data } from './types'; + +export const ComputerFabricator = (props) => { + const { act, data } = useBackend(); + + const { state, totalprice } = data; + + const tab: React.JSX.Element[] = []; + + tab[0] = ; + tab[1] = ; + tab[2] = ; + tab[3] = ; + + return ( + + +
+ Your perfect device, only three steps away... +
+ {state !== 0 && ( + + )} + {tab[state]} +
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/ComputerFabricator/types.ts b/tgui/packages/tgui/interfaces/ComputerFabricator/types.ts new file mode 100644 index 0000000000..405a1007bd --- /dev/null +++ b/tgui/packages/tgui/interfaces/ComputerFabricator/types.ts @@ -0,0 +1,14 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + state: number; + devtype: number | undefined; + hw_battery: number | undefined; + hw_disk: number | undefined; + hw_netcard: number | undefined; + hw_tesla: BooleanLike; + hw_nanoprint: BooleanLike; + hw_card: BooleanLike; + hw_cpu: number | undefined; + totalprice: number | undefined; +}; diff --git a/tgui/packages/tgui/interfaces/CookingAppliance.jsx b/tgui/packages/tgui/interfaces/CookingAppliance.tsx similarity index 87% rename from tgui/packages/tgui/interfaces/CookingAppliance.jsx rename to tgui/packages/tgui/interfaces/CookingAppliance.tsx index 4efa443a6a..7b951cd5db 100644 --- a/tgui/packages/tgui/interfaces/CookingAppliance.jsx +++ b/tgui/packages/tgui/interfaces/CookingAppliance.tsx @@ -1,3 +1,5 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { AnimatedNumber, @@ -9,8 +11,22 @@ import { } from '../components'; import { Window } from '../layouts'; +type Data = { + temperature: number; + optimalTemp: number; + temperatureEnough: BooleanLike; + efficiency: number; + containersRemovable: BooleanLike; + our_contents: { + empty: BooleanLike; + progress: number; + progressText: string; + container: string | null; + }[]; +}; + export const CookingAppliance = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { temperature, diff --git a/tgui/packages/tgui/interfaces/CrewMonitor.jsx b/tgui/packages/tgui/interfaces/CrewMonitor.jsx deleted file mode 100644 index 0dfb9c3955..0000000000 --- a/tgui/packages/tgui/interfaces/CrewMonitor.jsx +++ /dev/null @@ -1,188 +0,0 @@ -import { sortBy } from 'common/collections'; -import { flow } from 'common/fp'; -import { useState } from 'react'; - -import { useBackend } from '../backend'; -import { Box, Button, Icon, NanoMap, Table, Tabs } from '../components'; -import { Window } from '../layouts'; - -const getStatText = (cm) => { - if (cm.dead) { - return 'Deceased'; - } - if (parseInt(cm.stat, 10) === 1) { - // Unconscious - return 'Unconscious'; - } - return 'Living'; -}; - -const getStatColor = (cm) => { - if (cm.dead) { - return 'red'; - } - if (parseInt(cm.stat, 10) === 1) { - // Unconscious - return 'orange'; - } - return 'green'; -}; - -export const CrewMonitor = () => { - const [tabIndex, setTabIndex] = useState(0); - const [zoom, setZoom] = useState(1); - - function handleTabIndex(value) { - setTabIndex(value); - } - - function handleZoom(value) { - setZoom(value); - } - - return ( - - - - - - ); -}; - -export const CrewMonitorContent = (props) => { - const { act, data, config } = useBackend(); - - const crew = flow([ - sortBy((cm) => cm.name), - sortBy((cm) => cm?.x), - sortBy((cm) => cm?.y), - sortBy((cm) => cm?.realZ), - ])(data.crewmembers || []); - - let body; - // Data view - if (props.tabIndex === 0) { - body = ( - - - Name - Status - Location - - {crew.map((cm) => ( - - - {cm.name} ({cm.assignment}) - - - - {getStatText(cm)} - - {cm.sensor_type >= 2 ? ( - - {'('} - - {cm.brute} - - {'|'} - - {cm.fire} - - {'|'} - - {cm.tox} - - {'|'} - - {cm.oxy} - - {')'} - - ) : null} - - - {cm.sensor_type === 3 ? ( - data.isAI ? ( - - ) : ( - cm.area + ' (' + cm.x + ', ' + cm.y + ', ' + cm.z + ')' - ) - ) : ( - 'Not Available' - )} - - - ))} -
- ); - } else if (props.tabIndex === 1) { - // Please note, if you ever change the zoom values, - // you MUST update styles/components/Tooltip.scss - // and change the @for scss to match. - body = ; - } else { - body = 'ERROR'; - } - - return ( - <> - - props.onTabIndex(0)} - > - Data View - - props.onTabIndex(1)} - > - Map View - - - {body} - - ); -}; - -const CrewMonitorMapView = (props) => { - const { act, config, data } = useBackend(); - return ( - - props.onZoom(v)}> - {data.crewmembers - .filter( - (x) => x.sensor_type === 3 && ~~x.realZ === ~~config.mapZLevel, - ) - .map((cm) => ( - - ))} - - - ); -}; diff --git a/tgui/packages/tgui/interfaces/CrewMonitor.tsx b/tgui/packages/tgui/interfaces/CrewMonitor.tsx new file mode 100644 index 0000000000..385f158dd8 --- /dev/null +++ b/tgui/packages/tgui/interfaces/CrewMonitor.tsx @@ -0,0 +1,231 @@ +import { sortBy } from 'common/collections'; +import { flow } from 'common/fp'; +import { BooleanLike } from 'common/react'; +import { useState } from 'react'; + +import { useBackend } from '../backend'; +import { Box, Button, Icon, NanoMap, Table, Tabs } from '../components'; +import { Window } from '../layouts'; + +type Data = { + zoomScale: number; + isAI: BooleanLike; + map_levels: number[]; + crewmembers: crewmember[]; +}; + +type crewmember = { + sensor_type: number; + name: string; + rank: string; + assignment: string; + dead: BooleanLike; + stat: number; + oxy: number; + tox: number; + fire: number; + brute: number; + area: string; + x: number; + y: number; + realZ: number; + z: number; + ref: string; +}; + +const getStatText = (cm: crewmember) => { + if (cm.dead) { + return 'Deceased'; + } + if (cm.stat === 1) { + // Unconscious + return 'Unconscious'; + } + return 'Living'; +}; + +const getStatColor = (cm: crewmember) => { + if (cm.dead) { + return 'red'; + } + if (cm.stat === 1) { + // Unconscious + return 'orange'; + } + return 'green'; +}; + +export const CrewMonitor = () => { + const [tabIndex, setTabIndex] = useState(0); + const [zoom, setZoom] = useState(1); + + function handleTabIndex(value: number) { + setTabIndex(value); + } + + function handleZoom(value: number) { + setZoom(value); + } + + return ( + + + + + + ); +}; + +export const CrewMonitorContent = (props: { + tabIndex: number; + zoom: number; + onTabIndex: Function; + onZoom: Function; +}) => { + const { data } = useBackend(); + + const { crewmembers = [] } = data; + + const crew: crewmember[] = flow([ + sortBy((cm: crewmember) => cm.name), + sortBy((cm: crewmember) => cm?.x), + sortBy((cm: crewmember) => cm?.y), + sortBy((cm: crewmember) => cm?.realZ), + ])(crewmembers); + + const tab: React.JSX.Element[] = []; + // Data view + // Please note, if you ever change the zoom values, + // you MUST update styles/components/Tooltip.scss + // and change the @for scss to match. + tab[0] = ; + + tab[1] = ; + + return ( + <> + + props.onTabIndex(0)} + > + Data View + + props.onTabIndex(1)} + > + Map View + + + {tab[props.tabIndex] || ERROR} + + ); +}; + +const CrewMonitorCrew = (props: { crew: crewmember[] }) => { + const { act, data } = useBackend(); + + const { crew } = props; + + const { isAI } = data; + + return ( + + + Name + Status + Location + + {crew.map((cm) => ( + + + {cm.name} ({cm.assignment}) + + + + {getStatText(cm)} + + {cm.sensor_type >= 2 ? ( + + {'('} + + {cm.brute} + + {'|'} + + {cm.fire} + + {'|'} + + {cm.tox} + + {'|'} + + {cm.oxy} + + {')'} + + ) : null} + + + {cm.sensor_type === 3 ? ( + isAI ? ( + + ) : ( + cm.area + ' (' + cm.x + ', ' + cm.y + ', ' + cm.z + ')' + ) + ) : ( + 'Not Available' + )} + + + ))} +
+ ); +}; + +const CrewMonitorMapView = (props: { zoom: number; onZoom: Function }) => { + const { config, data } = useBackend(); + + const { zoomScale, crewmembers } = data; + + return ( + + props.onZoom(v)}> + {crewmembers + .filter( + (x) => x.sensor_type === 3 && ~~x.realZ === ~~config.mapZLevel, + ) + .map((cm) => ( + + ))} + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Cryo.jsx b/tgui/packages/tgui/interfaces/Cryo/CryoContent.tsx similarity index 70% rename from tgui/packages/tgui/interfaces/Cryo.jsx rename to tgui/packages/tgui/interfaces/Cryo/CryoContent.tsx index 5ec9994bb3..9ac1a8dff4 100644 --- a/tgui/packages/tgui/interfaces/Cryo.jsx +++ b/tgui/packages/tgui/interfaces/Cryo/CryoContent.tsx @@ -1,4 +1,6 @@ -import { useBackend } from '../backend'; +import { toFixed } from 'common/math'; + +import { useBackend } from '../../backend'; import { AnimatedNumber, Box, @@ -8,50 +10,16 @@ import { LabeledList, ProgressBar, Section, -} from '../components'; -import { Window } from '../layouts'; +} from '../../components'; +import { damageTypes, statNames } from './constants'; +import { Data } from './types'; -const damageTypes = [ - { - label: 'Resp.', - type: 'oxyLoss', - }, - { - label: 'Toxin', - type: 'toxLoss', - }, - { - label: 'Brute', - type: 'bruteLoss', - }, - { - label: 'Burn', - type: 'fireLoss', - }, -]; - -const statNames = [ - ['good', 'Conscious'], - ['average', 'Unconscious'], - ['bad', 'DEAD'], -]; - -export const Cryo = (props) => { - return ( - - - - - - ); -}; - -const CryoContent = (props) => { - const { act, data } = useBackend(); +export const CryoContent = (props) => { + const { act, data } = useBackend(); const { isOperating, hasOccupant, - occupant = [], + occupant, cellTemperature, cellTemperatureStatus, isBeakerLoaded, @@ -60,7 +28,7 @@ const CryoContent = (props) => { <>
{ 0 ? 'good' : 'average'} > - + toFixed(value)} + /> { {statNames[occupant.stat][1]} - - {' K'} + toFixed(value) + ' K'} + /> - {damageTypes.map((damageType) => ( - + {damageTypes.map((damageType, i) => ( + toFixed(value)} /> @@ -113,7 +87,7 @@ const CryoContent = (props) => { ) : ( - +
No occupant detected.
@@ -155,7 +129,7 @@ const CryoContent = (props) => { }; const CryoBeaker = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { isBeakerLoaded, beakerLabel, beakerVolume } = data; if (isBeakerLoaded) { return ( @@ -165,7 +139,7 @@ const CryoBeaker = (props) => { {beakerVolume ? ( Math.round(v) + ' units remaining'} + format={(v) => toFixed(v) + ' units remaining'} /> ) : ( 'Beaker is empty' diff --git a/tgui/packages/tgui/interfaces/Cryo/constants.ts b/tgui/packages/tgui/interfaces/Cryo/constants.ts new file mode 100644 index 0000000000..b300a5f982 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Cryo/constants.ts @@ -0,0 +1,24 @@ +export const damageTypes: { label: string; type: string }[] = [ + { + label: 'Resp.', + type: 'oxyLoss', + }, + { + label: 'Toxin', + type: 'toxLoss', + }, + { + label: 'Brute', + type: 'bruteLoss', + }, + { + label: 'Burn', + type: 'fireLoss', + }, +]; + +export const statNames: string[][] = [ + ['good', 'Conscious'], + ['average', 'Unconscious'], + ['bad', 'DEAD'], +]; diff --git a/tgui/packages/tgui/interfaces/Cryo/index.tsx b/tgui/packages/tgui/interfaces/Cryo/index.tsx new file mode 100644 index 0000000000..481740ce71 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Cryo/index.tsx @@ -0,0 +1,12 @@ +import { Window } from '../../layouts'; +import { CryoContent } from './CryoContent'; + +export const Cryo = (props) => { + return ( + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Cryo/types.ts b/tgui/packages/tgui/interfaces/Cryo/types.ts new file mode 100644 index 0000000000..49d2d2e303 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Cryo/types.ts @@ -0,0 +1,23 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + isOperating: BooleanLike; + hasOccupant: BooleanLike; + occupant: { + name: string; + stat: number; + health: number; + maxHealth: number; + minHealth: number; + bruteLoss: number; + oxyLoss: number; + toxLoss: number; + fireLoss: number; + bodyTemperature: number; + }; + cellTemperature: number; + cellTemperatureStatus: string; + isBeakerLoaded: BooleanLike; + beakerLabel: string | null; + beakerVolume: number; +}; diff --git a/tgui/packages/tgui/interfaces/CryoStorage.jsx b/tgui/packages/tgui/interfaces/CryoStorage.tsx similarity index 61% rename from tgui/packages/tgui/interfaces/CryoStorage.jsx rename to tgui/packages/tgui/interfaces/CryoStorage.tsx index d947810e38..b564e95578 100644 --- a/tgui/packages/tgui/interfaces/CryoStorage.jsx +++ b/tgui/packages/tgui/interfaces/CryoStorage.tsx @@ -1,16 +1,29 @@ +import { BooleanLike } from 'common/react'; import { useState } from 'react'; import { useBackend } from '../backend'; -import { Box, Button, NoticeBox, Section, Tabs } from '../components'; +import { Box, NoticeBox, Section, Tabs } from '../components'; import { Window } from '../layouts'; +export type Data = { + real_name: string; + allow_items: BooleanLike; + crew: string[]; + items: string[]; +}; + export const CryoStorage = (props) => { - const { act, data } = useBackend(); + const { data } = useBackend(); const { real_name, allow_items } = data; const [tab, setTab] = useState(0); + const tabs: React.JSX.Element[] = []; + + tabs[0] = ; + tabs[1] = allow_items ? : ; + return ( @@ -25,15 +38,14 @@ export const CryoStorage = (props) => { )} Welcome, {real_name}. - {tab === 0 && } - {!!allow_items && tab === 1 && } + {tabs[tab]} ); }; export const CryoStorageCrew = (props) => { - const { act, data } = useBackend(); + const { data } = useBackend(); const { crew } = data; @@ -50,7 +62,29 @@ export const CryoStorageCrew = (props) => { }; export const CryoStorageItems = (props) => { - const { act, data } = useBackend(); + const { data } = useBackend(); + + const { items } = data; + + return ( +
+ {(items.length && + items.map((item) => ( + + {item} + + ))) || No items stored.} +
+ ); +}; + +export const CryoStorageDefaultError = (props) => { + return Disabled; +}; + +/* Unused here +export const CryoStorageItems = (props) => { + const { act, data } = useBackend(); const { items } = data; @@ -76,3 +110,4 @@ export const CryoStorageItems = (props) => {
); }; +*/ diff --git a/tgui/packages/tgui/interfaces/CryoStorageVr.jsx b/tgui/packages/tgui/interfaces/CryoStorageVr.jsx deleted file mode 100644 index 173842a7a8..0000000000 --- a/tgui/packages/tgui/interfaces/CryoStorageVr.jsx +++ /dev/null @@ -1,51 +0,0 @@ -import { useState } from 'react'; - -import { useBackend } from '../backend'; -import { Box, NoticeBox, Section, Tabs } from '../components'; -import { Window } from '../layouts'; -import { CryoStorageCrew } from './CryoStorage'; - -export const CryoStorageVr = (props) => { - const { act, data } = useBackend(); - - const { real_name, allow_items } = data; - - const [tab, setTab] = useState(0); - - return ( - - - - setTab(0)}> - Crew - - {!!allow_items && ( - setTab(1)}> - Items - - )} - - Welcome, {real_name}. - {tab === 0 && } - {!!allow_items && tab === 1 && } - - - ); -}; - -export const CryoStorageItemsVr = (props) => { - const { act, data } = useBackend(); - - const { items } = data; - - return ( -
- {(items.length && - items.map((item) => ( - - {item} - - ))) || No items stored.} -
- ); -}; diff --git a/tgui/packages/tgui/interfaces/DNAForensics.jsx b/tgui/packages/tgui/interfaces/DNAForensics.tsx similarity index 89% rename from tgui/packages/tgui/interfaces/DNAForensics.jsx rename to tgui/packages/tgui/interfaces/DNAForensics.tsx index b1dc785183..ab160dc8ef 100644 --- a/tgui/packages/tgui/interfaces/DNAForensics.jsx +++ b/tgui/packages/tgui/interfaces/DNAForensics.tsx @@ -1,9 +1,18 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, LabeledList, ProgressBar, Section } from '../components'; import { Window } from '../layouts'; +type Data = { + scan_progress: number; + scanning: BooleanLike; + bloodsamp: string; + bloodsamp_desc: string; +}; + export const DNAForensics = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { scan_progress, scanning, bloodsamp, bloodsamp_desc } = data; return ( diff --git a/tgui/packages/tgui/interfaces/DNAModifier.jsx b/tgui/packages/tgui/interfaces/DNAModifier.jsx deleted file mode 100644 index 72560e1470..0000000000 --- a/tgui/packages/tgui/interfaces/DNAModifier.jsx +++ /dev/null @@ -1,701 +0,0 @@ -import { useBackend } from '../backend'; -import { - Box, - Button, - Dimmer, - Flex, - Icon, - Knob, - LabeledList, - ProgressBar, - Section, - Tabs, -} from '../components'; -import { Window } from '../layouts'; -import { ComplexModal } from './common/ComplexModal'; - -const stats = [ - ['good', 'Alive'], - ['average', 'Unconscious'], - ['bad', 'DEAD'], -]; - -const operations = [ - ['ui', 'Modify U.I.', 'dna'], - ['se', 'Modify S.E.', 'dna'], - ['buffer', 'Transfer Buffers', 'syringe'], - ['rejuvenators', 'Rejuvenators', 'flask'], -]; - -const rejuvenatorsDoses = [5, 10, 20, 30, 50]; - -export const DNAModifier = (props) => { - const { act, data } = useBackend(); - const { irradiating, dnaBlockSize, occupant } = data; - const isDNAInvalid = - !occupant.isViableSubject || - !occupant.uniqueIdentity || - !occupant.structuralEnzymes; - let radiatingModal; - if (irradiating) { - radiatingModal = ; - } - return ( - - - {radiatingModal} - - - - - - ); -}; - -const DNAModifierOccupant = (props) => { - const { act, data } = useBackend(); - const { locked, hasOccupant, occupant } = data; - return ( -
- - Door Lock: - - - - - } - > - {hasOccupant ? ( - <> - - - {occupant.name} - - - - - {stats[occupant.stat][1]} - - - - - {props.isDNAInvalid ? ( - - -   The occupant's DNA structure is ruined beyond - recognition, please insert a subject with an intact DNA structure. - - ) : ( - - - - - - {data.occupant.uniqueEnzymes ? ( - data.occupant.uniqueEnzymes - ) : ( - - -   Unknown - - )} - - - )} - - ) : ( - Cell unoccupied. - )} -
- ); -}; - -const DNAModifierMain = (props) => { - const { act, data } = useBackend(); - const { selectedMenuKey, hasOccupant, occupant } = data; - if (!hasOccupant) { - return ( -
- - - -
- No occupant in DNA modifier. -
-
-
- ); - } else if (props.isDNAInvalid) { - return ( -
- - - -
- No operation possible on this subject. -
-
-
- ); - } - let body; - if (selectedMenuKey === 'ui') { - body = ( - <> - - - - ); - } else if (selectedMenuKey === 'se') { - body = ( - <> - - - - ); - } else if (selectedMenuKey === 'buffer') { - body = ; - } else if (selectedMenuKey === 'rejuvenators') { - body = ; - } - return ( -
- - {operations.map((op, i) => ( - act('selectMenuKey', { key: op[0] })} - > - - {op[1]} - - ))} - - {body} -
- ); -}; - -const DNAModifierMainUI = (props) => { - const { act, data } = useBackend(); - const { - selectedUIBlock, - selectedUISubBlock, - selectedUITarget, - dnaBlockSize, - occupant, - } = data; - return ( -
- - - - value.toString(16).toUpperCase()} - ml="0" - onChange={(e, val) => act('changeUITarget', { value: val })} - /> - - - -
- ); -}; - -const DNAModifierMainSE = (props) => { - const { act, data } = useBackend(); - const { selectedSEBlock, selectedSESubBlock, dnaBlockSize, occupant } = data; - return ( -
- - -
- ); -}; - -const DNAModifierMainRadiationEmitter = (props) => { - const { act, data } = useBackend(); - const { radiationIntensity, radiationDuration } = data; - return ( -
- - - act('radiationIntensity', { value: val })} - /> - - - act('radiationDuration', { value: val })} - /> - - - -
- ); -}; - -const DNAModifierMainBuffers = (props) => { - const { act, data } = useBackend(); - const { buffers } = data; - let bufferElements = buffers.map((buffer, i) => ( - - )); - return ( - <> -
- {bufferElements} -
- - - ); -}; - -const DNAModifierMainBuffersElement = (props) => { - const { act, data } = useBackend(); - const { id, name, buffer } = props; - const isInjectorReady = data.isInjectorReady; - const realName = name + (buffer.data ? ' - ' + buffer.label : ''); - return ( - -
- - act('bufferOption', { - option: 'clear', - id: id, - }) - } - > - Clear - - - - - } - > - - - - - - - - {!!buffer.data && ( - <> - - {buffer.owner || Unknown} - - - {buffer.type === 'ui' - ? 'Unique Identifiers' - : 'Structural Enzymes'} - {!!buffer.ue && ' and Unique Enzymes'} - - - - - - - - )} - - {!buffer.data && ( - - This buffer is empty. - - )} -
-
- ); -}; - -const DNAModifierMainBuffersDisk = (props) => { - const { act, data } = useBackend(); - const { hasDisk, disk } = data; - return ( -
- act('wipeDisk')} - > - Wipe - - - - } - > - {hasDisk ? ( - disk.data ? ( - - - {disk.label ? disk.label : 'No label'} - - - {disk.owner ? disk.owner : Unknown} - - - {disk.type === 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'} - {!!disk.ue && ' and Unique Enzymes'} - - - ) : ( - Disk is blank. - ) - ) : ( - - -
- No disk inserted. -
- )} -
- ); -}; - -const DNAModifierMainRejuvenators = (props) => { - const { act, data } = useBackend(); - const { isBeakerLoaded, beakerVolume, beakerLabel } = data; - return ( -
act('ejectBeaker')} - > - Eject - - } - > - {isBeakerLoaded ? ( - - - {rejuvenatorsDoses.map((a, i) => ( - - ))} - - - - {beakerLabel ? beakerLabel : 'No label'} - {beakerVolume ? ( - - {beakerVolume} unit{beakerVolume === 1 ? '' : 's'} remaining - - ) : ( - Empty - )} - - - ) : ( - - -
- No beaker loaded. -
- )} -
- ); -}; - -const DNAModifierIrradiating = (props) => { - return ( - - -
- -

- -  Irradiating occupant  - -

-
- -

- For {props.duration} second{props.duration === 1 ? '' : 's'} -

-
-
- ); -}; - -const DNAModifierBlocks = (props) => { - const { act, data } = useBackend(); - const { dnaString, selectedBlock, selectedSubblock, blockSize, action } = - props; - - const characters = dnaString.split(''); - let curBlock = 0; - let dnaBlocks = []; - for (let block = 0; block < characters.length; block += blockSize) { - const realBlock = block / blockSize + 1; - let subBlocks = []; - for (let subblock = 0; subblock < blockSize; subblock++) { - const realSubblock = subblock + 1; - subBlocks.push( - , - ); - } - dnaBlocks.push( - - - {realBlock} - - {subBlocks} - , - ); - } - return {dnaBlocks}; -}; diff --git a/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierBlocks.tsx b/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierBlocks.tsx new file mode 100644 index 0000000000..1d465d3e5a --- /dev/null +++ b/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierBlocks.tsx @@ -0,0 +1,59 @@ +import { useBackend } from '../../backend'; +import { Box, Button, Flex } from '../../components'; + +export const DNAModifierBlocks = (props: { + dnaString: string; + selectedBlock: number; + selectedSubblock: number; + blockSize: number; + action: string; +}) => { + const { act } = useBackend(); + + const { dnaString, selectedBlock, selectedSubblock, blockSize, action } = + props; + + const characters: string[] = dnaString.split(''); + let dnaBlocks: React.JSX.Element[] = []; + for (let block = 0; block < characters.length; block += blockSize) { + const realBlock: number = block / blockSize + 1; + let subBlocks: React.JSX.Element[] = []; + for (let subblock = 0; subblock < blockSize; subblock++) { + const realSubblock: number = subblock + 1; + subBlocks.push( + , + ); + } + dnaBlocks.push( + + + {realBlock} + + {subBlocks} + , + ); + } + return {dnaBlocks}; +}; diff --git a/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierIrradiating.tsx b/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierIrradiating.tsx new file mode 100644 index 0000000000..1b6c04d76e --- /dev/null +++ b/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierIrradiating.tsx @@ -0,0 +1,22 @@ +import { Box, Dimmer, Icon } from '../../components'; + +export const DNAModifierIrradiating = (props: { duration: number }) => { + return ( + + +
+ +

+ +  Irradiating occupant  + +

+
+ +

+ For {props.duration} second{props.duration === 1 ? '' : 's'} +

+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierMain.tsx b/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierMain.tsx new file mode 100644 index 0000000000..aa08e16013 --- /dev/null +++ b/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierMain.tsx @@ -0,0 +1,265 @@ +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../../backend'; +import { + Box, + Button, + Flex, + Icon, + Knob, + LabeledList, + Section, + Tabs, +} from '../../components'; +import { operations, rejuvenatorsDoses } from './constants'; +import { DNAModifierBlocks } from './DNAModifierBlocks'; +import { DNAModifierMainBuffers } from './DNAModifierMainBuffers'; +import { Data } from './types'; + +export const DNAModifierMain = (props: { isDNAInvalid: BooleanLike }) => { + const { act, data } = useBackend(); + + const { selectedMenuKey, hasOccupant } = data; + + if (!hasOccupant) { + return ( +
+ + + +
+ No occupant in DNA modifier. +
+
+
+ ); + } else if (props.isDNAInvalid) { + return ( +
+ + + +
+ No operation possible on this subject. +
+
+
+ ); + } + let body; + if (selectedMenuKey === 'ui') { + body = ( + <> + + + + ); + } else if (selectedMenuKey === 'se') { + body = ( + <> + + + + ); + } else if (selectedMenuKey === 'buffer') { + body = ; + } else if (selectedMenuKey === 'rejuvenators') { + body = ; + } + return ( +
+ + {operations.map((op, i) => ( + act('selectMenuKey', { key: op[0] })} + > + + {op[1]} + + ))} + + {body} +
+ ); +}; + +const DNAModifierMainUI = (props) => { + const { act, data } = useBackend(); + + const { + selectedUIBlock, + selectedUISubBlock, + selectedUITarget, + dnaBlockSize, + occupant, + } = data; + + return ( +
+ + + + value.toString(16).toUpperCase()} + ml="0" + onChange={(e, val) => act('changeUITarget', { value: val })} + /> + + + +
+ ); +}; + +const DNAModifierMainSE = (props) => { + const { act, data } = useBackend(); + + const { selectedSEBlock, selectedSESubBlock, dnaBlockSize, occupant } = data; + + return ( +
+ + +
+ ); +}; + +const DNAModifierMainRadiationEmitter = (props) => { + const { act, data } = useBackend(); + + const { radiationIntensity, radiationDuration } = data; + + return ( +
+ + + act('radiationIntensity', { value: val })} + /> + + + act('radiationDuration', { value: val })} + /> + + + +
+ ); +}; + +const DNAModifierMainRejuvenators = (props) => { + const { act, data } = useBackend(); + + const { isBeakerLoaded, beakerVolume, beakerLabel } = data; + + return ( +
act('ejectBeaker')} + > + Eject + + } + > + {isBeakerLoaded ? ( + + + {rejuvenatorsDoses.map((a, i) => ( + + ))} + + + + {beakerLabel ? beakerLabel : 'No label'} + {beakerVolume ? ( + + {beakerVolume} unit{beakerVolume === 1 ? '' : 's'} remaining + + ) : ( + Empty + )} + + + ) : ( + + +
+ No beaker loaded. +
+ )} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierMainBuffers.tsx b/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierMainBuffers.tsx new file mode 100644 index 0000000000..d3efe7678d --- /dev/null +++ b/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierMainBuffers.tsx @@ -0,0 +1,254 @@ +import { useBackend } from '../../backend'; +import { Box, Button, Icon, LabeledList, Section } from '../../components'; +import { buffData, Data } from './types'; + +export const DNAModifierMainBuffers = (props) => { + const { data } = useBackend(); + + const { buffers } = data; + + let bufferElements = buffers.map((buffer, i) => ( + + )); + return ( + <> +
{bufferElements}
+ + + ); +}; + +const DNAModifierMainBuffersElement = (props: { + id: number; + name: string; + buffer: buffData; +}) => { + const { act, data } = useBackend(); + const { id, name, buffer } = props; + const { isInjectorReady } = data; + const realName: string = name + (buffer.data ? ' - ' + buffer.label : ''); + return ( + +
+ + act('bufferOption', { + option: 'clear', + id: id, + }) + } + > + Clear + + + + + } + > + + + + + + + + {!!buffer.data && ( + <> + + {buffer.owner || Unknown} + + + {buffer.type === 'ui' + ? 'Unique Identifiers' + : 'Structural Enzymes'} + {!!buffer.ue && ' and Unique Enzymes'} + + + + + + + + )} + + {!buffer.data && ( + + This buffer is empty. + + )} +
+
+ ); +}; + +const DNAModifierMainBuffersDisk = (props) => { + const { act, data } = useBackend(); + const { hasDisk, disk } = data; + return ( +
+ act('wipeDisk')} + > + Wipe + + + + } + > + {hasDisk ? ( + disk.data ? ( + + + {disk.label ? disk.label : 'No label'} + + + {disk.owner ? disk.owner : Unknown} + + + {disk.type === 'ui' ? 'Unique Identifiers' : 'Structural Enzymes'} + {!!disk.ue && ' and Unique Enzymes'} + + + ) : ( + Disk is blank. + ) + ) : ( + + +
+ No disk inserted. +
+ )} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierOccupant.tsx b/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierOccupant.tsx new file mode 100644 index 0000000000..b8fd28b5ce --- /dev/null +++ b/tgui/packages/tgui/interfaces/DNAModifier/DNAModifierOccupant.tsx @@ -0,0 +1,103 @@ +import { BooleanLike } from 'common/react'; + +import { useBackend } from '../../backend'; +import { + Box, + Button, + Icon, + LabeledList, + ProgressBar, + Section, +} from '../../components'; +import { stats } from './constants'; +import { Data } from './types'; + +export const DNAModifierOccupant = (props: { isDNAInvalid: BooleanLike }) => { + const { act, data } = useBackend(); + + const { locked, hasOccupant, occupant } = data; + + return ( +
+ + Door Lock: + + + + + } + > + {hasOccupant ? ( + <> + + + {occupant.name} + + + + + {stats[occupant.stat!][1]} + + + + + {props.isDNAInvalid ? ( + + +   The occupant's DNA structure is ruined beyond + recognition, please insert a subject with an intact DNA structure. + + ) : ( + + + + + + {data.occupant.uniqueEnzymes ? ( + data.occupant.uniqueEnzymes + ) : ( + + +   Unknown + + )} + + + )} + + ) : ( + Cell unoccupied. + )} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/DNAModifier/constants.ts b/tgui/packages/tgui/interfaces/DNAModifier/constants.ts new file mode 100644 index 0000000000..d247c8a51a --- /dev/null +++ b/tgui/packages/tgui/interfaces/DNAModifier/constants.ts @@ -0,0 +1,14 @@ +export const stats: string[][] = [ + ['good', 'Alive'], + ['average', 'Unconscious'], + ['bad', 'DEAD'], +]; + +export const operations: string[][] = [ + ['ui', 'Modify U.I.', 'dna'], + ['se', 'Modify S.E.', 'dna'], + ['buffer', 'Transfer Buffers', 'syringe'], + ['rejuvenators', 'Rejuvenators', 'flask'], +]; + +export const rejuvenatorsDoses: number[] = [5, 10, 20, 30, 50]; diff --git a/tgui/packages/tgui/interfaces/DNAModifier/index.tsx b/tgui/packages/tgui/interfaces/DNAModifier/index.tsx new file mode 100644 index 0000000000..220f72de66 --- /dev/null +++ b/tgui/packages/tgui/interfaces/DNAModifier/index.tsx @@ -0,0 +1,29 @@ +import { useBackend } from '../../backend'; +import { Window } from '../../layouts'; +import { ComplexModal } from '../common/ComplexModal'; +import { DNAModifierIrradiating } from './DNAModifierIrradiating'; +import { DNAModifierMain } from './DNAModifierMain'; +import { DNAModifierOccupant } from './DNAModifierOccupant'; +import { Data } from './types'; + +export const DNAModifier = (props) => { + const { data } = useBackend(); + + const { irradiating, occupant } = data; + + const isDNAInvalid: boolean = + !occupant.isViableSubject || + !occupant.uniqueIdentity || + !occupant.structuralEnzymes; + + return ( + + + {irradiating && } + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/DNAModifier/types.ts b/tgui/packages/tgui/interfaces/DNAModifier/types.ts new file mode 100644 index 0000000000..73907fe9e7 --- /dev/null +++ b/tgui/packages/tgui/interfaces/DNAModifier/types.ts @@ -0,0 +1,54 @@ +import { BooleanLike } from 'common/react'; + +export type Data = { + selectedMenuKey: string; + locked: BooleanLike; + hasOccupant: BooleanLike; + isInjectorReady: BooleanLike; + hasDisk: BooleanLike; + disk: buffData; + buffers: buffData[]; + radiationIntensity: number; + radiationDuration: number; + irradiating: number; + dnaBlockSize: number; + selectedUIBlock: number; + selectedUISubBlock: number; + selectedSEBlock: number; + selectedSESubBlock: number; + selectedUITarget: number; + selectedUITargetHex: string; + occupant: { + name: string | null; + stat: number | null; + isViableSubject: BooleanLike | null; + health: number | null; + maxHealth: number | null; + minHealth: number | null; + uniqueEnzymes: string | null; + uniqueIdentity: string | null; + structuralEnzymes: string | null; + radiationLevel: number | null; + }; + isBeakerLoaded: BooleanLike; + beakerLabel: string | null; + beakerVolume: number; + modal: modalData; +}; + +type modalData = { + id: string; + text: string; + args: { + id: string; + }; + modal_type: string; +}; + +export type buffData = { + data: number[] | null; + owner: string | null; + label: string | null; + type: string | null; + ue: BooleanLike; +}; diff --git a/tgui/packages/tgui/interfaces/DestinationTagger.jsx b/tgui/packages/tgui/interfaces/DestinationTagger.jsx deleted file mode 100644 index ee46aa1fba..0000000000 --- a/tgui/packages/tgui/interfaces/DestinationTagger.jsx +++ /dev/null @@ -1,31 +0,0 @@ -import { useBackend } from '../backend'; -import { Button, Flex, Section } from '../components'; -import { Window } from '../layouts'; - -export const DestinationTagger = (props) => { - const { act, data } = useBackend(); - - const { currTag, taggerLocs } = data; - - return ( - - -
- - {taggerLocs.sort().map((tag) => ( - - - - ))} - -
-
-
- ); -}; diff --git a/tgui/packages/tgui/interfaces/DestinationTagger.tsx b/tgui/packages/tgui/interfaces/DestinationTagger.tsx new file mode 100644 index 0000000000..a55eef5fc4 --- /dev/null +++ b/tgui/packages/tgui/interfaces/DestinationTagger.tsx @@ -0,0 +1,50 @@ +import { useBackend } from '../backend'; +import { Button, Flex, Section } from '../components'; +import { Window } from '../layouts'; + +type Data = { + currTag: string; + taggerLevels: { z: number; location: string }[]; + taggerLocs: { tag: string; level: number }[]; +}; + +export const DestinationTagger = (props) => { + const { act, data } = useBackend(); + + const { currTag, taggerLevels = [], taggerLocs } = data; + + const unique_levels = taggerLevels.filter((obj, index) => { + return index === taggerLevels.findIndex((o) => obj.location === o.location); + }); + + return ( + + +
+ {unique_levels.map((level) => ( +
+ + {taggerLocs.map( + (tag) => + level.z === tag.level && ( + + + + ), + )} + +
+ ))} +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/DiseaseSplicer.jsx b/tgui/packages/tgui/interfaces/DiseaseSplicer.tsx similarity index 76% rename from tgui/packages/tgui/interfaces/DiseaseSplicer.jsx rename to tgui/packages/tgui/interfaces/DiseaseSplicer.tsx index 4db3567cff..f962aa1628 100644 --- a/tgui/packages/tgui/interfaces/DiseaseSplicer.jsx +++ b/tgui/packages/tgui/interfaces/DiseaseSplicer.tsx @@ -1,9 +1,24 @@ +import { BooleanLike } from 'common/react'; + import { useBackend } from '../backend'; import { Box, Button, LabeledList, ProgressBar, Section } from '../components'; import { Window } from '../layouts'; +type Data = { + dish_inserted: BooleanLike; + buffer: { name: string; stage: number } | null; + species_buffer: string | null; + busy: string | null; + growth: number; + effects: + | { name: string; stage: number; reference: string; badness: number }[] + | null; + info: string; + affected_species: string[] | null; +}; + export const DiseaseSplicer = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { busy } = data; @@ -28,7 +43,7 @@ export const DiseaseSplicer = (props) => { }; const DiseaseSplicerVirusDish = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); const { dish_inserted, effects, info, growth, affected_species } = data; @@ -60,12 +75,12 @@ const DiseaseSplicerVirusDish = (props) => { {info ? ( -
+
{info}
) : ( <> -
+
{(effects && effects.map((effect) => ( @@ -74,23 +89,25 @@ const DiseaseSplicerVirusDish = (props) => { ))) || No virus sample loaded.}
-
- {!affected_species || !affected_species.length ? 'None' : null} - {affected_species.sort().join(', ')} +
+ {!affected_species || !affected_species.length + ? 'None' + : affected_species.sort().join(', ')}
-
+
CAUTION: Reverse engineering will destroy the viral sample. - {effects.map((e) => ( - - ))} + {effects && + effects.map((e) => ( + + ))} @@ -102,18 +119,9 @@ const DiseaseSplicerVirusDish = (props) => { }; const DiseaseSplicerStorage = (props) => { - const { act, data } = useBackend(); + const { act, data } = useBackend(); - const { - dish_inserted, - buffer, - species_buffer, - effects, - info, - growth, - affected_species, - busy, - } = data; + const { buffer, species_buffer, info } = data; return (
@@ -173,7 +181,7 @@ const DiseaseSplicerStorage = (props) => {
act('set_dcall_area', { area: val })} diff --git a/tgui/packages/tgui/interfaces/EmbeddedController.jsx b/tgui/packages/tgui/interfaces/EmbeddedController.jsx deleted file mode 100644 index 8c52e3514e..0000000000 --- a/tgui/packages/tgui/interfaces/EmbeddedController.jsx +++ /dev/null @@ -1,757 +0,0 @@ -import { useBackend } from '../backend'; -import { - Box, - Button, - Flex, - Icon, - LabeledList, - ProgressBar, - Section, -} from '../components'; -import { Window } from '../layouts'; -import { createLogger } from '../logging'; -const logger = createLogger('fuck'); - -// This UI uses an internal routing system for the many different variants of -// embedded controllers in use. -let primaryRoutes = {}; - -/** - * This is an all-in-one replacement for the following NanoUI Templates: - * - advanced_airlock_console.tmpl - * - docking_airlock_console.tmpl - * - door_access_console.tmpl - * - escape_pod_console.tmpl - * - escape_pod_berth_console.tmpl - * - multi_docking_console.tmpl - * - phoron_airlock_console.tmpl - * - simple_airlock_console.tmpl - * - simple_docking_console.tmpl - * - simple_docking_console_pod.tmpl -- Funny enough, wasn't used anywhere. - */ - -/** - * Let's cover all of the attributes of `data` for this UI right here. - * For those unfamiliar with JSDoc syntax, [param] indicates - * an optional parameter. - */ - -/** - * Interior/Exterior Door Status - * @typedef {Object} doorStatus - * @property {('open'|'closed')} state - * @property {('locked'|'unlocked')} lock - */ - -/** - * Dock Status - * @typedef {('undocked'|'undocking'|'docking'|'docked')} dockStatus - */ - -/** - * All possible data attributes. - * @typedef {Object} Data - * @property {string} internalTemplateName -