diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
index 882acf789d..fc3f2852fc 100644
--- a/.github/CODEOWNERS
+++ b/.github/CODEOWNERS
@@ -6,15 +6,15 @@
#deathride58
/modular_citadel/ @deathride58
-/code/citadel/ @deathride58
#LetterJay
/modular_citadel/code/modules/client/loadout/__donator.dm @LetterJay
#Poojawa
-/code/modules/vore @Poojawa
-/code/citadel/dogborgstuff.dmm @Poojawa
+/modular_citadel/code/modules/vore @Poojawa
+/code/game/objects/items/devices/dogborg_sleeper.dm @Poojawa
+/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @Poojawa
/tgui/ @Poojawa
/modular_citadel/code/modules/clothing/spacesuits/flightsuit.dm @Poojawa
/modular_citadel/code/game/objects/ids.dm @Poojawa
diff --git a/.gitignore b/.gitignore
index b1cb02811c..626ef179a5 100644
--- a/.gitignore
+++ b/.gitignore
@@ -198,3 +198,4 @@ tools/MapAtmosFixer/MapAtmosFixer/obj/x86/Debug/MapAtmosFixer.csproj.CoreCompile
#GitHub Atom
.atom-build.json
+cfg/admin.txt
diff --git a/_maps/cit_map_files/BoxStation/BoxStation.dmm b/_maps/cit_map_files/BoxStation/BoxStation.dmm
index 11646eaa1a..279f479f10 100644
--- a/_maps/cit_map_files/BoxStation/BoxStation.dmm
+++ b/_maps/cit_map_files/BoxStation/BoxStation.dmm
@@ -78,7 +78,7 @@
/obj/item/device/plant_analyzer,
/obj/machinery/camera{
c_tag = "Prison Common Room";
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/green/side{
dir = 5
@@ -243,7 +243,7 @@
/obj/structure/lattice,
/obj/structure/grille,
/turf/open/space,
-/area/space/nearstation)
+/area/space)
"aaU" = (
/obj/machinery/computer/arcade,
/turf/open/floor/plasteel/floorgrime,
@@ -758,8 +758,7 @@
},
/obj/machinery/camera{
c_tag = "Head of Security's Office";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/recharger{
pixel_y = 4
@@ -817,7 +816,7 @@
/obj/structure/bed,
/obj/machinery/camera{
c_tag = "Prison Cell 3";
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/obj/item/device/radio/intercom{
desc = "Talk through this. It looks like it has been modified to not broadcast.";
@@ -848,7 +847,7 @@
/obj/structure/bed,
/obj/machinery/camera{
c_tag = "Prison Cell 2";
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/obj/item/device/radio/intercom{
desc = "Talk through this. It looks like it has been modified to not broadcast.";
@@ -870,7 +869,7 @@
/obj/structure/bed,
/obj/machinery/camera{
c_tag = "Prison Cell 1";
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/obj/item/device/radio/intercom{
desc = "Talk through this. It looks like it has been modified to not broadcast.";
@@ -933,7 +932,6 @@
pixel_x = 3;
pixel_y = -3
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/turf_decal/bot{
dir = 2
},
@@ -1605,7 +1603,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching Prison Wing holding areas.";
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_y = 30
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -1644,7 +1642,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching Prison Wing holding areas.";
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_y = 30
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -1652,7 +1650,7 @@
},
/obj/machinery/camera{
c_tag = "Prison Hallway";
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/red/side{
dir = 1
@@ -1801,8 +1799,7 @@
"aeC" = (
/obj/machinery/camera{
c_tag = "Security Escape Pod";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plating,
/area/security/main)
@@ -2441,10 +2438,6 @@
},
/turf/open/floor/plating,
/area/security/main)
-"agd" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"agf" = (
/obj/structure/table,
/obj/item/stack/sheet/metal,
@@ -3441,8 +3434,7 @@
"aiq" = (
/obj/machinery/camera{
c_tag = "Security Office";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/machinery/computer/secure_data{
dir = 1
@@ -3865,7 +3857,7 @@
},
/obj/machinery/computer/security{
name = "Labor Camp Monitoring";
- network = list("Labor")
+ network = list("labor")
},
/turf/open/floor/plasteel,
/area/security/processing)
@@ -4580,15 +4572,13 @@
/area/engine/atmos)
"aln" = (
/obj/machinery/door/airlock/external{
- cyclelinkeddir = 4;
name = "Labor Camp Shuttle Airlock";
- req_access_txt = "2";
- shuttledocked = 1
+ req_access_txt = "2"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
-/turf/open/floor/plating,
+/turf/open/floor/plasteel/dark,
/area/security/processing)
"alp" = (
/turf/open/floor/plating,
@@ -5356,7 +5346,7 @@
/area/maintenance/fore/secondary)
"anE" = (
/obj/machinery/door/airlock/external{
- cyclelinkeddir = 4;
+ cyclelinkeddir = 0;
req_access_txt = "13"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
@@ -5395,17 +5385,6 @@
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"anN" = (
-/obj/machinery/door/airlock/external{
- cyclelinkeddir = 4;
- name = "Labor Camp Shuttle Airlock";
- shuttledocked = 1
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/security/processing)
"anO" = (
/obj/docking_port/stationary{
dir = 8;
@@ -7388,7 +7367,7 @@
/obj/machinery/camera{
c_tag = "Auxillary Mining Base";
dir = 8;
- network = list("SS13","AuxBase")
+ network = list("ss13","auxbase")
},
/turf/open/floor/plating,
/area/shuttle/auxillary_base)
@@ -7673,8 +7652,7 @@
/obj/structure/table/wood,
/obj/machinery/camera{
c_tag = "Law Office";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/item/paper_bin{
pixel_x = -3;
@@ -7685,7 +7663,7 @@
desc = "Used for watching Prison Wing holding areas.";
dir = 1;
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_y = -27
},
/turf/open/floor/wood,
@@ -8915,7 +8893,7 @@
desc = "Used for the Auxillary Mining Base.";
dir = 8;
name = "Auxillary Base Monitor";
- network = list("AuxBase");
+ network = list("auxbase");
pixel_x = 28
},
/turf/open/floor/plasteel/yellow/side{
@@ -10504,8 +10482,7 @@
"aBh" = (
/obj/machinery/camera{
c_tag = "EVA Maintenance";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/light/small{
dir = 4
@@ -10973,8 +10950,7 @@
"aCp" = (
/obj/machinery/camera{
c_tag = "Arrivals North";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/structure/cable{
icon_state = "1-2"
@@ -11963,8 +11939,7 @@
"aER" = (
/obj/machinery/camera{
c_tag = "Gateway";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/structure/table,
/obj/structure/sign/warning/biohazard{
@@ -12319,8 +12294,7 @@
"aFO" = (
/obj/machinery/camera{
c_tag = "Garden";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/airalarm{
dir = 8;
@@ -12435,7 +12409,7 @@
/obj/machinery/camera/motion{
c_tag = "Vault";
dir = 1;
- network = list("MiniSat")
+ network = list("minisat")
},
/obj/machinery/light,
/turf/open/floor/plasteel/vault/corner{
@@ -12933,8 +12907,7 @@
},
/obj/machinery/camera{
c_tag = "Chapel Office";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/grimy,
/area/chapel/office)
@@ -13432,8 +13405,7 @@
/obj/structure/chair/office/dark,
/obj/machinery/camera{
c_tag = "Library North";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -15079,8 +15051,7 @@
"aMM" = (
/obj/machinery/camera{
c_tag = "Chapel North";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/dark,
/area/chapel/main)
@@ -16856,8 +16827,7 @@
"aRP" = (
/obj/machinery/camera{
c_tag = "Library South";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/wood,
/area/library)
@@ -16972,8 +16942,7 @@
"aSf" = (
/obj/machinery/camera{
c_tag = "Arrivals Hallway";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
@@ -17276,8 +17245,7 @@
},
/obj/machinery/camera{
c_tag = "Bar";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/structure/table,
/obj/machinery/chem_dispenser/drinks,
@@ -17465,8 +17433,7 @@
},
/obj/machinery/camera{
c_tag = "Locker Room East";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/light{
dir = 4
@@ -17607,7 +17574,7 @@
/area/bridge)
"aUd" = (
/obj/machinery/computer/security/mining{
- network = list("MINE","AuxBase")
+ network = list("mine","auxbase")
},
/turf/open/floor/plasteel/brown{
dir = 6
@@ -17626,8 +17593,7 @@
},
/obj/machinery/camera{
c_tag = "Bar West";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar)
@@ -17756,8 +17722,7 @@
"aUy" = (
/obj/machinery/camera{
c_tag = "Vacant Office";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/wood,
/area/security/vacantoffice)
@@ -17843,8 +17808,7 @@
"aUM" = (
/obj/machinery/camera{
c_tag = "Arrivals Bay 2";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
@@ -18006,8 +17970,7 @@
},
/obj/machinery/camera{
c_tag = "Fore Primary Hallway";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/red/corner{
@@ -18336,8 +18299,7 @@
"aVV" = (
/obj/machinery/camera{
c_tag = "Chapel South";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/dark,
/area/chapel/main)
@@ -19613,8 +19575,7 @@
"aYT" = (
/obj/machinery/camera{
c_tag = "Hydroponics South";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel,
@@ -19739,8 +19700,7 @@
"aZm" = (
/obj/machinery/camera{
c_tag = "Escape Arm Airlocks";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -20486,8 +20446,7 @@
"bbr" = (
/obj/machinery/camera{
c_tag = "Locker Room South";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
@@ -20554,8 +20513,7 @@
"bbA" = (
/obj/machinery/camera{
c_tag = "Starboard Primary Hallway 2";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/white/corner{
dir = 1
@@ -20846,8 +20804,7 @@
"bcr" = (
/obj/machinery/camera{
c_tag = "Starboard Primary Hallway";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
@@ -20884,8 +20841,7 @@
"bcx" = (
/obj/machinery/camera{
c_tag = "Starboard Primary Hallway 5";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel,
/area/hallway/primary/starboard)
@@ -21155,8 +21111,7 @@
"bdn" = (
/obj/machinery/camera{
c_tag = "Central Hallway East";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/structure/disposalpipe/segment,
/obj/machinery/status_display{
@@ -22443,8 +22398,7 @@
},
/obj/machinery/camera{
c_tag = "Cargo Delivery Office";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/requests_console{
department = "Cargo Bay";
@@ -22628,8 +22582,7 @@
"bhc" = (
/obj/machinery/camera{
c_tag = "Chemistry";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/machinery/firealarm{
dir = 2;
@@ -22668,8 +22621,7 @@
"bhj" = (
/obj/machinery/camera{
c_tag = "Security Post - Medbay";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/machinery/requests_console{
department = "Security";
@@ -23335,7 +23287,7 @@
/obj/machinery/camera{
c_tag = "Robotics Lab";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/button/door{
dir = 2;
@@ -23377,8 +23329,7 @@
"biS" = (
/obj/machinery/camera{
c_tag = "Research Division Access";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/structure/sink{
dir = 4;
@@ -23417,7 +23368,7 @@
/obj/machinery/camera{
c_tag = "Research and Development";
dir = 2;
- network = list("SS13","RD");
+ network = list("ss13","rd");
pixel_x = 22
},
/obj/machinery/button/door{
@@ -23657,8 +23608,7 @@
"bjy" = (
/obj/machinery/camera{
c_tag = "Gravity Generator Room";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -23858,8 +23808,7 @@
"bkb" = (
/obj/machinery/camera{
c_tag = "Medbay Morgue";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/airalarm{
dir = 8;
@@ -24384,8 +24333,7 @@
/obj/structure/table/reinforced,
/obj/machinery/camera{
c_tag = "Medbay Foyer";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/cell_charger,
/turf/open/floor/plasteel/white,
@@ -25488,7 +25436,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching Prison Wing holding areas.";
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_y = 30
},
/obj/machinery/disposal/bin,
@@ -26785,8 +26733,7 @@
},
/obj/machinery/camera{
c_tag = "Medbay West";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -27065,7 +27012,7 @@
/obj/machinery/camera{
c_tag = "Experimentor Lab";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/item/hand_labeler,
/obj/item/stack/packageWrap,
@@ -27194,8 +27141,7 @@
/obj/item/device/multitool,
/obj/machinery/camera{
c_tag = "Cargo Office";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel,
/area/quartermaster/office)
@@ -27473,7 +27419,6 @@
/obj/machinery/camera{
c_tag = "Medbay East";
dir = 8;
- network = list("SS13");
pixel_y = -22
},
/turf/open/floor/plasteel/white,
@@ -27654,7 +27599,7 @@
/obj/machinery/camera{
c_tag = "Robotics Lab - South";
dir = 1;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/white,
/area/science/robotics/lab)
@@ -27935,8 +27880,7 @@
"btA" = (
/obj/machinery/camera{
c_tag = "Research Division West";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -28796,7 +28740,7 @@
/obj/machinery/camera{
c_tag = "Genetics Research";
dir = 1;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/firealarm{
dir = 1;
@@ -28831,7 +28775,6 @@
/obj/machinery/camera{
c_tag = "Genetics Access";
dir = 8;
- network = list("SS13");
pixel_y = -22
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -29065,8 +29008,7 @@
"bwf" = (
/obj/machinery/camera{
c_tag = "Cargo Bay Entrance";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/brown/corner{
@@ -29288,8 +29230,7 @@
/obj/structure/table/glass,
/obj/machinery/camera{
c_tag = "Medbay Cryogenics";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/item/reagent_containers/glass/beaker/cryoxadone,
/obj/item/reagent_containers/glass/beaker/cryoxadone,
@@ -29307,8 +29248,7 @@
"bwL" = (
/obj/machinery/camera{
c_tag = "Genetics Cloning";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/structure/table,
/obj/machinery/firealarm{
@@ -29563,7 +29503,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office.";
name = "Research Monitor";
- network = list("RD","MiniSat");
+ network = list("rd","minisat");
pixel_y = 2
},
/obj/structure/table,
@@ -30206,7 +30146,7 @@
},
/obj/machinery/computer/security/mining{
dir = 8;
- network = list("MINE","AuxBase")
+ network = list("mine","auxbase")
},
/turf/open/floor/plasteel/red/side{
dir = 4
@@ -30503,7 +30443,7 @@
/obj/machinery/camera{
c_tag = "Server Room";
dir = 2;
- network = list("SS13","RD");
+ network = list("ss13","rd");
pixel_x = 22
},
/obj/machinery/power/apc{
@@ -30558,7 +30498,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the RD's goons from the safety of your own office.";
name = "Research Monitor";
- network = list("RD");
+ network = list("rd");
pixel_y = 2
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -30879,8 +30819,7 @@
},
/obj/machinery/camera{
c_tag = "Medbay Treatment Center";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel,
/area/medical/sleeper)
@@ -30983,7 +30922,7 @@
/obj/machinery/camera{
c_tag = "Security Post - Science";
dir = 4;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/newscaster{
pixel_x = -30
@@ -31100,7 +31039,7 @@
"bAS" = (
/obj/machinery/computer/security/mining{
dir = 4;
- network = list("MINE","AuxBase")
+ network = list("mine","auxbase")
},
/obj/machinery/camera{
c_tag = "Quartermaster's Office";
@@ -31671,7 +31610,7 @@
/obj/machinery/camera{
c_tag = "Research Director's Office";
dir = 1;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/item/device/radio/intercom{
name = "Station Intercom (General)";
@@ -31708,7 +31647,7 @@
/obj/machinery/camera{
c_tag = "Experimentor Lab Chamber";
dir = 1;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/light,
/obj/structure/sign/warning/nosmoking{
@@ -31915,8 +31854,7 @@
/obj/structure/closet/secure_closet/medical3,
/obj/machinery/camera{
c_tag = "Medbay Storage";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/white,
/area/medical/sleeper)
@@ -31998,8 +31936,7 @@
},
/obj/machinery/camera{
c_tag = "Medbay South";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/white,
/area/medical/medbay/central)
@@ -32291,8 +32228,7 @@
},
/obj/machinery/camera{
c_tag = "Medbay Recovery Room";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/iv_drip,
/turf/open/floor/plasteel/white,
@@ -32538,7 +32474,6 @@
/obj/machinery/camera{
c_tag = "Chief Medical Office";
dir = 8;
- network = list("SS13");
pixel_y = -22
},
/turf/open/floor/plasteel/barber,
@@ -32550,7 +32485,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Test Chamber";
dir = 2;
- network = list("Xeno","RD")
+ network = list("xeno","rd")
},
/obj/machinery/light{
dir = 1
@@ -32641,7 +32576,7 @@
/obj/machinery/camera{
c_tag = "Toxins Lab West";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line{
dir = 2
@@ -32751,12 +32686,11 @@
/area/maintenance/port/fore)
"bEK" = (
/obj/machinery/computer/security/mining{
- network = list("MINE","AuxBase")
+ network = list("mine","auxbase")
},
/obj/machinery/camera{
c_tag = "Mining Dock";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
@@ -33293,7 +33227,7 @@
/turf/open/floor/plating,
/area/science/mixing)
"bGd" = (
-/obj/machinery/doppler_array{
+/obj/machinery/doppler_array/research/science{
dir = 4
},
/obj/effect/turf_decal/bot{
@@ -33737,7 +33671,7 @@
/obj/machinery/camera{
c_tag = "Toxins Storage";
dir = 4;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/floorgrime,
/area/science/storage)
@@ -33872,7 +33806,7 @@
dir = 8;
layer = 4;
name = "Test Chamber Telescreen";
- network = list("Toxins");
+ network = list("toxins");
pixel_x = 30
},
/obj/effect/turf_decal/stripes/line{
@@ -33991,8 +33925,7 @@
"bHL" = (
/obj/machinery/camera{
c_tag = "Research Division South";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/door/firedoor/heavy,
/turf/open/floor/plasteel/white/side{
@@ -34036,8 +33969,7 @@
/obj/structure/disposalpipe/segment,
/obj/machinery/camera{
c_tag = "Aft Primary Hallway 2";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/caution/corner{
@@ -34134,7 +34066,6 @@
/obj/machinery/camera{
c_tag = "Surgery Operating";
dir = 1;
- network = list("SS13");
pixel_x = 22
},
/obj/machinery/light,
@@ -34512,13 +34443,6 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"bIP" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/chair/comfy/black,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"bIQ" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -35522,7 +35446,7 @@
"bKY" = (
/obj/machinery/computer/security/telescreen{
name = "Test Chamber Monitor";
- network = list("Xeno");
+ network = list("xeno");
pixel_y = 2
},
/obj/structure/table/reinforced,
@@ -35686,7 +35610,7 @@
invuln = 1;
light = null;
name = "Hardened Bomb-Test Camera";
- network = list("Toxins");
+ network = list("toxins");
use_power = 0
},
/obj/item/target/alien/anchored,
@@ -36533,7 +36457,7 @@
/obj/machinery/camera{
c_tag = "Toxins Lab East";
dir = 8;
- network = list("SS13","RD");
+ network = list("ss13","rd");
pixel_y = -22
},
/obj/effect/turf_decal/stripes/line{
@@ -36663,8 +36587,7 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics Monitoring";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/machinery/light{
dir = 4
@@ -36683,8 +36606,7 @@
"bNT" = (
/obj/machinery/camera{
c_tag = "Atmospherics North West";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/light{
dir = 8
@@ -36833,8 +36755,7 @@
/obj/structure/closet/emcloset,
/obj/machinery/camera{
c_tag = "Virology Airlock";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -37370,7 +37291,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/structure/chair/comfy/black,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"bPz" = (
@@ -37397,15 +37317,13 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPA" = (
-/obj/machinery/computer/camera_advanced/xenobio{
- dir = 1
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/structure/table/glass,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPB" = (
@@ -37495,10 +37413,10 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPI" = (
-/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPJ" = (
@@ -37750,8 +37668,7 @@
"bQq" = (
/obj/machinery/camera{
c_tag = "Security Post - Engineering";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/item/device/radio/intercom{
dir = 4;
@@ -37924,7 +37841,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology North";
dir = 8;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -37961,7 +37878,7 @@
/obj/machinery/camera{
c_tag = "Testing Lab North";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel,
/area/science/misc_lab)
@@ -38009,7 +37926,7 @@
desc = "Used for watching the RD's goons from the safety of his office.";
dir = 2;
name = "Research Monitor";
- network = list("RD");
+ network = list("rd");
pixel_y = 28
},
/obj/item/device/integrated_circuit_printer,
@@ -38134,7 +38051,7 @@
dir = 8;
layer = 4;
name = "Engine Monitor";
- network = list("Engine");
+ network = list("singularity");
pixel_x = 30
},
/turf/open/floor/plasteel/red/side{
@@ -38437,6 +38354,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/machinery/light{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bRZ" = (
@@ -38560,8 +38480,7 @@
/obj/structure/closet/emcloset,
/obj/machinery/camera{
c_tag = "Telecomms Monitoring";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
@@ -38903,7 +38822,7 @@
/obj/item/crowbar,
/obj/machinery/computer/security/telescreen{
name = "Test Chamber Monitor";
- network = list("Test");
+ network = list("test");
pixel_y = -30
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
@@ -39941,8 +39860,7 @@
"bVN" = (
/obj/machinery/camera{
c_tag = "Atmospherics Access";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/light{
dir = 8
@@ -40144,6 +40062,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/machinery/light{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bWn" = (
@@ -40367,8 +40288,7 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics West";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/structure/cable{
icon_state = "1-2"
@@ -40397,9 +40317,6 @@
/obj/machinery/light{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bWV" = (
@@ -40640,11 +40557,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/science/circuit)
-"bXu" = (
-/obj/structure/disposalpipe/segment,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"bXv" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
@@ -40828,8 +40740,7 @@
"bXV" = (
/obj/machinery/camera{
c_tag = "Atmospherics East";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/atmospherics/components/binary/pump{
dir = 8;
@@ -41237,7 +41148,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology South";
dir = 4;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
@@ -41625,6 +41536,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/machinery/light{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bZX" = (
@@ -41881,8 +41795,7 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics Central";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/atmospherics/components/binary/pump{
dir = 0;
@@ -42184,8 +42097,7 @@
"cbl" = (
/obj/machinery/camera{
c_tag = "Telecomms Server Room";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/dark/telecomms/mainframe,
/area/tcommsat/server)
@@ -42267,7 +42179,6 @@
/obj/machinery/camera{
c_tag = "Aft Primary Hallway 1";
dir = 8;
- network = list("SS13");
pixel_y = -22
},
/turf/open/floor/plasteel/yellow/corner{
@@ -42499,7 +42410,7 @@
/obj/machinery/camera{
c_tag = "Testing Chamber";
dir = 1;
- network = list("Test","RD")
+ network = list("test","rd")
},
/obj/machinery/light,
/turf/open/floor/engine,
@@ -42537,7 +42448,7 @@
desc = "Used for watching the RD's goons from the safety of his office.";
dir = 1;
name = "Research Monitor";
- network = list("RD");
+ network = list("rd");
pixel_y = -28
},
/obj/item/device/integrated_circuit_printer,
@@ -42870,14 +42781,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"ccP" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"ccQ" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/science/xenobiology)
"ccR" = (
/obj/machinery/portable_atmospherics/pump,
/obj/effect/turf_decal/bot{
@@ -43473,8 +43376,7 @@
"cex" = (
/obj/machinery/camera{
c_tag = "Atmospherics South West";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
@@ -43784,20 +43686,6 @@
/obj/item/caution,
/turf/open/floor/plating,
/area/maintenance/aft)
-"cfr" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 2;
- external_pressure_bound = 140;
- pressure_checks = 0;
- name = "killroom vent"
- },
-/obj/machinery/camera{
- c_tag = "Xenobiology Kill Room";
- dir = 4;
- network = list("SS13","RD")
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
"cfs" = (
/obj/machinery/door/airlock/maintenance/abandoned{
name = "Air Supply Maintenance";
@@ -43835,15 +43723,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating/airless,
/area/maintenance/solars/port/aft)
-"cfy" = (
-/obj/structure/rack,
-/obj/item/clothing/shoes/winterboots,
-/obj/item/clothing/suit/hooded/wintercoat,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"cfz" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -43895,16 +43774,6 @@
dir = 5
},
/area/crew_quarters/heads/chief)
-"cfI" = (
-/obj/structure/closet/secure_closet/engineering_personal,
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/turf/open/floor/plasteel/yellow/side{
- dir = 4
- },
-/area/engine/engineering)
"cfJ" = (
/obj/machinery/light/small{
dir = 1
@@ -44089,9 +43958,6 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
-"cgi" = (
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
"cgj" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/barricade/wooden,
@@ -44100,18 +43966,19 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"cgk" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/sign/warning/biohazard,
-/turf/open/floor/plating,
-/area/science/xenobiology)
"cgl" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
- dir = 2;
- external_pressure_bound = 120;
- name = "killroom vent"
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/open/floor/circuit/killroom,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio0";
+ name = "containment blast door"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/engine,
/area/science/xenobiology)
"cgm" = (
/obj/structure/cable{
@@ -44122,17 +43989,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"cgn" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- target_temperature = 80;
- dir = 2;
- on = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"cgo" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -44207,13 +44063,13 @@
/area/engine/engineering)
"cgw" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cgx" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/closed/wall/r_wall,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cgy" = (
/obj/machinery/light/small{
@@ -44283,32 +44139,22 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cgI" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
"cgJ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cgK" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cgL" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cgO" = (
/obj/structure/rack,
@@ -44322,17 +44168,6 @@
dir = 5
},
/area/crew_quarters/heads/chief)
-"cgQ" = (
-/obj/machinery/camera{
- c_tag = "Engineering East";
- dir = 8;
- network = list("SS13")
- },
-/obj/structure/closet/wardrobe/engineering_yellow,
-/turf/open/floor/plasteel/yellow/corner{
- dir = 4
- },
-/area/engine/engineering)
"cgR" = (
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -44531,13 +44366,6 @@
},
/turf/open/floor/plasteel/floorgrime,
/area/maintenance/disposal/incinerator)
-"cho" = (
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
"chp" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -44547,43 +44375,22 @@
},
/turf/closed/wall,
/area/maintenance/starboard/aft)
-"chq" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"chr" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/research{
- name = "Kill Chamber";
+"chs" = (
+/obj/machinery/door/window/northleft{
+ base_state = "right";
+ dir = 8;
+ icon_state = "right";
+ name = "Containment Pen";
req_access_txt = "55"
},
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/open/floor/plating,
-/area/science/xenobiology)
-"chs" = (
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"cht" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio0";
+ name = "containment blast door"
},
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"chu" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
+/turf/open/floor/engine,
/area/science/xenobiology)
"chv" = (
/obj/structure/cable{
@@ -44693,25 +44500,24 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"chF" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
+/obj/effect/landmark/start/station_engineer,
+/obj/structure/chair/office/dark{
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"chG" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"chH" = (
/obj/structure/closet/firecloset,
@@ -44809,35 +44615,15 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"chV" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/table/reinforced,
-/obj/item/tank/internals/emergency_oxygen/engi{
- pixel_x = 5
- },
-/obj/item/clothing/gloves/color/black,
-/obj/item/clothing/glasses/meson/engine,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"chX" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
},
-/turf/open/floor/engine,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"chY" = (
/obj/machinery/shieldgen,
@@ -44921,24 +44707,6 @@
"cig" = (
/turf/closed/wall,
/area/engine/engineering)
-"cii" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/table/reinforced,
-/obj/item/clothing/suit/radiation,
-/obj/item/clothing/head/radiation,
-/obj/item/clothing/glasses/meson,
-/obj/item/device/geiger_counter,
-/obj/item/device/geiger_counter,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cij" = (
/obj/machinery/modular_computer/console/preset/engineering,
/obj/structure/cable{
@@ -44976,15 +44744,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/chief)
-"cip" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"ciq" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -44994,13 +44753,6 @@
},
/turf/open/floor/plating,
/area/crew_quarters/heads/chief)
-"cir" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
"cis" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel,
@@ -45128,7 +44880,7 @@
/obj/machinery/camera{
c_tag = "Turbine Chamber";
dir = 4;
- network = list("Turbine")
+ network = list("turbine")
},
/turf/open/floor/engine/vacuum,
/area/maintenance/disposal/incinerator)
@@ -45141,14 +44893,18 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"ciO" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/item/book/manual/engineering_singularity_safety{
+ pixel_x = 3;
+ pixel_y = 3
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/obj/item/book/manual/wiki/engineering_guide,
+/obj/item/book/manual/engineering_particle_accelerator{
+ pixel_x = -3;
+ pixel_y = -3
},
-/turf/open/floor/engine,
+/obj/item/clothing/gloves/color/yellow,
+/obj/structure/table/glass,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"ciP" = (
/obj/structure/cable{
@@ -45286,17 +45042,10 @@
},
/obj/machinery/camera{
c_tag = "Chief Engineer's Office";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/vault,
/area/crew_quarters/heads/chief)
-"cjh" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cji" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -45335,8 +45084,7 @@
"cjl" = (
/obj/machinery/camera{
c_tag = "Engineering MiniSat Access";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -45432,18 +45180,6 @@
/obj/item/cigbutt/roach,
/turf/open/floor/plating,
/area/maintenance/aft)
-"cjB" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/obj/structure/table,
-/obj/item/folder/white,
-/obj/item/pen,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"cjC" = (
/obj/structure/grille,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -45515,8 +45251,7 @@
},
/obj/machinery/camera{
c_tag = "Engineering Secure Storage";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plating,
/area/engine/engineering)
@@ -45531,7 +45266,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 6
+ },
/area/engine/engineering)
"cjP" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -45552,7 +45289,7 @@
req_access = null;
req_access_txt = "10;13"
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/engine/engineering)
"cjS" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -45574,7 +45311,7 @@
desc = "Used for watching the RD's goons from the safety of your own office.";
dir = 4;
name = "Research Monitor";
- network = list("RD");
+ network = list("rd");
pixel_x = -24
},
/turf/open/floor/plasteel/vault,
@@ -45719,11 +45456,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/aft)
-"ckn" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/science/xenobiology)
"cko" = (
/obj/structure/disposalpipe/segment,
/turf/closed/wall,
@@ -46197,8 +45929,7 @@
/obj/structure/chair/stool,
/obj/machinery/camera{
c_tag = "Aft Starboard Solar Control";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/aft)
@@ -46759,8 +46490,7 @@
},
/obj/machinery/camera{
c_tag = "SMES Room";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/dark,
@@ -46788,8 +46518,7 @@
"cnt" = (
/obj/machinery/camera{
c_tag = "Engineering West";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/structure/cable{
icon_state = "1-2"
@@ -46805,16 +46534,11 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cnx" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/structure/chair/sofa/left{
+ icon_state = "sofaend_left";
dir = 4
},
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cny" = (
/obj/effect/landmark/start/station_engineer,
@@ -46999,8 +46723,7 @@
},
/obj/machinery/camera{
c_tag = "SMES Access";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
@@ -47049,15 +46772,12 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cnZ" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/airalarm{
- pixel_y = 23
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"coa" = (
@@ -47071,25 +46791,32 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cob" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"coc" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
+/obj/structure/table,
+/obj/item/electronics/airlock,
+/obj/item/electronics/airlock,
+/obj/item/electronics/apc,
+/obj/item/stock_parts/cell/high/plus,
+/obj/item/stock_parts/cell/high/plus,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/open/floor/engine,
+/obj/item/stack/cable_coil,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cop" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
@@ -47258,38 +46985,27 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"coK" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"coL" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"coM" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
+/obj/structure/chair/office/dark,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"coL" = (
+/obj/structure/chair/office/dark,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"coS" = (
/obj/structure/rack,
@@ -47455,50 +47171,37 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cpt" = (
-/obj/structure/table,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
+ },
+/area/engine/engineering)
+"cpu" = (
+/obj/item/book/manual/wiki/engineering_hacking{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/book/manual/wiki/engineering_construction,
/obj/item/clothing/gloves/color/yellow,
-/obj/item/storage/toolbox/electrical{
- pixel_y = 5
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/table/glass,
+/obj/item/device/flashlight,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cpx" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/closet/radiation,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cpu" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cpv" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cpx" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cpy" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
+/obj/structure/sign/warning/radiation/rad_area,
+/turf/closed/wall/r_wall,
/area/engine/engineering)
"cpA" = (
/obj/structure/chair/office/dark{
@@ -47513,19 +47216,17 @@
/turf/open/floor/plasteel,
/area/bridge)
"cpD" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/closet/secure_closet/engineering_welding,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cpE" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"cpG" = (
/obj/structure/table/optable,
@@ -47660,8 +47361,7 @@
"cpV" = (
/obj/machinery/camera{
c_tag = "Engineering Storage";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/rnd/protolathe/department/engineering,
/turf/open/floor/plasteel,
@@ -47683,133 +47383,72 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cpZ" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical{
- pixel_y = 5
- },
-/obj/item/device/flashlight{
- pixel_x = 1;
- pixel_y = 5
- },
-/obj/item/device/flashlight{
- pixel_x = 1;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cqa" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cqb" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
-"cqc" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
+"cqb" = (
+/obj/structure/chair/sofa/right{
+ icon_state = "sofaend_right";
+ dir = 4
},
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cqd" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
+/obj/structure/closet/radiation,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 27
+ },
+/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqe" = (
-/obj/effect/turf_decal/stripes/corner,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 6
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cqf" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
"cqg" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Gas to Filter";
- on = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqh" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -26
- },
/obj/machinery/camera{
- c_tag = "Engineering Supermatter Fore";
- dir = 1;
- network = list("SS13","Engine");
+ c_tag = "Engineering Center";
+ dir = 2;
+ network = list("ss13","engine");
pixel_x = 23
},
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
+/obj/machinery/light{
dir = 1
},
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqi" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/light,
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqj" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/button/door{
- id = "engsm";
- name = "Radiation Shutters Control";
- pixel_y = -24;
- req_access_txt = "10"
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
-"cql" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
+"cqh" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
-"cqm" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
+"cqi" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
},
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cqj" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
"cqn" = (
/obj/structure/grille,
@@ -47827,8 +47466,7 @@
"cqp" = (
/obj/machinery/camera{
c_tag = "Engineering Escape Pod";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plating,
/area/engine/engineering)
@@ -47906,54 +47544,39 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cqA" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/obj/machinery/door/airlock/external{
- name = "Engineering External Access";
- req_access = null;
- req_access_txt = "10;13"
+"cqC" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = 2;
+ pixel_y = 4
+ },
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cqD" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
/turf/open/floor/plating,
/area/engine/engineering)
-"cqB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
+"cqE" = (
+/obj/structure/particle_accelerator/end_cap,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cqF" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
-"cqC" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqD" = (
-/obj/structure/sign/warning/radiation,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cqE" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/airlock/engineering/glass{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cqF" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"cqG" = (
/obj/structure/rack,
/obj/item/storage/box/rubbershot{
@@ -48041,70 +47664,49 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cqS" = (
-/obj/machinery/light/small{
- dir = 8
+/turf/open/floor/plasteel/yellow/side{
+ dir = 10
},
-/obj/structure/closet/emcloset/anchored,
-/turf/open/floor/plating,
/area/engine/engineering)
"cqT" = (
-/obj/structure/sign/warning/vacuum/external{
- pixel_x = 32
- },
-/turf/open/floor/plating,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"cqU" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
+/obj/machinery/button/door{
+ id = "Singularity";
+ name = "Shutters Control";
+ pixel_x = 25;
+ req_access_txt = "11"
},
-/obj/effect/turf_decal/bot,
-/obj/machinery/portable_atmospherics/canister,
-/turf/open/floor/plasteel/dark,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"cqY" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/engineering)
"cqZ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cra" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Gas to Filter"
- },
-/obj/machinery/airalarm/engine{
- dir = 4;
- pixel_x = -23
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"crb" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- icon_state = "pump_map";
- name = "Gas to Chamber"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"crc" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
+/obj/structure/particle_accelerator/fuel_chamber,
+/turf/open/floor/plating,
/area/engine/engineering)
-"crd" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
+"cra" = (
+/obj/machinery/particle_accelerator/control_box,
+/obj/structure/cable/yellow,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"crb" = (
+/obj/effect/landmark/start/station_engineer,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"crc" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Engine Containment Starboard Fore";
+ dir = 2;
+ network = list("engine")
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"crh" = (
/obj/effect/turf_decal/stripes/line{
@@ -48167,40 +47769,38 @@
/turf/open/floor/plating,
/area/engine/engineering)
"crs" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 6
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = -7
},
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = -7
+ },
+/obj/item/crowbar,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"crt" = (
-/obj/machinery/door/airlock/engineering/glass{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/obj/structure/particle_accelerator/power_box,
+/turf/open/floor/plating,
+/area/engine/engineering)
"cru" = (
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"crv" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
+/obj/item/screwdriver,
+/turf/open/floor/plating,
+/area/engine/engineering)
"crw" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
/area/engine/engineering)
"cry" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -48288,43 +47888,34 @@
/obj/structure/lattice/catwalk,
/turf/open/space,
/area/solar/starboard/aft)
-"crH" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
"crI" = (
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"crJ" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"crK" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
- dir = 8
- },
-/turf/closed/wall/r_wall,
+/obj/structure/chair/stool,
+/turf/open/floor/plating,
/area/engine/engineering)
-"crL" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
+"crJ" = (
+/obj/machinery/light/small{
+ dir = 8;
+ light_color = "#fff4bc"
},
-/turf/open/floor/plasteel/dark,
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"crK" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = 32
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
"crM" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 1
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#fff4bc"
},
-/turf/open/floor/plasteel/dark,
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plating,
/area/engine/engineering)
"crP" = (
/obj/machinery/light,
@@ -48337,25 +47928,12 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
-"crT" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"crU" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
- },
-/turf/open/space,
-/area/space/nearstation)
"crV" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"crW" = (
/obj/machinery/light/small{
@@ -48375,38 +47953,29 @@
/obj/structure/transit_tube,
/turf/open/floor/plating,
/area/engine/engineering)
-"crZ" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
"csa" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"csb" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 9
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"csc" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/space,
/area/maintenance/aft)
"csd" = (
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cse" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- dir = 8
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"csg" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
@@ -48425,17 +47994,10 @@
},
/turf/open/space,
/area/space/nearstation)
-"csj" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
"csk" = (
/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
+/turf/closed/wall/r_wall,
+/area/science/xenobiology)
"csl" = (
/obj/structure/transit_tube/curved{
dir = 4
@@ -48462,7 +48024,7 @@
desc = "Used for watching the turbine vent.";
dir = 1;
name = "turbine vent monitor";
- network = list("Turbine");
+ network = list("turbine");
pixel_y = -29
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
@@ -48492,26 +48054,22 @@
/turf/open/floor/plasteel/floorgrime,
/area/maintenance/disposal/incinerator)
"css" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/turf/open/space,
-/area/space/nearstation)
-"csu" = (
-/obj/structure/closet/firecloset,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"csv" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"csx" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"csy" = (
/obj/structure/table,
/obj/item/weldingtool,
@@ -48520,19 +48078,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"csA" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
"csD" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -48544,24 +48089,6 @@
/obj/structure/lattice/catwalk,
/turf/open/space,
/area/solar/starboard/aft)
-"csH" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"csI" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"csM" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/yellow/visible,
@@ -48579,27 +48106,9 @@
/area/ai_monitored/turret_protected/aisat_interior)
"csP" = (
/obj/effect/turf_decal/stripes/line{
- dir = 4
+ dir = 1
},
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"csR" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"csT" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -48696,7 +48205,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Pod Access";
dir = 1;
- network = list("MiniSat");
+ network = list("minisat");
start_active = 1
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
@@ -48978,7 +48487,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Teleporter";
dir = 1;
- network = list("MiniSat");
+ network = list("minisat");
start_active = 1
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -49033,7 +48542,7 @@
/obj/machinery/camera/motion{
c_tag = "MiniSat Foyer";
dir = 1;
- network = list("MiniSat")
+ network = list("minisat")
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/aisat_interior)
@@ -49213,7 +48722,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Atmospherics";
dir = 4;
- network = list("MiniSat");
+ network = list("minisat");
start_active = 1
},
/obj/machinery/airalarm{
@@ -49253,7 +48762,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Antechamber";
dir = 4;
- network = list("MiniSat");
+ network = list("minisat");
start_active = 1
},
/obj/machinery/turretid{
@@ -49342,7 +48851,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Service Bay";
dir = 8;
- network = list("MiniSat");
+ network = list("minisat");
start_active = 1
},
/obj/machinery/airalarm{
@@ -49772,7 +49281,7 @@
/obj/machinery/camera{
c_tag = "MiniSat External NorthWest";
dir = 8;
- network = list("MiniSat");
+ network = list("minisat");
start_active = 1
},
/turf/open/space,
@@ -49819,7 +49328,7 @@
/obj/machinery/camera{
c_tag = "MiniSat External NorthEast";
dir = 4;
- network = list("MiniSat");
+ network = list("minisat");
start_active = 1
},
/turf/open/space,
@@ -49835,7 +49344,7 @@
/obj/machinery/camera/motion{
c_tag = "MiniSat Core Hallway";
dir = 4;
- network = list("MiniSat")
+ network = list("minisat")
},
/obj/machinery/firealarm{
dir = 8;
@@ -50213,7 +49722,7 @@
/obj/machinery/camera/motion{
c_tag = "MiniSat AI Chamber North";
dir = 1;
- network = list("MiniSat")
+ network = list("minisat")
},
/turf/open/floor/circuit,
/area/ai_monitored/turret_protected/ai)
@@ -50336,7 +49845,7 @@
/area/shuttle/pod_1)
"cxG" = (
/obj/machinery/door/airlock/external{
- cyclelinkeddir = 4;
+ cyclelinkeddir = 0;
name = "Escape Pod Three";
req_access_txt = "0"
},
@@ -50346,15 +49855,21 @@
/turf/open/floor/plating,
/area/security/main)
"cxJ" = (
-/obj/machinery/door/airlock/external{
- cyclelinkeddir = 8;
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/security/glass{
name = "Labor Camp Shuttle Airlock";
req_access_txt = "2"
},
+/obj/machinery/button/door{
+ id = "prison release";
+ name = "Labor Camp Shuttle Lockdown";
+ pixel_y = -25;
+ req_access_txt = "2"
+ },
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
-/turf/open/floor/plating,
+/turf/open/floor/plasteel/dark,
/area/security/processing)
"cxN" = (
/obj/structure/cable{
@@ -50370,16 +49885,6 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
-"cxP" = (
-/obj/machinery/door/airlock/external{
- cyclelinkeddir = 8;
- name = "Labor Camp Shuttle Airlock"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/security/processing)
"cxR" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/spawner/structure/window/reinforced,
@@ -50629,18 +50134,14 @@
},
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
-"czE" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"czF" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/meter,
-/turf/open/floor/plasteel/dark,
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = -32
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
"czG" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -50722,11 +50223,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar)
-"czQ" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"czR" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -50874,97 +50370,40 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cAl" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
+"cAm" = (
+/obj/item/wirecutters,
/obj/structure/cable/yellow{
- icon_state = "1-4"
+ icon_state = "2-8"
},
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cAo" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAm" = (
-/obj/machinery/power/supermatter_shard/crystal/engine,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cAo" = (
-/obj/structure/cable{
+/obj/structure/cable/yellow{
icon_state = "1-4"
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cAp" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
},
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Cooling Loop to Gas";
- on = 1
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cAq" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cAr" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
},
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Gas to Mix";
- on = 0
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAs" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAt" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAu" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/emitter/anchored{
- dir = 4;
- state = 2
- },
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cAy" = (
/obj/structure/closet/secure_closet/freezer/kitchen/maintenance,
@@ -51079,9 +50518,17 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"cAP" = (
-/obj/structure/sign/warning/fire,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
+/obj/machinery/button/door{
+ id = "Singularity";
+ name = "Shutters Control";
+ pixel_x = 25;
+ req_access_txt = "11"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"cAQ" = (
/obj/structure/chair,
/turf/open/floor/plating,
@@ -51147,7 +50594,7 @@
/obj/machinery/camera{
c_tag = "MiniSat External SouthWest";
dir = 8;
- network = list("MiniSat");
+ network = list("minisat");
start_active = 1
},
/turf/open/space,
@@ -51182,7 +50629,7 @@
/obj/machinery/camera{
c_tag = "MiniSat External SouthEast";
dir = 4;
- network = list("MiniSat");
+ network = list("minisat");
start_active = 1
},
/turf/open/space,
@@ -51212,7 +50659,7 @@
/obj/machinery/camera/motion{
c_tag = "MiniSat AI Chamber South";
dir = 2;
- network = list("MiniSat")
+ network = list("minisat")
},
/turf/open/floor/circuit,
/area/ai_monitored/turret_protected/ai)
@@ -51244,7 +50691,7 @@
/obj/machinery/camera{
c_tag = "MiniSat External South";
dir = 2;
- network = list("MiniSat");
+ network = list("minisat");
start_active = 1
},
/turf/open/space,
@@ -51290,8 +50737,7 @@
"cBn" = (
/obj/machinery/camera{
c_tag = "Locker Room Toilets";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/freezer,
@@ -51496,10 +50942,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cBS" = (
/obj/structure/cable{
@@ -51675,89 +51118,6 @@
},
/turf/open/floor/plating,
/area/shuttle/auxillary_base)
-"cCB" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cCC" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cCD" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Mix to Engine";
- on = 0
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cCE" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cCF" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/atmos)
-"cCG" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 10
- },
-/turf/open/space,
-/area/space/nearstation)
-"cCH" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"cCI" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"cCJ" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"cCP" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
- },
-/turf/open/space,
-/area/space/nearstation)
-"cCQ" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"cCS" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
"cCT" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -51777,77 +51137,33 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cDe" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/closet/radiation,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cDg" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "2-8"
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cDh" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/structure/table/reinforced,
-/obj/item/storage/toolbox/mechanical,
-/obj/item/device/flashlight,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/item/pipe_dispenser,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDi" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/table/reinforced,
-/obj/item/clothing/suit/radiation,
-/obj/item/clothing/head/radiation,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDj" = (
-/obj/structure/cable/yellow{
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cDk" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cDl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -51864,90 +51180,39 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cDo" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/item/pen,
+/obj/item/storage/belt/utility,
+/obj/item/clothing/glasses/meson,
+/obj/item/paper_bin{
+ layer = 2.9
+ },
+/obj/structure/table/glass,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cDt" = (
+/obj/structure/table,
+/obj/item/twohanded/rcl/pre_loaded,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cDw" = (
+/obj/structure/closet/secure_closet/engineering_electrical,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cDp" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDr" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDs" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDt" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDv" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDw" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cDx" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/chair/sofa{
+ icon_state = "sofamiddle";
+ dir = 4
},
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Atmos to Loop";
- on = 0
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cDy" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDz" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
+/obj/structure/table,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/storage/belt/utility,
+/obj/item/clothing/glasses/meson,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cDB" = (
@@ -51957,102 +51222,23 @@
/obj/effect/landmark/start/station_engineer,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cDC" = (
-/obj/item/wrench,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cDD" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cDE" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "External Gas to Loop"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"cDF" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "External Gas to Loop"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cDG" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDH" = (
-/obj/structure/rack,
-/obj/item/clothing/mask/gas{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas{
- pixel_x = -3;
- pixel_y = -3
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cDI" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cDJ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"cDK" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
+/turf/open/floor/plasteel/yellow/side{
dir = 4
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
-"cDL" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cDN" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/closed/wall,
-/area/engine/engineering)
-"cDY" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
+"cDO" = (
+/obj/effect/turf_decal/stripes/line{
dir = 9
},
-/turf/open/space,
+/turf/open/floor/plating/airless,
/area/space/nearstation)
"cDZ" = (
/obj/structure/cable{
@@ -52062,824 +51248,139 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cEa" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
- },
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cEd" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Port";
- dir = 4;
- network = list("SS13","Engine")
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
-"cEe" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/light{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEf" = (
-/obj/machinery/ai_status_display,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cEg" = (
-/obj/machinery/status_display,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cEh" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEi" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Starboard";
- dir = 8;
- network = list("SS13","Engine")
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEk" = (
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cEl" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
- },
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
"cEm" = (
/obj/machinery/vending/autodrobe,
/turf/open/floor/wood,
/area/maintenance/bar)
-"cEr" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cEs" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Gas to Cooling Loop";
- on = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEt" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cEu" = (
-/obj/machinery/camera{
- c_tag = "Supermatter Chamber";
- dir = 2;
- network = list("Engine");
- pixel_x = 23
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEv" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-8"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEw" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEx" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEy" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-4"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEz" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEA" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cEB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEC" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Mix to Gas";
- on = 0
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cED" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEE" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
- },
-/turf/open/space,
-/area/space/nearstation)
-"cEK" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cEL" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -22
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEM" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/item/tank/internals/plasma,
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cET" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/oil,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cEU" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEW" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cFb" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
-/turf/open/floor/engine,
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
-"cFc" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
+"cEv" = (
/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- icon_state = "pump_map";
- name = "Cooling Loop Bypass"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFe" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-8"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cFh" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-4"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cFj" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
+ icon_state = "1-2"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
/turf/open/floor/plating,
-/area/engine/supermatter)
-"cFk" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Mix Bypass"
- },
-/turf/open/floor/engine,
/area/engine/engineering)
-"cFm" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"cFn" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+"cEw" = (
+/obj/structure/particle_accelerator/particle_emitter/left,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cEx" = (
+/obj/structure/particle_accelerator/particle_emitter/right,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cEy" = (
+/obj/effect/turf_decal/stripes/line{
dir = 6
},
-/turf/open/space,
-/area/space/nearstation)
-"cFo" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
- },
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"cFu" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
-"cFw" = (
-/obj/structure/sign/warning/electricshock,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cFy" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
+"cEK" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
},
-/turf/open/floor/engine,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access = null;
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
-"cFz" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
+"cFb" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Engine Containment Port Fore";
+ dir = 2;
+ network = list("engine")
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
-"cFA" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/turf/open/floor/plasteel/dark,
+"cFn" = (
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cFI" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFJ" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cFK" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
+/obj/machinery/field/generator{
+ anchored = 1;
+ state = 2
},
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFL" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFM" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFN" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFO" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Aft";
- dir = 2;
- network = list("SS13","Engine");
- pixel_x = 23
- },
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cFP" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFR" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFS" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFT" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 9
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"cFU" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGd" = (
-/obj/structure/closet/crate/bin,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGe" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGf" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8;
- filter_type = "n2"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGg" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGh" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGi" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGj" = (
-/obj/structure/table,
-/obj/item/pipe_dispenser,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGk" = (
-/obj/machinery/light,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGl" = (
-/obj/structure/closet/secure_closet/engineering_personal,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGr" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGs" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGt" = (
-/obj/structure/closet/wardrobe/engineering_yellow,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGu" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGv" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGx" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible,
-/obj/machinery/meter,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGC" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/atmospherics/components/binary/valve/digital{
- dir = 4;
- name = "Output Release";
- open = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGD" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGE" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGH" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGI" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Laser Room";
- req_access_txt = "10"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGK" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGL" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGM" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
-"cGR" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGS" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGT" = (
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGU" = (
-/obj/structure/reflector/double/anchored{
- dir = 6
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGV" = (
-/obj/structure/reflector/box/anchored{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGY" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGZ" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/on{
- dir = 1;
- volume_rate = 200
- },
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
-"cHa" = (
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -22
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cHb" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHc" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHd" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHe" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHg" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHj" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/machinery/power/emitter/anchored{
dir = 8;
state = 2
},
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHn" = (
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "0-4"
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
-"cHo" = (
-/obj/structure/reflector/single/anchored{
- dir = 9
+"cGh" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
},
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cHp" = (
-/obj/structure/reflector/single/anchored{
- dir = 5
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cHr" = (
-/obj/structure/cable{
+/obj/structure/cable/yellow{
icon_state = "1-8"
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"cGr" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"cGE" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"cGU" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"cGV" = (
+/obj/machinery/the_singularitygen/tesla,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"cGZ" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cHD" = (
/obj/structure/cable{
@@ -53218,8 +51719,13 @@
/turf/open/floor/plating,
/area/security/brig)
"cMm" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cMC" = (
/obj/machinery/computer/security/telescreen{
@@ -53227,7 +51733,7 @@
dir = 8;
layer = 4;
name = "Engine Monitor";
- network = list("Engine");
+ network = list("singularity");
pixel_x = 30
},
/obj/effect/turf_decal/stripes/line{
@@ -53238,15 +51744,24 @@
},
/area/engine/engineering)
"cMD" = (
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cMH" = (
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cMN" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plating,
-/area/engine/supermatter)
+/area/engine/engineering)
+"cMH" = (
+/obj/structure/particle_accelerator/particle_emitter/center,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cMN" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"cMQ" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -53454,6 +51969,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"cQZ" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"cSz" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -53479,41 +52000,23 @@
/turf/open/floor/plasteel/dark/telecomms/mainframe,
/area/tcommsat/server)
"cSG" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/plating,
+/area/engine/engineering)
"cSH" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
},
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cSI" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cSJ" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/obj/machinery/power/tesla_coil,
+/turf/open/floor/plating/airless,
+/area/space)
"cSK" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/obj/machinery/power/tesla_coil,
+/turf/open/floor/plating/airless,
+/area/space)
"cSL" = (
/obj/machinery/button/door{
id = "atmos";
@@ -53823,18 +52326,6 @@
},
/turf/open/floor/plating,
/area/science/xenobiology)
-"cTY" = (
-/obj/structure/sign/poster/official/safety_internals{
- pixel_x = -32
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"cTZ" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"cVb" = (
/turf/closed/wall,
/area/hallway/secondary/service)
@@ -53944,6 +52435,13 @@
},
/turf/open/floor/plating,
/area/security/brig)
+"ejb" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
"ejX" = (
/obj/machinery/light{
dir = 1
@@ -53999,6 +52497,13 @@
icon_state = "wood-broken5"
},
/area/maintenance/bar)
+"eHD" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"eRz" = (
/obj/structure/lattice,
/obj/structure/grille,
@@ -54014,6 +52519,11 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"fdi" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/open/space/basic,
+/area/space)
"fgi" = (
/turf/closed/wall,
/area/crew_quarters/cryopod)
@@ -54029,6 +52539,26 @@
/obj/machinery/bookbinder,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"fmO" = (
+/obj/structure/window/reinforced,
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "xenobio7";
+ name = "Containment Blast Doors";
+ pixel_y = 4;
+ req_access_txt = "55"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"fmW" = (
/obj/effect/turf_decal/loading_area/white,
/obj/effect/turf_decal/stripes/white/corner{
@@ -54057,9 +52587,16 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
-"fsQ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/dark,
+"fFB" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "Singularity";
+ name = "radiation shutters"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
/area/engine/engineering)
"fIx" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -54124,6 +52661,9 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/showroomfloor,
/area/space)
+"gre" = (
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"gtB" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -54227,18 +52767,61 @@
/obj/structure/closet/bombcloset/security,
/turf/open/floor/plasteel/showroomfloor,
/area/space)
+"hmW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"hyz" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "Singularity";
+ name = "radiation shutters"
+ },
+/obj/effect/turf_decal/bot{
+ dir = 2
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"hCi" = (
/obj/structure/lattice,
/turf/open/space/basic,
/area/space)
+"hDa" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"hMa" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access = null;
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"hQd" = (
+/turf/open/space/basic,
+/area/engine/engineering)
"hSW" = (
/turf/open/floor/plasteel/red/side,
/area/security/brig)
-"ijc" = (
-/obj/structure/table,
-/obj/item/stack/sheet/metal/fifty,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
+"ieW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"ilg" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood{
@@ -54255,6 +52838,14 @@
/obj/machinery/droneDispenser,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
+"iqO" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Engine Containment Port Aft";
+ dir = 1;
+ network = list("engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"itG" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin,
@@ -54330,7 +52921,7 @@
/obj/machinery/camera{
c_tag = "Circuitry Lab";
dir = 8;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel,
/area/science/circuit)
@@ -54368,6 +52959,10 @@
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/maintenance/bar)
+"jyX" = (
+/obj/structure/sign/warning/securearea,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
"jAD" = (
/obj/structure/grille,
/turf/open/floor/plating/airless,
@@ -54412,15 +53007,6 @@
dir = 9
},
/area/security/brig)
-"jMY" = (
-/obj/structure/table,
-/obj/item/stack/cable_coil{
- pixel_x = 3;
- pixel_y = -7
- },
-/obj/item/stack/cable_coil,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"jSO" = (
/obj/machinery/light{
dir = 4
@@ -54439,6 +53025,13 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"jZh" = (
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"khb" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -54449,7 +53042,7 @@
/area/hallway/secondary/service)
"khB" = (
/obj/machinery/door/airlock/external{
- cyclelinkeddir = 4;
+ cyclelinkeddir = 0;
req_access_txt = "13"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
@@ -54519,6 +53112,12 @@
icon_state = "wood-broken7"
},
/area/maintenance/bar)
+"kNw" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"kPd" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/structure/cable{
@@ -54534,13 +53133,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
-"kQq" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"kSb" = (
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -54707,27 +53299,56 @@
/obj/effect/turf_decal/bot_white,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
-"mBv" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/binary/valve{
- dir = 4;
- name = "Output to Waste"
- },
-/turf/open/floor/engine,
+"mzz" = (
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"mHd" = (
/obj/structure/falsewall,
/turf/open/floor/plating,
/area/maintenance/bar)
+"mHe" = (
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio0";
+ name = "containment blast door"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/engine,
+/area/science/xenobiology)
+"mLm" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"mMg" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"mNi" = (
/obj/machinery/light_switch{
pixel_x = -20
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"mQs" = (
+/obj/machinery/power/emitter/anchored{
+ dir = 4;
+ state = 2
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"mRe" = (
/obj/machinery/light{
dir = 8
@@ -54741,6 +53362,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/maintenance/fore/secondary)
+"mWO" = (
+/turf/open/floor/plating/airless,
+/area/space)
"mXj" = (
/turf/open/floor/plasteel/showroomfloor,
/area/space)
@@ -54750,10 +53374,6 @@
"nnM" = (
/turf/closed/wall/r_wall,
/area/security/armory)
-"noK" = (
-/obj/structure/girder,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"nsq" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -54762,6 +53382,26 @@
dir = 8
},
/area/security/brig)
+"nvr" = (
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "xenobio0";
+ name = "Containment Blast Doors";
+ pixel_y = 4;
+ req_access_txt = "55"
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light,
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"nwx" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
@@ -54787,10 +53427,6 @@
},
/turf/open/floor/plasteel/floorgrime,
/area/security/brig)
-"nzh" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"nAv" = (
/obj/structure/table,
/obj/item/grenade/barrier{
@@ -54862,6 +53498,13 @@
/obj/item/device/electropack/shockcollar,
/turf/open/floor/plating,
/area/maintenance/bar)
+"oaS" = (
+/obj/effect/landmark/start/station_engineer,
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"obC" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -54932,10 +53575,19 @@
dir = 10
},
/area/security/brig)
-"oDF" = (
-/obj/machinery/light,
+"oAQ" = (
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/engine/engineering)
+"oHi" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"oHU" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -54959,6 +53611,21 @@
/obj/machinery/disposal/bin,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"oUs" = (
+/obj/machinery/button/door{
+ id = "Singularity";
+ name = "Shutters Control";
+ pixel_x = -25;
+ req_access_txt = "11"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"oZl" = (
/turf/open/floor/plasteel/purple/side{
tag = "icon-purple (NORTH)";
@@ -55002,6 +53669,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
+"pmD" = (
+/turf/open/space/basic,
+/area/space/nearstation)
"pzG" = (
/obj/structure/sign/poster/random{
pixel_x = -32
@@ -55168,6 +53838,14 @@
/obj/item/device/assembly/signaler,
/turf/open/floor/plating,
/area/maintenance/bar)
+"riY" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Engine Containment Starboard Aft";
+ dir = 1;
+ network = list("engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"rmX" = (
/obj/structure/table,
/obj/item/reagent_containers/food/drinks/beer,
@@ -55210,11 +53888,22 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"rNn" = (
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"rWu" = (
/turf/open/floor/wood{
icon_state = "wood-broken6"
},
/area/maintenance/bar)
+"rZV" = (
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"saK" = (
/obj/structure/closet/crate,
/obj/item/target/alien,
@@ -55227,6 +53916,20 @@
/obj/item/gun/energy/laser/practice,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"spp" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "Singularity";
+ name = "radiation shutters"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/bot{
+ dir = 2
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"srd" = (
/turf/open/floor/plasteel/red/corner{
dir = 4
@@ -55249,6 +53952,31 @@
/obj/item/shovel/spade,
/turf/open/floor/plasteel/hydrofloor,
/area/hallway/secondary/service)
+"syV" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/table/glass,
+/obj/item/extinguisher,
+/obj/item/extinguisher{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/extinguisher{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
+"sAz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"sGJ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood{
@@ -55315,6 +54043,12 @@
/obj/structure/chair/office/light,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"sWi" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"sXy" = (
/obj/machinery/door/airlock/external{
name = "Security External Airlock";
@@ -55378,6 +54112,12 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/space/nearstation)
+"tHc" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 2
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"tMl" = (
/obj/effect/turf_decal/loading_area,
/turf/open/floor/plasteel/showroomfloor,
@@ -55408,21 +54148,14 @@
/obj/item/storage/box/drinkingglasses,
/turf/open/floor/wood,
/area/maintenance/bar)
-"udp" = (
-/obj/item/crowbar/large,
-/obj/structure/rack,
-/obj/item/device/flashlight,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"uhH" = (
-/obj/item/wrench,
-/obj/item/weldingtool,
-/obj/item/clothing/head/welding{
- pixel_x = -3;
- pixel_y = 5
+"ugZ" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
},
-/obj/structure/rack,
-/turf/open/floor/plasteel/dark,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
"ujc" = (
/obj/machinery/vending/cigarette,
@@ -55462,7 +54195,7 @@
/obj/item/screwdriver,
/obj/machinery/camera{
c_tag = "Circuitry Lab North";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
@@ -55480,6 +54213,20 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"uuA" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/electrical{
+ pixel_x = 2;
+ pixel_y = 4
+ },
+/obj/item/storage/toolbox/electrical{
+ pixel_x = -2
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"uvc" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood,
@@ -55487,6 +54234,12 @@
"uvy" = (
/turf/closed/wall/r_wall,
/area/space)
+"uAt" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/yellow/side,
+/area/engine/engineering)
"uMX" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -55566,6 +54319,12 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
+"vie" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"vxh" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance{
@@ -55596,6 +54355,13 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"vHQ" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"vNJ" = (
/obj/machinery/vending/clothing,
/turf/open/floor/wood,
@@ -55819,6 +54585,22 @@
/obj/effect/spawner/lootdrop/grille_or_trash,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"xJs" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"xMh" = (
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"xTa" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
@@ -55847,6 +54629,14 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"yam" = (
+/obj/effect/landmark/start/atmospheric_technician,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"yck" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/space)
"ycu" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -55871,6 +54661,9 @@
/obj/effect/turf_decal/bot_white,
/turf/open/floor/plasteel/dark,
/area/security/armory)
+"ymd" = (
+/turf/open/floor/plasteel/dark,
+/area/security/processing)
(1,1,1) = {"
aaa
@@ -78826,10 +77619,10 @@ abc
abc
afu
abc
-aaa
-aaa
-aaa
-aaa
+abc
+abc
+abc
+abc
aaa
aaa
aaa
@@ -79095,7 +77888,7 @@ aln
aiU
aaa
aiU
-anN
+aln
aiU
aaa
aaa
@@ -79203,8 +77996,8 @@ aaa
aaa
aaa
aaa
-aaT
-aaT
+aaa
+aaa
aaa
aaa
aaa
@@ -79348,11 +78141,11 @@ aaf
aaf
aaf
aiU
-alp
+ymd
aiU
aaa
aiU
-alp
+ymd
aiU
aaf
aaf
@@ -79448,21 +78241,21 @@ cjJ
aaa
aaa
crn
-aaf
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
-aaf
-ctv
-aaT
-aaT
aaa
aaa
aaa
@@ -79609,7 +78402,7 @@ cxJ
aiU
aiT
aiU
-cxP
+cxJ
aiU
aiV
aiT
@@ -79705,21 +78498,21 @@ cjJ
aaa
aaa
crn
-aaf
-aaT
-ctv
-ctv
-ctv
-ctv
-ctv
-ctv
-ctv
-aaT
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
-aaf
-ctv
-ctv
-aaT
aaa
aaa
aaa
@@ -79962,20 +78755,20 @@ cjJ
aaf
aaf
cig
-aaf
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaf
-aaf
-aaf
-aaf
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -80220,17 +79013,17 @@ ccw
ccw
ccw
aaa
-aaf
-aaa
-aaa
-aaf
-aaa
-aaa
-aaf
aaa
aaa
aaa
-aaf
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -80477,19 +79270,19 @@ cqw
cqO
crp
aaa
-aaf
-aaa
-aaa
-aaf
-aaa
-aaa
-aaf
aaa
aaa
aaa
-aaT
-aaT
-aaT
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -80733,20 +79526,20 @@ cgR
cgR
cqN
cro
-cEl
-cEE
-cEl
-cFm
-csx
-cFm
-cFm
-csx
-csv
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
-aaT
-ctv
-aaT
aaa
aaa
aaa
@@ -80990,20 +79783,20 @@ ciN
cji
cDZ
crr
-crJ
-crT
-crJ
-cFn
-css
-csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-ctv
-aaT
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -81243,24 +80036,24 @@ ccw
cfL
coH
cBO
-cgR
+cnv
cDB
cqP
crq
-crZ
-crT
-crZ
-cFo
-css
-cFm
-cFm
-css
-csv
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
-aaT
-ctv
-aaT
aaa
aaa
aaa
@@ -81504,21 +80297,21 @@ cgR
cqx
cqR
crp
-crJ
-crT
-crJ
-cFn
-css
-csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-ctv
-aaT
-aaa
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+hCi
aaa
aaa
aaa
@@ -81761,25 +80554,25 @@ cpX
cqz
cqQ
ccw
-crH
-crT
-crZ
-cFo
-css
-cFm
-cFm
-css
-csv
+pmD
aaa
aaa
-aaT
-ctv
-aaT
+uvy
+uvy
+uvy
aaa
aaa
aaa
aaa
aaa
+uvy
+uvy
+uvy
+hCi
+hCi
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -82018,24 +80811,24 @@ clJ
cig
cig
ccw
-crJ
-crT
-crJ
-cFn
-css
-csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-ctv
-aaT
-aaa
+pmD
+pmD
+uvy
+uvy
+uvy
+uvy
+uvy
aaa
aaa
aaa
+uvy
+uvy
+uvy
+uvy
+uvy
+hCi
+hCi
+hCi
aaa
aaa
aaa
@@ -82269,30 +81062,30 @@ ccw
ccw
ccw
cnZ
-coH
+oHi
+cpt
+cpt
cpt
-cpZ
-cig
cqS
ccw
-crH
-crT
-crZ
-cFo
-css
-cFm
-cFm
-css
-csv
-aaa
-aaa
-aaT
-ctv
-aaT
-aaa
-aaa
-aaf
-aaa
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+cpy
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+uvy
+hCi
aaa
aaa
aaa
@@ -82528,28 +81321,28 @@ cnt
cob
coL
cDo
+oaS
cgR
-cqA
cqT
-csg
+ccw
crJ
-crU
+ccw
csb
cFn
css
+cFn
csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-aaT
-aaT
-gXs
-aaf
-aaf
-aaf
+ccw
+ccw
+ccw
+cGE
+cFn
+jZh
+mzz
+mzz
+ccw
+uvy
+yck
aaa
aaa
aaa
@@ -82786,27 +81579,27 @@ cgw
coK
cpu
cMm
-ccw
-ccw
-ccw
+ckH
+uAt
+hMa
crK
cEK
csa
-csj
-csa
-csa
+gre
+mQs
+gre
cGr
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
+vHQ
+hDa
+vHQ
+mLm
+gre
+mQs
+gre
+gre
+ccw
+uvy
+hCi
aaa
aaa
aaa
@@ -83039,31 +81832,31 @@ ckG
clJ
cmF
cgR
-cgI
+cnZ
chF
ciO
-cqc
-cqc
-cqc
-cEd
-cEr
-cEL
+oaS
+cgR
+cqT
+ccw
+cig
+ccw
cFb
-cFu
+gre
cFI
-cGd
-cGs
-cGr
+gre
+gre
+gre
+gre
+gre
+gre
+gre
+cFI
+gre
+iqO
ccw
-ccw
-ccw
-ccw
-ccw
-ccw
-aaa
-eRz
-aaT
-eRz
+uvy
+fdi
aaa
aaa
aaa
@@ -83296,30 +82089,30 @@ cTa
ceZ
clQ
cgR
-cgx
-coM
-cpv
-cqb
-cqb
-cqb
-cqb
+cnZ
+oHi
+cgR
+cgR
+cgR
+cqT
+fFB
cEs
-cqb
-cqb
+gre
+rNn
cAp
-cqb
+xJs
cAo
-cGt
-cgx
-jMY
-csd
-cHa
-csd
-uhH
+xJs
+cAo
+xJs
+cAo
+xJs
+cQZ
+gre
+gre
+gre
ccw
-aaa
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -83554,29 +82347,29 @@ cTd
ckF
ckF
cgK
-cDg
-cDp
-cqe
-cqB
-cqB
-cEe
+oHi
+cgR
+cgR
+cgR
+cqT
+fFB
csP
-cAl
-cFc
+gre
+gre
cAq
-cFJ
+mWO
cSH
-cGu
-cGH
-fsQ
-fsQ
-cGR
-csd
-csd
+mWO
+cSH
+mWO
+cSH
+mWO
+cSH
+mWO
+gre
+gre
ccw
-aaa
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -83814,26 +82607,26 @@ cgJ
chG
cpx
cqd
-cDC
+cjc
cqU
-cEf
-cEt
-cEM
-csA
-cEg
+fFB
+csP
+gre
+rNn
+cAq
cFK
-cGe
-cGv
-cGI
-cGS
-cHb
-cHg
-cHn
-oDF
+aoV
+aoV
+cFK
+gXs
+aaa
+aoV
+aoV
+cFK
+mWO
+gre
ccw
-aaf
-aaT
-ctv
+uvy
aaT
aaf
aaa
@@ -84067,30 +82860,30 @@ cig
cig
cTf
cgR
-ccw
+cnZ
cDh
cpy
-cDv
-cDD
-cqU
-cMD
-cEu
-cEz
-cEz
-cMD
-cFL
-cGf
-kQq
-cMm
-ciZ
-cHc
-cAu
-cAu
-ciZ
ccw
+hyz
+ccw
+ccw
+cqY
+cqY
+cqY
+cAq
+aoV
+aoV
+aoV
+hCi
+aaf
aaa
-aaT
-ctv
+aoV
+aoV
+aoV
+mWO
+gre
+ccw
+uvy
aaT
aaa
aaa
@@ -84324,30 +83117,30 @@ ckI
clJ
cmL
cBO
+cnZ
+cDh
ccw
-chV
-cpx
cqf
cqD
-cMD
+oUs
crs
cEv
-cEv
-cFe
-cMD
-cFM
-czE
-kQq
-ccw
-cGT
-csd
-csd
-csd
-csd
-ccw
+ugZ
+cqY
+cAq
+aoV
+aoV
+aaa
+aaa
aaf
-aaT
-ctv
+aaa
+aaa
+aoV
+aoV
+mWO
+gre
+ccw
+uvy
aaT
aaa
aaa
@@ -84581,30 +83374,30 @@ ckK
clJ
cmL
cgR
-cgL
+cnZ
chX
-cpx
+spp
cqh
cqF
cra
crI
cEw
-cEw
-cEw
-cFw
-cFN
-csH
-csR
-cMm
-cGU
-csd
-csd
-cHo
-csd
-ccw
+ejb
+cqY
+cAq
aaa
-aaT
-ctv
+aaa
+aaa
+cDO
+cGU
+sWi
+aaa
+hCi
+cFK
+mWO
+gre
+ccw
+uvy
aaT
aaa
aaa
@@ -84838,30 +83631,30 @@ ckI
clJ
cmL
cnv
-cMm
-chX
-cpx
+cnZ
+eHD
+ccw
cqg
cqE
cqZ
crt
cMH
cAm
-cMH
+mMg
cMN
-cFO
-cSI
-cSI
-cMm
+gXs
+aaf
+aaf
+kNw
cGV
-csd
-cGV
-noK
-csd
+tHc
+aaf
+aaf
+gXs
+mWO
+gre
ccw
-aaa
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -85095,30 +83888,30 @@ cfb
ccw
cmN
cgR
-cgL
-chX
-cpx
+cnZ
+eHD
+hyz
cqj
cSG
crb
cru
cEx
-cEx
-cEx
-cAP
-cFP
-csI
-cAt
-cMm
-csd
-csd
-csd
-cHp
-csd
+oAQ
+cqY
+cAq
+cFK
+hCi
+aaa
+hmW
+sAz
+ieW
+aaa
+aaa
+aaa
+mWO
+gre
ccw
-aaf
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -85352,30 +84145,30 @@ cfb
clM
cfz
cgR
+cnZ
+eHD
ccw
-cii
-cpx
cqi
cMD
cAP
-crv
-cEy
-cEy
-cFh
cMD
-cFM
-czE
-kQq
-ccw
-cGT
-csd
-csd
-csd
-csd
-ccw
+cMD
+cEy
+cqY
+cAq
+aoV
+aoV
+aaa
+aaa
aaf
-aaT
-ctv
+aaa
+aaa
+aoV
+aoV
+mWO
+gre
+ccw
+uvy
aaT
aaa
aaa
@@ -85609,30 +84402,30 @@ cfb
cfa
cje
cgR
+cnZ
+eHD
+cpy
ccw
-cDi
-cDr
-cDw
-cDE
-cEa
-cMD
-cEz
-cEz
-cEz
-cMD
-cFR
-cSJ
-kQq
-cMm
-ciZ
-cHd
-cHj
-cHd
-ciZ
+hyz
ccw
+ccw
+cqY
+cqY
+cqY
+cAq
+aoV
+aoV
aaa
-aaT
-ctv
+aaa
+aaf
+hCi
+aaa
+aoV
+aoV
+mWO
+gre
+ccw
+uvy
aaT
aaa
aaa
@@ -85866,30 +84659,30 @@ ckL
cmF
cje
cgR
-cMm
-chX
+cnZ
+cjS
cpD
cDw
cDF
cEa
-cEg
-cEA
-cET
-cFj
-cEf
-cFS
-cGg
-mBv
-cGI
-cGS
-cHe
-cHe
-cHr
-oDF
+fFB
+csP
+gre
+rNn
+cAq
+cFK
+aoV
+aaa
+aaa
+gXs
+cFK
+aoV
+aoV
+cFK
+mWO
+gre
ccw
-aaf
-aaT
-ctv
+uvy
aaT
aaf
aaa
@@ -86123,30 +84916,30 @@ ceq
clQ
cje
cgR
-cMm
-cDj
-cDs
-cql
-cDG
-cDG
-cEh
-cEB
-cEU
-cFk
-cAs
-cFT
+cnZ
+cjS
+cgR
+cgR
+cgR
+cqT
+fFB
+csP
+gre
+gre
+cAq
+mWO
cSK
-cGx
-cGK
-nzh
-nzh
-cGY
-csd
-csd
+mWO
+cSK
+mWO
+cSK
+mWO
+cSK
+mWO
+gre
+gre
ccw
-aaf
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -86380,30 +85173,30 @@ ckO
ckH
cja
cny
-ccw
-cip
+cnZ
+cjS
cnx
cDx
cqb
-cqb
-cqb
-cEC
-cqb
-cqb
+cqT
+fFB
+cEs
+gre
+rNn
cAr
-cqb
+xJs
cGh
-cGC
-cey
-ijc
-csd
-cEk
-csd
-udp
+xJs
+cGh
+xJs
+cGh
+xJs
+vie
+gre
+gre
+gre
ccw
-aaf
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -86637,30 +85430,30 @@ cfb
clR
cgR
cgR
-cMm
-cir
+cnZ
+cjS
cDt
cDy
cqC
+cqT
+ccw
+ccw
+ccw
crc
-cEi
-cED
-crc
-crc
-cFy
+gre
cBR
-cGi
-cGD
-cGL
+gre
+gre
+gre
+gre
+gre
+gre
+gre
+cBR
+gre
+riY
ccw
-ccw
-ccw
-ccw
-ccw
-ccw
-aaa
-aaT
-aaT
+uvy
aaT
aaa
aaa
@@ -86898,27 +85691,27 @@ cDe
cDk
coc
cqa
-cig
-ccw
-ccw
+uuA
+uAt
+hMa
czF
+cEK
csd
-csd
-cFz
+gre
cFU
-cGj
+gre
cGE
-cGM
+vHQ
cGZ
-aag
-aaa
-aaf
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
+vHQ
+csx
+gre
+cFU
+gre
+gre
+ccw
+uvy
+hCi
aaa
aaa
aaa
@@ -87154,28 +85947,28 @@ cgU
cgU
cis
cjN
-cDz
-cDH
-cMm
-csd
-crM
-crV
-crV
-cFA
-csd
-cGk
+cgR
+cgR
+cqT
ccw
-aag
-aag
-aag
-aaf
-aaf
-aaf
-aaf
-gXs
-aaf
-aaf
-aaf
+crM
+ccw
+crV
+cFn
+xMh
+cFn
+mLm
+ccw
+ccw
+ccw
+cGr
+cFn
+rZV
+mzz
+mzz
+ccw
+uvy
+yck
aaf
aaa
aaa
@@ -87407,32 +86200,32 @@ ccw
cet
cfd
cfB
-cfI
-cgQ
+cfB
+cfB
cjS
cjN
-cqm
cgR
-crd
-cEk
-crL
-cEW
-cse
-cse
-csu
-cGl
+cgR
+cqT
ccw
-aaa
-aaa
-aaf
-aaa
-aaf
-ctv
-aaT
-aaa
-aaa
-aaf
-aaa
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+cpy
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+jyX
+uvy
+hCi
aaa
aaa
aaa
@@ -87668,28 +86461,28 @@ ccw
ccw
cDl
cjN
-cjh
-cDI
+cgR
+cgR
+cgR
+cqS
ccw
ccw
ccw
ccw
ccw
-cMm
-cMm
-cMm
ccw
-aaf
-aaf
-aaf
-aaf
-aaf
-ctv
-aaT
-aaa
-aaa
-aaf
+hQd
+pmD
+pmD
+pmD
+uvy
+uvy
+uvy
+uvy
+uvy
aaa
+yck
+hCi
aaa
aaa
aaa
@@ -87926,7 +86719,7 @@ ccw
cDm
cjP
ckF
-cDJ
+ckF
ckF
cpE
cjR
@@ -87939,13 +86732,13 @@ aaa
aaa
aaa
aaa
-ctv
-ctv
-ctv
-aaT
-aaa
-aaa
-aaa
+pmD
+uvy
+uvy
+uvy
+hCi
+hCi
+hCi
aaa
aaa
aaa
@@ -88168,7 +86961,7 @@ caE
cbA
ccy
bOd
-bOd
+yam
bQu
cfO
cgW
@@ -88190,17 +86983,17 @@ ccw
crX
cfK
aag
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaT
-aaT
-aaT
-aaT
-aaa
+hCi
+hCi
+hCi
+hCi
+hCi
+hCi
+gXs
+gXs
+gXs
+gXs
+hCi
aaa
aaa
aae
@@ -88413,7 +87206,7 @@ bIF
bOZ
bQp
bRA
-bOd
+yam
bTO
bUL
bVU
@@ -88440,7 +87233,7 @@ ccw
cpa
cjc
cqo
-cDL
+ccw
cjk
cjm
ccw
@@ -88456,7 +87249,7 @@ aaa
aaa
aaa
aaa
-eRz
+gXs
aaa
aaa
aaa
@@ -88697,7 +87490,7 @@ ccw
ccw
cpI
ccw
-cDL
+ccw
cjl
cjQ
cjV
@@ -88954,7 +87747,7 @@ cig
cpb
ciZ
cqp
-cDN
+cig
cjT
cgR
crP
@@ -89211,7 +88004,7 @@ cig
cig
czg
cig
-cDN
+cig
crh
crA
crR
@@ -89468,7 +88261,7 @@ cig
cpc
cpJ
cpc
-cDN
+cig
cqY
cqY
cqY
@@ -89701,7 +88494,7 @@ bRF
bSM
bTS
bUQ
-agd
+bWa
bUO
bVZ
bVZ
@@ -89725,7 +88518,7 @@ cig
cpd
czM
cpd
-cDN
+cig
aaa
aaa
aaa
@@ -89958,8 +88751,8 @@ bRE
bSJ
bPe
bOd
-cCB
-cCC
+bOd
+bOd
bXT
bXT
bXT
@@ -89982,7 +88775,7 @@ ccw
cpd
czL
cpd
-cDL
+ccw
aaf
aaa
aaa
@@ -90216,7 +89009,7 @@ bSM
bTU
bUS
bUS
-cCD
+bUS
bXU
bUS
bUS
@@ -90239,7 +89032,7 @@ aaa
cpd
cpM
cpd
-cCQ
+aaf
aaf
aaa
aaa
@@ -90473,7 +89266,7 @@ bSN
bTT
bUR
bWb
-cCE
+bUR
bTT
bUR
bZJ
@@ -90496,7 +89289,7 @@ aaa
aaa
czN
aaa
-cCQ
+aaf
aaf
aaa
aaa
@@ -90753,7 +89546,7 @@ aaa
aaa
aaa
aaa
-cCQ
+aaf
aaf
aaa
aaa
@@ -90987,7 +89780,7 @@ bSP
bPh
bQy
bRI
-cCF
+bQy
bPh
bQy
bRI
@@ -91010,7 +89803,7 @@ aaa
aaa
aaa
aaa
-cCQ
+aaf
aaf
aaa
aaa
@@ -91244,16 +90037,16 @@ aaf
bRK
aaf
bVv
-cCG
-cCH
-cCI
-cCJ
-cCI
-cCH
-cCI
-cCJ
-cCI
-cCP
+aaf
+bRK
+aaf
+bVv
+aaf
+bRK
+aaf
+bVv
+aaf
+aaf
bLK
chg
bLK
@@ -91267,7 +90060,7 @@ aoV
aoV
aoV
aoV
-cCQ
+aaf
aoV
aaa
aaa
@@ -91510,7 +90303,7 @@ bPj
bQA
bPj
bOh
-cCQ
+aaf
bLK
cyG
bLK
@@ -91524,7 +90317,7 @@ aoV
aoV
aoV
aoV
-cCQ
+aaf
aoV
aaa
aaa
@@ -91767,21 +90560,21 @@ cbI
ccC
cdD
bOh
-cCG
-cCS
-cCS
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cDY
+aaf
+aah
+aah
+aaf
+aaf
+aaf
+aaf
+aaf
+aah
+aah
+aah
+aah
+aah
+aah
+aaf
aaf
aaf
aaf
@@ -97936,7 +96729,7 @@ bDb
bDb
bDb
bDb
-cNW
+bDb
cNW
cQB
czY
@@ -98189,11 +96982,11 @@ bJN
bRT
bEm
bEm
+bJN
+bRT
+bEm
+bEm
bDb
-cfr
-cho
-bDb
-aaa
cNW
cQB
czY
@@ -98432,7 +97225,7 @@ bJJ
bKY
bMi
bNo
-bIP
+bOx
bPA
bJN
bRU
@@ -98446,12 +97239,12 @@ bJN
bRU
bEm
bEm
+bJN
+bRU
+bEm
+bEm
bDb
-cgi
-chq
-ccQ
-aaa
-cOT
+cNW
cQB
czY
cOT
@@ -98703,12 +97496,12 @@ bJN
bRU
bEm
cBz
+bJN
+bRU
+bEm
+cBz
bDb
-cgi
-chq
-ccQ
-aaa
-cOT
+cNW
cQB
czY
cOT
@@ -98947,7 +97740,7 @@ bLa
bMi
bNo
bPy
-bPA
+syV
bJN
bRW
bTb
@@ -98960,11 +97753,11 @@ bJN
bZV
caV
cbS
-bDb
+bJN
cgl
chs
+mHe
bDb
-aaa
cNW
cQB
czY
@@ -99217,11 +98010,11 @@ bVi
bRV
bTa
cbR
+bVi
+bRV
+bTa
+nvr
bDb
-cgk
-chr
-bDb
-aaa
cNW
cBN
czY
@@ -99474,12 +98267,12 @@ bZa
bMi
bMi
bRZ
-cTY
-cTZ
-chu
-ccQ
-aaf
-cOT
+bZa
+bMi
+bMi
+bRZ
+bDb
+cNW
cQB
cAa
cOT
@@ -99730,13 +98523,13 @@ bUf
bTc
bRX
bTc
+bUf
+bTc
+bRX
+bTc
cbT
-ccP
-ccP
-cht
-ckn
csk
-czQ
+cko
czU
czZ
cOT
@@ -99988,12 +98781,12 @@ bZb
bRZ
bMi
bMi
-cfy
-cgn
-cjB
-ccQ
-aaf
-cOT
+bZb
+bRZ
+bMi
+bMi
+bDb
+cNW
cgm
czY
cOT
@@ -100245,11 +99038,11 @@ bVi
bZW
bTd
bUg
+bVi
+fmO
+bTd
+bUg
bDb
-bDb
-bDb
-bDb
-aaa
cNW
cgm
czY
@@ -100502,11 +99295,11 @@ bJN
bZX
caW
cbU
+bJN
+bWn
+bXg
+bYh
bDb
-aaf
-aaf
-aaa
-aaa
cNW
cgm
czY
@@ -100759,12 +99552,12 @@ bJN
bEm
bEm
bRU
+bJN
+bEm
+bEm
+bRU
bDb
-aaf
-aaa
-aaa
-aaa
-cOT
+cNW
cgm
czY
cOT
@@ -101016,12 +99809,12 @@ bJN
bEm
bEm
bRU
+bJN
+bEm
+bEm
+bRU
bDb
-aaf
-aaa
-aaa
-aaa
-cOT
+cNW
cgm
czY
cOT
@@ -101273,12 +100066,12 @@ bJN
bEm
bEm
bUi
+bJN
+bEm
+bEm
+bUi
bDb
-aaf
-aaf
-aaa
-aaa
-cOT
+cNW
cgm
czY
cOT
@@ -101531,10 +100324,10 @@ bDb
bDb
bDb
bDb
-cNW
-cNW
-cNW
-cNW
+bDb
+bDb
+bDb
+bDb
cNW
czX
cAc
@@ -106150,7 +104943,7 @@ bTr
bTr
bTr
bTr
-bXu
+bTr
bTr
bTr
bTr
diff --git a/_maps/cit_map_files/Deltastation/DeltaStation2.dmm b/_maps/cit_map_files/Deltastation/DeltaStation2.dmm
index f4821e135d..70f7862e09 100644
--- a/_maps/cit_map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/cit_map_files/Deltastation/DeltaStation2.dmm
@@ -3966,7 +3966,7 @@
/obj/machinery/camera{
c_tag = "Supermatter Engine - Fore";
name = "atmospherics camera";
- network = list("SS13","Engine")
+ network = list("ss13","engine")
},
/turf/open/floor/plasteel/vault{
dir = 8
@@ -8666,7 +8666,7 @@
/obj/machinery/camera{
c_tag = "Supermatter Chamber";
dir = 2;
- network = list("Engine")
+ network = list("engine")
},
/turf/open/floor/engine,
/area/engine/supermatter)
@@ -9182,10 +9182,6 @@
},
/turf/open/floor/circuit/green,
/area/engine/supermatter)
-"ayK" = (
-/obj/machinery/power/supermatter_shard/crystal/engine,
-/turf/open/floor/engine,
-/area/engine/supermatter)
"ayL" = (
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 4
@@ -9245,7 +9241,7 @@
c_tag = "Supermatter Engine - Starboard";
dir = 8;
name = "atmospherics camera";
- network = list("SS13","Engine")
+ network = list("ss13","engine")
},
/obj/structure/cable{
icon_state = "1-2"
@@ -9646,7 +9642,7 @@
c_tag = "Supermatter Engine - Port";
dir = 4;
name = "atmospherics camera";
- network = list("SS13","Engine")
+ network = list("ss13","engine")
},
/obj/effect/turf_decal/bot,
/obj/machinery/atmospherics/components/unary/thermomachine/heater{
@@ -11684,7 +11680,7 @@
/obj/machinery/camera{
c_tag = "Supermatter Engine - Aft";
name = "atmospherics camera";
- network = list("SS13","Engine")
+ network = list("ss13","engine")
},
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -12900,7 +12896,7 @@
c_tag = "Prison - Garden";
dir = 2;
name = "prison camera";
- network = list("SS13","prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/neutral/side{
dir = 1
@@ -17780,7 +17776,7 @@
c_tag = "Prison - Relaxation Area";
dir = 1;
name = "prison camera";
- network = list("SS13","prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plating,
/area/security/prison)
@@ -19590,7 +19586,7 @@
c_tag = "Prison - Cell 3";
dir = 2;
name = "prison camera";
- network = list("SS13","prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plating{
icon_state = "panelscorched"
@@ -19630,7 +19626,7 @@
c_tag = "Prison - Cell 2";
dir = 2;
name = "prison camera";
- network = list("SS13","prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/red/side{
dir = 4
@@ -19662,7 +19658,7 @@
c_tag = "Prison - Cell 1";
dir = 2;
name = "prison camera";
- network = list("SS13","prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/red/side{
dir = 4
@@ -29378,7 +29374,7 @@
"bpg" = (
/obj/machinery/computer/security{
name = "Labor Camp Monitoring";
- network = list("Labor")
+ network = list("labor")
},
/obj/item/device/radio/intercom{
name = "Station Intercom";
@@ -29694,7 +29690,7 @@
c_tag = "AI Satellite - Fore";
dir = 1;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/turf/open/floor/plasteel/vault{
@@ -32973,7 +32969,7 @@
/obj/machinery/camera/motion{
c_tag = "AI Chamber - Fore";
name = "motion-sensitive ai camera";
- network = list("AI")
+ network = list("ai")
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel/dark,
@@ -33462,8 +33458,7 @@
"bxe" = (
/obj/machinery/camera/motion{
c_tag = "Vault";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -33589,7 +33584,7 @@
c_tag = "AI Satellite - Fore Port";
dir = 8;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/turf/open/floor/plasteel/vault{
@@ -33649,7 +33644,7 @@
c_tag = "AI Satellite - Fore Starboard";
dir = 4;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/turf/open/floor/plasteel/vault{
@@ -35403,7 +35398,7 @@
dir = 4;
layer = 4;
name = "Engine Monitor";
- network = list("Engine");
+ network = list("engine");
pixel_x = -24
},
/turf/open/floor/plasteel/caution{
@@ -35744,7 +35739,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the RD's goons and the AI's satellite from the safety of his office.";
name = "Research Monitor";
- network = list("RD","Sat");
+ network = list("rd","minisat");
pixel_y = 2
},
/turf/open/floor/plasteel/dark,
@@ -41547,7 +41542,7 @@
c_tag = "Telecomms - Monitoring";
dir = 2;
name = "telecomms camera";
- network = list("SS13","tcomm")
+ network = list("ss13","tcomm")
},
/turf/open/floor/plasteel/grimy,
/area/tcommsat/computer)
@@ -42033,7 +42028,7 @@
c_tag = "AI Chamber - Aft";
dir = 1;
name = "motion-sensitive ai camera";
- network = list("AI")
+ network = list("ai")
},
/turf/open/floor/plasteel/vault,
/area/ai_monitored/turret_protected/ai)
@@ -42974,7 +42969,7 @@
c_tag = "AI Satellite - Port";
dir = 8;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/turf/open/floor/plasteel/vault{
@@ -43042,7 +43037,7 @@
c_tag = "AI Satellite - Starboard";
dir = 4;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/turf/open/floor/plasteel/vault{
@@ -43954,7 +43949,7 @@
c_tag = "AI Satellite - Antechamber";
dir = 2;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/turf/open/floor/plasteel/vault,
@@ -44798,8 +44793,7 @@
"bTl" = (
/obj/machinery/camera/motion{
c_tag = "Armoury - Exterior";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/space,
/area/space/nearstation)
@@ -44874,7 +44868,7 @@
c_tag = "AI Satellite - Maintenance";
dir = 8;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/obj/effect/turf_decal/stripes/line,
@@ -44962,7 +44956,7 @@
c_tag = "AI Satellite - Teleporter";
dir = 4;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/turf/open/floor/plasteel/vault{
@@ -45078,7 +45072,7 @@
c_tag = "AI Satellite - Transit Tube";
dir = 2;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/obj/item/clipboard,
@@ -46442,7 +46436,7 @@
desc = "Used for watching the AI's satellite.";
dir = 4;
name = "Research Monitor";
- network = list("Sat");
+ network = list("minisat");
pixel_y = 2
},
/turf/open/floor/plasteel/vault{
@@ -46489,7 +46483,7 @@
dir = 4;
layer = 4;
name = "Engine Monitor";
- network = list("Engine");
+ network = list("engine");
pixel_x = -30
},
/mob/living/simple_animal/parrot/Poly,
@@ -49781,7 +49775,7 @@
c_tag = "Telecomms - Chamber Port";
dir = 4;
name = "telecomms camera";
- network = list("SS13","tcomm")
+ network = list("ss13","tcomm")
},
/turf/open/floor/plasteel/vault/telecomms{
dir = 8
@@ -50225,7 +50219,7 @@
/obj/machinery/camera/motion{
c_tag = "AI - Upload";
name = "motion-sensitive ai camera";
- network = list("Sat")
+ network = list("minisat")
},
/turf/open/floor/plasteel/vault,
/area/ai_monitored/turret_protected/ai_upload)
@@ -50253,6 +50247,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/machinery/power/emitter{
+ anchored = 1;
+ state = 2
+ },
/turf/open/floor/plating/airless,
/area/engine/engineering)
"cdE" = (
@@ -51319,8 +51317,9 @@
/obj/machinery/camera/emp_proof{
c_tag = "Containment - Fore Starboard";
dir = 8;
- network = list("Singularity")
+ network = list("singularity")
},
+/obj/machinery/power/grounding_rod,
/turf/open/floor/plating/airless,
/area/engine/engineering)
"cfC" = (
@@ -51668,7 +51667,7 @@
c_tag = "Telecomms - Chamber Starboard";
dir = 8;
name = "telecomms camera";
- network = list("SS13","tcomm")
+ network = list("ss13","tcomm")
},
/turf/open/floor/plasteel/vault/telecomms{
dir = 8
@@ -52292,7 +52291,6 @@
/turf/open/space,
/area/space/nearstation)
"chu" = (
-/obj/structure/reagent_dispensers/fueltank,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/engine/engineering)
@@ -53036,7 +53034,7 @@
/obj/machinery/camera/emp_proof{
c_tag = "Containment - Fore Port";
dir = 4;
- network = list("Singularity")
+ network = list("singularity")
},
/turf/open/space,
/area/space/nearstation)
@@ -53057,10 +53055,10 @@
"cjb" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
- icon_state = "2-4"
+ icon_state = "4-8"
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "2-4"
},
/turf/open/space,
/area/space/nearstation)
@@ -53076,28 +53074,11 @@
/turf/open/floor/plating,
/area/engine/engineering)
"cje" = (
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plating,
/area/engine/engineering)
-"cjf" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engpa";
- name = "Engineering Chamber Shutters"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"cjg" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/line{
@@ -53334,8 +53315,7 @@
/obj/machinery/camera/motion{
c_tag = "Bridge - Captain's Emergency Escape";
dir = 4;
- name = "command camera";
- network = list("SS13")
+ name = "command camera"
},
/obj/effect/decal/cleanable/dirt,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -53663,13 +53643,6 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"ckx" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
"cky" = (
/obj/structure/cable,
/obj/effect/turf_decal/stripes/line{
@@ -53685,6 +53658,7 @@
/obj/effect/turf_decal/stripes/corner{
dir = 8
},
+/obj/machinery/power/grounding_rod,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"ckA" = (
@@ -53693,35 +53667,11 @@
id = "engpa";
name = "Engineering Chamber Shutters"
},
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plating,
/area/engine/engineering)
-"ckB" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"ckC" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel/neutral,
-/area/engine/engineering)
"ckD" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/neutral,
@@ -54292,20 +54242,9 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"clS" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
/obj/machinery/field/generator{
- anchored = 1
- },
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
-"clT" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/field/generator{
- anchored = 1
+ anchored = 1;
+ state = 2
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
@@ -54318,19 +54257,6 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"clV" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engpa";
- name = "Engineering Chamber Shutters"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"clW" = (
/obj/structure/rack,
/obj/item/crowbar,
@@ -54340,9 +54266,6 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"clX" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -55094,7 +55017,7 @@
c_tag = "AI Satellite - Aft Port";
dir = 8;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/turf/open/floor/plasteel/vault{
@@ -55169,7 +55092,7 @@
c_tag = "AI Satellite - Aft Starboard";
dir = 4;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/turf/open/floor/plasteel/vault{
@@ -55208,9 +55131,6 @@
id = "engpa";
name = "Engineering Chamber Shutters"
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/effect/turf_decal/stripes/line{
dir = 2
},
@@ -55473,7 +55393,7 @@
c_tag = "Telecomms - Cooling Room";
dir = 8;
name = "telecomms camera";
- network = list("SS13","tcomm")
+ network = list("ss13","tcomm")
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
@@ -55896,9 +55816,6 @@
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -56458,6 +56375,10 @@
/turf/open/floor/plating,
/area/engine/engineering)
"cqr" = (
+/obj/structure/particle_accelerator/particle_emitter/left{
+ icon_state = "emitter_left";
+ dir = 8
+ },
/turf/open/floor/plating,
/area/engine/engineering)
"cqs" = (
@@ -56466,6 +56387,7 @@
/area/engine/engineering)
"cqt" = (
/obj/structure/cable,
+/obj/machinery/particle_accelerator/control_box,
/turf/open/floor/plating,
/area/engine/engineering)
"cqu" = (
@@ -57027,7 +56949,7 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"crJ" = (
-/obj/item/wrench,
+/obj/machinery/the_singularitygen/tesla,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"crK" = (
@@ -57068,7 +56990,10 @@
/turf/open/floor/plating,
/area/engine/engineering)
"crO" = (
-/obj/item/weldingtool/largetank,
+/obj/structure/particle_accelerator/fuel_chamber{
+ icon_state = "fuel_chamber";
+ dir = 8
+ },
/turf/open/floor/plating,
/area/engine/engineering)
"crP" = (
@@ -57092,7 +57017,7 @@
dir = 4;
layer = 4;
name = "Engine Containment Telescreen";
- network = list("Singularity");
+ network = list("singularity");
pixel_x = -30
},
/obj/effect/turf_decal/stripes/line{
@@ -57846,7 +57771,10 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"ctp" = (
-/obj/item/wrench,
+/obj/structure/particle_accelerator/particle_emitter/right{
+ icon_state = "emitter_right";
+ dir = 8
+ },
/turf/open/floor/plating,
/area/engine/engineering)
"ctq" = (
@@ -58650,7 +58578,7 @@
/obj/machinery/camera/emp_proof{
c_tag = "Containment - Particle Accelerator";
dir = 1;
- network = list("Singularity")
+ network = list("singularity")
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
@@ -58659,9 +58587,6 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/engine/engineering)
@@ -58716,6 +58641,7 @@
dir = 8
},
/obj/effect/turf_decal/bot,
+/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cva" = (
@@ -59873,24 +59799,6 @@
dir = 4
},
/area/crew_quarters/fitness/recreation)
-"cxA" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/field/generator{
- anchored = 1
- },
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
-"cxB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/field/generator{
- anchored = 1
- },
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
"cxD" = (
/obj/structure/rack,
/obj/item/crowbar,
@@ -60710,13 +60618,6 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"czp" = (
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
"czq" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -60730,33 +60631,9 @@
icon_state = "1-2"
},
/obj/effect/turf_decal/stripes/corner,
+/obj/machinery/power/grounding_rod,
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"czs" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engpa";
- name = "Engineering Chamber Shutters"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"czt" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plasteel/neutral,
-/area/engine/engineering)
"czu" = (
/obj/structure/cable/white{
icon_state = "0-2"
@@ -61344,7 +61221,7 @@
/obj/machinery/camera/emp_proof{
c_tag = "Containment - Aft Port";
dir = 4;
- network = list("Singularity")
+ network = list("singularity")
},
/turf/open/space,
/area/space/nearstation)
@@ -61358,10 +61235,10 @@
"cAI" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "4-8"
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-4"
},
/turf/open/space,
/area/space/nearstation)
@@ -61373,11 +61250,7 @@
/turf/open/space,
/area/space/nearstation)
"cAK" = (
-/obj/machinery/power/rad_collector/anchored,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -62961,8 +62834,9 @@
/obj/machinery/camera/emp_proof{
c_tag = "Containment - Aft Starboard";
dir = 8;
- network = list("Singularity")
+ network = list("singularity")
},
+/obj/machinery/power/grounding_rod,
/turf/open/floor/plating/airless,
/area/engine/engineering)
"cDW" = (
@@ -63846,6 +63720,12 @@
icon_state = "0-2"
},
/obj/effect/turf_decal/stripes/line,
+/obj/machinery/power/emitter{
+ anchored = 1;
+ dir = 1;
+ icon_state = "emitter";
+ state = 2
+ },
/turf/open/floor/plating/airless,
/area/engine/engineering)
"cFI" = (
@@ -67620,7 +67500,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology - Cell 1";
name = "xenobiology camera";
- network = list("SS13","xeno","RD")
+ network = list("ss13","xeno","rd")
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -67633,7 +67513,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology - Cell 2";
name = "xenobiology camera";
- network = list("SS13","xeno","RD")
+ network = list("ss13","xeno","rd")
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -67646,15 +67526,12 @@
/obj/machinery/camera{
c_tag = "Xenobiology - Cell 3";
name = "xenobiology camera";
- network = list("SS13","xeno","RD")
+ network = list("ss13","xeno","rd")
},
/turf/open/floor/plasteel/vault{
dir = 5
},
/area/science/xenobiology)
-"cNh" = (
-/turf/open/floor/plasteel/vault/killroom,
-/area/science/xenobiology)
"cNi" = (
/obj/machinery/light/small{
dir = 1
@@ -67663,9 +67540,11 @@
c_tag = "Xenobiology - Killroom Chamber";
dir = 2;
name = "xenobiology camera";
- network = list("SS13","xeno","RD")
+ network = list("ss13","xeno","rd")
+ },
+/turf/open/floor/plasteel/vault{
+ dir = 5
},
-/turf/open/floor/plasteel/vault/killroom,
/area/science/xenobiology)
"cNj" = (
/obj/structure/closet/crate{
@@ -68381,26 +68260,6 @@
"cON" = (
/turf/open/floor/circuit/green,
/area/science/xenobiology)
-"cOO" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 2;
- external_pressure_bound = 140;
- name = "killroom vent";
- pressure_checks = 0
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"cOP" = (
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"cOQ" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
- dir = 2;
- external_pressure_bound = 120;
- name = "server vent"
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
"cOR" = (
/turf/closed/wall/r_wall,
/area/science/research)
@@ -69156,24 +69015,6 @@
dir = 1
},
/area/science/xenobiology)
-"cQw" = (
-/obj/machinery/atmospherics/pipe/manifold/general/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel/vault/killroom,
-/area/science/xenobiology)
-"cQx" = (
-/obj/machinery/atmospherics/pipe/simple/general/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/vault/killroom,
-/area/science/xenobiology)
-"cQy" = (
-/obj/machinery/atmospherics/pipe/simple/general/hidden{
- dir = 9
- },
-/turf/open/floor/plasteel/vault/killroom,
-/area/science/xenobiology)
"cQz" = (
/obj/structure/closet/wardrobe/science_white,
/obj/machinery/light/small{
@@ -69712,7 +69553,7 @@
c_tag = "Xenobiology - Port";
dir = 2;
name = "xenobiology camera";
- network = list("SS13","xeno","RD")
+ network = list("ss13","xeno","rd")
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
@@ -69877,7 +69718,6 @@
icon_state = "0-4"
},
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/general/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"cSg" = (
@@ -69888,7 +69728,7 @@
icon_state = "2-8"
},
/obj/machinery/door/airlock/research/glass{
- name = "Xenobiology Kill Room";
+ name = "Xenobiology Isolation Pin";
req_access_txt = "47"
},
/obj/effect/turf_decal/stripes/line{
@@ -70678,13 +70518,19 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTR" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- dir = 1;
- min_temperature = 80;
- on = 1;
- target_temperature = 80
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/table/glass,
+/obj/item/extinguisher,
+/obj/item/extinguisher{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/extinguisher{
+ pixel_x = 5;
+ pixel_y = 5
},
-/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTS" = (
@@ -72180,7 +72026,7 @@
c_tag = "Xenobiology - Secure Cell";
dir = 4;
name = "xenobiology camera";
- network = list("SS13","xeno","RD")
+ network = list("ss13","xeno","rd")
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -72380,9 +72226,6 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cXm" = (
-/obj/machinery/computer/camera_advanced/xenobio{
- dir = 8
- },
/obj/machinery/status_display{
pixel_x = 32
},
@@ -72394,7 +72237,7 @@
c_tag = "Science - Fore";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/whitepurple/corner{
dir = 4
@@ -72454,7 +72297,7 @@
c_tag = "Security Post - Science";
dir = 8;
name = "security camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/red/side{
dir = 6
@@ -72505,7 +72348,7 @@
c_tag = "Science - Waiting Room";
dir = 1;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/whitepurple/corner{
dir = 8
@@ -72570,13 +72413,6 @@
dir = 8
},
/area/medical/medbay/central)
-"cXG" = (
-/obj/structure/table,
-/obj/item/folder/white,
-/turf/open/floor/plasteel/whiteblue/corner{
- dir = 8
- },
-/area/medical/medbay/central)
"cXH" = (
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk{
@@ -73201,7 +73037,7 @@
c_tag = "Xenobiology - Starboard";
dir = 8;
name = "xenobiology camera";
- network = list("SS13","xeno","RD")
+ network = list("ss13","xeno","rd")
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
@@ -73381,12 +73217,11 @@
id = "chemisttop";
name = "Chemistry Lobby Shutters"
},
-/obj/machinery/door/window/southleft{
+/obj/item/folder/yellow,
+/obj/machinery/door/window/northleft{
name = "Chemistry Desk";
req_access_txt = "5; 33"
},
-/obj/item/folder/yellow,
-/obj/machinery/door/window/northleft,
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/medical/medbay/central)
@@ -74963,7 +74798,7 @@
c_tag = "Science - Research Division Access";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -76222,7 +76057,7 @@
c_tag = "Science - Research and Development";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/whitepurple/corner,
/area/science/lab)
@@ -76290,7 +76125,7 @@
c_tag = "Medbay - Chemistry";
dir = 8;
name = "medbay camera";
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/whiteyellow/corner,
/area/medical/chemistry)
@@ -76676,7 +76511,7 @@
c_tag = "Xenobiology - Cell 4";
dir = 1;
name = "xenobiology camera";
- network = list("SS13","xeno","RD")
+ network = list("ss13","xeno","rd")
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -76688,7 +76523,7 @@
c_tag = "Xenobiology - Cell 5";
dir = 1;
name = "xenobiology camera";
- network = list("SS13","xeno","RD")
+ network = list("ss13","xeno","rd")
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -76700,7 +76535,7 @@
c_tag = "Xenobiology - Cell 6";
dir = 1;
name = "xenobiology camera";
- network = list("SS13","xeno","RD")
+ network = list("ss13","xeno","rd")
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -76745,7 +76580,7 @@
c_tag = "Science - Port";
dir = 2;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/whitepurple/corner{
dir = 1
@@ -76812,7 +76647,7 @@
c_tag = "Science - Center";
dir = 2;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/whitepurple/corner{
dir = 1
@@ -77966,7 +77801,7 @@
desc = "Used for watching the RD's goons from the safety of his office.";
dir = 4;
name = "Research Monitor";
- network = list("RD");
+ network = list("rd");
pixel_x = -28
},
/turf/open/floor/plasteel/white/corner,
@@ -78125,7 +77960,7 @@
c_tag = "Science - Experimentation Lab";
dir = 2;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
@@ -79526,7 +79361,7 @@
c_tag = "Science - Lab Access";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -81872,7 +81707,7 @@
desc = "Used for watching the RD's goons from the safety of his office.";
dir = 4;
name = "Research Monitor";
- network = list("RD");
+ network = list("rd");
pixel_x = -28
},
/turf/open/floor/plasteel/white/corner{
@@ -82119,7 +81954,7 @@
c_tag = "Science - Research Director's Office";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -83970,7 +83805,7 @@
c_tag = "Science - Experimentor";
dir = 1;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -83985,7 +83820,7 @@
c_tag = "Science - Toxins Mixing Lab Fore";
dir = 4;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/escape{
dir = 8
@@ -84027,7 +83862,7 @@
c_tag = "Science - Firing Range";
dir = 4;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -84124,7 +83959,7 @@
c_tag = "Science - Aft Center";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/whitepurple/corner,
/area/science/research)
@@ -84167,7 +84002,7 @@
c_tag = "Science - Mech Bay";
dir = 1;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
@@ -87081,7 +86916,7 @@
c_tag = "Science - Research Director's Quarters";
dir = 1;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/modular_computer/console/preset/research{
dir = 1
@@ -87777,7 +87612,7 @@
c_tag = "Science - Robotics Lab";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -88615,7 +88450,7 @@
c_tag = "Science - Toxins Launch Site";
dir = 2;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -88730,7 +88565,7 @@
c_tag = "Science - Toxins Mixing Lab Aft";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -89358,7 +89193,7 @@
dir = 4;
layer = 4;
name = "Testing Site Telescreen";
- network = list("Toxins")
+ network = list("toxins")
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -90187,7 +90022,7 @@
c_tag = "Science - Server Room";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/circuit/green/telecomms/mainframe,
/area/science/server)
@@ -90200,7 +90035,7 @@
c_tag = "Science - Aft";
dir = 4;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/whitepurple/corner{
dir = 8
@@ -90673,7 +90508,7 @@
/turf/open/floor/plating/airless,
/area/science/test_area)
"dJJ" = (
-/obj/machinery/doppler_array{
+/obj/machinery/doppler_array/research/science{
dir = 8
},
/obj/structure/extinguisher_cabinet{
@@ -90861,7 +90696,7 @@
c_tag = "Science - Toxins Secure Storage";
dir = 4;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -91663,7 +91498,7 @@
invuln = 1;
light = null;
name = "hardened testing camera";
- network = list("Toxins");
+ network = list("toxins");
start_active = 1;
use_power = 0
},
@@ -93003,7 +92838,7 @@
c_tag = "Science - Break Room";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/neutral/side{
dir = 4
@@ -100888,7 +100723,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Service Bay";
dir = 8;
- network = list("MiniSat");
+ network = list("minisat");
start_active = 1
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -100898,6 +100733,25 @@
dir = 4
},
/area/science/misc_lab)
+"fzH" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/table/glass,
+/obj/item/extinguisher,
+/obj/item/extinguisher{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/extinguisher{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"fGq" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/closed/wall/r_wall,
@@ -100916,6 +100770,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/r_wall,
/area/science/circuit)
+"gsR" = (
+/turf/open/space,
+/area/space)
"gKr" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
@@ -101006,6 +100863,9 @@
dir = 9
},
/area/science/circuit)
+"hRG" = (
+/turf/open/space/basic,
+/area/space/nearstation)
"iQh" = (
/obj/structure/bodycontainer/morgue{
dir = 1
@@ -101032,7 +100892,7 @@
c_tag = "Science - Experimentation Lab";
dir = 2;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/requests_console{
department = "Circuitry Lab";
@@ -101064,6 +100924,9 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/neutral,
/area/medical/morgue)
+"jKb" = (
+/turf/open/space,
+/area/space/nearstation)
"kwx" = (
/obj/effect/turf_decal/loading_area,
/turf/open/floor/plasteel/whitepurple/corner,
@@ -101089,6 +100952,9 @@
dir = 5
},
/area/crew_quarters/locker)
+"lkn" = (
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"loI" = (
/obj/machinery/autolathe,
/obj/machinery/door/window/southleft{
@@ -101104,6 +100970,10 @@
dir = 4
},
/area/science/lab)
+"lxv" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"lEl" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -101148,6 +101018,13 @@
dir = 1
},
/area/science/circuit)
+"mqk" = (
+/obj/structure/particle_accelerator/end_cap{
+ icon_state = "end_cap";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"mvm" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
@@ -101159,6 +101036,10 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/circuit/green,
/area/science/research/abandoned)
+"nJG" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space)
"oZC" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/command{
@@ -101172,6 +101053,13 @@
},
/turf/open/floor/wood,
/area/bridge/showroom/corporate)
+"pfd" = (
+/obj/structure/particle_accelerator/particle_emitter/center{
+ icon_state = "emitter_center";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"pmQ" = (
/obj/structure/table/reinforced,
/obj/machinery/newscaster{
@@ -101235,6 +101123,12 @@
"saw" = (
/turf/closed/wall,
/area/science/circuit)
+"tdp" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 2
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"tmi" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -101273,6 +101167,9 @@
/obj/structure/reagent_dispensers/water_cooler,
/turf/open/floor/plasteel/whitepurple/side,
/area/science/misc_lab)
+"uDN" = (
+/turf/open/floor/plating/airless,
+/area/space)
"uYS" = (
/obj/machinery/door/airlock/atmos/glass{
heat_proof = 1;
@@ -101294,6 +101191,13 @@
dir = 5
},
/area/medical/morgue)
+"vyI" = (
+/obj/machinery/status_display{
+ pixel_x = 32
+ },
+/obj/structure/reagent_dispensers/watertank/high,
+/turf/open/floor/circuit/green,
+/area/science/xenobiology)
"wei" = (
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
@@ -101330,6 +101234,13 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
+"xwB" = (
+/obj/structure/particle_accelerator/power_box{
+ icon_state = "power_box";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"xwK" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -101338,7 +101249,7 @@
c_tag = "Science - Lab Access";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/structure/sign/departments/science{
pixel_x = 32
@@ -101355,6 +101266,13 @@
},
/turf/open/floor/plasteel,
/area/science/research/abandoned)
+"xJl" = (
+/obj/structure/table,
+/obj/item/folder/white,
+/turf/open/floor/plasteel/whiteblue/corner{
+ dir = 8
+ },
+/area/medical/medbay/central)
"xMn" = (
/obj/structure/disposalpipe/trunk,
/obj/machinery/disposal/bin,
@@ -121815,14 +121733,14 @@ aaa
cja
ckw
clS
-aad
-aad
-clR
-aaa
-abj
-aad
-aad
-cxA
+jKb
+jKb
+clS
+nJG
+hRG
+jKb
+jKb
+clS
ctn
cja
aaa
@@ -122070,17 +121988,17 @@ cdC
cfA
aad
cjb
-ckx
+cky
+jKb
+gsR
+gsR
+lxv
aad
-aaa
-aaa
-abj
-aad
-abj
-aaa
-aaa
-aad
-czp
+hRG
+gsR
+gsR
+jKb
+czq
cAI
aad
cDT
@@ -122328,15 +122246,15 @@ cfA
aaa
cja
ckw
+jKb
+gsR
+hRG
+hRG
aad
-aaa
-abj
-abj
-abj
-abj
-abj
-aaa
-aad
+hRG
+hRG
+gsR
+jKb
ctn
cja
aaa
@@ -122583,19 +122501,19 @@ car
cbP
cfA
abj
-cja
-ckw
-ckw
-abj
-abj
+cjb
+cky
+hRG
+hRG
+hRG
cqo
clR
ctm
-abj
-abj
-abj
-ctn
-cja
+hRG
+lxv
+clS
+czq
+cAI
abj
cDT
cFJ
@@ -122840,19 +122758,19 @@ car
cbP
cdC
aad
-cjb
-cky
-aaa
+cja
+ckw
+nJG
+aad
aad
-abj
ckw
crJ
-ctn
-abj
+tdp
aad
-aaa
-czq
-cAI
+aad
+nJG
+ctn
+cja
aad
cdC
cFJ
@@ -123097,19 +123015,19 @@ car
cbP
cfA
abj
-cja
-ckw
-abj
-abj
-abj
+cjb
+cky
+clS
+lxv
+hRG
cqp
crK
cto
-abj
-abj
-ctn
-ctn
-cja
+hRG
+hRG
+hRG
+czq
+cAI
abj
cDT
cFJ
@@ -123356,15 +123274,15 @@ cfA
aaa
cja
ckw
+jKb
+gsR
+hRG
+hRG
aad
-aaa
-abj
-abj
-abj
-abj
-abj
-aaa
-aad
+hRG
+hRG
+gsR
+jKb
ctn
cja
aaa
@@ -123612,17 +123530,17 @@ cdC
cfA
aad
cjb
-ckx
+cky
+jKb
+gsR
+aaa
+hRG
aad
+lxv
aaa
-aaa
-abj
-aad
-abj
-aaa
-aaa
-aad
-czp
+gsR
+jKb
+czq
cAI
aad
cDU
@@ -123870,15 +123788,15 @@ cfA
aaa
cja
ckw
-clT
-aad
-aad
-abj
-aaa
-crK
-aad
-aad
-cxB
+clS
+jKb
+hRG
+hRG
+nJG
+clS
+jKb
+jKb
+clS
ctn
cja
aaa
@@ -124381,8 +124299,8 @@ car
cbT
cdG
cfB
-aaa
-aad
+uDN
+lkn
aaa
aad
cjd
@@ -124394,8 +124312,8 @@ cjd
cjd
aad
aaa
-aad
-aaa
+lkn
+uDN
cDV
cFL
cHg
@@ -124902,7 +124820,7 @@ cje
cjd
cpa
cqr
-cqr
+pfd
ctp
cuQ
cjd
@@ -125153,19 +125071,19 @@ cbV
cdJ
car
chv
-cjf
+chv
ckA
-clV
+chv
cnC
cpa
cqs
-cqr
+xwB
ctq
cuR
cnC
-cjf
-czs
-clV
+chv
+chv
+chv
chv
car
cFO
@@ -125411,7 +125329,7 @@ cdK
cfD
chw
cjg
-ckB
+chw
clW
cnD
cpb
@@ -125421,7 +125339,7 @@ ctr
cuS
cnD
cxD
-ckB
+chw
chw
chw
cDW
@@ -125668,17 +125586,17 @@ cdL
cfE
chx
cjh
-ckC
+cjn
clX
cnE
cpc
cqu
-cqr
+mqk
cts
cuT
cnE
clX
-czt
+cjn
cAL
cCs
cDX
@@ -127155,7 +127073,7 @@ atS
avb
awh
axz
-ayK
+axz
axz
aAW
axz
@@ -128526,7 +128444,7 @@ das
dcd
cMY
deX
-dgo
+fzH
dhR
lKu
tmi
@@ -132626,9 +132544,9 @@ cHA
cjp
cKl
cLI
-cNh
-cNh
-cNh
+cNd
+cNd
+cNd
cNc
cTQ
cVI
@@ -132883,9 +132801,9 @@ cHB
cjp
cKj
cLI
-cNh
-cOO
-cQw
+cNd
+cNd
+cNd
cSf
cTR
cVP
@@ -133141,8 +133059,8 @@ caE
cKm
cLI
cNi
-cOP
-cQx
+cNd
+cNd
cSg
cTS
cVQ
@@ -133397,9 +133315,9 @@ cHB
cjp
cKk
cLI
-cNh
-cOQ
-cQy
+cNd
+cNd
+cNd
cSh
cTT
cVR
@@ -133654,9 +133572,9 @@ cHA
ceb
cKk
cLI
-cNh
-cNh
-cNh
+cNd
+cNd
+cNd
cNc
cTU
cVS
@@ -133919,7 +133837,7 @@ cTV
cVT
cXm
cZb
-cXm
+vyI
dcu
ddV
cMY
@@ -141370,7 +141288,7 @@ cQT
cSE
cUt
cWj
-cXG
+xJl
cZt
dbc
dcO
diff --git a/_maps/cit_map_files/MetaStation/MetaStation.dmm b/_maps/cit_map_files/MetaStation/MetaStation.dmm
index 96021ab0f9..b158c0e3b4 100644
--- a/_maps/cit_map_files/MetaStation/MetaStation.dmm
+++ b/_maps/cit_map_files/MetaStation/MetaStation.dmm
@@ -188,7 +188,7 @@
},
/obj/machinery/camera{
c_tag = "Prison Hydroponics";
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/floorgrime,
/area/security/prison)
@@ -1035,7 +1035,7 @@
/obj/machinery/camera{
c_tag = "Prison Chamber";
dir = 1;
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/floorgrime,
/area/security/prison)
@@ -1120,7 +1120,7 @@
/obj/machinery/camera{
c_tag = "Prison Sanitarium";
dir = 2;
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/whitered/side{
dir = 1
@@ -1425,7 +1425,7 @@
/obj/structure/bed,
/obj/machinery/camera{
c_tag = "Prison Cell 3";
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/floorgrime,
/area/security/prison)
@@ -1448,7 +1448,7 @@
/obj/structure/bed,
/obj/machinery/camera{
c_tag = "Prison Cell 2";
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/floorgrime,
/area/security/prison)
@@ -1480,7 +1480,7 @@
/obj/structure/bed,
/obj/machinery/camera{
c_tag = "Prison Cell 1";
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/floorgrime,
/area/security/prison)
@@ -1533,8 +1533,7 @@
/obj/structure/lattice,
/obj/machinery/camera/motion{
c_tag = "Armory - External";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/space,
/area/space/nearstation)
@@ -2147,12 +2146,12 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching Prison Wing holding areas.";
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_y = 30
},
/obj/machinery/camera{
c_tag = "Prison Hallway Port";
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/red/corner{
dir = 2
@@ -2218,7 +2217,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching Prison Wing holding areas.";
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_y = 30
},
/turf/open/floor/plasteel/red/corner{
@@ -2295,7 +2294,7 @@
/obj/machinery/camera{
c_tag = "Prison Hallway Starboard";
dir = 2;
- network = list("SS13","Prison")
+ network = list("ss13","prison")
},
/turf/open/floor/plasteel/red/corner{
dir = 2
@@ -2399,8 +2398,7 @@
},
/obj/machinery/camera{
c_tag = "Head of Security's Office";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/dark,
/area/crew_quarters/heads/hos)
@@ -3421,8 +3419,7 @@
pixel_y = 8
},
/obj/machinery/camera/autoname{
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plating,
/area/maintenance/solars/port/fore)
@@ -3562,8 +3559,7 @@
/obj/machinery/light,
/obj/machinery/camera/motion{
c_tag = "Armory - Internal";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/vault,
/area/ai_monitored/security/armory)
@@ -3622,7 +3618,7 @@
desc = "Used for watching certain areas.";
dir = 1;
name = "Head of Security's Monitor";
- network = list("Prison","MiniSat","tcomm");
+ network = list("prison","minisat","tcomm");
pixel_y = -30
},
/turf/open/floor/plasteel/vault,
@@ -3925,8 +3921,7 @@
/obj/machinery/light/small,
/obj/machinery/camera{
c_tag = "Security - EVA Storage";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/vault{
dir = 8
@@ -3991,8 +3986,7 @@
/obj/effect/landmark/blobstart,
/obj/machinery/camera{
c_tag = "Evidence Storage";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/item/storage/secure/safe{
name = "evidence safe";
@@ -4446,7 +4440,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching Prison Wing holding areas.";
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_y = 30
},
/turf/open/floor/plasteel/vault,
@@ -4922,8 +4916,7 @@
},
/obj/machinery/camera{
c_tag = "Security - Secure Gear Storage";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/flasher/portable,
/obj/effect/turf_decal/bot,
@@ -5182,8 +5175,7 @@
},
/obj/machinery/camera{
c_tag = "Firing Range";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -5322,10 +5314,6 @@
"alq" = (
/turf/closed/wall,
/area/maintenance/starboard)
-"alr" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/maintenance/starboard)
"als" = (
/obj/machinery/light{
dir = 8
@@ -6050,8 +6038,7 @@
"amM" = (
/obj/machinery/camera{
c_tag = "Gravity Generator Room";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -6349,8 +6336,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/camera{
c_tag = "Security - Office - Port";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/red/side{
dir = 8
@@ -6749,8 +6735,7 @@
},
/obj/machinery/camera{
c_tag = "Brig - Infirmary";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/item/clothing/under/rank/medical/purple{
pixel_y = -4
@@ -7464,8 +7449,7 @@
},
/obj/machinery/camera{
c_tag = "Warden's Office";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/structure/rack,
/obj/item/storage/toolbox/mechanical{
@@ -7508,8 +7492,7 @@
/obj/structure/closet/wardrobe/red,
/obj/machinery/camera{
c_tag = "Security - Gear Room";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
@@ -7567,8 +7550,7 @@
},
/obj/machinery/camera{
c_tag = "Security - Office - Starboard";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/red/side{
@@ -7776,8 +7758,7 @@
pixel_y = 8
},
/obj/machinery/camera/autoname{
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
@@ -7976,7 +7957,7 @@
"aqY" = (
/obj/machinery/computer/security{
name = "Labor Camp Monitoring";
- network = list("Labor")
+ network = list("labor")
},
/turf/open/floor/plasteel/dark,
/area/security/brig)
@@ -7992,7 +7973,7 @@
desc = "Used for watching Prison Wing holding areas.";
dir = 2;
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_x = -30
},
/turf/open/floor/plasteel/showroomfloor,
@@ -9947,8 +9928,7 @@
},
/obj/machinery/camera{
c_tag = "Brig - Hallway - Entrance";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/red/corner{
dir = 4
@@ -10927,8 +10907,7 @@
/obj/machinery/light,
/obj/machinery/camera{
c_tag = "Brig - Hallway - Port";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/machinery/door_timer{
id = "Cell 1";
@@ -11100,8 +11079,7 @@
/obj/machinery/light,
/obj/machinery/camera{
c_tag = "Brig - Hallway - Starboard";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/red/corner{
dir = 2
@@ -11269,6 +11247,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
+/obj/machinery/light/small{
+ dir = 1
+ },
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"axN" = (
@@ -11372,17 +11353,21 @@
req_one_access_txt = "0"
},
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 9
+ },
/area/engine/engineering)
"axV" = (
/obj/structure/sign/warning/securearea{
pixel_y = 32
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"axW" = (
/obj/structure/disposalpipe/segment,
@@ -11392,10 +11377,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 1
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"axX" = (
/obj/machinery/light_switch{
@@ -11411,41 +11395,21 @@
/obj/structure/sign/warning/securearea{
pixel_y = 32
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 5
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"axY" = (
/turf/closed/wall/r_wall,
/area/engine/engineering)
-"axZ" = (
-/obj/structure/closet/firecloset,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"aya" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"ayc" = (
-/obj/structure/table/reinforced,
-/obj/item/tank/internals/emergency_oxygen/engi,
-/obj/item/tank/internals/emergency_oxygen/engi,
-/obj/item/clothing/mask/breath{
- pixel_x = 4
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/white{
+ icon_state = "2-4"
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
-"aye" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
"ayf" = (
/obj/structure/closet/crate,
/obj/item/stack/sheet/glass{
@@ -11788,46 +11752,59 @@
dir = 1;
pixel_y = 2
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
+ },
/area/engine/engineering)
"ayT" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"ayV" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"ayW" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/cable/white{
+ icon_state = "4-8"
},
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine";
- req_access_txt = "10"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"ayX" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/engine/engineering)
-"aza" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+"ayX" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
-/turf/open/floor/plasteel/dark,
+/obj/machinery/door/airlock/external{
+ name = "External Containment Access";
+ req_access_txt = "10; 13"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"aza" = (
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"azb" = (
/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
@@ -11839,13 +11816,18 @@
},
/area/security/brig)
"azd" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"aze" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-22"
@@ -12231,7 +12213,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching Prison Wing holding areas.";
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_y = 30
},
/obj/item/device/flashlight/lamp/green{
@@ -12284,6 +12266,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/light/small{
+ dir = 1
+ },
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
@@ -12473,13 +12458,20 @@
"aAo" = (
/obj/structure/closet/secure_closet/engineering_personal,
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 9
+ },
/area/engine/engineering)
"aAp" = (
/obj/structure/closet/secure_closet/engineering_personal,
/obj/item/clothing/suit/hooded/wintercoat/engineering,
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
+ },
/area/engine/engineering)
"aAr" = (
/obj/item/device/radio/intercom{
@@ -12490,18 +12482,14 @@
},
/obj/machinery/camera{
c_tag = "Engineering - Fore";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
-/obj/effect/turf_decal/stripes/line{
+/obj/structure/closet/secure_closet/engineering_personal,
+/turf/open/floor/plasteel/yellow/side{
dir = 1
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aAt" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
},
@@ -12515,27 +12503,21 @@
sortType = 4
},
/obj/effect/landmark/start/station_engineer,
+/obj/structure/cable/white{
+ icon_state = "1-4"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aAv" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aAw" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"aAx" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall/r_wall,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"aAz" = (
/obj/structure/table/wood,
@@ -12559,7 +12541,7 @@
id = "mining_home";
name = "mining shuttle bay";
width = 7;
- roundstart_template = /datum/map_template/shuttle/mining/box;
+ roundstart_template = /datum/map_template/shuttle/mining/box
},
/turf/open/space/basic,
/area/space)
@@ -12762,7 +12744,7 @@
id = "laborcamp_home";
name = "fore bay 1";
width = 9;
- roundstart_template = /datum/map_template/shuttle/labour/box;
+ roundstart_template = /datum/map_template/shuttle/labour/box
},
/turf/open/space/basic,
/area/space)
@@ -12782,8 +12764,7 @@
},
/obj/machinery/camera{
c_tag = "Labor Shuttle Dock";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/flasher{
id = "PRelease";
@@ -12894,8 +12875,7 @@
/obj/effect/landmark/blobstart,
/obj/machinery/camera{
c_tag = "Detective's Office";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/grimy,
/area/security/detectives_office)
@@ -13115,8 +13095,7 @@
"aBG" = (
/obj/machinery/camera{
c_tag = "Engineering - Storage";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/machinery/suit_storage_unit/engine,
/obj/effect/turf_decal/bot{
@@ -13156,18 +13135,14 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
},
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aBK" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aBL" = (
@@ -13179,9 +13154,6 @@
},
/obj/machinery/rnd/circuit_imprinter,
/obj/effect/turf_decal/delivery,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aBM" = (
@@ -13191,9 +13163,6 @@
},
/obj/machinery/rnd/protolathe/department/engineering,
/obj/effect/turf_decal/delivery,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aBN" = (
@@ -13202,21 +13171,10 @@
dir = 1
},
/obj/effect/turf_decal/delivery,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aBO" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"aBQ" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aBS" = (
/obj/item/stack/ore/silver,
@@ -13230,8 +13188,7 @@
/obj/structure/reagent_dispensers/fueltank,
/obj/machinery/camera{
c_tag = "Mining Dock";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
@@ -13259,8 +13216,7 @@
},
/obj/machinery/camera{
c_tag = "Mining Office";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/mineral/equipment_vendor,
/turf/open/floor/plasteel/brown{
@@ -13336,8 +13292,7 @@
"aCg" = (
/obj/machinery/camera/motion{
c_tag = "Vault";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/machinery/light,
/obj/structure/cable/yellow{
@@ -13732,9 +13687,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aCV" = (
@@ -13744,38 +13696,29 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aCW" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"aCX" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/closed/wall/r_wall,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aCY" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine";
- req_access_txt = "10"
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
+/area/space)
"aCZ" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/power/tesla_coil,
+/turf/open/floor/plating/airless,
+/area/space)
"aDa" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -13939,8 +13882,7 @@
},
/obj/machinery/camera{
c_tag = "Fore Primary Hallway Cells";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/red/corner{
dir = 1
@@ -14057,8 +13999,7 @@
},
/obj/machinery/camera{
c_tag = "Brig - Desk";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/item/device/radio/intercom{
freerange = 0;
@@ -14379,10 +14320,9 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aEo" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -14405,31 +14345,16 @@
/obj/structure/cable/yellow{
icon_state = "2-8"
},
-/obj/structure/cable/white{
- icon_state = "1-4"
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aEq" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aEr" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
+/obj/machinery/camera/emp_proof{
+ c_tag = "Containment - Fore Port";
+ dir = 4;
+ network = list("singularity")
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"aEt" = (
/obj/structure/table,
@@ -14448,7 +14373,7 @@
"aEv" = (
/obj/machinery/computer/security/mining{
dir = 4;
- network = list("MINE","AuxBase")
+ network = list("mine","auxbase")
},
/turf/open/floor/plasteel,
/area/quartermaster/miningoffice)
@@ -14777,8 +14702,7 @@
},
/obj/machinery/camera{
c_tag = "Restrooms";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/toilet/restrooms)
@@ -14968,10 +14892,9 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 2
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aFw" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -14989,52 +14912,26 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aFz" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine";
- req_access_txt = "10"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"aFA" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aFB" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/rack,
+/obj/machinery/button/door{
+ id = "engpa";
+ name = "Engineering Chamber Shutters Control";
+ pixel_y = -26;
+ req_access_txt = "11"
},
-/obj/effect/turf_decal/stripes/corner,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
- },
-/turf/open/floor/engine,
+/obj/item/clothing/gloves/color/black,
+/obj/item/wrench,
+/obj/item/clothing/glasses/meson/engine,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aFC" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"aFD" = (
-/obj/structure/cable/white{
- icon_state = "1-4"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/meter,
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/turf/open/floor/engine,
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aFE" = (
/obj/structure/table/wood,
@@ -15215,8 +15112,7 @@
},
/obj/machinery/camera{
c_tag = "Storage Wing - Security Access Door";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/light/small{
dir = 8
@@ -15457,7 +15353,7 @@
desc = "Used for watching Prison Wing holding areas.";
dir = 1;
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_y = -30
},
/obj/item/restraints/handcuffs,
@@ -15782,10 +15678,9 @@
/obj/structure/extinguisher_cabinet{
pixel_x = -27
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aGW" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -15796,31 +15691,14 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aGY" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"aGZ" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "External Gas to Loop"
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engpa";
+ name = "Engineering Chamber Shutters"
},
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"aHa" = (
-/obj/structure/cable/white,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aHb" = (
/obj/machinery/camera{
@@ -16225,6 +16103,9 @@
lootcount = 2;
name = "2maintenance loot spawner"
},
+/obj/machinery/light/small{
+ dir = 8
+ },
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aHW" = (
@@ -16241,42 +16122,21 @@
dir = 8;
pixel_x = -24
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aHY" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aHZ" = (
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/tank/internals/emergency_oxygen/engi,
-/obj/item/tank/internals/emergency_oxygen/engi,
-/obj/effect/turf_decal/delivery,
-/obj/structure/table,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aIc" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/plating,
-/area/engine/engineering)
"aIe" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space,
+/area/space)
"aIf" = (
/obj/machinery/camera{
c_tag = "Auxillary Base Construction";
@@ -16352,8 +16212,7 @@
},
/obj/machinery/camera{
c_tag = "Cargo Bay - Fore";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/structure/sign/map/right{
desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown).";
@@ -16478,8 +16337,7 @@
"aIt" = (
/obj/machinery/camera{
c_tag = "Cargo Bay - Storage Wing Entrance";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -16544,8 +16402,7 @@
},
/obj/machinery/camera{
c_tag = "Storage Wing";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/machinery/light,
/obj/structure/cable/yellow{
@@ -16745,8 +16602,7 @@
},
/obj/machinery/camera{
c_tag = "Courtroom";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/blue/side{
dir = 1
@@ -16795,7 +16651,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching Prison Wing holding areas.";
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_y = 30
},
/turf/open/floor/wood,
@@ -16945,8 +16801,7 @@
},
/obj/machinery/camera{
c_tag = "Engineering - Secure Storage";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plating,
/area/engine/engineering)
@@ -16958,34 +16813,13 @@
/obj/structure/table,
/obj/item/airlock_painter,
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aJp" = (
-/obj/structure/table,
-/obj/effect/turf_decal/delivery,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/glasses/meson/engine,
-/obj/machinery/light{
- dir = 4
+/turf/open/floor/plasteel/yellow/side{
+ dir = 9
},
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/item/pipe_dispenser,
-/obj/item/pipe_dispenser,
-/obj/item/pipe_dispenser,
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aJu" = (
/turf/open/floor/plating,
/area/engine/engineering)
-"aJv" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"aJB" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum/external,
@@ -17432,12 +17266,6 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
-"aKA" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"aKB" = (
/obj/machinery/holopad,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -17451,53 +17279,26 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aKF" = (
-/obj/machinery/button/door{
- id = "engsm";
- name = "Radiation Shutters Control";
- pixel_x = 24;
- req_access_txt = "10"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"aKG" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+/obj/structure/particle_accelerator/end_cap{
+ icon_state = "end_cap";
dir = 4
},
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
+/turf/open/floor/plating,
+/area/engine/engineering)
"aKH" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 4;
- name = "Gas to Chamber";
- on = 0
+/obj/structure/particle_accelerator/fuel_chamber{
+ icon_state = "fuel_chamber";
+ dir = 4
},
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/turf/open/floor/plating,
+/area/engine/engineering)
"aKI" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
+/obj/structure/particle_accelerator/power_box{
+ icon_state = "power_box";
+ dir = 4
},
-/obj/machinery/meter,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"aKL" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 8;
- name = "Mix Bypass";
- on = 0
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
"aKN" = (
/obj/machinery/door/poddoor{
@@ -17792,7 +17593,7 @@
/obj/structure/table,
/obj/machinery/camera/motion{
c_tag = "AI Upload Chamber - Fore";
- network = list("SS13","RD","AIUpload")
+ network = list("ss13","rd","aiupload")
},
/obj/item/twohanded/required/kirbyplants/photosynthetic{
pixel_y = 10
@@ -17891,8 +17692,7 @@
/obj/machinery/photocopier,
/obj/machinery/camera{
c_tag = "Law Office";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/wood,
/area/lawoffice)
@@ -17962,8 +17762,7 @@
/obj/structure/disposalpipe/trunk,
/obj/machinery/camera{
c_tag = "Locker Room Starboard";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/structure/sign/warning/pods{
pixel_y = 30
@@ -18050,12 +17849,6 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/plating,
/area/engine/engineering)
-"aMc" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"aMd" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{
@@ -18076,62 +17869,52 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"aMg" = (
-/obj/machinery/door/firedoor,
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine";
- req_access_txt = "10"
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
},
-/turf/open/floor/plating,
/area/engine/engineering)
"aMh" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engpa";
+ name = "Engineering Chamber Shutters"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"aMi" = (
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/structure/cable{
- icon_state = "1-8"
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
-"aMi" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- name = "Gas to Filter"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"aMj" = (
-/obj/machinery/door/airlock/engineering/glass{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
"aMk" = (
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"aMm" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/plasteel/dark,
+/obj/machinery/particle_accelerator/control_box,
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
"aMo" = (
-/obj/structure/reflector/box/anchored{
- dir = 8
+/obj/effect/turf_decal/stripes/line{
+ dir = 2
},
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"aMq" = (
/obj/structure/window/reinforced,
/turf/open/space,
@@ -18200,8 +17983,7 @@
/area/quartermaster/storage)
"aMA" = (
/obj/machinery/camera/autoname{
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/structure/rack,
/obj/item/storage/toolbox/electrical{
@@ -18579,7 +18361,9 @@
maxcharge = 15000
},
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 10
+ },
/area/engine/engineering)
"aNr" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -18589,17 +18373,27 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"aNu" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 8;
- name = "Gas to Filter";
- on = 0
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/obj/machinery/camera/emp_proof{
+ c_tag = "Containment - Particle Accelerator";
+ dir = 1;
+ network = list("singularity")
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"aNv" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
"aNw" = (
/obj/structure/window/reinforced{
dir = 4
@@ -18772,8 +18566,7 @@
/area/quartermaster/qm)
"aNP" = (
/obj/machinery/camera/autoname{
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/machinery/holopad,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -19245,8 +19038,7 @@
/obj/machinery/disposal/bin,
/obj/machinery/camera{
c_tag = "Garden";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/structure/disposalpipe/trunk{
dir = 8
@@ -19265,10 +19057,9 @@
/obj/structure/cable/yellow{
icon_state = "0-4"
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aOP" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -19291,26 +19082,12 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aOR" = (
-/obj/effect/turf_decal/delivery,
-/obj/structure/closet/firecloset,
-/obj/effect/turf_decal/stripes/line{
+"aOS" = (
+/obj/effect/turf_decal/stripes/corner{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aOS" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/item/device/radio/intercom{
- freerange = 0;
- frequency = 1459;
- name = "Station Intercom (General)";
- pixel_y = 21
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/floor/plating/airless,
+/area/space)
"aOT" = (
/obj/structure/window/reinforced{
dir = 4
@@ -19556,8 +19333,7 @@
},
/obj/machinery/camera{
c_tag = "Tool Storage";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/brown{
dir = 4
@@ -19637,8 +19413,7 @@
},
/obj/machinery/camera{
c_tag = "Fore Primary Hallway Aft";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/red/corner{
dir = 2
@@ -19838,8 +19613,7 @@
},
/obj/machinery/camera{
c_tag = "Engineering - Power Monitoring";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/machinery/modular_computer/console/preset/engineering,
/turf/open/floor/plasteel/vault,
@@ -19857,41 +19631,32 @@
icon_state = "2-8"
},
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 9
+ },
/area/engine/engineering)
"aPZ" = (
/obj/machinery/vending/tool,
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aQa" = (
-/obj/structure/table,
-/obj/effect/turf_decal/delivery,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
},
-/obj/item/storage/belt/utility,
-/obj/item/storage/belt/utility,
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aQd" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/obj/structure/rack,
+/obj/machinery/button/door{
+ id = "engpa";
+ name = "Engineering Chamber Shutters Control";
+ pixel_y = 26;
+ req_access_txt = "11"
},
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+/obj/item/storage/belt/utility,
+/obj/item/weldingtool,
+/obj/item/clothing/head/welding,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel/yellow/side{
dir = 1
},
-/turf/open/floor/engine,
-/area/engine/engineering)
-"aQe" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"aQf" = (
/obj/structure/chair{
@@ -19979,8 +19744,7 @@
},
/obj/machinery/camera{
c_tag = "Cargo Bay - Starboard";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/item/paper_bin{
pixel_x = -1;
@@ -19997,7 +19761,7 @@
"aQq" = (
/obj/machinery/computer/security/mining{
dir = 4;
- network = list("MINE","AuxBase")
+ network = list("mine","auxbase")
},
/obj/machinery/light_switch{
pixel_x = -23
@@ -20111,7 +19875,7 @@
/obj/machinery/camera/motion{
c_tag = "AI Upload Chamber - Port";
dir = 1;
- network = list("SS13","RD","AIUpload")
+ network = list("ss13","rd","aiupload")
},
/turf/open/floor/circuit,
/area/ai_monitored/turret_protected/ai_upload)
@@ -20134,7 +19898,7 @@
/obj/machinery/camera/motion{
c_tag = "AI Upload Chamber - Starboard";
dir = 1;
- network = list("SS13","RD","AIUpload")
+ network = list("ss13","rd","aiupload")
},
/turf/open/floor/circuit,
/area/ai_monitored/turret_protected/ai_upload)
@@ -20248,8 +20012,7 @@
},
/obj/machinery/camera{
c_tag = "Crew Quarters Entrance";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/neutral/corner{
dir = 1
@@ -20498,19 +20261,9 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
},
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aRo" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aRp" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -20522,9 +20275,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aRq" = (
@@ -20551,13 +20301,6 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aRv" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 5
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"aRy" = (
/turf/closed/wall/r_wall,
/area/aisat)
@@ -20974,10 +20717,9 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aSu" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
@@ -21006,9 +20748,7 @@
/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
"aSx" = (
@@ -21019,36 +20759,39 @@
/obj/structure/cable/yellow{
icon_state = "1-8"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aSz" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/item/pen,
+/obj/item/storage/belt/utility,
+/obj/item/clothing/glasses/meson,
+/obj/item/paper_bin{
+ layer = 2.9
},
-/obj/effect/turf_decal/stripes/line{
+/obj/structure/table/glass,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
},
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aSA" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/item/book/manual/wiki/engineering_hacking{
+ pixel_x = 3;
+ pixel_y = 3
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 5
- },
-/turf/open/floor/engine,
+/obj/item/book/manual/wiki/engineering_construction,
+/obj/item/clothing/gloves/color/yellow,
+/obj/structure/table/glass,
+/obj/item/device/flashlight,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aSB" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aSD" = (
@@ -21366,8 +21109,7 @@
/obj/machinery/light,
/obj/machinery/camera{
c_tag = "Courtroom - Gallery";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/dark,
/area/security/courtroom)
@@ -21458,8 +21200,7 @@
},
/obj/machinery/camera{
c_tag = "Locker Room Port";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/neutral/corner{
dir = 2
@@ -21535,10 +21276,9 @@
/obj/structure/cable/yellow{
icon_state = "1-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 10
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aTG" = (
/obj/structure/disposalpipe/segment{
@@ -21550,26 +21290,18 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aTH" = (
/obj/structure/disposalpipe/segment{
dir = 9
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/turf/open/floor/plasteel,
+/obj/machinery/light,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aTI" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -21580,9 +21312,6 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
@@ -21595,31 +21324,6 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aTM" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"aTN" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"aTO" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aTQ" = (
@@ -21655,7 +21359,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior - Fore Port";
dir = 8;
- network = list("MiniSat")
+ network = list("minisat")
},
/turf/open/floor/plasteel/dark,
/area/aisat)
@@ -21707,7 +21411,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior - Fore Starboard";
dir = 4;
- network = list("MiniSat")
+ network = list("minisat")
},
/turf/open/floor/plasteel/dark,
/area/aisat)
@@ -21757,8 +21461,7 @@
},
/obj/machinery/camera{
c_tag = "Cargo Bay - Port";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/conveyor{
dir = 1;
@@ -21957,7 +21660,7 @@
desc = "Used for watching the AI Upload.";
dir = 4;
name = "AI Upload Monitor";
- network = list("AIUpload");
+ network = list("aiupload");
pixel_x = -29
},
/turf/open/floor/plasteel/vault{
@@ -21983,12 +21686,12 @@
desc = "Used for watching areas on the MiniSat.";
dir = 8;
name = "MiniSat Monitor";
- network = list("MiniSat","tcomm");
+ network = list("minisat","tcomm");
pixel_x = 29
},
/obj/machinery/camera/motion{
c_tag = "AI Upload Foyer";
- network = list("SS13","RD","AIUpload")
+ network = list("ss13","rd","aiupload")
},
/obj/machinery/airalarm{
pixel_y = 26
@@ -22225,7 +21928,9 @@
"aUY" = (
/obj/effect/turf_decal/delivery,
/obj/structure/closet/wardrobe/engineering_yellow,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 10
+ },
/area/engine/engineering)
"aUZ" = (
/obj/structure/disposalpipe/segment,
@@ -22236,8 +21941,8 @@
/obj/effect/turf_decal/bot{
dir = 1
},
-/turf/open/floor/plasteel{
- dir = 1
+/turf/open/floor/plasteel/yellow/side{
+ dir = 6
},
/area/engine/engineering)
"aVa" = (
@@ -22274,31 +21979,13 @@
dir = 4
},
/obj/structure/closet/secure_closet/engineering_electrical,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aVe" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"aVf" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/door/airlock/engineering{
- name = "Supermatter Engine";
- req_access_txt = "10"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard)
-"aVh" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aVk" = (
/obj/structure/window/reinforced{
@@ -22334,7 +22021,7 @@
/obj/machinery/camera{
c_tag = "AI Chamber - Fore";
dir = 2;
- network = list("RD")
+ network = list("rd")
},
/obj/structure/showcase/cyborg/old{
dir = 2;
@@ -22402,8 +22089,7 @@
/obj/structure/chair,
/obj/machinery/camera{
c_tag = "Arrivals - Fore Arm - Far";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -22584,7 +22270,7 @@
},
/obj/machinery/computer/security/mining{
dir = 8;
- network = list("MINE","AuxBase")
+ network = list("mine","auxbase")
},
/turf/open/floor/plasteel/red/side{
dir = 4
@@ -22688,8 +22374,7 @@
"aWd" = (
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Fore";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/red/corner{
dir = 1
@@ -22840,8 +22525,10 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aWu" = (
-/obj/machinery/door/airlock/maintenance{
- req_access_txt = "12"
+/obj/machinery/door/airlock/external{
+ name = "Escape Pod Four";
+ req_access = null;
+ req_access_txt = "32"
},
/turf/open/floor/plating,
/area/maintenance/starboard)
@@ -22929,18 +22616,16 @@
dir = 1
},
/area/engine/engineering)
-"aWH" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard)
"aWK" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
+/obj/structure/cable/white{
+ icon_state = "2-4"
},
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"aWL" = (
/obj/machinery/ai_status_display{
pixel_x = -32
@@ -23063,8 +22748,7 @@
},
/obj/machinery/camera{
c_tag = "Arrivals - Fore Arm";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/light{
dir = 4
@@ -23183,8 +22867,7 @@
/obj/structure/table/reinforced,
/obj/machinery/camera{
c_tag = "Security Post - Cargo";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/red/side,
/area/security/checkpoint/supply)
@@ -23368,8 +23051,7 @@
},
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Fore - AI Upload";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/structure/sign/warning/securearea{
desc = "A warning sign which reads 'HIGH-POWER TURRETS AHEAD'.";
@@ -23785,8 +23467,7 @@
},
/obj/machinery/camera{
c_tag = "Chief Engineer's Office";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -23841,17 +23522,20 @@
/turf/closed/wall,
/area/security/checkpoint/engineering)
"aYx" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"aYy" = (
/obj/machinery/camera{
c_tag = "AI Chamber - Port";
dir = 4;
- network = list("RD")
+ network = list("rd")
},
/obj/structure/showcase/cyborg/old{
dir = 4;
@@ -23997,8 +23681,7 @@
"aYP" = (
/obj/machinery/camera{
c_tag = "Cargo Bay - Aft";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/effect/turf_decal/stripes/line{
dir = 2
@@ -24565,7 +24248,7 @@
/obj/machinery/camera{
c_tag = "AI Chamber - Core";
dir = 2;
- network = list("RD")
+ network = list("rd")
},
/turf/open/floor/plasteel/vault{
dir = 10
@@ -24968,8 +24651,7 @@
},
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Fore - Port Corner";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/neutral/corner{
dir = 1
@@ -25150,8 +24832,7 @@
},
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Fore - Courtroom";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/neutral/corner{
dir = 8
@@ -25219,8 +24900,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Fore - Starboard Corner";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/neutral/corner{
dir = 4
@@ -25464,7 +25144,7 @@
desc = "Used for monitoring the engine.";
dir = 8;
name = "Engine Monitor";
- network = list("Engine");
+ network = list("engine");
pixel_x = 32
},
/turf/open/floor/plasteel/vault{
@@ -25503,8 +25183,7 @@
},
/obj/machinery/camera{
c_tag = "Engineering - Entrance";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -25519,7 +25198,7 @@
/obj/machinery/computer/security/telescreen{
dir = 4;
name = "MiniSat Monitor";
- network = list("MiniSat","tcomm");
+ network = list("minisat","tcomm");
pixel_x = -29
},
/turf/open/floor/plasteel/red/side{
@@ -25577,7 +25256,7 @@
/obj/machinery/camera{
c_tag = "AI Chamber - Starboard";
dir = 8;
- network = list("RD")
+ network = list("rd")
},
/obj/structure/showcase/cyborg/old{
dir = 8;
@@ -25731,8 +25410,7 @@
},
/obj/machinery/camera{
c_tag = "Cargo - Foyer";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/brown{
dir = 4
@@ -25842,8 +25520,7 @@
"bcr" = (
/obj/machinery/camera{
c_tag = "Auxiliary Tool Storage";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/airalarm{
dir = 8;
@@ -26062,7 +25739,7 @@
desc = "Used for monitoring the engine.";
dir = 8;
name = "Engine Monitor";
- network = list("Engine");
+ network = list("engine");
pixel_x = 32
},
/turf/open/floor/plasteel/red/side{
@@ -26166,8 +25843,7 @@
},
/obj/machinery/camera{
c_tag = "Customs Checkpoint";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/red/side{
dir = 1
@@ -26687,7 +26363,7 @@
/obj/machinery/computer/security/telescreen{
dir = 1;
name = "MiniSat Monitor";
- network = list("MiniSat","tcomm");
+ network = list("minisat","tcomm");
pixel_y = -30
},
/turf/open/floor/plasteel/vault{
@@ -26754,8 +26430,7 @@
"bem" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/machinery/camera/autoname{
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/button/door{
desc = "A remote control-switch for the engineering security doors.";
@@ -26835,7 +26510,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior - Port Fore";
dir = 8;
- network = list("MiniSat")
+ network = list("minisat")
},
/turf/open/floor/plasteel/dark,
/area/aisat)
@@ -26876,7 +26551,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior - Starboard Fore";
dir = 4;
- network = list("MiniSat")
+ network = list("minisat")
},
/turf/open/floor/plasteel/dark,
/area/aisat)
@@ -27046,8 +26721,7 @@
},
/obj/machinery/camera{
c_tag = "Cargo - Office";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/brown{
dir = 8
@@ -27117,8 +26791,7 @@
/obj/item/reagent_containers/spray/cleaner,
/obj/machinery/camera{
c_tag = "Custodial Closet";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/light/small{
dir = 8
@@ -27321,8 +26994,7 @@
/obj/effect/landmark/start/captain,
/obj/machinery/camera{
c_tag = "Captain's Quarters";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/wood,
/area/crew_quarters/heads/captain/private)
@@ -28105,8 +27777,7 @@
},
/obj/machinery/camera{
c_tag = "Bridge - Central";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/structure/table/glass,
/turf/open/floor/plasteel/darkbrown/side{
@@ -28331,8 +28002,7 @@
},
/obj/machinery/camera{
c_tag = "Starboard Primary Hallway - Tech Storage";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/yellow/corner{
dir = 1
@@ -28626,7 +28296,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior - Space Access";
dir = 1;
- network = list("MiniSat")
+ network = list("minisat")
},
/turf/open/floor/plasteel/vault{
dir = 8
@@ -28669,7 +28339,7 @@
/obj/machinery/camera{
c_tag = "AI Chamber - Aft";
dir = 1;
- network = list("RD")
+ network = list("rd")
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/dark,
@@ -29569,8 +29239,7 @@
},
/obj/machinery/camera{
c_tag = "Cargo - Mailroom";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/arrival{
dir = 2
@@ -29856,7 +29525,7 @@
icon_state = "2-4"
},
/obj/machinery/computer/security/mining{
- network = list("MINE","AuxBase")
+ network = list("mine","auxbase")
},
/obj/machinery/keycard_auth{
pixel_y = 24
@@ -30071,8 +29740,7 @@
},
/obj/machinery/camera{
c_tag = "Starboard Primary Hallway - Auxiliary Tool Storage";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/caution/corner{
dir = 8
@@ -30114,8 +29782,7 @@
},
/obj/machinery/camera{
c_tag = "Starboard Primary Hallway - Engineering";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/caution/corner{
dir = 8
@@ -30610,7 +30277,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching Prison Wing holding areas.";
name = "Prison Monitor";
- network = list("Prison");
+ network = list("prison");
pixel_y = 30
},
/turf/open/floor/wood,
@@ -30786,8 +30453,7 @@
},
/obj/machinery/camera{
c_tag = "Bridge - Starboard";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/darkblue/side{
dir = 4
@@ -31029,8 +30695,7 @@
},
/obj/machinery/camera{
c_tag = "Engineering - Foyer - Starboard";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel,
/area/engine/break_room)
@@ -31226,7 +30891,7 @@
/obj/machinery/camera{
c_tag = "MiniSat - Antechamber";
dir = 4;
- network = list("MiniSat")
+ network = list("minisat")
},
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 1
@@ -31352,8 +31017,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/camera{
c_tag = "Arrivals - Station Entrance";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -31475,8 +31139,7 @@
},
/obj/machinery/camera{
c_tag = "Port Primary Hallway - Middle";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/neutral/corner{
dir = 1
@@ -31649,8 +31312,7 @@
/obj/structure/cable/yellow,
/obj/machinery/camera{
c_tag = "Bridge - Port";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/darkblue/side{
dir = 8
@@ -31808,8 +31470,7 @@
},
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Starboard - Art Storage";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel/neutral/corner{
@@ -31882,8 +31543,7 @@
/obj/item/gun/ballistic/revolver/doublebarrel,
/obj/machinery/camera{
c_tag = "Bar - Backroom";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/wood,
/area/crew_quarters/bar)
@@ -32095,7 +31755,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior - Fore";
dir = 1;
- network = list("MiniSat")
+ network = list("minisat")
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
@@ -32110,9 +31770,6 @@
dir = 6
},
/area/security/checkpoint/customs)
-"bpu" = (
-/turf/closed/wall/r_wall,
-/area/space/nearstation)
"bpv" = (
/obj/structure/sign/warning/securearea{
pixel_y = 32
@@ -32495,8 +32152,7 @@
},
/obj/machinery/camera{
c_tag = "Arrivals - Lounge";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/effect/landmark/start/assistant,
/turf/open/floor/plasteel/grimy,
@@ -32816,7 +32472,7 @@
/obj/machinery/computer/security/telescreen{
dir = 1;
name = "MiniSat Monitor";
- network = list("MiniSat","tcomm");
+ network = list("minisat","tcomm");
pixel_y = -29
},
/turf/open/floor/plasteel/darkblue/side{
@@ -33285,8 +32941,7 @@
},
/obj/machinery/camera{
c_tag = "Engineering - Foyer - Port";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/structure/table/glass,
/turf/open/floor/plasteel/cafeteria{
@@ -33456,7 +33111,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior Access";
dir = 1;
- network = list("MiniSat")
+ network = list("minisat")
},
/obj/machinery/power/apc{
aidisabled = 0;
@@ -33550,7 +33205,7 @@
desc = "Used for watching the RD's goons from the safety of his office.";
dir = 4;
name = "Research Monitor";
- network = list("RD");
+ network = list("rd");
pixel_x = -28
},
/turf/open/floor/plasteel/vault{
@@ -33572,7 +33227,7 @@
/obj/machinery/camera/motion{
c_tag = "MiniSat Foyer";
dir = 8;
- network = list("MiniSat")
+ network = list("minisat")
},
/turf/open/floor/plasteel/darkblue/corner{
dir = 8
@@ -33630,7 +33285,7 @@
/obj/machinery/computer/security/telescreen{
dir = 8;
name = "MiniSat Monitor";
- network = list("MiniSat","tcomm");
+ network = list("minisat","tcomm");
pixel_x = 28
},
/turf/open/floor/plasteel/vault{
@@ -33655,7 +33310,7 @@
/obj/machinery/computer/security/telescreen{
dir = 1;
name = "MiniSat Monitor";
- network = list("MiniSat","tcomm");
+ network = list("minisat","tcomm");
pixel_y = -29
},
/turf/open/floor/plasteel/dark,
@@ -33679,7 +33334,7 @@
/obj/machinery/camera/motion{
c_tag = "MiniSat Maintenance";
dir = 8;
- network = list("MiniSat")
+ network = list("minisat")
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
@@ -33904,8 +33559,7 @@
},
/obj/machinery/camera{
c_tag = "Port Primary Hallway - Starboard";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/neutral/corner{
dir = 8
@@ -34050,8 +33704,7 @@
},
/obj/machinery/camera{
c_tag = "Bridge - Command Chair";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/carpet,
/area/bridge)
@@ -34424,7 +34077,7 @@
/obj/machinery/computer/security/telescreen{
dir = 1;
name = "MiniSat Monitor";
- network = list("MiniSat","tcomm");
+ network = list("minisat","tcomm");
pixel_y = -28
},
/turf/open/floor/plasteel/darkblue/corner,
@@ -34555,8 +34208,7 @@
},
/obj/machinery/camera{
c_tag = "Port Primary Hallway - Port";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/dark,
/area/hallway/primary/port)
@@ -34870,8 +34522,7 @@
"buJ" = (
/obj/machinery/camera{
c_tag = "Captain's Office";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/carpet,
/area/crew_quarters/heads/captain/private)
@@ -34883,8 +34534,7 @@
},
/obj/machinery/camera{
c_tag = "Captain's Office - Emergency Escape";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plating{
icon_state = "platingdmg2"
@@ -35173,8 +34823,7 @@
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/obj/machinery/camera{
c_tag = "Engineering - Transit Tube Access";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/stripes/corner{
dir = 2
@@ -35455,9 +35104,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
/turf/open/floor/plating,
/area/maintenance/department/science/xenobiology)
"bvU" = (
@@ -35659,8 +35305,7 @@
},
/obj/machinery/camera{
c_tag = "Bridge - Port Access";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/darkblue/corner{
dir = 1
@@ -35699,8 +35344,7 @@
"bwv" = (
/obj/machinery/camera{
c_tag = "Council Chamber";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/machinery/light{
dir = 1
@@ -35737,8 +35381,7 @@
},
/obj/machinery/camera{
c_tag = "Bridge - Starboard Access";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/darkblue/corner,
/area/bridge)
@@ -35886,8 +35529,7 @@
"bwM" = (
/obj/machinery/camera{
c_tag = "Bar";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/machinery/requests_console{
department = "Bar";
@@ -35985,8 +35627,7 @@
},
/obj/machinery/camera{
c_tag = "Club - Fore";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/wood,
/area/crew_quarters/bar)
@@ -36182,8 +35823,7 @@
"bxu" = (
/obj/machinery/camera{
c_tag = "Arrivals - Middle Arm - Far";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/machinery/status_display{
pixel_y = -32
@@ -36229,8 +35869,7 @@
},
/obj/machinery/camera{
c_tag = "Arrivals - Middle Arm";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
@@ -36885,8 +36524,7 @@
pixel_y = 32
},
/obj/machinery/camera{
- c_tag = "Atmospherics - Control Room";
- network = list("SS13")
+ c_tag = "Atmospherics - Control Room"
},
/obj/machinery/computer/station_alert,
/turf/open/floor/plasteel/caution{
@@ -36954,8 +36592,7 @@
icon_state = "0-2"
},
/obj/machinery/camera{
- c_tag = "Atmospherics - Entrance";
- network = list("SS13")
+ c_tag = "Atmospherics - Entrance"
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -37041,8 +36678,7 @@
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/camera{
- c_tag = "Atmospherics - Distro Loop";
- network = list("SS13")
+ c_tag = "Atmospherics - Distro Loop"
},
/turf/open/floor/plasteel/caution{
dir = 1
@@ -37110,7 +36746,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior - Port Aft";
dir = 8;
- network = list("MiniSat")
+ network = list("minisat")
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
@@ -37202,7 +36838,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior - Starboard Aft";
dir = 4;
- network = list("MiniSat")
+ network = list("minisat")
},
/turf/open/floor/plasteel/dark,
/area/aisat)
@@ -37281,8 +36917,7 @@
dir = 4
},
/obj/machinery/camera/autoname{
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/carpet,
@@ -37493,7 +37128,7 @@
/obj/machinery/computer/security/telescreen{
dir = 1;
name = "MiniSat Monitor";
- network = list("MiniSat","tcomm");
+ network = list("minisat","tcomm");
pixel_y = -29
},
/obj/structure/bed/dogbed/renault,
@@ -37640,8 +37275,7 @@
},
/obj/machinery/camera{
c_tag = "Starboard Primary Hallway - Atmospherics";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/arrival{
dir = 8
@@ -37859,8 +37493,7 @@
"bAZ" = (
/obj/machinery/camera{
c_tag = "Head of Personnel's Office";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/structure/table/wood,
/obj/item/storage/box/PDAs{
@@ -38565,7 +38198,6 @@
/obj/machinery/atmospherics/pipe/simple/purple/visible{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
/turf/open/space,
/area/space/nearstation)
"bCA" = (
@@ -38670,8 +38302,7 @@
/obj/machinery/light/small,
/obj/machinery/camera{
c_tag = "Auxilary Restrooms";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plating,
/area/crew_quarters/toilet/auxiliary)
@@ -38948,8 +38579,7 @@
},
/obj/machinery/camera{
c_tag = "Command Hallway - Starboard";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/neutral/corner{
dir = 4
@@ -39246,7 +38876,7 @@
/obj/machinery/camera{
c_tag = "Telecomms - Server Room - Fore-Port";
dir = 2;
- network = list("SS13","tcomm")
+ network = list("ss13","tcomm")
},
/turf/open/floor/circuit/green/telecomms/mainframe,
/area/tcommsat/server)
@@ -39277,7 +38907,7 @@
/obj/machinery/camera{
c_tag = "Telecomms - Server Room - Fore-Starboard";
dir = 2;
- network = list("SS13","tcomm")
+ network = list("ss13","tcomm")
},
/turf/open/floor/circuit/green/telecomms/mainframe,
/area/tcommsat/server)
@@ -39376,8 +39006,7 @@
pixel_x = -32
},
/obj/machinery/camera/autoname{
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
@@ -39511,8 +39140,7 @@
},
/obj/machinery/camera{
c_tag = "Command Hallway - Port";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/neutral/corner{
dir = 8
@@ -40310,8 +39938,7 @@
"bGb" = (
/obj/machinery/camera{
c_tag = "Atmospherics Tank - Mix";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/engine/vacuum,
/area/engine/atmos)
@@ -40432,8 +40059,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Port";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/neutral/corner{
dir = 2
@@ -40565,8 +40191,7 @@
},
/obj/machinery/camera{
c_tag = "Command Hallway - Central";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/neutral/corner{
dir = 2
@@ -41349,17 +40974,13 @@
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar)
"bIv" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 10
- },
/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"bIw" = (
/obj/machinery/light,
/obj/machinery/camera{
c_tag = "Kitchen Hatch";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar)
@@ -41641,7 +41262,7 @@
/obj/machinery/camera{
c_tag = "Telecomms - Control Room";
dir = 1;
- network = list("SS13","tcomm")
+ network = list("ss13","tcomm")
},
/obj/structure/table/wood,
/obj/item/pen,
@@ -42181,8 +41802,7 @@
"bKn" = (
/obj/machinery/camera{
c_tag = "Club - Aft";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/machinery/computer/security/telescreen/entertainment{
pixel_y = -29
@@ -42404,7 +42024,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior - Aft Starboard";
dir = 4;
- network = list("MiniSat")
+ network = list("minisat")
},
/obj/structure/window/reinforced{
dir = 4
@@ -42457,8 +42077,7 @@
},
/obj/machinery/camera{
c_tag = "Arrivals - Aft Arm";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/arrival{
dir = 4
@@ -42793,8 +42412,7 @@
},
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Starboard - Kitchen";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/neutral/corner{
dir = 1
@@ -42921,8 +42539,7 @@
},
/obj/machinery/camera{
c_tag = "Telecomms - Storage";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/dark,
/area/storage/tcom)
@@ -43002,8 +42619,7 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics - Central";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
@@ -43032,10 +42648,6 @@
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bMi" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bMj" = (
/obj/machinery/holopad,
/turf/open/floor/plasteel,
@@ -43073,8 +42685,7 @@
"bMn" = (
/obj/machinery/camera{
c_tag = "Atmospherics Tank - N2O";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/engine/n2o,
/area/engine/atmos)
@@ -43089,7 +42700,7 @@
/obj/machinery/camera{
c_tag = "Telecomms - Server Room - Aft-Port";
dir = 4;
- network = list("SS13","tcomm")
+ network = list("ss13","tcomm")
},
/turf/open/floor/plasteel/dark/telecomms/mainframe,
/area/tcommsat/server)
@@ -43127,7 +42738,7 @@
/obj/machinery/camera{
c_tag = "Telecomms - Server Room - Aft-Starboard";
dir = 8;
- network = list("SS13","tcomm")
+ network = list("ss13","tcomm")
},
/obj/structure/cable/yellow{
icon_state = "0-8"
@@ -43146,8 +42757,7 @@
"bMu" = (
/obj/machinery/camera{
c_tag = "Arrivals - Aft Arm - Far";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
@@ -43325,8 +42935,7 @@
/obj/item/folder,
/obj/item/folder,
/obj/machinery/camera/autoname{
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/structure/table/wood,
/obj/item/device/taperecorder,
@@ -43435,8 +43044,7 @@
"bMZ" = (
/obj/machinery/camera{
c_tag = "Teleporter Room";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/structure/rack,
/obj/structure/window/reinforced{
@@ -43531,8 +43139,7 @@
/obj/item/clothing/glasses/sunglasses,
/obj/machinery/camera{
c_tag = "Corporate Showroom";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/wood,
/area/bridge/showroom/corporate)
@@ -43591,8 +43198,7 @@
},
/obj/machinery/camera{
c_tag = "Gateway - Atrium";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/effect/turf_decal/bot{
dir = 1
@@ -43921,7 +43527,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior - Aft Port";
dir = 8;
- network = list("MiniSat")
+ network = list("minisat")
},
/obj/structure/window/reinforced{
dir = 8
@@ -43944,7 +43550,7 @@
/obj/machinery/camera{
c_tag = "Telecomms - Server Room - Aft";
dir = 1;
- network = list("SS13","tcomm")
+ network = list("ss13","tcomm")
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/ntnet_relay,
@@ -45605,8 +45211,7 @@
},
/obj/machinery/camera{
c_tag = "Gateway - Access";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 2
@@ -45686,8 +45291,7 @@
/obj/item/kitchen/rollingpin,
/obj/machinery/camera{
c_tag = "Kitchen";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/cafeteria{
dir = 2
@@ -45779,8 +45383,7 @@
},
/obj/machinery/camera{
c_tag = "Kitchen - Coldroom";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/showroomfloor,
/area/crew_quarters/kitchen)
@@ -45843,8 +45446,7 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics - Port";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/light{
dir = 8
@@ -45901,8 +45503,7 @@
"bSl" = (
/obj/machinery/camera{
c_tag = "Atmospherics Tank - Toxins";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/engine/plasma,
/area/engine/atmos)
@@ -46366,8 +45967,7 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics - Starboard";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel,
/area/engine/atmos)
@@ -46402,10 +46002,10 @@
/turf/closed/wall,
/area/maintenance/solars/port/aft)
"bTq" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
},
-/turf/closed/wall/r_wall,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"bTr" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -46453,8 +46053,7 @@
pixel_y = -24
},
/obj/machinery/camera/autoname{
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/structure/table/wood,
/turf/open/floor/wood,
@@ -46982,8 +46581,12 @@
},
/area/maintenance/starboard)
"bUw" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible,
-/turf/open/floor/plasteel/dark,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plating,
/area/engine/engineering)
"bUx" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -47470,7 +47073,6 @@
/turf/closed/wall,
/area/hallway/secondary/service)
"bVA" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/door/airlock{
name = "Service Hall";
req_access_txt = "null";
@@ -47619,8 +47221,7 @@
},
/obj/machinery/camera{
c_tag = "Aft Port Solar Maintenance";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
@@ -47801,8 +47402,7 @@
},
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Aft-Port Corner";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/neutral/corner{
dir = 8
@@ -48018,8 +47618,7 @@
},
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Aft-Starboard Corner";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/neutral/corner{
dir = 2
@@ -48233,6 +47832,9 @@
/obj/structure/cable/yellow{
icon_state = "2-4"
},
+/obj/machinery/light/small{
+ dir = 1
+ },
/turf/open/floor/plating,
/area/maintenance/starboard)
"bXc" = (
@@ -48405,8 +48007,7 @@
"bXs" = (
/obj/machinery/camera{
c_tag = "Atmospherics Tank - CO2";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/engine/co2,
/area/engine/atmos)
@@ -48561,8 +48162,7 @@
"bXQ" = (
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Aft-Port";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/blue/corner{
dir = 8
@@ -48600,8 +48200,7 @@
"bXW" = (
/obj/machinery/camera{
c_tag = "Central Primary Hallway - Aft-Starboard";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/purple/corner{
dir = 2
@@ -48669,8 +48268,7 @@
/area/hallway/primary/central)
"bYe" = (
/obj/machinery/camera/autoname{
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/item/book/manual/hydroponics_pod_people,
/obj/item/paper/guides/jobs/hydroponics,
@@ -48737,8 +48335,7 @@
dir = 4
},
/obj/machinery/camera/autoname{
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/structure/table/glass,
/obj/effect/turf_decal/stripes/line{
@@ -48843,8 +48440,7 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics - Port-Aft";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/caution{
dir = 8
@@ -49125,7 +48721,7 @@
/obj/machinery/camera{
c_tag = "Security Post - Medbay";
dir = 2;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/red/side{
dir = 1
@@ -49831,7 +49427,7 @@
/obj/machinery/camera{
c_tag = "Research Division - Lobby";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/whitepurple/side{
dir = 1
@@ -50547,7 +50143,7 @@
/obj/machinery/camera{
c_tag = "Medbay Storage";
dir = 8;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/closet/crate/freezer/surplus_limbs,
@@ -50573,7 +50169,7 @@
desc = "Used for monitoring medbay to ensure patient safety.";
dir = 1;
name = "Medbay Monitor";
- network = list("Medbay");
+ network = list("medbay");
pixel_y = -29
},
/obj/item/device/radio/intercom{
@@ -50755,7 +50351,7 @@
desc = "Used for watching the RD's goons from the safety of his office.";
dir = 8;
name = "Research Monitor";
- network = list("RD");
+ network = list("rd");
pixel_x = 28;
pixel_y = 2
},
@@ -50789,8 +50385,7 @@
/obj/item/paper/guides/jobs/hydroponics,
/obj/machinery/camera{
c_tag = "Hydroponics - Foyer";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/item/device/radio/intercom{
pixel_y = -25
@@ -51093,8 +50688,7 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics - Starboard Aft";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/turf/open/floor/plasteel/dark,
/area/engine/atmos)
@@ -51539,7 +51133,7 @@
/obj/machinery/camera{
c_tag = "Security Post - Research Division";
dir = 8;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/red/side{
dir = 4
@@ -51908,7 +51502,7 @@
/obj/machinery/camera{
c_tag = "Medbay Foyer";
dir = 1;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/whiteblue/side{
dir = 2
@@ -53294,7 +52888,7 @@
/obj/machinery/camera{
c_tag = "Experimentation Lab - Test Chamber";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/light{
dir = 1
@@ -53413,7 +53007,7 @@
/obj/machinery/camera{
c_tag = "MiniSat Exterior - Aft";
dir = 2;
- network = list("MiniSat")
+ network = list("minisat")
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
@@ -53662,7 +53256,7 @@
/obj/machinery/camera{
c_tag = "Medbay Hallway Fore";
dir = 2;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/whiteblue/corner{
dir = 4
@@ -53890,7 +53484,7 @@
/obj/machinery/camera{
c_tag = "Research Division - Airlock";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line{
dir = 5
@@ -54041,8 +53635,7 @@
"cje" = (
/obj/machinery/camera{
c_tag = "Atmospherics Tank - N2";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/engine/n2,
/area/engine/atmos)
@@ -54056,8 +53649,7 @@
"cjh" = (
/obj/machinery/camera{
c_tag = "Atmospherics Tank - O2";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/engine/o2,
/area/engine/atmos)
@@ -54072,8 +53664,7 @@
"cjk" = (
/obj/machinery/camera{
c_tag = "Atmospherics Tank - Air";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/engine/air,
/area/engine/atmos)
@@ -54234,7 +53825,7 @@
/obj/machinery/camera{
c_tag = "Medbay Sleepers";
dir = 4;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/whiteblue/side{
dir = 10
@@ -55119,8 +54710,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/camera{
c_tag = "Aft Primary Hallway - Fore";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/firealarm{
dir = 4;
@@ -55305,7 +54895,7 @@
/obj/machinery/camera{
c_tag = "Research Division - Break Room";
dir = 1;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/cafeteria{
dir = 5
@@ -55667,7 +55257,7 @@
/obj/machinery/camera{
c_tag = "Research and Development";
dir = 8;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/light_switch{
pixel_x = 27
@@ -56199,7 +55789,7 @@
/obj/machinery/camera{
c_tag = "Chemistry";
dir = 4;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/obj/machinery/light{
dir = 8
@@ -56394,7 +55984,7 @@
/obj/machinery/camera{
c_tag = "Research Division Hallway - Central";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/white,
/area/science/research)
@@ -56781,7 +56371,7 @@
/obj/machinery/camera{
c_tag = "CMO's Office";
dir = 8;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/barber{
dir = 8
@@ -57306,23 +56896,23 @@
},
/area/maintenance/port/aft)
"cpR" = (
+/obj/machinery/button/door{
+ id = "engpa";
+ name = "Engineering Chamber Shutters Control";
+ pixel_y = -26;
+ req_access_txt = "11"
+ },
/obj/effect/turf_decal/stripes/line{
- dir = 4
+ dir = 10
},
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Port";
- dir = 8;
- network = list("SS13","Engine")
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/obj/machinery/airalarm/engine{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
+/obj/machinery/light{
dir = 8
},
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/turf/open/floor/plating,
+/area/engine/engineering)
"cpS" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -57816,7 +57406,7 @@
/obj/machinery/camera{
c_tag = "Research Division Hallway - Starboard";
dir = 1;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/white,
/area/science/research)
@@ -57901,7 +57491,7 @@
/obj/machinery/camera{
c_tag = "Experimentation Lab";
dir = 1;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/light,
/turf/open/floor/plasteel/white,
@@ -58089,7 +57679,7 @@
/obj/machinery/camera{
c_tag = "Medbay Cryo";
dir = 1;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/obj/item/screwdriver{
pixel_y = 6
@@ -58524,7 +58114,7 @@
/obj/machinery/camera{
c_tag = "Medbay Surgery";
dir = 1;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/white,
/area/medical/surgery)
@@ -58587,7 +58177,7 @@
/obj/machinery/camera{
c_tag = "Medbay Recovery Room";
dir = 1;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/whiteblue/side{
dir = 2
@@ -58611,7 +58201,7 @@
/obj/machinery/camera{
c_tag = "Medbay Hallway Central";
dir = 4;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/whiteblue/corner{
dir = 8
@@ -58735,7 +58325,7 @@
desc = "Used for monitoring medbay to ensure patient safety.";
dir = 8;
name = "Medbay Monitor";
- network = list("Medbay");
+ network = list("medbay");
pixel_x = 29
},
/obj/item/device/radio/intercom{
@@ -59004,7 +58594,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the RD's goons from the safety of his office.";
name = "Research Monitor";
- network = list("RD");
+ network = list("rd");
pixel_y = 2
},
/obj/structure/table/reinforced,
@@ -59127,7 +58717,7 @@
active_power_usage = 0;
c_tag = "Turbine Vent";
dir = 4;
- network = list("Turbine");
+ network = list("turbine");
use_power = 0
},
/turf/open/space,
@@ -59971,7 +59561,7 @@
/obj/machinery/camera{
c_tag = "Toxins Storage";
dir = 8;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
@@ -60177,7 +59767,7 @@
/obj/machinery/camera{
c_tag = "Genetics Lab";
dir = 4;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/whiteblue,
/area/medical/genetics)
@@ -60717,7 +60307,7 @@
/obj/machinery/camera{
c_tag = "Genetics Desk";
dir = 4;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/obj/structure/table/glass,
/turf/open/floor/plasteel/blue/side{
@@ -60802,7 +60392,7 @@
/obj/machinery/camera{
c_tag = "Research Division Hallway - Mech Bay";
dir = 4;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/airalarm{
dir = 4;
@@ -60879,7 +60469,7 @@
/obj/machinery/camera{
c_tag = "Research Director's Office";
dir = 1;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/light,
/turf/open/floor/plasteel/cafeteria{
@@ -61242,7 +60832,7 @@
/obj/machinery/camera{
c_tag = "Mech Bay";
dir = 8;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/circuit/green,
/area/science/robotics/mechbay)
@@ -61253,7 +60843,7 @@
/obj/machinery/camera{
c_tag = "Research Testing Range";
dir = 8;
- network = list("SS13","RD");
+ network = list("ss13","rd");
pixel_y = -22
},
/obj/machinery/airalarm{
@@ -61670,7 +61260,7 @@
/obj/machinery/camera{
c_tag = "Toxins - Lab";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/atmospherics/components/unary/portables_connector/visible,
/obj/machinery/portable_atmospherics/canister,
@@ -61856,7 +61446,7 @@
/obj/machinery/camera{
c_tag = "Genetics Cloning Lab";
dir = 8;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/whiteblue/side{
dir = 6
@@ -62443,8 +62033,7 @@
},
/obj/machinery/camera{
c_tag = "Aft Primary Hallway - Middle";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
@@ -62799,7 +62388,7 @@
dir = 8;
layer = 4;
name = "Test Chamber Telescreen";
- network = list("Toxins");
+ network = list("toxins");
pixel_x = 30
},
/obj/effect/turf_decal/stripes/line{
@@ -63237,7 +62826,7 @@
dir = 8;
layer = 4;
name = "Test Chamber Telescreen";
- network = list("Toxins");
+ network = list("toxins");
pixel_x = 30
},
/obj/effect/turf_decal/stripes/line{
@@ -63328,7 +62917,7 @@
/obj/machinery/camera{
c_tag = "Medbay Break Room";
dir = 1;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/cafeteria{
dir = 5
@@ -63715,7 +63304,7 @@
/obj/machinery/camera{
c_tag = "Medbay Hallway Aft";
dir = 4;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/white/side{
dir = 5
@@ -63899,7 +63488,7 @@
/obj/machinery/camera{
c_tag = "Robotics - Fore";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
@@ -64060,7 +63649,7 @@
light = null;
luminosity = 3;
name = "Hardened Bomb-Test Camera";
- network = list("Toxins");
+ network = list("toxins");
use_power = 0
},
/obj/item/target/alien/anchored,
@@ -64978,7 +64567,7 @@
/obj/machinery/camera{
c_tag = "Research Division Hallway - Robotics";
dir = 4;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/white,
/area/science/research)
@@ -65047,7 +64636,7 @@
/obj/machinery/camera{
c_tag = "Toxins - Mixing Area";
dir = 8;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -65107,7 +64696,7 @@
/obj/machinery/camera{
c_tag = "Virology - Cells";
dir = 4;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/whitegreen/side{
dir = 9
@@ -66174,7 +65763,7 @@
/obj/machinery/camera{
c_tag = "Virology - Lab";
dir = 8;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/obj/structure/sink{
dir = 4;
@@ -66201,7 +65790,7 @@
/obj/machinery/camera{
c_tag = "Virology - Airlock";
dir = 1;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/obj/machinery/light,
/obj/structure/closet/l3closet,
@@ -66233,7 +65822,7 @@
/obj/machinery/camera{
c_tag = "Virology - Entrance";
dir = 8;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/obj/machinery/light/small{
dir = 4
@@ -66531,7 +66120,7 @@
/obj/machinery/camera{
c_tag = "Research Division - Server Room";
dir = 2;
- network = list("SS13","RD");
+ network = list("ss13","rd");
pixel_x = 22
},
/obj/machinery/power/apc{
@@ -66826,8 +66415,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/camera{
c_tag = "Aft Primary Hallway - Aft";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/escape{
dir = 2
@@ -67585,7 +67173,7 @@
/obj/machinery/camera{
c_tag = "Virology - Break Room";
dir = 2;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/turf/open/floor/plasteel/whitegreen/side{
dir = 1
@@ -68280,7 +67868,7 @@
desc = "Used for watching the turbine vent.";
dir = 8;
name = "turbine vent monitor";
- network = list("Turbine");
+ network = list("turbine");
pixel_x = 29
},
/obj/machinery/button/door{
@@ -68310,15 +67898,6 @@
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/aft)
-"cLE" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- dir = 1;
- name = "euthanization chamber freezer";
- on = 1;
- target_temperature = 80
- },
-/turf/open/floor/plating,
-/area/science/xenobiology)
"cLF" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -68565,8 +68144,7 @@
},
/obj/machinery/camera{
c_tag = "Departure Lounge - Starboard Fore";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/structure/extinguisher_cabinet{
pixel_x = 27
@@ -68640,8 +68218,7 @@
},
/obj/machinery/camera{
c_tag = "Aft Starboard Solar Maintenance";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/aft)
@@ -68811,8 +68388,7 @@
},
/obj/machinery/camera{
c_tag = "Chapel - Fore";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/structure/table/wood,
/turf/open/floor/plasteel/vault,
@@ -68983,7 +68559,6 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching output from station security cameras.";
name = "Security Camera Monitor";
- network = list("SS13");
pixel_y = 30
},
/turf/open/floor/plasteel/red/side{
@@ -69192,8 +68767,7 @@
"cNu" = (
/obj/machinery/camera{
c_tag = "Chapel Office - Backroom";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/item/device/radio/intercom{
dir = 4;
@@ -69524,8 +69098,7 @@
},
/obj/machinery/camera{
c_tag = "Chapel Office";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/grimy,
/area/chapel/office)
@@ -69697,8 +69270,7 @@
},
/obj/machinery/camera{
c_tag = "Departure Lounge - Security Post";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/item/book/manual/wiki/security_space_law{
pixel_x = -4;
@@ -70243,8 +69815,7 @@
"cPO" = (
/obj/machinery/camera{
c_tag = "Departure Lounge - Port Aft";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/machinery/light{
dir = 8
@@ -70309,8 +69880,7 @@
"cPV" = (
/obj/machinery/camera{
c_tag = "Departure Lounge - Starboard Aft";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/light{
dir = 4
@@ -70514,7 +70084,7 @@
/obj/machinery/camera{
c_tag = "Research Division Hallway - Xenobiology Lab Access";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/whitepurple/side{
dir = 1
@@ -70560,7 +70130,7 @@
/obj/machinery/camera{
c_tag = "Toxins - Launch Area";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/suit_storage_unit/rd,
/obj/effect/turf_decal/bot{
@@ -70577,7 +70147,7 @@
/turf/open/floor/plasteel/vault,
/area/chapel/main)
"cQB" = (
-/obj/machinery/doppler_array{
+/obj/machinery/doppler_array/research/science{
dir = 4
},
/obj/item/device/radio/intercom{
@@ -70658,8 +70228,7 @@
},
/obj/machinery/camera{
c_tag = "Chapel - Starboard";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/chapel{
dir = 4
@@ -70884,8 +70453,7 @@
"cRn" = (
/obj/machinery/camera{
c_tag = "Chapel - Port";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/structure/chair/comfy/black{
dir = 4
@@ -71334,7 +70902,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Pen #1";
dir = 4;
- network = list("SS13","RD","Xeno")
+ network = list("ss13","rd","xeno")
},
/turf/open/floor/engine,
/area/science/xenobiology)
@@ -71408,7 +70976,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Pen #2";
dir = 8;
- network = list("SS13","RD","Xeno")
+ network = list("ss13","rd","xeno")
},
/turf/open/floor/engine,
/area/science/xenobiology)
@@ -71909,7 +71477,7 @@
/obj/machinery/computer/security/telescreen{
dir = 1;
name = "Test Chamber Monitor";
- network = list("Xeno");
+ network = list("xeno");
pixel_y = 2
},
/obj/structure/table/reinforced,
@@ -72007,7 +71575,7 @@
"cTT" = (
/obj/structure/disposalpipe/segment,
/turf/closed/wall/r_wall,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"cUH" = (
/obj/structure/table/optable,
/turf/open/floor/plasteel/white,
@@ -72253,6 +71821,12 @@
},
/turf/open/floor/plating,
/area/shuttle/auxillary_base)
+"cWu" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"cWA" = (
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
@@ -72289,18 +71863,6 @@
/obj/structure/easel,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"cXz" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Aft";
- dir = 1;
- network = list("SS13","Engine")
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cXA" = (
/turf/closed/wall/r_wall,
/area/security/checkpoint/engineering)
@@ -72313,7 +71875,12 @@
},
/area/construction/mining/aux_base)
"cXI" = (
-/obj/effect/spawner/lootdrop/maintenance,
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = 32
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
/turf/open/floor/plating,
/area/maintenance/starboard)
"cXR" = (
@@ -72325,11 +71892,12 @@
},
/area/construction/mining/aux_base)
"cXZ" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/structure/window/reinforced{
- dir = 8
+/obj/machinery/door/airlock/external{
+ req_access_txt = "13"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
},
-/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/starboard)
"cYc" = (
@@ -72342,15 +71910,16 @@
/obj/machinery/camera{
c_tag = "Robotics - Aft";
dir = 1;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/white/side{
dir = 1
},
/area/science/robotics/lab)
"cYj" = (
-/obj/structure/closet/firecloset,
-/obj/effect/spawner/lootdrop/maintenance,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/starboard)
"cYE" = (
@@ -72386,7 +71955,7 @@
desc = "Used for the Auxillary Mining Base.";
dir = 1;
name = "Auxillary Base Monitor";
- network = list("AuxBase");
+ network = list("auxbase");
pixel_y = -28
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
@@ -72478,9 +72047,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
-"cZv" = (
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
"cZR" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable/yellow{
@@ -72582,7 +72148,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Test Chamber";
dir = 1;
- network = list("SS13","RD","Xeno")
+ network = list("ss13","rd","xeno")
},
/turf/open/floor/engine,
/area/science/xenobiology)
@@ -72626,9 +72192,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
- },
/obj/machinery/light/small{
dir = 1
},
@@ -72638,33 +72201,28 @@
/obj/structure/disposalpipe/segment{
dir = 10
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"daR" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1;
- external_pressure_bound = 140;
- name = "server vent";
- pressure_checks = 0
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"daS" = (
/obj/structure/disposalpipe/segment,
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"daW" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/turf/open/floor/plating{
+ icon_state = "platingdmg2"
},
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+/area/maintenance/department/science/xenobiology)
+"daW" = (
+/obj/machinery/button/door{
+ id = "engpa";
+ name = "Engineering Chamber Shutters Control";
+ pixel_y = 26;
+ req_access_txt = "11"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/light{
dir = 8
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
"daX" = (
/obj/structure/cable/yellow{
@@ -72674,27 +72232,20 @@
icon_state = "platingdmg2"
},
/area/maintenance/port/fore)
-"daY" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
"daZ" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 1
+/obj/structure/particle_accelerator/particle_emitter/right{
+ icon_state = "emitter_right";
+ dir = 4
},
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable,
-/obj/structure/window/plasma/reinforced,
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/turf/open/floor/plating,
+/area/engine/engineering)
"dbb" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
+/obj/structure/particle_accelerator/particle_emitter/center{
+ icon_state = "emitter_center";
+ dir = 4
},
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/turf/open/floor/plating,
+/area/engine/engineering)
"dbd" = (
/obj/structure/sink/kitchen{
pixel_y = 28
@@ -72707,30 +72258,6 @@
},
/turf/open/floor/carpet,
/area/crew_quarters/heads/hop)
-"dbg" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dbh" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"dbj" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -72760,7 +72287,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Pen #3";
dir = 4;
- network = list("SS13","RD","Xeno")
+ network = list("ss13","rd","xeno")
},
/turf/open/floor/engine,
/area/science/xenobiology)
@@ -72771,7 +72298,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Pen #4";
dir = 8;
- network = list("SS13","RD","Xeno")
+ network = list("ss13","rd","xeno")
},
/turf/open/floor/engine,
/area/science/xenobiology)
@@ -72784,7 +72311,7 @@
/obj/machinery/camera{
c_tag = "Morgue";
dir = 2;
- network = list("SS13","Medbay")
+ network = list("ss13","medbay")
},
/obj/structure/bodycontainer/morgue{
dir = 8
@@ -72798,7 +72325,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Pen #5";
dir = 4;
- network = list("SS13","RD","Xeno")
+ network = list("ss13","rd","xeno")
},
/turf/open/floor/engine,
/area/science/xenobiology)
@@ -72809,24 +72336,17 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Pen #6";
dir = 8;
- network = list("SS13","RD","Xeno")
+ network = list("ss13","rd","xeno")
},
/turf/open/floor/engine,
/area/science/xenobiology)
"dbv" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/light/small,
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"dbw" = (
-/obj/machinery/camera{
- c_tag = "Xenobiology Lab - Kill Chamber";
- dir = 1;
- network = list("SS13","RD","Xeno");
- start_active = 1
+/turf/open/floor/plating{
+ icon_state = "platingdmg2"
},
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"dbE" = (
/obj/machinery/plantgenes,
/obj/effect/turf_decal/stripes/line{
@@ -73059,7 +72579,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Fore";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/whitepurple/side{
dir = 1
@@ -73233,15 +72753,18 @@
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"dcm" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/computer/camera_advanced/xenobio,
/obj/effect/turf_decal/stripes/line{
- dir = 9
+ dir = 1
+ },
+/obj/structure/table/glass,
+/obj/item/extinguisher,
+/obj/item/extinguisher{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/extinguisher{
+ pixel_x = 5;
+ pixel_y = 5
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
@@ -73265,7 +72788,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
},
-/obj/machinery/computer/camera_advanced/xenobio,
/obj/structure/cable/yellow{
icon_state = "4-8"
},
@@ -73299,7 +72821,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Airlock";
dir = 4;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -73335,9 +72857,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
-/obj/structure/chair/comfy/black{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 10
},
@@ -73352,9 +72871,6 @@
/area/science/xenobiology)
"dcx" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/chair/comfy/black{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 6
},
@@ -73432,18 +72948,13 @@
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"dcJ" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/item/extinguisher{
- pixel_x = 4;
- pixel_y = 3
- },
-/obj/item/extinguisher,
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
+/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"dcK" = (
@@ -73492,7 +73003,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Central";
dir = 8;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line{
@@ -73687,7 +73198,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Aft-Port";
dir = 4;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -73702,7 +73213,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Lab - Aft-Starboard";
dir = 8;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -73869,11 +73380,8 @@
},
/obj/structure/chair,
/obj/item/cigbutt,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"ddy" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
@@ -73881,9 +73389,8 @@
/area/maintenance/department/science/xenobiology)
"ddz" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/plating,
-/area/science/xenobiology)
+/turf/closed/wall/r_wall,
+/area/maintenance/department/science/xenobiology)
"ddA" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/door/firedoor,
@@ -73893,23 +73400,15 @@
opacity = 0;
req_access_txt = "55"
},
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"ddB" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
- dir = 1;
- external_pressure_bound = 120;
- name = "server vent"
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
+/turf/closed/wall/r_wall,
+/area/maintenance/department/science/xenobiology)
"ddC" = (
/obj/structure/disposalpipe/trunk{
dir = 1
},
/obj/structure/disposaloutlet,
/turf/open/floor/plating/airless,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"ddE" = (
/obj/effect/landmark/start/cook,
/obj/machinery/holopad,
@@ -73927,16 +73426,12 @@
/turf/open/floor/plating,
/area/shuttle/auxillary_base)
"ddO" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"ddP" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -73950,41 +73445,10 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"ddS" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 6
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Fore";
- dir = 4;
- network = list("SS13","Engine")
- },
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -26
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"ddT" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"ddU" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/obj/machinery/meter,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"ddV" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"ddW" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
/obj/structure/cable/yellow{
icon_state = "2-4"
},
@@ -73997,28 +73461,14 @@
/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"ddY" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/engine/engineering)
"ddZ" = (
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"dea" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/on{
- volume_rate = 200
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
},
/turf/open/floor/plating/airless,
-/area/engine/engineering)
+/area/space)
"deb" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -74026,644 +73476,153 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"ded" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dee" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"def" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"deh" = (
-/obj/structure/cable/white{
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dei" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dej" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dek" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- name = "Mix to Gas"
- },
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"del" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/space,
+/area/space)
"dem" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Gas to Mix"
- },
-/obj/structure/cable/white{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"den" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dep" = (
-/obj/machinery/firealarm{
- pixel_y = 32
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"deq" = (
-/obj/item/device/radio/intercom{
- freerange = 0;
- frequency = 1459;
- name = "Station Intercom (General)";
- pixel_y = 21
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"der" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"des" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deu" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dev" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dew" = (
-/obj/machinery/door/firedoor,
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/machinery/door/airlock/engineering/glass{
- name = "Laser Room";
- req_access_txt = "10"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dex" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dey" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/structure/cable/white{
- icon_state = "2-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"deA" = (
-/obj/structure/cable/white{
- icon_state = "2-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"deB" = (
+/obj/structure/lattice/catwalk,
/obj/structure/cable{
icon_state = "1-2"
},
+/turf/open/space,
+/area/space)
+"den" = (
/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deC" = (
-/obj/effect/turf_decal/bot{
dir = 1
},
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"der" = (
+/obj/structure/closet/secure_closet/engineering_welding,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
-"deD" = (
-/obj/machinery/status_display,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"deI" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deJ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deK" = (
-/obj/structure/cable/white,
-/obj/machinery/power/emitter/anchored{
- dir = 2;
+"dev" = (
+/obj/machinery/field/generator{
+ anchored = 1;
state = 2
},
-/turf/open/floor/plating,
-/area/engine/engineering)
-"deL" = (
-/obj/structure/cable/white,
-/obj/machinery/light{
- dir = 4
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"dew" = (
+/turf/open/space,
+/area/space/nearstation)
+"deB" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engpa";
+ name = "Engineering Chamber Shutters"
},
-/turf/open/floor/plating,
-/area/engine/engineering)
-"deM" = (
-/obj/structure/sign/warning/securearea,
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"deN" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deO" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
-"deS" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable,
-/obj/structure/window/plasma/reinforced,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"deU" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+"deD" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
},
+/turf/open/floor/plating/airless,
+/area/space)
+"deM" = (
+/obj/structure/table,
+/obj/effect/turf_decal/delivery,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/glasses/meson/engine,
/obj/machinery/light{
dir = 4
},
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical,
-/turf/open/floor/engine,
+/obj/item/pipe_dispenser,
+/obj/item/pipe_dispenser,
+/obj/item/pipe_dispenser,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
/area/engine/engineering)
"deV" = (
-/obj/structure/sign/warning/fire,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"deW" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Starboard";
- dir = 4;
- network = list("SS13","Engine")
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deX" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/floor/plating/airless,
+/area/space)
"deY" = (
-/obj/structure/reflector/single/anchored{
- dir = 9
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
},
-/turf/open/floor/plating,
-/area/engine/engineering)
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"dfa" = (
-/obj/machinery/power/supermatter_shard/crystal/engine,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"dfb" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/obj/machinery/meter,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"dfc" = (
-/obj/structure/sign/warning/electricshock,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"dfd" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfe" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dff" = (
-/obj/structure/reflector/double/anchored{
- dir = 5
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"dfg" = (
-/obj/structure/reflector/single/anchored{
- dir = 10
+/obj/structure/cable{
+ icon_state = "1-2"
},
/turf/open/floor/plating,
/area/engine/engineering)
"dfh" = (
-/obj/structure/sign/warning/nosmoking,
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"dfi" = (
-/obj/effect/turf_decal/stripes/line{
+/obj/structure/table,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson,
+/obj/item/storage/belt/utility,
+/obj/item/storage/belt/utility,
+/obj/item/storage/toolbox/electrical{
+ pixel_x = 1;
+ pixel_y = 10
+ },
+/turf/open/floor/plasteel/yellow/side{
dir = 4
},
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
/area/engine/engineering)
-"dfj" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"dfk" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"dfm" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
"dfp" = (
-/obj/effect/turf_decal/bot{
+/obj/structure/closet/firecloset,
+/turf/open/floor/plasteel/yellow/side{
dir = 1
},
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/machinery/portable_atmospherics/canister,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"dfq" = (
-/obj/machinery/camera{
- c_tag = "Supermatter Chamber";
- dir = 4;
- network = list("Engine")
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"dft" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfu" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- filter_type = "n2"
- },
-/turf/open/floor/engine,
/area/engine/engineering)
"dfz" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfA" = (
-/obj/structure/cable/white{
- icon_state = "0-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dfB" = (
-/obj/structure/cable/white{
- icon_state = "0-2"
- },
-/obj/machinery/power/emitter/anchored{
- dir = 1;
- state = 2
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dfC" = (
-/obj/structure/cable/white{
- icon_state = "0-2"
- },
-/obj/machinery/power/emitter/anchored{
- dir = 1;
- state = 2
- },
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/airless,
+/area/space)
"dfD" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/item/book/manual/engineering_singularity_safety{
+ pixel_x = 3;
+ pixel_y = 3
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
+/obj/item/book/manual/wiki/engineering_guide,
+/obj/item/book/manual/engineering_particle_accelerator{
+ pixel_x = -3;
+ pixel_y = -3
},
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfE" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfF" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/meter,
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfG" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/engine,
+/obj/item/clothing/gloves/color/yellow,
+/obj/structure/table/glass,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"dfI" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Cooling Loop Bypass"
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/obj/structure/cable/white{
- icon_state = "2-4"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfJ" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfM" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/structure/cable/white{
- icon_state = "1-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dfO" = (
-/obj/structure/cable/white{
- icon_state = "1-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
+/area/space)
"dfP" = (
/obj/structure/cable/white{
- icon_state = "4-8"
+ icon_state = "2-8"
},
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Atmos to Loop"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfQ" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfR" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Gas to Cold Loop";
- on = 1
- },
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfS" = (
-/obj/structure/cable/white{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfT" = (
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfU" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Cold Loop to Gas";
- on = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfV" = (
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"dfW" = (
-/obj/item/wrench,
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"dfX" = (
/obj/structure/disposalpipe/segment,
@@ -74681,137 +73640,82 @@
},
/area/engine/engineering)
"dfY" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/cable/white{
+ icon_state = "1-4"
},
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"dfZ" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/turf/closed/wall/r_wall,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"dga" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/cable/white{
+ icon_state = "2-8"
},
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"dgb" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/closed/wall/r_wall,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"dgc" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
+/obj/item/clothing/gloves/color/rainbow,
+/obj/item/clothing/head/soft/rainbow,
+/obj/item/clothing/shoes/sneakers/rainbow,
+/obj/item/clothing/under/color/rainbow,
+/turf/open/floor/plating{
+ icon_state = "platingdmg3"
},
-/turf/open/floor/plating,
/area/maintenance/starboard)
"dgd" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dge" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
-"dgf" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
+/obj/structure/cable/white{
+ icon_state = "0-2"
},
-/turf/open/space,
-/area/space/nearstation)
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/power/emitter{
+ anchored = 1;
+ dir = 1;
+ icon_state = "emitter";
+ state = 2
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dgg" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
+/obj/structure/cable/white{
+ icon_state = "4-8"
},
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
-"dgh" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"dgi" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/plating,
-/area/maintenance/starboard)
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dgj" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
+/obj/structure/grille,
+/obj/structure/cable/white{
+ icon_state = "1-4"
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dgk" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/corner{
dir = 4
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dgm" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
+/obj/structure/cable/white{
+ icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"dgo" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
},
-/turf/open/floor/plating,
-/area/maintenance/starboard)
-"dgp" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard)
-"dgr" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 10
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgt" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgu" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/turf/open/space,
-/area/space/nearstation)
-"dgv" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 9
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
-"dgw" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dgz" = (
/obj/structure/closet/toolcloset,
/obj/effect/turf_decal/delivery,
@@ -74819,134 +73723,13 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"dgA" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dgB" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
+/obj/machinery/light{
+ dir = 4
},
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"dgI" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgJ" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgK" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgM" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 10
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgN" = (
-/obj/structure/lattice,
-/obj/structure/grille,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dgO" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dgS" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/transit_tube/horizontal,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dha" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dhc" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dhe" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"dhg" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"dhh" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Mix to Engine";
- on = 0
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"dhi" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/door/window/northleft{
- dir = 8;
- icon_state = "left";
- name = "Inner Pipe Access";
- req_access_txt = "24"
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/atmos)
-"dhj" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/atmos)
-"dhk" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/atmos)
-"dhl" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
- },
-/turf/open/space,
+/turf/closed/wall/mineral/plastitanium,
/area/space/nearstation)
"dhn" = (
/obj/structure/table,
@@ -75376,8 +74159,7 @@
},
/obj/machinery/camera{
c_tag = "Theatre - Stage";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/light/small{
dir = 4
@@ -75544,8 +74326,7 @@
"dir" = (
/obj/machinery/camera{
c_tag = "Theatre - Backstage";
- dir = 1;
- network = list("SS13")
+ dir = 1
},
/obj/structure/sign/poster/contraband/random{
pixel_y = -32
@@ -75894,8 +74675,7 @@
},
/obj/machinery/camera{
c_tag = "Departure Lounge - Port Fore";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-24"
@@ -75945,8 +74725,7 @@
},
/obj/machinery/camera{
c_tag = "Chapel - Funeral Parlour";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/turf/open/floor/plasteel/dark,
@@ -75969,26 +74748,18 @@
/turf/open/space,
/area/science/xenobiology)
"djt" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
+/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
-/area/engine/supermatter)
+/area/engine/engineering)
"djx" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/camera/emp_proof{
+ c_tag = "Containment - Aft Port";
+ dir = 4;
+ network = list("singularity")
},
-/obj/item/crowbar,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"djz" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/machinery/door/airlock/external{
@@ -76026,7 +74797,7 @@
id = "arrivals_stationary";
name = "arrivals";
width = 7;
- roundstart_template = /datum/map_template/shuttle/arrival/box;
+ roundstart_template = /datum/map_template/shuttle/arrival/box
},
/turf/open/space/basic,
/area/space)
@@ -76048,12 +74819,11 @@
/turf/open/floor/plating,
/area/chapel/main)
"dlI" = (
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"dlN" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/supermatter)
+/obj/structure/closet/secure_closet/engineering_electrical,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
+ },
+/area/engine/engineering)
"dlV" = (
/turf/closed/wall/r_wall,
/area/maintenance/department/science/xenobiology)
@@ -76061,9 +74831,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
/obj/machinery/door/airlock/research{
glass = 1;
name = "Slime Euthanization Chamber";
@@ -76074,7 +74841,7 @@
dir = 4
},
/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"dmr" = (
/obj/machinery/door/airlock/research{
glass = 1;
@@ -76086,7 +74853,7 @@
dir = 8
},
/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"dmD" = (
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
@@ -76264,6 +75031,14 @@
icon_state = "platingdmg2"
},
/area/maintenance/port/fore)
+"drT" = (
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dsg" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -76304,6 +75079,13 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"dtL" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/space,
+/area/space)
"dtP" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -76637,46 +75419,24 @@
/turf/closed/wall,
/area/engine/gravity_generator)
"dBw" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dBx" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"dBy" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"dBz" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dBA" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dBB" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
+"dBy" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"dBB" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"dBC" = (
/obj/machinery/meter,
/obj/structure/grille,
@@ -77356,6 +76116,23 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard)
+"dPf" = (
+/obj/structure/cable/white{
+ icon_state = "1-4"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"dPp" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/machinery/light,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"dYu" = (
/obj/machinery/door/airlock/external{
name = "Auxiliary Airlock"
@@ -77365,6 +76142,19 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
+"dZD" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/space)
+"eln" = (
+/turf/open/space/basic,
+/area/engine/engineering)
+"enN" = (
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"eoK" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -77397,6 +76187,17 @@
},
/turf/open/floor/plasteel,
/area/science/circuit)
+"esV" = (
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"evy" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -77407,6 +76208,25 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"eEu" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ name = "External Containment Access";
+ req_access_txt = "10; 13"
+ },
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"eFN" = (
/obj/structure/bodycontainer/crematorium{
id = "crematoriumChapel";
@@ -77437,12 +76257,48 @@
/obj/structure/closet/firecloset,
/turf/open/floor/plating,
/area/engine/engineering)
+"fjy" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plating/airless,
+/area/space)
+"foU" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/computer/security/telescreen{
+ desc = "Used for watching the Engine.";
+ dir = 8;
+ layer = 4;
+ name = "Engine Monitor";
+ network = list("singularity");
+ pixel_x = 30
+ },
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
+/area/engine/engineering)
"fDD" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"fGs" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"fWO" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"gfh" = (
/obj/machinery/libraryscanner,
/turf/open/floor/plasteel/white,
@@ -77465,6 +76321,14 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"goZ" = (
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"gEk" = (
/obj/structure/cable/yellow{
icon_state = "2-8"
@@ -77490,6 +76354,14 @@
/obj/effect/spawner/structure/window/plasma/reinforced,
/turf/open/floor/plating,
/area/engine/atmos)
+"gKb" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Containment - Fore Starboard";
+ dir = 8;
+ network = list("singularity")
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"gLC" = (
/obj/structure/reagent_dispensers/water_cooler,
/turf/open/floor/plasteel,
@@ -77522,6 +76394,9 @@
},
/turf/open/floor/plating,
/area/security/prison)
+"hWU" = (
+/turf/open/floor/plating/airless,
+/area/space)
"ioI" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -77549,6 +76424,37 @@
},
/turf/open/floor/plasteel/whitepurple,
/area/science/lab)
+"iOa" = (
+/turf/closed/wall/mineral/plastitanium,
+/area/maintenance/starboard)
+"iTS" = (
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/tank/internals/emergency_oxygen/engi,
+/obj/item/tank/internals/emergency_oxygen/engi,
+/obj/effect/turf_decal/delivery,
+/obj/structure/table,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
+/area/engine/engineering)
+"iYY" = (
+/obj/machinery/light/small,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"jjF" = (
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"jwW" = (
/turf/closed/wall/mineral/plastitanium,
/area/crew_quarters/fitness/recreation)
@@ -77560,7 +76466,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the RD's goons from the safety of your own office.";
name = "Research Monitor";
- network = list("RD");
+ network = list("rd");
pixel_y = 32
},
/turf/open/floor/plasteel/white,
@@ -77579,6 +76485,25 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
+"jzw" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/maintenance/department/science/xenobiology)
+"jFx" = (
+/obj/machinery/door/airlock/external{
+ req_access_txt = "13"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard)
+"jIV" = (
+/obj/structure/closet/secure_closet/engineering_personal,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
+ },
+/area/engine/engineering)
"jKK" = (
/obj/machinery/door/airlock/external{
req_access_txt = "13"
@@ -77588,6 +76513,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"jYQ" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"kfu" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/white,
@@ -77693,6 +76624,14 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"lHL" = (
+/turf/open/space/basic,
+/area/space/nearstation)
+"lLj" = (
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
+ },
+/area/engine/engineering)
"lMz" = (
/obj/structure/falsewall,
/turf/open/floor/plating,
@@ -77734,6 +76673,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"moI" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"mvj" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -77743,6 +76688,12 @@
},
/turf/closed/wall,
/area/hallway/secondary/service)
+"mwK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"mzh" = (
/obj/machinery/firealarm{
dir = 1;
@@ -77771,6 +76722,30 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/science/circuit)
+"nte" = (
+/obj/machinery/the_singularitygen/tesla,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"nwU" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ name = "External Containment Access";
+ req_access_txt = "10; 13"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"nyo" = (
/obj/structure/cable/yellow{
icon_state = "1-4"
@@ -77805,10 +76780,33 @@
},
/turf/open/floor/plasteel,
/area/construction/storage/wing)
+"nKh" = (
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
+ },
+/area/engine/engineering)
"obb" = (
/obj/structure/target_stake,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"obN" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/space,
+/area/space)
+"ocj" = (
+/obj/structure/cable/white{
+ icon_state = "2-4"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"ocT" = (
/obj/machinery/light{
dir = 1
@@ -77823,7 +76821,7 @@
/obj/machinery/computer/security/telescreen{
desc = "Used for watching the RD's goons from the safety of your own office.";
name = "Research Monitor";
- network = list("RD");
+ network = list("rd");
pixel_y = 32
},
/turf/open/floor/plasteel/white,
@@ -77923,6 +76921,13 @@
dir = 2
},
/area/crew_quarters/locker)
+"pWF" = (
+/obj/effect/decal/cleanable/oil,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"qnJ" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -77953,6 +76958,12 @@
"qBq" = (
/turf/closed/wall/mineral/plastitanium,
/area/hallway/secondary/entry)
+"qJG" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"qJZ" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -77963,7 +76974,7 @@
/obj/machinery/camera{
c_tag = "Research Division Circuitry Lab";
dir = 1;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
@@ -77976,6 +76987,18 @@
dir = 1
},
/area/science/lab)
+"rEi" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"rFx" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/engine/engineering)
"rQK" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -77995,6 +77018,29 @@
/obj/machinery/vending/snack/random,
/turf/open/floor/plasteel,
/area/science/mixing)
+"rTo" = (
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"rVX" = (
+/obj/structure/particle_accelerator/particle_emitter/left{
+ icon_state = "emitter_left";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"rWa" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plasteel/yellow/side,
+/area/engine/engineering)
"sdi" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -78031,6 +77077,21 @@
"sJW" = (
/turf/closed/wall/mineral/plastitanium,
/area/engine/break_room)
+"sOW" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/space)
+"sSU" = (
+/turf/closed/wall/r_wall,
+/area/space)
+"tdB" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating{
+ icon_state = "platingdmg2"
+ },
+/area/maintenance/starboard/fore)
"tjH" = (
/obj/structure/table/reinforced,
/obj/machinery/computer/libraryconsole/bookmanagement,
@@ -78052,22 +77113,19 @@
/turf/open/floor/plasteel/white,
/area/science/circuit)
"tDM" = (
-/obj/machinery/door/airlock/engineering/glass{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/obj/item/wrench,
+/turf/open/floor/plating,
+/area/engine/engineering)
"tFJ" = (
/obj/structure/bodycontainer/morgue{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/medical/morgue)
+"tMT" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/engine/engineering)
"tVY" = (
/obj/structure/closet/crate,
/obj/item/target/alien,
@@ -78118,6 +77176,11 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard)
+"uQo" = (
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
+/area/engine/engineering)
"uRM" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -78142,15 +77205,34 @@
"vhG" = (
/obj/structure/table/glass,
/obj/machinery/camera/autoname{
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel,
/area/science/misc_lab)
+"vmz" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space,
+/area/space)
+"vAk" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"vLD" = (
/obj/structure/lattice,
/turf/open/space/basic,
/area/space)
+"vSl" = (
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"wiZ" = (
/obj/machinery/door/airlock/external{
name = "Security External Airlock";
@@ -78201,11 +77283,39 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/science/misc_lab)
+"xcM" = (
+/obj/structure/closet/firecloset,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
+/area/engine/engineering)
+"xfK" = (
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/power/tesla_coil,
+/turf/open/floor/plating/airless,
+/area/space)
"xkG" = (
/obj/item/device/integrated_electronics/wirer,
/obj/structure/table/reinforced,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"xqB" = (
+/obj/structure/cable/white,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/power/emitter{
+ anchored = 1;
+ state = 2
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"xse" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
@@ -78237,6 +77347,19 @@
/obj/structure/chair/comfy,
/turf/open/floor/plasteel,
/area/science/misc_lab)
+"xLP" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/space,
+/area/space)
+"xNI" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"xVl" = (
/turf/closed/wall,
/area/hallway/secondary/service)
@@ -78247,6 +77370,24 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"xWZ" = (
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"yeY" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Containment - Aft Starboard";
+ dir = 8;
+ network = list("singularity")
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"ygk" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -111118,7 +110259,7 @@ cRi
cRi
cRi
daP
-cLE
+cTA
dlV
aaa
aaa
@@ -111375,10 +110516,10 @@ daF
daJ
cRi
bvT
-cRi
-cRi
-cRi
-cRi
+dlV
+dlV
+dlV
+dlV
aaa
aai
aaa
@@ -111632,10 +110773,10 @@ cSn
cSn
cRi
dmq
-cRi
-cZv
-cZv
-cRi
+dlV
+ddj
+ddj
+dlV
aaf
aag
aaa
@@ -111890,9 +111031,9 @@ cSn
cRi
ddx
ddz
-daR
-cZv
-cRe
+ddj
+ddj
+jzw
aaa
aaa
aaa
@@ -112404,9 +111545,9 @@ daK
cRi
bIv
ddz
-ddB
-cZv
-cRe
+ddj
+ddj
+jzw
aaa
aaf
aaa
@@ -112660,10 +111801,10 @@ cSn
daN
cRi
dmr
-cRi
-cZv
-dbw
-cRi
+dlV
+ddj
+ddj
+dlV
aaa
aag
aaa
@@ -112917,10 +112058,10 @@ daI
daM
cRi
cTA
-cRi
-cRi
-cRi
-cRi
+dlV
+dlV
+dlV
+dlV
aaf
aag
aaa
@@ -118454,12 +117595,12 @@ aFu
aBI
aBI
aJn
-aCO
-aFq
+lLj
+lLj
aNq
aBI
aPZ
-aRo
+aSB
aSu
aTG
aUZ
@@ -118700,7 +117841,7 @@ arJ
arI
dnh
dqu
-doh
+tdB
axO
axY
aAo
@@ -118710,12 +117851,12 @@ aEn
aFv
aGV
aHX
-aEi
-aKA
-aMc
-aEi
+aBO
+aBO
+aBO
+aBO
aOO
-aEi
+aBO
aRp
aSv
aTH
@@ -119217,7 +118358,7 @@ avt
awJ
axS
axY
-aCO
+jIV
ddW
aCT
aEp
@@ -119477,18 +118618,18 @@ axY
aAr
ddX
aCU
-aEq
-aTO
+aCW
+aBO
aGX
-aHZ
-aJp
-aTO
+aBO
+aBO
+aBO
aSB
-aTO
-aOR
-aQa
+aBO
+aBO
+aBO
aGX
-aTO
+aBK
aTK
aVd
aBI
@@ -119731,23 +118872,23 @@ avv
axY
axU
ayS
-dCk
-ddY
+enN
+ddX
deb
-deh
-aFz
-aCZ
+aBO
+aBO
+iTS
deM
-axY
-aCZ
+uQo
+foU
aMg
-aCZ
+xcM
dfh
-deM
-aCZ
-aFz
-deh
-aVe
+aBO
+aBO
+aBK
+dPp
+rFx
axY
aYu
aYu
@@ -119991,21 +119132,21 @@ ddP
aAt
aBL
deb
-dei
+aBO
aFA
+axY
+axY
deB
-deB
-deB
-deB
+axY
aMh
-deB
-deB
-deB
-deB
+axY
+axY
+nKh
+aBO
aSz
-aTM
+aTK
aVe
-apc
+aJu
aYu
aZL
bbB
@@ -120248,21 +119389,21 @@ aAu
ddQ
aBM
aCV
-aEr
+aBO
aFB
-aGY
+axY
daW
dBw
-aKF
+dBw
aMi
cpR
-dfi
+axY
aQd
-dBA
+aBO
aSA
-aTN
-aVf
-apc
+aTK
+aVe
+aJu
aYu
aZM
bbC
@@ -120505,21 +119646,21 @@ ayV
aAv
aBN
aCW
-aEr
-aFC
+aBO
+aFA
aGZ
-aGZ
-dlI
+qJG
+aJu
aKG
-aMj
+aJu
dBy
-dlI
-aQe
-aRv
+aGZ
+nKh
+aBO
dfD
-aTN
-aVe
-apc
+aTK
+rWa
+aJu
aYu
aZN
bbD
@@ -120760,23 +119901,23 @@ axY
axY
ayW
bTq
+dgA
+aBO
aBO
-aCX
-dej
aFC
-deC
-deC
-dlI
+axY
+qJG
+aJu
aKH
aMk
aNu
-dlI
+axY
dfp
-dfp
-dfE
+aBO
+dgA
dfP
dfY
-dgc
+axY
aYu
cXA
cXA
@@ -121014,30 +120155,30 @@ ath
ajb
avA
axY
-axZ
+axY
ayX
-ddS
-bUw
-aCY
-dek
+axY
+axY
+aBO
+aBO
der
-deD
-dlI
-aJv
+axY
+qJG
+aJu
aKI
tDM
-dfb
-dfj
+dBy
+axY
dlI
-deD
-dfF
-aTN
-aVe
-aWH
-dgi
+aBO
+axY
+axY
+ayX
+axY
+atm
dgc
-aqq
-aqr
+alq
+apc
aWu
bif
bif
@@ -121271,29 +120412,29 @@ ati
ajb
avB
axY
-ddO
+jYQ
bUw
-ddT
-ddZ
-ded
-del
-des
+aJu
+axY
+axY
+axY
+axY
djt
-daY
+qJG
daZ
dbb
-aMk
-aNv
-dfk
-dfq
+rVX
+dBy
djt
-dfG
-dfQ
-dfZ
-apc
-apc
-dgo
-apc
+axY
+axY
+axY
+aJu
+bUw
+iYY
+axY
+alq
+alq
cXZ
atm
bfZ
@@ -121528,31 +120669,31 @@ ajb
ajb
avC
axY
-aya
-bUw
-ddU
-aBQ
-dee
+axY
+eEu
+axY
+axY
+ddO
aEr
-des
+ddO
djt
-daY
-daZ
-dbb
+qJG
+aJu
+rEi
dfa
aNv
-dfk
-daY
+djt
+ddO
djx
-dfG
-cXz
-aVe
-atm
-alr
-dgp
+axY
+axY
+nwU
+axY
+axY
+alq
cXI
cYj
-atm
+iOa
bga
big
bga
@@ -121571,7 +120712,7 @@ bFS
bHy
bIV
bKC
-bMi
+bAQ
bNU
bMg
bQV
@@ -121785,31 +120926,31 @@ dps
dpL
avD
axY
+axY
+xNI
+ddO
+ddO
+ddO
+ddO
ddO
-bUw
-ddV
-aBQ
-dee
-aEr
-aKL
djt
-daY
-deS
-dbb
-aMk
-aNv
-dfm
-daY
djt
-dbg
-dfR
+djt
+aRm
+djt
+djt
+djt
+ddO
+ddO
+ddO
+ddO
dga
dgd
dgj
-dgp
-alr
-atm
atm
+alq
+jFx
+iOa
bgb
cTu
bgb
@@ -121828,8 +120969,8 @@ bFT
bHz
bIW
bKD
-dhe
-dhg
+bCi
+bCi
bPu
bPu
bPu
@@ -122044,28 +121185,28 @@ avE
axY
ayc
aza
-aAw
-bUw
+ddO
+aaa
aCY
dem
-aFD
+dem
+deD
+deD
deD
-dlI
-dlI
deV
-dlN
-dfc
-dlI
-dlI
-deD
+dem
+dem
+dem
+dem
+dem
dfI
-dfS
-aVh
-aaf
+aaa
+ddO
+ddO
aYx
-dgr
-dgw
-dgA
+sSU
+lHL
+lMJ
dgI
bgb
cTi
@@ -122086,7 +121227,7 @@ bHy
bIX
bKE
bKE
-dhh
+bKE
bPv
bKE
bKE
@@ -122296,34 +121437,34 @@ apn
aqy
arT
apm
-dnS
+vAk
avB
axY
-axY
-bTq
+goZ
+ddO
aAx
-aBO
+sOW
aIe
aOS
-deu
-deI
-deN
-deI
-deW
-aMm
-dfd
-deN
-dft
+mwK
+mwK
+mwK
+mwK
+mwK
+mwK
+mwK
+mwK
+mwK
dBB
-dbh
-dfT
-aVh
-aaa
+aIe
+sOW
+cWu
+ddO
aYx
-dgf
-dgj
-ack
-dgJ
+sSU
+lMJ
+lMJ
+lHL
bgb
bij
bgb
@@ -122343,7 +121484,7 @@ bHA
bIY
bKF
bMk
-dhi
+bNV
bPw
bQW
bSj
@@ -122556,31 +121697,31 @@ atk
aux
avF
dqT
-dqT
-aaf
-ack
-dea
-aIc
-den
+esV
+xqB
+aAx
+aaa
+aIe
+dZD
+dev
+aav
+aav
+dev
+lMJ
+aaa
+aav
+aav
dev
-deJ
-deO
-deU
-deX
-dBx
-dfe
-dBz
-dfu
dfz
-dfJ
-dfU
-dga
+aIe
+aaa
+cWu
dge
azd
-azd
-azd
-dgB
-dgK
+sSU
+lMJ
+lMJ
+lHL
aaa
cUL
aaa
@@ -122600,7 +121741,7 @@ bHB
bIZ
bKG
bMl
-dhj
+bKG
bIZ
bKG
bMl
@@ -122813,31 +121954,31 @@ atl
auy
dnS
dqT
-dqT
-aaf
-ack
-ack
+fGs
+ddO
+aAx
+sOW
def
aCZ
-dew
-aCZ
-axY
-axY
-aCZ
-aCZ
-aCZ
-axY
-axY
-aCZ
-dew
-aCZ
-aVe
-dgf
-dgk
-dgt
-dgk
-dgv
-dgJ
+aav
+aav
+aav
+vLD
+aaf
+aaa
+aav
+aav
+aav
+xfK
+obN
+sOW
+cWu
+ddO
+dgg
+sSU
+lMJ
+lHL
+lHL
anT
aaf
aaf
@@ -122857,7 +121998,7 @@ bza
bJa
bza
bFX
-dhk
+bza
bJa
bza
bFX
@@ -123069,52 +122210,52 @@ apm
apm
dnh
dnS
-dnz
dqT
+xWZ
+dPf
+aAx
+aaa
+aIe
+dZD
+aav
+aav
+aaa
+aaa
aaf
-aaf
-aaf
-def
-ddZ
-dex
-aJu
-ddZ
-ddZ
-ddZ
-aMo
-dff
-ddZ
-ddZ
-aJu
-dex
-ddZ
-aVe
+aaa
+aaa
+aav
+aav
+dfz
+aIe
+aaa
+cWu
aWK
dgk
-dgt
-dgk
-dgB
-dgM
-dgN
-dgO
-dgO
-dgw
-dgO
-dgS
-dgO
-dgO
-dgw
-dgw
-dgw
-dgw
+sSU
+lMJ
+lHL
+lHL
+anT
+dew
+dew
+aaf
+dew
+bpw
+dew
+dew
+aaf
+aaf
+aaf
+aaf
bCz
-dgw
-dha
-dgw
-dhc
-dgw
-dha
-dhl
+aaf
+bFY
+aaf
+bJb
+aaf
+bFY
+aaf
bJb
aaf
bFY
@@ -123327,31 +122468,31 @@ dnh
auz
dqp
dqT
-dqT
+axY
+fGs
+aAx
+vmz
+def
+aCZ
aaa
aaa
aaa
-bTq
-dep
-dey
-aHa
ddZ
-ddZ
-ddZ
-ddZ
-ddZ
-ddZ
-ddZ
-dfA
-dfM
-dfV
-dgb
+cDu
+fWO
+aaa
+vLD
+dev
+xfK
+obN
+vmz
+cWu
dgg
-azd
-azd
-azd
-dgv
-aaf
+axY
+sSU
+lMJ
+lHL
+lHL
anT
aaa
aaa
@@ -123584,30 +122725,30 @@ dni
auA
dnS
dqT
-aaa
-aaa
-aaa
-aaa
axY
-deq
-dey
-deK
-ddZ
-ddZ
-ddZ
+fGs
+ddO
+sOW
+aIe
+dZD
+lMJ
+aaf
+aaf
+den
+nte
aMo
-ddZ
-ddZ
-ddZ
-dfB
-dfM
-dfW
+aaf
+aaf
+lMJ
+dfz
+aIe
+sOW
+ddO
+dgg
axY
-aWK
-dgk
-dgt
-dgk
-dgB
+sSU
+lMJ
+lHL
aaa
anT
aaa
@@ -123841,31 +122982,31 @@ dnh
auB
avG
dqT
-aaa
-aaa
-aaa
-aaa
axY
-aJu
-deA
-deL
-aJu
-aJu
+fGs
+aAx
+vmz
+def
+aCZ
+dev
+vLD
+aaa
+fjy
deY
+moI
+aaa
+aaa
+aaa
+xfK
+obN
+vmz
+cWu
+dgg
axY
-dfg
-aJu
-aJu
-dfC
-dfO
-ddZ
-axY
-dgh
-dgk
-dgk
-dgk
-dgv
-aaf
+sSU
+lMJ
+lHL
+lHL
anT
aaa
aaa
@@ -124098,30 +123239,30 @@ dnh
dnh
jKK
dqT
+ocj
+rTo
+aAx
+aaa
+aIe
+dZD
+aav
+aav
+aaa
+aaa
aaf
aaa
aaa
+aav
+aav
+dfz
+aIe
aaa
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-aWK
+cWu
+jjF
dgm
-dgu
-dgm
-dgB
+sSU
+lMJ
+lHL
aaa
anT
aaa
@@ -124355,31 +123496,31 @@ atn
bOY
avG
dqT
-aaf
-aaa
-aaa
+fGs
+ddO
+aAx
+sOW
+dtL
+aCZ
+aav
+aav
aaa
aaa
aaf
+vLD
aaa
-aaf
-aaa
-aaa
-aaf
-aaa
-aaf
-aaa
-aaf
-aaa
-aaf
-aaf
-ack
-ack
-aye
-dgv
-aye
-dgv
-aaf
+aav
+aav
+xfK
+xLP
+sOW
+pWF
+ddO
+dgg
+sSU
+lMJ
+lHL
+lHL
anT
aaf
aaf
@@ -124612,29 +123753,29 @@ dnh
dnh
lNZ
dqT
-aaf
+drT
+xqB
+aAx
+aaa
+vmz
+dZD
+dev
+aav
aaa
aaa
+lMJ
+dev
+aav
+aav
+dev
+dfz
+vmz
aaa
-aaa
-aaf
-aaa
-aaf
-aaa
-aaa
-aaf
-aaa
-aaf
-aaa
-aaf
-aaa
-aaa
-aaf
-aaf
-aaf
-aaa
-aaa
-aaf
+cWu
+dge
+vSl
+sSU
+lMJ
aaa
aaa
aaf
@@ -124869,29 +124010,29 @@ aaa
aaf
ack
dqT
-aaf
-anT
-anT
-anT
-anT
-aaf
-anT
-anT
-anT
-anT
-anT
-anT
-aqB
-anT
-anT
-anT
-anT
-anT
-anT
-aaf
-aaa
-aaa
-aaf
+axY
+axY
+ddO
+hWU
+hWU
+gKb
+hWU
+hWU
+hWU
+hWU
+hWU
+hWU
+hWU
+hWU
+hWU
+yeY
+hWU
+hWU
+ddO
+axY
+axY
+sSU
+lMJ
aaa
aaa
aaf
@@ -125126,29 +124267,29 @@ aaf
aaf
ack
aaf
-aaa
-aaa
-aaa
-aaf
-aaa
-aaa
-bpu
-bpu
-bpu
-bpu
-bpu
-bpu
-bpu
-bpu
-bpu
-bpu
-aaa
-aaa
-aaa
-aaf
-aaf
-aaf
-aaf
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+sSU
+lMJ
aaa
aaa
aaa
@@ -125382,30 +124523,30 @@ aaa
aaa
aaa
aaa
+vLD
aaa
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+eln
+tMT
aaa
-aaa
-aaa
-aaf
-aaf
-aaf
-anT
-anT
-anT
-anT
-aqB
-anT
-anT
-anT
-anT
-aqB
-aaf
-aaf
-aaf
-aaf
-aaa
-aaf
-aaf
+lHL
+lMJ
aaa
aaa
aaa
@@ -125639,7 +124780,7 @@ aaa
aaa
aaa
aaa
-aaa
+vLD
aaa
aaa
aaa
@@ -125896,26 +125037,26 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
aaf
aai
aaa
diff --git a/_maps/cit_map_files/OmegaStation/OmegaStation.dmm b/_maps/cit_map_files/OmegaStation/OmegaStation.dmm
index 88e19bad50..ccef5665e1 100644
--- a/_maps/cit_map_files/OmegaStation/OmegaStation.dmm
+++ b/_maps/cit_map_files/OmegaStation/OmegaStation.dmm
@@ -2574,7 +2574,7 @@
c_tag = "AI Vault - Port";
dir = 4;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/obj/effect/turf_decal/stripes/line{
@@ -3515,7 +3515,7 @@
c_tag = "AI Vault - Starboard";
dir = 8;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/obj/effect/turf_decal/stripes/line{
@@ -4081,8 +4081,7 @@
},
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/machinery/camera{
- c_tag = "Armoury - Internal";
- network = list("Labor")
+ c_tag = "Armoury - Internal"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -4542,8 +4541,7 @@
dir = 8
},
/obj/machinery/camera{
- c_tag = "Security - Cell 1";
- network = list("MINE")
+ c_tag = "Security - Cell 1"
},
/turf/open/floor/plasteel/red/side{
dir = 5
@@ -4569,8 +4567,7 @@
},
/obj/machinery/camera{
c_tag = "Fore Primary Hallway";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/red/corner{
dir = 1
@@ -5967,8 +5964,7 @@
/obj/item/stamp,
/obj/machinery/camera{
c_tag = "Cargo Bay Entrance";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/brown{
dir = 8
@@ -6147,8 +6143,7 @@
dir = 8
},
/obj/machinery/camera{
- c_tag = "Security - Cell 2";
- network = list("MINE")
+ c_tag = "Security - Cell 2"
},
/turf/open/floor/plasteel/red/side{
dir = 5
@@ -6521,8 +6516,7 @@
},
/obj/machinery/camera{
c_tag = "Security - Office";
- dir = 4;
- network = list("MINE")
+ dir = 4
},
/turf/open/floor/plasteel/red/corner{
dir = 1
@@ -6547,8 +6541,7 @@
"amK" = (
/obj/machinery/camera{
c_tag = "Security - Central";
- dir = 4;
- network = list("MINE")
+ dir = 4
},
/turf/open/floor/plasteel/neutral/side{
dir = 8
@@ -6629,8 +6622,7 @@
"amS" = (
/obj/machinery/camera{
c_tag = "Locker Room Toilets";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/freezer,
/area/hallway/primary/central)
@@ -8505,8 +8497,7 @@
/obj/item/shovel,
/obj/machinery/camera{
c_tag = "Mining Dock";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -9015,7 +9006,6 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics Tank 4";
- network = list("thunder");
pixel_x = 10
},
/turf/open/floor/plasteel/green/side{
@@ -9418,8 +9408,7 @@
},
/obj/machinery/camera{
c_tag = "Central Diner 3";
- dir = 4;
- network = list("MINE")
+ dir = 4
},
/turf/open/floor/plasteel/vault/side{
dir = 4
@@ -10058,8 +10047,7 @@
"atz" = (
/obj/machinery/camera{
c_tag = "Atmospherics Tank 1";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -10454,8 +10442,7 @@
},
/obj/machinery/camera{
c_tag = "Bar";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/vault{
dir = 8
@@ -10473,8 +10460,7 @@
},
/obj/machinery/camera{
c_tag = "Bar Backroom";
- dir = 4;
- network = list("MINE")
+ dir = 4
},
/turf/open/floor/plasteel/vault,
/area/crew_quarters/bar/atrium)
@@ -11736,8 +11722,7 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics East";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/caution{
dir = 4
@@ -11956,8 +11941,7 @@
"axj" = (
/obj/machinery/camera{
c_tag = "Atmospherics Tank 2";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -12059,8 +12043,7 @@
/obj/machinery/portable_atmospherics/canister/nitrogen,
/obj/machinery/camera{
c_tag = "Atmospherics Monitoring";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -12634,8 +12617,7 @@
},
/obj/machinery/camera{
c_tag = "Central Diner 2";
- dir = 4;
- network = list("MINE")
+ dir = 4
},
/turf/open/floor/plasteel/vault/side{
dir = 4
@@ -13466,8 +13448,7 @@
/obj/structure/bedsheetbin,
/obj/machinery/camera{
c_tag = "Locker Room East";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel/arrival{
@@ -14488,8 +14469,7 @@
},
/obj/machinery/camera{
c_tag = "Central Hallway East";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/neutral/corner{
dir = 1
@@ -15091,8 +15071,7 @@
},
/obj/machinery/camera{
c_tag = "Engineering Secure Storage";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel/vault/side{
@@ -15337,8 +15316,7 @@
},
/obj/machinery/camera{
c_tag = "Locker Room South";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel/vault{
@@ -15695,8 +15673,7 @@
},
/obj/machinery/camera{
c_tag = "SMES Access";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 2
@@ -15739,8 +15716,7 @@
},
/obj/machinery/camera{
c_tag = "Engineering Access";
- dir = 8;
- network = list("Labor")
+ dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -15877,8 +15853,7 @@
},
/obj/machinery/camera{
c_tag = "Central Diner 1";
- dir = 4;
- network = list("MINE")
+ dir = 4
},
/turf/open/floor/plasteel/redyellow,
/area/crew_quarters/bar/atrium)
@@ -16458,8 +16433,7 @@
"aHg" = (
/obj/machinery/camera{
c_tag = "Gravity Generator Room";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/bot_white/left,
/turf/open/floor/plasteel/vault{
@@ -16559,7 +16533,7 @@
/obj/machinery/camera{
c_tag = "Engineering Fore";
dir = 2;
- network = list("SS13","Engine");
+ network = list("ss13","engine");
pixel_x = 23
},
/turf/open/floor/engine,
@@ -17184,8 +17158,7 @@
},
/obj/machinery/camera{
c_tag = "Engineering Monitoring";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -18010,7 +17983,7 @@
/obj/machinery/camera{
c_tag = "Kitchen Coldroom";
dir = 4;
- network = list("MINE")
+ network = list("mine")
},
/turf/open/floor/plasteel/freezer,
/area/crew_quarters/kitchen)
@@ -19145,7 +19118,7 @@
/obj/machinery/camera{
c_tag = "Engineering Port";
dir = 4;
- network = list("SS13","Engine")
+ network = list("ss13","engine")
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -19171,7 +19144,7 @@
/obj/machinery/camera{
c_tag = "Supermatter Chamber";
dir = 2;
- network = list("Engine");
+ network = list("engine");
pixel_x = 23
},
/obj/structure/cable{
@@ -19285,7 +19258,7 @@
desc = "Used for watching the Engine.";
dir = 1;
name = "Engine Monitor";
- network = list("Engine");
+ network = list("engine");
pixel_y = -32
},
/obj/machinery/rnd/protolathe/department/engineering,
@@ -19335,8 +19308,7 @@
},
/obj/machinery/camera{
c_tag = "Atmospherics South West";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/neutral/corner{
dir = 8;
@@ -19468,8 +19440,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/camera{
c_tag = "Hydroponics South";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel/vault/side{
@@ -20153,8 +20124,7 @@
icon_state = "4-8"
},
/obj/machinery/camera{
- c_tag = "Aft Primary Hallway 4";
- network = list("SS13","Prison")
+ c_tag = "Aft Primary Hallway 4"
},
/turf/open/floor/plasteel/green/corner{
dir = 1
@@ -20262,8 +20232,7 @@
icon_state = "4-8"
},
/obj/machinery/camera{
- c_tag = "Aft Primary Hallway 3";
- network = list("SS13","Prison")
+ c_tag = "Aft Primary Hallway 3"
},
/turf/open/floor/plasteel/green/corner{
dir = 1
@@ -21100,7 +21069,7 @@
/obj/machinery/camera{
c_tag = "Engineering Aft";
dir = 2;
- network = list("SS13","Engine");
+ network = list("ss13","engine");
pixel_x = 23
},
/obj/machinery/atmospherics/pipe/simple/orange/visible{
@@ -21257,8 +21226,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/camera{
c_tag = "Aft Primary Hallway 2";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/yellow/corner{
dir = 8
@@ -21535,8 +21503,7 @@
},
/obj/machinery/camera{
c_tag = "Library 2";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/dark,
/area/library)
@@ -21685,8 +21652,7 @@
},
/obj/machinery/camera{
c_tag = "Chemistry";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/whiteyellow/corner{
dir = 1
@@ -22567,8 +22533,7 @@
"aUo" = (
/obj/machinery/camera{
c_tag = "Genetics Cloning";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/whiteblue/corner{
dir = 1
@@ -23136,7 +23101,7 @@
/obj/machinery/camera{
c_tag = "Server Room";
dir = 2;
- network = list("SS13","RD");
+ network = list("ss13","rd");
pixel_x = 22
},
/turf/open/floor/circuit/green/telecomms/mainframe,
@@ -23645,8 +23610,7 @@
/obj/structure/closet/crate/bin,
/obj/machinery/camera{
c_tag = "Medbay Morgue";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/vault/side{
dir = 8
@@ -23914,8 +23878,7 @@
},
/obj/machinery/camera{
c_tag = "Medbay West";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -24230,8 +24193,7 @@
},
/obj/machinery/camera{
c_tag = "Medbay Storage";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/effect/turf_decal/delivery,
/obj/structure/window/reinforced{
@@ -24495,8 +24457,7 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/machinery/camera{
c_tag = "Research Division South";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/whitepurple/corner,
/area/science/research)
@@ -25331,7 +25292,7 @@
/obj/machinery/camera{
c_tag = "Robotics Lab";
dir = 2;
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel/vault/side,
@@ -25637,8 +25598,7 @@
},
/obj/machinery/camera{
c_tag = "Medbay Foyer";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/neutral,
/area/hallway/primary/central)
@@ -26708,8 +26668,7 @@
},
/obj/machinery/camera{
c_tag = "Medbay South";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/whiteblue/corner{
dir = 8
@@ -27226,8 +27185,7 @@
},
/obj/machinery/camera{
c_tag = "Medbay Recovery Room";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/vault/side{
dir = 8
@@ -28451,7 +28409,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Test Chamber";
dir = 2;
- network = list("Xeno","RD")
+ network = list("xeno","rd")
},
/turf/open/floor/plasteel/vault{
dir = 4
@@ -28546,7 +28504,7 @@
/obj/machinery/camera{
c_tag = "Crematorium";
dir = 4;
- network = list("MINE")
+ network = list("mine")
},
/turf/open/floor/plasteel/vault/side{
dir = 4
@@ -29231,8 +29189,7 @@
},
/obj/machinery/camera{
c_tag = "Chaplain's Quarters";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/plasteel/vault{
dir = 8
@@ -29278,8 +29235,7 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/machinery/camera{
c_tag = "Chapel Office";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/turf/open/floor/wood,
/area/chapel/main)
@@ -29714,8 +29670,7 @@
},
/obj/machinery/camera{
c_tag = "Chapel South";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -29737,8 +29692,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/camera{
c_tag = "Arrivals Hallway 3";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 2
@@ -29825,7 +29779,7 @@
c_tag = "Science - Server Room";
dir = 8;
name = "science camera";
- network = list("SS13","RD")
+ network = list("ss13","rd")
},
/turf/open/floor/circuit/green/telecomms/mainframe,
/area/science/xenobiology)
@@ -30413,8 +30367,7 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/camera{
c_tag = "Port Primary Hallway";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 2
@@ -30431,8 +30384,7 @@
},
/obj/machinery/camera{
c_tag = "Starboard Primary Hallway 2";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/turf/open/floor/plasteel/neutral/corner,
/area/hallway/primary/central)
@@ -30440,8 +30392,7 @@
/obj/structure/closet/firecloset,
/obj/machinery/camera{
c_tag = "Starboard Primary Hallway 2";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel/vault/side{
@@ -30464,8 +30415,7 @@
"blk" = (
/obj/machinery/camera{
c_tag = "Atmospherics Tank 3";
- dir = 4;
- network = list("SS13")
+ dir = 4
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -30478,12 +30428,11 @@
/obj/machinery/camera{
c_tag = "Shuttle Docking Foyer";
dir = 8;
- network = list("MINE")
+ network = list("mine")
},
/obj/machinery/camera{
c_tag = "Escape Arm Airlocks";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -30492,8 +30441,7 @@
/obj/structure/closet/emcloset,
/obj/machinery/camera{
c_tag = "Starboard Primary Hallway";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel/vault/side{
@@ -30507,7 +30455,7 @@
/obj/machinery/camera{
c_tag = "Engineering Starboard";
dir = 8;
- network = list("SS13","Engine")
+ network = list("ss13","engine")
},
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -30523,8 +30471,7 @@
},
/obj/machinery/camera{
c_tag = "Research Division Access";
- dir = 2;
- network = list("SS13")
+ dir = 2
},
/obj/structure/cable/white{
icon_state = "2-8"
@@ -30538,7 +30485,6 @@
/obj/machinery/camera{
c_tag = "Aft Primary Hallway 1";
dir = 8;
- network = list("SS13");
pixel_y = -22
},
/turf/open/floor/plasteel/purple/corner,
@@ -30583,7 +30529,6 @@
/obj/machinery/camera{
c_tag = "Surgery Operating";
dir = 1;
- network = list("SS13");
pixel_x = 22
},
/turf/open/floor/plasteel/neutral,
@@ -30592,7 +30537,7 @@
/obj/machinery/camera{
c_tag = "Xenobiology Test Chamber";
dir = 2;
- network = list("Xeno","RD")
+ network = list("xeno","rd")
},
/turf/open/floor/plasteel/vault{
dir = 5
@@ -30615,8 +30560,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/camera{
c_tag = "Arrivals Hallway";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -30627,8 +30571,7 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/camera{
c_tag = "Arrivals Hallway 2";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -30685,8 +30628,7 @@
},
/obj/machinery/camera{
c_tag = "Chapel Mass Driver";
- dir = 8;
- network = list("SS13")
+ dir = 8
},
/obj/machinery/light/small,
/obj/machinery/button/massdriver{
@@ -31264,8 +31206,7 @@
"buU" = (
/obj/machinery/camera{
c_tag = "Communications Relay";
- dir = 8;
- network = list("MINE")
+ dir = 8
},
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -33064,7 +33005,7 @@
c_tag = "AI Chamber - Core";
dir = 2;
name = "core camera";
- network = list("RD")
+ network = list("rd")
},
/obj/machinery/cell_charger,
/turf/open/floor/plasteel/vault/side,
@@ -33247,7 +33188,7 @@
c_tag = "AI Chamber - Core";
dir = 2;
name = "core camera";
- network = list("RD")
+ network = list("rd")
},
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -33384,7 +33325,7 @@
c_tag = "AI Chamber - Core";
dir = 2;
name = "core camera";
- network = list("RD")
+ network = list("rd")
},
/obj/machinery/light{
dir = 1
@@ -33617,7 +33558,7 @@
c_tag = "AI Satellite - Access";
dir = 4;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/turf/open/floor/plasteel/vault/side{
@@ -33905,7 +33846,7 @@
c_tag = "AI Satellite - Maintenance";
dir = 8;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/obj/machinery/atmospherics/components/unary/vent_pump/on{
@@ -33977,7 +33918,7 @@
c_tag = "AI Satellite - Antechamber";
dir = 4;
name = "ai camera";
- network = list("Sat");
+ network = list("minisat");
start_active = 1
},
/turf/open/floor/plasteel/vault/side{
diff --git a/_maps/cit_map_files/PubbyStation/PubbyStation.dmm b/_maps/cit_map_files/PubbyStation/PubbyStation.dmm
index 592a3d6b26..6bf52ab60a 100644
--- a/_maps/cit_map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/cit_map_files/PubbyStation/PubbyStation.dmm
@@ -8933,16 +8933,6 @@
dir = 4
},
/area/bridge)
-"axf" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/poddoor/preopen{
- id = "bridgespace";
- name = "bridge external shutters"
- },
-/turf/open/floor/plasteel/vault{
- dir = 8
- },
-/area/bridge)
"axg" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/dark,
@@ -15026,6 +15016,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMq" = (
@@ -15033,6 +15026,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMr" = (
@@ -15040,6 +15036,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMs" = (
@@ -15049,6 +15048,9 @@
/obj/structure/sign/poster/official/random{
pixel_y = 32
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMt" = (
@@ -15063,6 +15065,9 @@
c_tag = "Cargo Warehouse";
dir = 2
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMu" = (
@@ -15070,6 +15075,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMv" = (
@@ -15083,6 +15091,9 @@
pixel_x = 26
},
/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMw" = (
@@ -15649,6 +15660,9 @@
/obj/structure/sign/poster/official/random{
pixel_x = -32
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aNO" = (
@@ -16155,6 +16169,9 @@
"aOY" = (
/obj/effect/spawner/lootdrop/maintenance,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aOZ" = (
@@ -16542,6 +16559,9 @@
req_access_txt = "31"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aQd" = (
@@ -17040,6 +17060,14 @@
/area/quartermaster/sorting)
"aRl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/power/apc/highcap/fifteen_k{
+ dir = 4;
+ name = "Delivery Office APC";
+ pixel_x = 28
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
"aRm" = (
@@ -17057,6 +17085,9 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/delivery,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
"aRo" = (
@@ -17434,6 +17465,9 @@
"aSh" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plating,
/area/quartermaster/sorting)
"aSi" = (
@@ -17447,6 +17481,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"aSj" = (
@@ -17825,6 +17862,9 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/office)
"aTi" = (
@@ -17839,6 +17879,9 @@
departmentType = 2;
pixel_y = 32
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"aTj" = (
@@ -17851,6 +17894,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
},
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"aTl" = (
@@ -22032,8 +22078,7 @@
},
/area/maintenance/department/cargo)
"bdA" = (
-/obj/item/cigbutt,
-/obj/effect/spawner/lootdrop/maintenance,
+/obj/machinery/droneDispenser,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
"bdB" = (
@@ -26568,12 +26613,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"bpp" = (
-/obj/machinery/computer/camera_advanced/xenobio{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"bpq" = (
/obj/structure/sign/warning/electricshock,
/turf/closed/wall/r_wall,
@@ -27772,9 +27811,6 @@
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"brQ" = (
-/obj/machinery/computer/camera_advanced/xenobio{
- dir = 8
- },
/obj/machinery/camera{
c_tag = "Xenobiology Port";
dir = 8;
@@ -28377,7 +28413,7 @@
/turf/open/floor/plasteel/white,
/area/science/explab)
"btj" = (
-/obj/machinery/droneDispenser,
+/obj/structure/table,
/turf/open/floor/plasteel/white,
/area/science/explab)
"btk" = (
@@ -28566,11 +28602,11 @@
/turf/open/floor/plating,
/area/science/xenobiology)
"btD" = (
-/turf/open/floor/plating/airless,
+/turf/open/floor/plating,
/area/science/xenobiology)
"btE" = (
/obj/effect/decal/remains/xeno,
-/turf/open/floor/plating/airless,
+/turf/open/floor/plating,
/area/science/xenobiology)
"btF" = (
/obj/structure/chair{
@@ -29191,12 +29227,7 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/machinery/camera{
- c_tag = "Xenobiology Kill Room";
- dir = 8;
- network = list("ss13","rd")
- },
-/turf/open/floor/plating/airless,
+/turf/open/floor/plating,
/area/science/xenobiology)
"bva" = (
/turf/closed/wall,
@@ -31263,16 +31294,22 @@
/turf/open/floor/plasteel/whitepurple/side,
/area/science/xenobiology)
"bzi" = (
-/obj/item/extinguisher{
- pixel_x = 4;
- pixel_y = 3
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/obj/item/extinguisher,
/obj/structure/table/glass,
-/turf/open/floor/plasteel/whitepurple/side,
+/obj/item/extinguisher,
+/obj/item/extinguisher{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/extinguisher{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
/area/science/xenobiology)
"bzj" = (
-/obj/structure/reagent_dispensers/watertank,
/obj/machinery/requests_console{
department = "Science";
departmentType = 2;
@@ -31280,6 +31317,7 @@
pixel_x = 32;
receive_ore_updates = 1
},
+/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel/whitepurple/side,
/area/science/xenobiology)
"bzk" = (
@@ -32314,6 +32352,9 @@
/area/crew_quarters/heads/hor)
"bBw" = (
/obj/machinery/computer/security,
+/obj/machinery/light{
+ dir = 8
+ },
/turf/open/floor/plasteel/red/side{
dir = 8
},
@@ -38116,6 +38157,7 @@
},
/obj/item/stack/sheet/glass,
/obj/item/stack/rods/fifty,
+/obj/item/pipe_dispenser,
/turf/open/floor/plasteel/yellow/side,
/area/engine/atmos)
"bOY" = (
@@ -40924,9 +40966,6 @@
/obj/structure/table/reinforced,
/obj/item/clipboard,
/obj/item/lighter,
-/obj/item/clothing/glasses/meson{
- pixel_y = 4
- },
/obj/item/stamp/ce,
/obj/item/stock_parts/cell/high/plus,
/obj/machinery/keycard_auth{
@@ -40941,6 +40980,7 @@
/obj/structure/cable{
icon_state = "0-8"
},
+/obj/item/clothing/glasses/meson/engine,
/turf/open/floor/plasteel/yellow/side{
dir = 4
},
@@ -42858,10 +42898,7 @@
},
/obj/effect/turf_decal/stripes/line,
/obj/item/airlock_painter,
-/obj/item/clothing/glasses/meson{
- pixel_x = 3;
- pixel_y = -4
- },
+/obj/item/clothing/glasses/meson/engine,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cap" = (
@@ -43196,11 +43233,11 @@
"cbe" = (
/obj/item/pen,
/obj/item/storage/belt/utility,
-/obj/item/clothing/glasses/meson,
/obj/item/paper_bin{
layer = 2.9
},
/obj/structure/table/glass,
+/obj/item/clothing/glasses/meson/engine,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cbf" = (
@@ -43287,7 +43324,7 @@
/obj/structure/table,
/obj/item/clothing/gloves/color/yellow,
/obj/item/storage/belt/utility,
-/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson/engine,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cbo" = (
@@ -43736,6 +43773,9 @@
/obj/item/stack/sheet/mineral/plasma{
amount = 30
},
+/obj/item/device/gps{
+ gpstag = "ENG0"
+ },
/turf/open/floor/plating,
/area/engine/engineering)
"ccS" = (
@@ -45137,9 +45177,6 @@
icon_state = "0-8"
},
/obj/machinery/power/tesla_coil,
-/obj/structure/window/plasma/reinforced{
- dir = 4
- },
/turf/open/floor/plating/airless,
/area/engine/engineering)
"chz" = (
@@ -45147,9 +45184,6 @@
icon_state = "0-4"
},
/obj/machinery/power/tesla_coil,
-/obj/structure/window/plasma/reinforced{
- dir = 8
- },
/turf/open/floor/plating/airless,
/area/engine/engineering)
"chA" = (
@@ -45257,16 +45291,6 @@
/obj/structure/grille,
/turf/open/floor/plating/airless,
/area/engine/engineering)
-"chQ" = (
-/obj/structure/window/plasma/reinforced{
- dir = 4
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-8"
- },
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
"chR" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -45420,14 +45444,13 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"cit" = (
-/obj/machinery/the_singularitygen,
+/obj/machinery/the_singularitygen/tesla,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"ciu" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/the_singularitygen/tesla,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"civ" = (
@@ -49969,29 +49992,9 @@
/turf/open/floor/plasteel/white,
/area/medical/chemistry)
"cBQ" = (
-/obj/machinery/power/rad_collector/anchored,
+/obj/machinery/power/rad_collector,
/turf/open/floor/plating,
/area/engine/engineering)
-"cBR" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/item/tank/internals/plasma,
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
-"cBS" = (
-/obj/structure/window/plasma/reinforced{
- dir = 8
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-4"
- },
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
"cBT" = (
/obj/effect/spawner/structure/window/plasma/reinforced,
/turf/open/floor/plating/airless,
@@ -50152,6 +50155,16 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
+"frt" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/quartermaster/office)
"fyh" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{
@@ -50240,12 +50253,24 @@
},
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/AIsatextAP)
+"kqj" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/quartermaster/storage)
"krG" = (
/obj/structure/cable{
icon_state = "2-8"
},
/turf/open/floor/plasteel/dark,
/area/library)
+"let" = (
+/turf/closed/wall/r_wall,
+/area/space)
"lqy" = (
/obj/machinery/door/airlock/centcom{
name = "Library"
@@ -50255,6 +50280,11 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/library/lounge)
+"lvl" = (
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/item/cigbutt,
+/turf/open/floor/plating,
+/area/maintenance/department/cargo)
"mHo" = (
/obj/structure/table,
/obj/machinery/microwave{
@@ -50286,6 +50316,15 @@
},
/turf/open/floor/carpet,
/area/library/lounge)
+"nJY" = (
+/obj/structure/rack,
+/obj/item/stack/sheet/glass/fifty{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/stack/sheet/metal/fifty,
+/turf/open/floor/plating,
+/area/maintenance/department/cargo)
"opC" = (
/obj/machinery/light/small{
dir = 4
@@ -50445,6 +50484,10 @@
/obj/item/stack/cable_coil,
/turf/open/floor/plasteel/whitepurple/side,
/area/science/lab)
+"yia" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space)
(1,1,1) = {"
aaa
@@ -79160,8 +79203,8 @@ bXk
bXk
bXk
bXk
-aaa
-aaa
+bXk
+let
aaa
aaa
aaa
@@ -79416,9 +79459,9 @@ chR
cgt
cjT
ckq
+ckq
bXk
-aaa
-aaa
+let
aaa
aaa
aaa
@@ -79673,9 +79716,9 @@ chS
cfV
cgS
cfV
+cfV
bXk
-aaa
-aaa
+let
aaa
aaa
aaa
@@ -79929,10 +79972,10 @@ cfV
cfV
cfV
cgT
+cfV
ckr
bXk
-aaa
-aaa
+let
aaa
aaa
aaa
@@ -80179,17 +80222,17 @@ cfU
cgu
cgU
chw
-cBR
-chw
-chw
+cgU
chw
+cgU
chw
+cgU
cjs
cfV
cfV
-bTE
-aaa
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -80436,17 +80479,17 @@ cfV
cgv
cfV
chx
-chQ
+cfV
chx
-chQ
+cfV
chx
-chQ
+cfV
chx
cfV
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -80694,16 +80737,16 @@ cgv
cgV
bBW
bBW
-aaa
cgV
+aht
aaa
bBW
bBW
cgV
cfV
-bTE
-abI
-abI
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -80951,16 +80994,16 @@ cgv
bBW
bBW
bBW
-aaa
+yia
abI
aaa
bBW
bBW
bBW
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -81215,9 +81258,9 @@ aaa
bBW
bBW
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -81469,12 +81512,12 @@ cii
cis
ciG
aaa
-aaa
-aaa
+yia
+cgV
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -81719,7 +81762,7 @@ cfd
cfw
cfW
cgw
-cgV
+aht
abI
abI
cij
@@ -81727,11 +81770,11 @@ cit
ciH
abI
abI
-cgV
+aht
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -81976,8 +82019,8 @@ cfe
cfx
cfa
cgv
-aaa
-aaa
+cgV
+yia
aaa
cik
ciu
@@ -81986,9 +82029,9 @@ aaa
aaa
aaa
cfV
-bTE
-aaa
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -82243,9 +82286,9 @@ aaa
bBW
bBW
cfV
-bTE
-aaa
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -82495,14 +82538,14 @@ bBW
aaa
aaa
abI
-aaa
+yia
aaa
bBW
bBW
cfV
-bTE
-aaa
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -82751,15 +82794,15 @@ cgV
bBW
aaa
aaa
+aht
cgV
-aaa
bBW
bBW
cgV
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -83006,17 +83049,17 @@ cfV
cgv
cfV
chz
-cBS
+cfV
chz
-cBS
+cfV
chz
-cBS
+cfV
chz
cfV
cfV
-bTE
-abI
-abI
+cfV
+bXk
+let
abI
abI
aaa
@@ -83174,7 +83217,7 @@ auU
atY
vTA
ayf
-axf
+vTA
aAF
aBz
aCP
@@ -83263,17 +83306,17 @@ cfU
cgx
cgU
chA
+cgU
chA
+cgU
chA
-chA
-chA
-chA
+cgU
cjt
cfV
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
abI
aaa
aaa
@@ -83527,10 +83570,10 @@ cfV
cfV
cfV
cgY
+cfV
cks
bXk
-abI
-aaa
+let
aaa
aaa
aaa
@@ -83785,9 +83828,9 @@ chO
cfV
cgZ
cfV
+cfV
bXk
-abI
-abI
+let
abI
aaa
aaa
@@ -84042,9 +84085,9 @@ chP
cgt
cjU
ckq
+ckq
bXk
-abI
-aaa
+let
aaa
aaa
aaa
@@ -84299,9 +84342,9 @@ bXk
bXk
bXk
bXk
+bXk
ckJ
-abI
-aaa
+let
aaa
aaa
aaa
@@ -87058,7 +87101,7 @@ aVu
bat
aLf
bcy
-aKq
+lvl
aEj
aEj
bgC
@@ -87572,7 +87615,7 @@ aPY
bav
aLf
aFi
-aFi
+nJY
beI
bfv
bgE
@@ -89361,7 +89404,7 @@ aOW
xzr
xzr
xzr
-aSY
+frt
aUs
aLf
aLf
@@ -89875,7 +89918,7 @@ cDa
cDa
cDa
aLg
-aTj
+kqj
aUu
aVx
aVx
@@ -93238,7 +93281,7 @@ bkE
aht
bnd
boh
-bpp
+bpn
bqx
brQ
btr
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 7507cf7ce5..fd936f5205 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -243,7 +243,7 @@
/obj/structure/lattice,
/obj/structure/grille,
/turf/open/space,
-/area/space/nearstation)
+/area/space)
"aaU" = (
/obj/machinery/computer/arcade,
/turf/open/floor/plasteel/floorgrime,
@@ -932,7 +932,6 @@
pixel_x = 3;
pixel_y = -3
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/effect/turf_decal/bot{
dir = 2
},
@@ -2439,10 +2438,6 @@
},
/turf/open/floor/plating,
/area/security/main)
-"agd" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"agf" = (
/obj/structure/table,
/obj/item/stack/sheet/metal,
@@ -4577,15 +4572,13 @@
/area/engine/atmos)
"aln" = (
/obj/machinery/door/airlock/external{
- cyclelinkeddir = 4;
name = "Labor Camp Shuttle Airlock";
- req_access_txt = "2";
- shuttledocked = 1
+ req_access_txt = "2"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
-/turf/open/floor/plating,
+/turf/open/floor/plasteel/dark,
/area/security/processing)
"alp" = (
/turf/open/floor/plating,
@@ -5353,7 +5346,7 @@
/area/maintenance/fore/secondary)
"anE" = (
/obj/machinery/door/airlock/external{
- cyclelinkeddir = 4;
+ cyclelinkeddir = 0;
req_access_txt = "13"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
@@ -5392,17 +5385,6 @@
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/port/fore)
-"anN" = (
-/obj/machinery/door/airlock/external{
- cyclelinkeddir = 4;
- name = "Labor Camp Shuttle Airlock";
- shuttledocked = 1
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/security/processing)
"anO" = (
/obj/docking_port/stationary{
dir = 8;
@@ -34461,13 +34443,6 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"bIP" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/chair/comfy/black,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"bIQ" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -37316,7 +37291,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/structure/chair/comfy/black,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"bPz" = (
@@ -37343,15 +37317,13 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPA" = (
-/obj/machinery/computer/camera_advanced/xenobio{
- dir = 1
- },
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/structure/table/glass,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPB" = (
@@ -37441,10 +37413,10 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPI" = (
-/obj/structure/reagent_dispensers/watertank,
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bPJ" = (
@@ -38079,7 +38051,7 @@
dir = 8;
layer = 4;
name = "Engine Monitor";
- network = list("engine");
+ network = list("singularity");
pixel_x = 30
},
/turf/open/floor/plasteel/red/side{
@@ -38382,6 +38354,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/machinery/light{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bRZ" = (
@@ -40087,6 +40062,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/machinery/light{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bWn" = (
@@ -40339,9 +40317,6 @@
/obj/machinery/light{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/atmos)
"bWV" = (
@@ -41561,6 +41536,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 10
},
+/obj/machinery/light{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"bZX" = (
@@ -42803,14 +42781,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"ccP" = (
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"ccQ" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/science/xenobiology)
"ccR" = (
/obj/machinery/portable_atmospherics/pump,
/obj/effect/turf_decal/bot{
@@ -43716,20 +43686,6 @@
/obj/item/caution,
/turf/open/floor/plating,
/area/maintenance/aft)
-"cfr" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 2;
- external_pressure_bound = 140;
- pressure_checks = 0;
- name = "killroom vent"
- },
-/obj/machinery/camera{
- c_tag = "Xenobiology Kill Room";
- dir = 4;
- network = list("ss13","rd")
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
"cfs" = (
/obj/machinery/door/airlock/maintenance/abandoned{
name = "Air Supply Maintenance";
@@ -43767,15 +43723,6 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating/airless,
/area/maintenance/solars/port/aft)
-"cfy" = (
-/obj/structure/rack,
-/obj/item/clothing/shoes/winterboots,
-/obj/item/clothing/suit/hooded/wintercoat,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"cfz" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -43827,16 +43774,6 @@
dir = 5
},
/area/crew_quarters/heads/chief)
-"cfI" = (
-/obj/structure/closet/secure_closet/engineering_personal,
-/obj/machinery/airalarm{
- dir = 8;
- pixel_x = 24
- },
-/turf/open/floor/plasteel/yellow/side{
- dir = 4
- },
-/area/engine/engineering)
"cfJ" = (
/obj/machinery/light/small{
dir = 1
@@ -44021,9 +43958,6 @@
},
/turf/open/floor/plating,
/area/maintenance/aft)
-"cgi" = (
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
"cgj" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/barricade/wooden,
@@ -44032,18 +43966,19 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"cgk" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/sign/warning/biohazard,
-/turf/open/floor/plating,
-/area/science/xenobiology)
"cgl" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
- dir = 2;
- external_pressure_bound = 120;
- name = "killroom vent"
+/obj/structure/disposalpipe/segment{
+ dir = 4
},
-/turf/open/floor/circuit/killroom,
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio0";
+ name = "containment blast door"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/engine,
/area/science/xenobiology)
"cgm" = (
/obj/structure/cable{
@@ -44054,17 +43989,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"cgn" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- target_temperature = 80;
- dir = 2;
- on = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"cgo" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -44139,13 +44063,13 @@
/area/engine/engineering)
"cgw" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cgx" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/closed/wall/r_wall,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cgy" = (
/obj/machinery/light/small{
@@ -44215,32 +44139,22 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cgI" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
"cgJ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cgK" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 9
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cgL" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cgO" = (
/obj/structure/rack,
@@ -44254,16 +44168,6 @@
dir = 5
},
/area/crew_quarters/heads/chief)
-"cgQ" = (
-/obj/machinery/camera{
- c_tag = "Engineering East";
- dir = 8
- },
-/obj/structure/closet/wardrobe/engineering_yellow,
-/turf/open/floor/plasteel/yellow/corner{
- dir = 4
- },
-/area/engine/engineering)
"cgR" = (
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -44462,13 +44366,6 @@
},
/turf/open/floor/plasteel/floorgrime,
/area/maintenance/disposal/incinerator)
-"cho" = (
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
"chp" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -44478,43 +44375,22 @@
},
/turf/closed/wall,
/area/maintenance/starboard/aft)
-"chq" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"chr" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/research{
- name = "Kill Chamber";
+"chs" = (
+/obj/machinery/door/window/northleft{
+ base_state = "right";
+ dir = 8;
+ icon_state = "right";
+ name = "Containment Pen";
req_access_txt = "55"
},
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/open/floor/plating,
-/area/science/xenobiology)
-"chs" = (
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"cht" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio0";
+ name = "containment blast door"
},
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"chu" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
+/turf/open/floor/engine,
/area/science/xenobiology)
"chv" = (
/obj/structure/cable{
@@ -44624,25 +44500,24 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"chF" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
+/obj/effect/landmark/start/station_engineer,
+/obj/structure/chair/office/dark{
+ dir = 8
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"chG" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"chH" = (
/obj/structure/closet/firecloset,
@@ -44740,35 +44615,15 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"chV" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/table/reinforced,
-/obj/item/tank/internals/emergency_oxygen/engi{
- pixel_x = 5
- },
-/obj/item/clothing/gloves/color/black,
-/obj/item/clothing/glasses/meson/engine,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"chX" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
},
-/turf/open/floor/engine,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"chY" = (
/obj/machinery/shieldgen,
@@ -44852,24 +44707,6 @@
"cig" = (
/turf/closed/wall,
/area/engine/engineering)
-"cii" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/table/reinforced,
-/obj/item/clothing/suit/radiation,
-/obj/item/clothing/head/radiation,
-/obj/item/clothing/glasses/meson,
-/obj/item/device/geiger_counter,
-/obj/item/device/geiger_counter,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cij" = (
/obj/machinery/modular_computer/console/preset/engineering,
/obj/structure/cable{
@@ -44907,15 +44744,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/crew_quarters/heads/chief)
-"cip" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"ciq" = (
/obj/structure/cable,
/obj/effect/spawner/structure/window/reinforced,
@@ -44925,13 +44753,6 @@
},
/turf/open/floor/plating,
/area/crew_quarters/heads/chief)
-"cir" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
"cis" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel,
@@ -45072,14 +44893,18 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"ciO" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/item/book/manual/engineering_singularity_safety{
+ pixel_x = 3;
+ pixel_y = 3
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/obj/item/book/manual/wiki/engineering_guide,
+/obj/item/book/manual/engineering_particle_accelerator{
+ pixel_x = -3;
+ pixel_y = -3
},
-/turf/open/floor/engine,
+/obj/item/clothing/gloves/color/yellow,
+/obj/structure/table/glass,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"ciP" = (
/obj/structure/cable{
@@ -45221,12 +45046,6 @@
},
/turf/open/floor/plasteel/vault,
/area/crew_quarters/heads/chief)
-"cjh" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cji" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -45361,18 +45180,6 @@
/obj/item/cigbutt/roach,
/turf/open/floor/plating,
/area/maintenance/aft)
-"cjB" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/obj/structure/table,
-/obj/item/folder/white,
-/obj/item/pen,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"cjC" = (
/obj/structure/grille,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -45459,7 +45266,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 6
+ },
/area/engine/engineering)
"cjP" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -45480,7 +45289,7 @@
req_access = null;
req_access_txt = "10;13"
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
/area/engine/engineering)
"cjS" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -45647,11 +45456,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/aft)
-"ckn" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/science/xenobiology)
"cko" = (
/obj/structure/disposalpipe/segment,
/turf/closed/wall,
@@ -46730,16 +46534,11 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cnx" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+/obj/structure/chair/sofa/left{
+ icon_state = "sofaend_left";
dir = 4
},
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cny" = (
/obj/effect/landmark/start/station_engineer,
@@ -46973,15 +46772,12 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cnZ" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/airalarm{
- pixel_y = 23
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"coa" = (
@@ -46995,25 +46791,32 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cob" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/obj/structure/cable{
- icon_state = "1-2"
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
},
/turf/open/floor/plasteel,
/area/engine/engineering)
"coc" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
+/obj/structure/table,
+/obj/item/electronics/airlock,
+/obj/item/electronics/airlock,
+/obj/item/electronics/apc,
+/obj/item/stock_parts/cell/high/plus,
+/obj/item/stock_parts/cell/high/plus,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/turf/open/floor/engine,
+/obj/item/stack/cable_coil,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cop" = (
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
@@ -47182,38 +46985,27 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"coK" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"coL" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"coM" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
+/obj/structure/chair/office/dark,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"coL" = (
+/obj/structure/chair/office/dark,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"coS" = (
/obj/structure/rack,
@@ -47379,50 +47171,37 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cpt" = (
-/obj/structure/table,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
+ },
+/area/engine/engineering)
+"cpu" = (
+/obj/item/book/manual/wiki/engineering_hacking{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/book/manual/wiki/engineering_construction,
/obj/item/clothing/gloves/color/yellow,
-/obj/item/storage/toolbox/electrical{
- pixel_y = 5
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/table/glass,
+/obj/item/device/flashlight,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cpx" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/closet/radiation,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cpu" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cpv" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cpx" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cpy" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
+/obj/structure/sign/warning/radiation/rad_area,
+/turf/closed/wall/r_wall,
/area/engine/engineering)
"cpA" = (
/obj/structure/chair/office/dark{
@@ -47437,19 +47216,17 @@
/turf/open/floor/plasteel,
/area/bridge)
"cpD" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/closet/secure_closet/engineering_welding,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cpE" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"cpG" = (
/obj/structure/table/optable,
@@ -47606,133 +47383,72 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cpZ" = (
-/obj/structure/table,
-/obj/item/storage/toolbox/mechanical{
- pixel_y = 5
- },
-/obj/item/device/flashlight{
- pixel_x = 1;
- pixel_y = 5
- },
-/obj/item/device/flashlight{
- pixel_x = 1;
- pixel_y = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"cqa" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cqb" = (
+/obj/structure/table,
+/obj/machinery/cell_charger,
/obj/structure/cable{
icon_state = "1-2"
},
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
-"cqc" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
+"cqb" = (
+/obj/structure/chair/sofa/right{
+ icon_state = "sofaend_right";
+ dir = 4
},
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cqd" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
+/obj/structure/closet/radiation,
+/obj/structure/extinguisher_cabinet{
+ pixel_x = 27
+ },
+/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqe" = (
-/obj/effect/turf_decal/stripes/corner,
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 6
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cqf" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
"cqg" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Gas to Filter";
- on = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqh" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -26
- },
/obj/machinery/camera{
- c_tag = "Engineering Supermatter Fore";
- dir = 1;
+ c_tag = "Engineering Center";
+ dir = 2;
network = list("ss13","engine");
pixel_x = 23
},
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
+/obj/machinery/light{
dir = 1
},
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqi" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/light,
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqj" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/button/door{
- id = "engsm";
- name = "Radiation Shutters Control";
- pixel_y = -24;
- req_access_txt = "10"
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
-"cql" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
+"cqh" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+/obj/effect/turf_decal/stripes/line{
dir = 1
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
-"cqm" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
+"cqi" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
},
-/obj/machinery/meter,
-/turf/open/floor/plasteel,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cqj" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
"cqn" = (
/obj/structure/grille,
@@ -47828,54 +47544,39 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cqA" = (
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/obj/machinery/door/airlock/external{
- name = "Engineering External Access";
- req_access = null;
- req_access_txt = "10;13"
+"cqC" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = 2;
+ pixel_y = 4
+ },
+/obj/item/storage/toolbox/mechanical{
+ pixel_x = -2
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cqD" = (
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
/turf/open/floor/plating,
/area/engine/engineering)
-"cqB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
+"cqE" = (
+/obj/structure/particle_accelerator/end_cap,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cqF" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
-"cqC" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cqD" = (
-/obj/structure/sign/warning/radiation,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cqE" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/door/airlock/engineering/glass{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cqF" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"cqG" = (
/obj/structure/rack,
/obj/item/storage/box/rubbershot{
@@ -47963,70 +47664,49 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cqS" = (
-/obj/machinery/light/small{
- dir = 8
+/turf/open/floor/plasteel/yellow/side{
+ dir = 10
},
-/obj/structure/closet/emcloset/anchored,
-/turf/open/floor/plating,
/area/engine/engineering)
"cqT" = (
-/obj/structure/sign/warning/vacuum/external{
- pixel_x = 32
- },
-/turf/open/floor/plating,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"cqU" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
+/obj/machinery/button/door{
+ id = "Singularity";
+ name = "Shutters Control";
+ pixel_x = 25;
+ req_access_txt = "11"
},
-/obj/effect/turf_decal/bot,
-/obj/machinery/portable_atmospherics/canister,
-/turf/open/floor/plasteel/dark,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"cqY" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/engine/engineering)
"cqZ" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cra" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Gas to Filter"
- },
-/obj/machinery/airalarm/engine{
- dir = 4;
- pixel_x = -23
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"crb" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- icon_state = "pump_map";
- name = "Gas to Chamber"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"crc" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
+/obj/structure/particle_accelerator/fuel_chamber,
+/turf/open/floor/plating,
/area/engine/engineering)
-"crd" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine Room";
- req_access_txt = "10"
+"cra" = (
+/obj/machinery/particle_accelerator/control_box,
+/obj/structure/cable/yellow,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"crb" = (
+/obj/effect/landmark/start/station_engineer,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"crc" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Engine Containment Starboard Fore";
+ dir = 2;
+ network = list("engine")
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"crh" = (
/obj/effect/turf_decal/stripes/line{
@@ -48089,40 +47769,38 @@
/turf/open/floor/plating,
/area/engine/engineering)
"crs" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 6
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = -7
},
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
+/obj/item/stack/cable_coil{
+ pixel_x = 3;
+ pixel_y = -7
+ },
+/obj/item/crowbar,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"crt" = (
-/obj/machinery/door/airlock/engineering/glass{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/obj/structure/particle_accelerator/power_box,
+/turf/open/floor/plating,
+/area/engine/engineering)
"cru" = (
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"crv" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
+/obj/item/screwdriver,
+/turf/open/floor/plating,
+/area/engine/engineering)
"crw" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
/area/engine/engineering)
"cry" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -48210,43 +47888,34 @@
/obj/structure/lattice/catwalk,
/turf/open/space,
/area/solar/starboard/aft)
-"crH" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
"crI" = (
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"crJ" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"crK" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
- dir = 8
- },
-/turf/closed/wall/r_wall,
+/obj/structure/chair/stool,
+/turf/open/floor/plating,
/area/engine/engineering)
-"crL" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
+"crJ" = (
+/obj/machinery/light/small{
+ dir = 8;
+ light_color = "#fff4bc"
},
-/turf/open/floor/plasteel/dark,
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"crK" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = 32
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
"crM" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 1
+/obj/machinery/light/small{
+ dir = 4;
+ light_color = "#fff4bc"
},
-/turf/open/floor/plasteel/dark,
+/obj/structure/closet/emcloset/anchored,
+/turf/open/floor/plating,
/area/engine/engineering)
"crP" = (
/obj/machinery/light,
@@ -48259,25 +47928,12 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
-"crT" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"crU" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
- },
-/turf/open/space,
-/area/space/nearstation)
"crV" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"crW" = (
/obj/machinery/light/small{
@@ -48297,38 +47953,29 @@
/obj/structure/transit_tube,
/turf/open/floor/plating,
/area/engine/engineering)
-"crZ" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
"csa" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plating,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"csb" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 9
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"csc" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
/turf/open/space,
/area/maintenance/aft)
"csd" = (
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cse" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- dir = 8
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"csg" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
@@ -48347,17 +47994,10 @@
},
/turf/open/space,
/area/space/nearstation)
-"csj" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
"csk" = (
/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
+/turf/closed/wall/r_wall,
+/area/science/xenobiology)
"csl" = (
/obj/structure/transit_tube/curved{
dir = 4
@@ -48414,26 +48054,22 @@
/turf/open/floor/plasteel/floorgrime,
/area/maintenance/disposal/incinerator)
"css" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/turf/open/space,
-/area/space/nearstation)
-"csu" = (
-/obj/structure/closet/firecloset,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"csv" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"csx" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"csy" = (
/obj/structure/table,
/obj/item/weldingtool,
@@ -48442,19 +48078,6 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
-"csA" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
"csD" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -48466,24 +48089,6 @@
/obj/structure/lattice/catwalk,
/turf/open/space,
/area/solar/starboard/aft)
-"csH" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"csI" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"csM" = (
/obj/structure/lattice,
/obj/machinery/atmospherics/pipe/simple/yellow/visible,
@@ -48501,27 +48106,9 @@
/area/ai_monitored/turret_protected/aisat_interior)
"csP" = (
/obj/effect/turf_decal/stripes/line{
- dir = 4
+ dir = 1
},
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"csR" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"csT" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -50258,7 +49845,7 @@
/area/shuttle/pod_1)
"cxG" = (
/obj/machinery/door/airlock/external{
- cyclelinkeddir = 4;
+ cyclelinkeddir = 0;
name = "Escape Pod Three";
req_access_txt = "0"
},
@@ -50268,15 +49855,21 @@
/turf/open/floor/plating,
/area/security/main)
"cxJ" = (
-/obj/machinery/door/airlock/external{
- cyclelinkeddir = 8;
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/security/glass{
name = "Labor Camp Shuttle Airlock";
req_access_txt = "2"
},
+/obj/machinery/button/door{
+ id = "prison release";
+ name = "Labor Camp Shuttle Lockdown";
+ pixel_y = -25;
+ req_access_txt = "2"
+ },
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
},
-/turf/open/floor/plating,
+/turf/open/floor/plasteel/dark,
/area/security/processing)
"cxN" = (
/obj/structure/cable{
@@ -50292,16 +49885,6 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/starboard/fore)
-"cxP" = (
-/obj/machinery/door/airlock/external{
- cyclelinkeddir = 8;
- name = "Labor Camp Shuttle Airlock"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/security/processing)
"cxR" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/spawner/structure/window/reinforced,
@@ -50551,18 +50134,14 @@
},
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/aisat_interior)
-"czE" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"czF" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/meter,
-/turf/open/floor/plasteel/dark,
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = -32
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
"czG" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -50644,11 +50223,6 @@
/obj/effect/landmark/event_spawn,
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar)
-"czQ" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/structure/disposalpipe/segment,
-/turf/open/floor/plating,
-/area/maintenance/starboard/aft)
"czR" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -50796,97 +50370,40 @@
},
/turf/open/floor/plating,
/area/maintenance/port/aft)
-"cAl" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
+"cAm" = (
+/obj/item/wirecutters,
/obj/structure/cable/yellow{
- icon_state = "1-4"
+ icon_state = "2-8"
},
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cAo" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAm" = (
-/obj/machinery/power/supermatter_shard/crystal/engine,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cAo" = (
-/obj/structure/cable{
+/obj/structure/cable/yellow{
icon_state = "1-4"
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cAp" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
},
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Cooling Loop to Gas";
- on = 1
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cAq" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
},
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cAr" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/cable/yellow{
+ icon_state = "2-8"
},
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Gas to Mix";
- on = 0
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAs" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAt" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cAu" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/obj/machinery/power/emitter/anchored{
- dir = 4;
- state = 2
- },
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cAy" = (
/obj/structure/closet/secure_closet/freezer/kitchen/maintenance,
@@ -51001,9 +50518,17 @@
/turf/open/floor/plating,
/area/maintenance/fore/secondary)
"cAP" = (
-/obj/structure/sign/warning/fire,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
+/obj/machinery/button/door{
+ id = "Singularity";
+ name = "Shutters Control";
+ pixel_x = 25;
+ req_access_txt = "11"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"cAQ" = (
/obj/structure/chair,
/turf/open/floor/plating,
@@ -51417,10 +50942,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 8
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cBS" = (
/obj/structure/cable{
@@ -51596,89 +51118,6 @@
},
/turf/open/floor/plating,
/area/shuttle/auxillary_base)
-"cCB" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cCC" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cCD" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Mix to Engine";
- on = 0
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cCE" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"cCF" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/atmos)
-"cCG" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 10
- },
-/turf/open/space,
-/area/space/nearstation)
-"cCH" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"cCI" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"cCJ" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"cCP" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
- },
-/turf/open/space,
-/area/space/nearstation)
-"cCQ" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"cCS" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
"cCT" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 4
@@ -51698,77 +51137,33 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cDe" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/closet/radiation,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cDg" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "2-8"
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cDh" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/structure/table/reinforced,
-/obj/item/storage/toolbox/mechanical,
-/obj/item/device/flashlight,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/item/pipe_dispenser,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDi" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/table/reinforced,
-/obj/item/clothing/suit/radiation,
-/obj/item/clothing/head/radiation,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDj" = (
-/obj/structure/cable/yellow{
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cDk" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cDl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -51785,90 +51180,39 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cDo" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/item/pen,
+/obj/item/storage/belt/utility,
+/obj/item/clothing/glasses/meson,
+/obj/item/paper_bin{
+ layer = 2.9
+ },
+/obj/structure/table/glass,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cDt" = (
+/obj/structure/table,
+/obj/item/twohanded/rcl/pre_loaded,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"cDw" = (
+/obj/structure/closet/secure_closet/engineering_electrical,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cDp" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDr" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDs" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDt" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDv" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDw" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cDx" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/structure/chair/sofa{
+ icon_state = "sofamiddle";
+ dir = 4
},
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Atmos to Loop";
- on = 0
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cDy" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDz" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
+/obj/structure/table,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/storage/belt/utility,
+/obj/item/clothing/glasses/meson,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cDB" = (
@@ -51878,102 +51222,23 @@
/obj/effect/landmark/start/station_engineer,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"cDC" = (
-/obj/item/wrench,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cDD" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cDE" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "External Gas to Loop"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"cDF" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "External Gas to Loop"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cDG" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cDH" = (
-/obj/structure/rack,
-/obj/item/clothing/mask/gas{
- pixel_x = 3;
- pixel_y = 3
- },
-/obj/item/clothing/mask/gas,
-/obj/item/clothing/mask/gas{
- pixel_x = -3;
- pixel_y = -3
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cDI" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"cDJ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"cDK" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
+/turf/open/floor/plasteel/yellow/side{
dir = 4
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
-"cDL" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cDN" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/closed/wall,
-/area/engine/engineering)
-"cDY" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
+"cDO" = (
+/obj/effect/turf_decal/stripes/line{
dir = 9
},
-/turf/open/space,
+/turf/open/floor/plating/airless,
/area/space/nearstation)
"cDZ" = (
/obj/structure/cable{
@@ -51983,824 +51248,139 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"cEa" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 1
- },
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/obj/effect/turf_decal/bot,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cEd" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Port";
- dir = 4;
- network = list("ss13","engine")
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
-"cEe" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/light{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEf" = (
-/obj/machinery/ai_status_display,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cEg" = (
-/obj/machinery/status_display,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cEh" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/light{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEi" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Starboard";
- dir = 8;
- network = list("ss13","engine")
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEk" = (
-/obj/machinery/firealarm{
- dir = 4;
- pixel_x = 24
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cEl" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
- },
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
"cEm" = (
/obj/machinery/vending/autodrobe,
/turf/open/floor/wood,
/area/maintenance/bar)
-"cEr" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cEs" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Gas to Cooling Loop";
- on = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEt" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cEu" = (
-/obj/machinery/camera{
- c_tag = "Supermatter Chamber";
- dir = 2;
- network = list("engine");
- pixel_x = 23
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEv" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 8
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-8"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEw" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEx" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEy" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 4
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-4"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEz" = (
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cEA" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cEB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEC" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "Mix to Gas";
- on = 0
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cED" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEE" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
- },
-/turf/open/space,
-/area/space/nearstation)
-"cEK" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cEL" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -22
- },
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEM" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/item/tank/internals/plasma,
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cET" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/obj/effect/decal/cleanable/oil,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
-"cEU" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cEW" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cFb" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
},
-/turf/open/floor/engine,
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
-"cFc" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
+"cEv" = (
/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- icon_state = "pump_map";
- name = "Cooling Loop Bypass"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFe" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-8"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cFh" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-4"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cFj" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
+ icon_state = "1-2"
},
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
/turf/open/floor/plating,
-/area/engine/supermatter)
-"cFk" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/structure/cable/yellow{
- icon_state = "1-8"
- },
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Mix Bypass"
- },
-/turf/open/floor/engine,
/area/engine/engineering)
-"cFm" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"cFn" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+"cEw" = (
+/obj/structure/particle_accelerator/particle_emitter/left,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cEx" = (
+/obj/structure/particle_accelerator/particle_emitter/right,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cEy" = (
+/obj/effect/turf_decal/stripes/line{
dir = 6
},
-/turf/open/space,
-/area/space/nearstation)
-"cFo" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
- },
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"cFu" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
- },
-/obj/machinery/meter,
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
-"cFw" = (
-/obj/structure/sign/warning/electricshock,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cFy" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
+"cEK" = (
+/obj/structure/cable{
+ icon_state = "1-2"
},
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 1
},
-/turf/open/floor/engine,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access = null;
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
-"cFz" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 4
+"cFb" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Engine Containment Port Fore";
+ dir = 2;
+ network = list("engine")
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
-"cFA" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/turf/open/floor/plasteel/dark,
+"cFn" = (
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cFI" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFJ" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/engine,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cFK" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
+/obj/machinery/field/generator{
+ anchored = 1;
+ state = 2
},
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFL" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFM" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFN" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFO" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Aft";
- dir = 2;
- network = list("ss13","engine");
- pixel_x = 23
- },
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cFP" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFR" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFS" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cFT" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 9
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"cFU" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGd" = (
-/obj/structure/closet/crate/bin,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGe" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGf" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8;
- filter_type = "n2"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGg" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGh" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGi" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGj" = (
-/obj/structure/table,
-/obj/item/pipe_dispenser,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGk" = (
-/obj/machinery/light,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGl" = (
-/obj/structure/closet/secure_closet/engineering_personal,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGr" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGs" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGt" = (
-/obj/structure/closet/wardrobe/engineering_yellow,
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGu" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 6
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGv" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGx" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible,
-/obj/machinery/meter,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGC" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/atmospherics/components/binary/valve/digital{
- dir = 4;
- name = "Output Release";
- open = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGD" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGE" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGH" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGI" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Laser Room";
- req_access_txt = "10"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cGK" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 6
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGL" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"cGM" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
-"cGR" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGS" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cGT" = (
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGU" = (
-/obj/structure/reflector/double/anchored{
- dir = 6
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGV" = (
-/obj/structure/reflector/box/anchored{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGY" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cGZ" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/on{
- dir = 1;
- volume_rate = 200
- },
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
-"cHa" = (
-/obj/machinery/airalarm{
- dir = 4;
- pixel_x = -22
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cHb" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHc" = (
-/obj/structure/cable{
- icon_state = "0-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHd" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHe" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHg" = (
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHj" = (
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/machinery/power/emitter/anchored{
dir = 8;
state = 2
},
-/turf/open/floor/plating,
-/area/engine/engineering)
-"cHn" = (
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "0-4"
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
-"cHo" = (
-/obj/structure/reflector/single/anchored{
- dir = 9
+"cGh" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
},
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cHp" = (
-/obj/structure/reflector/single/anchored{
- dir = 5
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cHr" = (
-/obj/structure/cable{
+/obj/structure/cable/yellow{
icon_state = "1-8"
},
-/turf/open/floor/plating,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"cGr" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"cGE" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"cGU" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"cGV" = (
+/obj/machinery/the_singularitygen/tesla,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"cGZ" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"cHD" = (
/obj/structure/cable{
@@ -53139,8 +51719,13 @@
/turf/open/floor/plating,
/area/security/brig)
"cMm" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
/area/engine/engineering)
"cMC" = (
/obj/machinery/computer/security/telescreen{
@@ -53148,7 +51733,7 @@
dir = 8;
layer = 4;
name = "Engine Monitor";
- network = list("engine");
+ network = list("singularity");
pixel_x = 30
},
/obj/effect/turf_decal/stripes/line{
@@ -53159,15 +51744,24 @@
},
/area/engine/engineering)
"cMD" = (
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"cMH" = (
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"cMN" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plating,
-/area/engine/supermatter)
+/area/engine/engineering)
+"cMH" = (
+/obj/structure/particle_accelerator/particle_emitter/center,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"cMN" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"cMQ" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -53375,6 +51969,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"cQZ" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"cSz" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -53400,41 +52000,23 @@
/turf/open/floor/plasteel/dark/telecomms/mainframe,
/area/tcommsat/server)
"cSG" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/plating,
+/area/engine/engineering)
"cSH" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
},
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"cSI" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"cSJ" = (
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/obj/machinery/power/tesla_coil,
+/turf/open/floor/plating/airless,
+/area/space)
"cSK" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/obj/machinery/power/tesla_coil,
+/turf/open/floor/plating/airless,
+/area/space)
"cSL" = (
/obj/machinery/button/door{
id = "atmos";
@@ -53744,18 +52326,6 @@
},
/turf/open/floor/plating,
/area/science/xenobiology)
-"cTY" = (
-/obj/structure/sign/poster/official/safety_internals{
- pixel_x = -32
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"cTZ" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"cVb" = (
/turf/closed/wall,
/area/hallway/secondary/service)
@@ -53816,6 +52386,37 @@
dir = 6
},
/area/security/brig)
+"dnf" = (
+/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/obj/machinery/door/poddoor/preopen{
+ id = "xenobio0";
+ name = "containment blast door"
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/engine,
+/area/science/xenobiology)
+"dos" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/table/glass,
+/obj/item/extinguisher,
+/obj/item/extinguisher{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/extinguisher{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"dAS" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -53823,6 +52424,9 @@
/obj/structure/disposalpipe/segment,
/turf/closed/wall,
/area/maintenance/fore/secondary)
+"dBk" = (
+/turf/open/floor/plasteel/dark,
+/area/security/processing)
"dLQ" = (
/turf/open/floor/plasteel/red/corner{
dir = 1
@@ -53865,6 +52469,13 @@
},
/turf/open/floor/plating,
/area/security/brig)
+"ejb" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
"ejX" = (
/obj/machinery/light{
dir = 1
@@ -53908,6 +52519,26 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"ezw" = (
+/obj/structure/window/reinforced,
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "xenobio7";
+ name = "Containment Blast Doors";
+ pixel_y = 4;
+ req_access_txt = "55"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"eBn" = (
/obj/effect/turf_decal/stripes/white/line{
dir = 1
@@ -53920,6 +52551,13 @@
icon_state = "wood-broken5"
},
/area/maintenance/bar)
+"eHD" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"eRz" = (
/obj/structure/lattice,
/obj/structure/grille,
@@ -53935,6 +52573,11 @@
},
/turf/open/floor/plasteel,
/area/quartermaster/miningdock)
+"fdi" = (
+/obj/structure/lattice,
+/obj/structure/grille,
+/turf/open/space/basic,
+/area/space)
"fgi" = (
/turf/closed/wall,
/area/crew_quarters/cryopod)
@@ -53978,9 +52621,16 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/security/armory)
-"fsQ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/open/floor/plasteel/dark,
+"fFB" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "Singularity";
+ name = "radiation shutters"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
/area/engine/engineering)
"fIx" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
@@ -54045,6 +52695,9 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel/showroomfloor,
/area/space)
+"gre" = (
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"gtB" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -54148,18 +52801,61 @@
/obj/structure/closet/bombcloset/security,
/turf/open/floor/plasteel/showroomfloor,
/area/space)
+"hmW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"hyz" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "Singularity";
+ name = "radiation shutters"
+ },
+/obj/effect/turf_decal/bot{
+ dir = 2
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"hCi" = (
/obj/structure/lattice,
/turf/open/space/basic,
/area/space)
+"hDa" = (
+/obj/machinery/light{
+ dir = 8
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"hMa" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/machinery/door/airlock/external{
+ name = "Engineering External Access";
+ req_access = null;
+ req_access_txt = "10;13"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"hQd" = (
+/turf/open/space/basic,
+/area/engine/engineering)
"hSW" = (
/turf/open/floor/plasteel/red/side,
/area/security/brig)
-"ijc" = (
-/obj/structure/table,
-/obj/item/stack/sheet/metal/fifty,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
+"ieW" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"ilg" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood{
@@ -54176,6 +52872,14 @@
/obj/machinery/droneDispenser,
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
+"iqO" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Engine Containment Port Aft";
+ dir = 1;
+ network = list("engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"itG" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin,
@@ -54289,6 +52993,10 @@
/obj/structure/table/wood,
/turf/open/floor/wood,
/area/maintenance/bar)
+"jyX" = (
+/obj/structure/sign/warning/securearea,
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
"jAD" = (
/obj/structure/grille,
/turf/open/floor/plating/airless,
@@ -54333,15 +53041,6 @@
dir = 9
},
/area/security/brig)
-"jMY" = (
-/obj/structure/table,
-/obj/item/stack/cable_coil{
- pixel_x = 3;
- pixel_y = -7
- },
-/obj/item/stack/cable_coil,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"jSO" = (
/obj/machinery/light{
dir = 4
@@ -54360,6 +53059,13 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"jZh" = (
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"khb" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
@@ -54370,7 +53076,7 @@
/area/hallway/secondary/service)
"khB" = (
/obj/machinery/door/airlock/external{
- cyclelinkeddir = 4;
+ cyclelinkeddir = 0;
req_access_txt = "13"
},
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
@@ -54440,6 +53146,12 @@
icon_state = "wood-broken7"
},
/area/maintenance/bar)
+"kNw" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"kPd" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/structure/cable{
@@ -54455,13 +53167,6 @@
},
/turf/open/floor/plating,
/area/maintenance/department/medical/morgue)
-"kQq" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"kSb" = (
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
@@ -54628,27 +53333,44 @@
/obj/effect/turf_decal/bot_white,
/turf/open/floor/plasteel/dark,
/area/ai_monitored/security/armory)
-"mBv" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/binary/valve{
- dir = 4;
- name = "Output to Waste"
- },
-/turf/open/floor/engine,
+"mzz" = (
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"mHd" = (
/obj/structure/falsewall,
/turf/open/floor/plating,
/area/maintenance/bar)
+"mLm" = (
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"mMg" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"mNi" = (
/obj/machinery/light_switch{
pixel_x = -20
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"mQs" = (
+/obj/machinery/power/emitter/anchored{
+ dir = 4;
+ state = 2
+ },
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"mRe" = (
/obj/machinery/light{
dir = 8
@@ -54662,6 +53384,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/maintenance/fore/secondary)
+"mWO" = (
+/turf/open/floor/plating/airless,
+/area/space)
"mXj" = (
/turf/open/floor/plasteel/showroomfloor,
/area/space)
@@ -54671,10 +53396,6 @@
"nnM" = (
/turf/closed/wall/r_wall,
/area/security/armory)
-"noK" = (
-/obj/structure/girder,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"nsq" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -54708,10 +53429,6 @@
},
/turf/open/floor/plasteel/floorgrime,
/area/security/brig)
-"nzh" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"nAv" = (
/obj/structure/table,
/obj/item/grenade/barrier{
@@ -54783,6 +53500,13 @@
/obj/item/device/electropack/shockcollar,
/turf/open/floor/plating,
/area/maintenance/bar)
+"oaS" = (
+/obj/effect/landmark/start/station_engineer,
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"obC" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 4
@@ -54853,10 +53577,19 @@
dir = 10
},
/area/security/brig)
-"oDF" = (
-/obj/machinery/light,
+"oAQ" = (
+/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/engine/engineering)
+"oHi" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"oHU" = (
/obj/structure/cable{
icon_state = "1-2"
@@ -54880,6 +53613,21 @@
/obj/machinery/disposal/bin,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"oUs" = (
+/obj/machinery/button/door{
+ id = "Singularity";
+ name = "Shutters Control";
+ pixel_x = -25;
+ req_access_txt = "11"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"oZl" = (
/turf/open/floor/plasteel/purple/side{
tag = "icon-purple (NORTH)";
@@ -54923,6 +53671,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
+"pmD" = (
+/turf/open/space/basic,
+/area/space/nearstation)
"pzG" = (
/obj/structure/sign/poster/random{
pixel_x = -32
@@ -55089,6 +53840,14 @@
/obj/item/device/assembly/signaler,
/turf/open/floor/plating,
/area/maintenance/bar)
+"riY" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Engine Containment Starboard Aft";
+ dir = 1;
+ network = list("engine")
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"rmX" = (
/obj/structure/table,
/obj/item/reagent_containers/food/drinks/beer,
@@ -55131,11 +53890,22 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"rNn" = (
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"rWu" = (
/turf/open/floor/wood{
icon_state = "wood-broken6"
},
/area/maintenance/bar)
+"rZV" = (
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"saK" = (
/obj/structure/closet/crate,
/obj/item/target/alien,
@@ -55148,6 +53918,20 @@
/obj/item/gun/energy/laser/practice,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"spp" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "Singularity";
+ name = "radiation shutters"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/bot{
+ dir = 2
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"srd" = (
/turf/open/floor/plasteel/red/corner{
dir = 4
@@ -55170,6 +53954,12 @@
/obj/item/shovel/spade,
/turf/open/floor/plasteel/hydrofloor,
/area/hallway/secondary/service)
+"sAz" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"sGJ" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood{
@@ -55236,6 +54026,12 @@
/obj/structure/chair/office/light,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"sWi" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"sXy" = (
/obj/machinery/door/airlock/external{
name = "Security External Airlock";
@@ -55299,6 +54095,12 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/space/nearstation)
+"tHc" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 2
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"tMl" = (
/obj/effect/turf_decal/loading_area,
/turf/open/floor/plasteel/showroomfloor,
@@ -55329,21 +54131,14 @@
/obj/item/storage/box/drinkingglasses,
/turf/open/floor/wood,
/area/maintenance/bar)
-"udp" = (
-/obj/item/crowbar/large,
-/obj/structure/rack,
-/obj/item/device/flashlight,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"uhH" = (
-/obj/item/wrench,
-/obj/item/weldingtool,
-/obj/item/clothing/head/welding{
- pixel_x = -3;
- pixel_y = 5
+"ugZ" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-4"
},
-/obj/structure/rack,
-/turf/open/floor/plasteel/dark,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
"ujc" = (
/obj/machinery/vending/cigarette,
@@ -55401,6 +54196,20 @@
},
/turf/open/floor/wood,
/area/maintenance/bar)
+"uuA" = (
+/obj/structure/table,
+/obj/item/storage/toolbox/electrical{
+ pixel_x = 2;
+ pixel_y = 4
+ },
+/obj/item/storage/toolbox/electrical{
+ pixel_x = -2
+ },
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"uvc" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/wood,
@@ -55408,6 +54217,12 @@
"uvy" = (
/turf/closed/wall/r_wall,
/area/space)
+"uAt" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plasteel/yellow/side,
+/area/engine/engineering)
"uMX" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -55487,6 +54302,12 @@
},
/turf/open/floor/plasteel,
/area/ai_monitored/storage/eva)
+"vie" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"vxh" = (
/obj/structure/table,
/obj/effect/spawner/lootdrop/maintenance{
@@ -55517,6 +54338,33 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"vDd" = (
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "xenobio0";
+ name = "Containment Blast Doors";
+ pixel_y = 4;
+ req_access_txt = "55"
+ },
+/obj/structure/window/reinforced{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/light,
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
+"vHQ" = (
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"vNJ" = (
/obj/machinery/vending/clothing,
/turf/open/floor/wood,
@@ -55740,6 +54588,22 @@
/obj/effect/spawner/lootdrop/grille_or_trash,
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"xJs" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"xMh" = (
+/obj/structure/grille,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"xTa" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
@@ -55768,6 +54632,14 @@
},
/turf/open/floor/plasteel/showroomfloor,
/area/security/warden)
+"yam" = (
+/obj/effect/landmark/start/atmospheric_technician,
+/turf/open/floor/plasteel,
+/area/engine/atmos)
+"yck" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/space)
"ycu" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -78747,10 +77619,10 @@ abc
abc
afu
abc
-aaa
-aaa
-aaa
-aaa
+abc
+abc
+abc
+abc
aaa
aaa
aaa
@@ -79016,7 +77888,7 @@ aln
aiU
aaa
aiU
-anN
+aln
aiU
aaa
aaa
@@ -79124,8 +77996,8 @@ aaa
aaa
aaa
aaa
-aaT
-aaT
+aaa
+aaa
aaa
aaa
aaa
@@ -79269,11 +78141,11 @@ aaf
aaf
aaf
aiU
-alp
+dBk
aiU
aaa
aiU
-alp
+dBk
aiU
aaf
aaf
@@ -79369,21 +78241,21 @@ cjJ
aaa
aaa
crn
-aaf
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
-aaf
-ctv
-aaT
-aaT
aaa
aaa
aaa
@@ -79530,7 +78402,7 @@ cxJ
aiU
aiT
aiU
-cxP
+cxJ
aiU
aiV
aiT
@@ -79626,21 +78498,21 @@ cjJ
aaa
aaa
crn
-aaf
-aaT
-ctv
-ctv
-ctv
-ctv
-ctv
-ctv
-ctv
-aaT
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
-aaf
-ctv
-ctv
-aaT
aaa
aaa
aaa
@@ -79883,20 +78755,20 @@ cjJ
aaf
aaf
cig
-aaf
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaT
-aaf
-aaf
-aaf
-aaf
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -80141,17 +79013,17 @@ ccw
ccw
ccw
aaa
-aaf
-aaa
-aaa
-aaf
-aaa
-aaa
-aaf
aaa
aaa
aaa
-aaf
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -80398,19 +79270,19 @@ cqw
cqO
crp
aaa
-aaf
-aaa
-aaa
-aaf
-aaa
-aaa
-aaf
aaa
aaa
aaa
-aaT
-aaT
-aaT
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -80654,20 +79526,20 @@ cgR
cgR
cqN
cro
-cEl
-cEE
-cEl
-cFm
-csx
-cFm
-cFm
-csx
-csv
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
-aaT
-ctv
-aaT
aaa
aaa
aaa
@@ -80911,20 +79783,20 @@ ciN
cji
cDZ
crr
-crJ
-crT
-crJ
-cFn
-css
-csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-ctv
-aaT
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -81164,24 +80036,24 @@ ccw
cfL
coH
cBO
-cgR
+cnv
cDB
cqP
crq
-crZ
-crT
-crZ
-cFo
-css
-cFm
-cFm
-css
-csv
+pmD
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
+aaa
aaa
aaa
-aaT
-ctv
-aaT
aaa
aaa
aaa
@@ -81425,21 +80297,21 @@ cgR
cqx
cqR
crp
-crJ
-crT
-crJ
-cFn
-css
-csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-ctv
-aaT
-aaa
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+gXs
+hCi
aaa
aaa
aaa
@@ -81682,25 +80554,25 @@ cpX
cqz
cqQ
ccw
-crH
-crT
-crZ
-cFo
-css
-cFm
-cFm
-css
-csv
+pmD
aaa
aaa
-aaT
-ctv
-aaT
+uvy
+uvy
+uvy
aaa
aaa
aaa
aaa
aaa
+uvy
+uvy
+uvy
+hCi
+hCi
+aaa
+aaa
+aaa
aaa
aaa
aaa
@@ -81939,24 +80811,24 @@ clJ
cig
cig
ccw
-crJ
-crT
-crJ
-cFn
-css
-csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-ctv
-aaT
-aaa
+pmD
+pmD
+uvy
+uvy
+uvy
+uvy
+uvy
aaa
aaa
aaa
+uvy
+uvy
+uvy
+uvy
+uvy
+hCi
+hCi
+hCi
aaa
aaa
aaa
@@ -82190,30 +81062,30 @@ ccw
ccw
ccw
cnZ
-coH
+oHi
+cpt
+cpt
cpt
-cpZ
-cig
cqS
ccw
-crH
-crT
-crZ
-cFo
-css
-cFm
-cFm
-css
-csv
-aaa
-aaa
-aaT
-ctv
-aaT
-aaa
-aaa
-aaf
-aaa
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+cpy
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+uvy
+hCi
aaa
aaa
aaa
@@ -82449,28 +81321,28 @@ cnt
cob
coL
cDo
+oaS
cgR
-cqA
cqT
-csg
+ccw
crJ
-crU
+ccw
csb
cFn
css
+cFn
csx
-csx
-css
-csb
-aaf
-aaf
-aaT
-aaT
-aaT
-gXs
-aaf
-aaf
-aaf
+ccw
+ccw
+ccw
+cGE
+cFn
+jZh
+mzz
+mzz
+ccw
+uvy
+yck
aaa
aaa
aaa
@@ -82707,27 +81579,27 @@ cgw
coK
cpu
cMm
-ccw
-ccw
-ccw
+ckH
+uAt
+hMa
crK
cEK
csa
-csj
-csa
-csa
+gre
+mQs
+gre
cGr
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
+vHQ
+hDa
+vHQ
+mLm
+gre
+mQs
+gre
+gre
+ccw
+uvy
+hCi
aaa
aaa
aaa
@@ -82960,31 +81832,31 @@ ckG
clJ
cmF
cgR
-cgI
+cnZ
chF
ciO
-cqc
-cqc
-cqc
-cEd
-cEr
-cEL
+oaS
+cgR
+cqT
+ccw
+cig
+ccw
cFb
-cFu
+gre
cFI
-cGd
-cGs
-cGr
+gre
+gre
+gre
+gre
+gre
+gre
+gre
+cFI
+gre
+iqO
ccw
-ccw
-ccw
-ccw
-ccw
-ccw
-aaa
-eRz
-aaT
-eRz
+uvy
+fdi
aaa
aaa
aaa
@@ -83217,30 +82089,30 @@ cTa
ceZ
clQ
cgR
-cgx
-coM
-cpv
-cqb
-cqb
-cqb
-cqb
+cnZ
+oHi
+cgR
+cgR
+cgR
+cqT
+fFB
cEs
-cqb
-cqb
+gre
+rNn
cAp
-cqb
+xJs
cAo
-cGt
-cgx
-jMY
-csd
-cHa
-csd
-uhH
+xJs
+cAo
+xJs
+cAo
+xJs
+cQZ
+gre
+gre
+gre
ccw
-aaa
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -83475,29 +82347,29 @@ cTd
ckF
ckF
cgK
-cDg
-cDp
-cqe
-cqB
-cqB
-cEe
+oHi
+cgR
+cgR
+cgR
+cqT
+fFB
csP
-cAl
-cFc
+gre
+gre
cAq
-cFJ
+mWO
cSH
-cGu
-cGH
-fsQ
-fsQ
-cGR
-csd
-csd
+mWO
+cSH
+mWO
+cSH
+mWO
+cSH
+mWO
+gre
+gre
ccw
-aaa
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -83735,26 +82607,26 @@ cgJ
chG
cpx
cqd
-cDC
+cjc
cqU
-cEf
-cEt
-cEM
-csA
-cEg
+fFB
+csP
+gre
+rNn
+cAq
cFK
-cGe
-cGv
-cGI
-cGS
-cHb
-cHg
-cHn
-oDF
+aoV
+aoV
+cFK
+gXs
+aaa
+aoV
+aoV
+cFK
+mWO
+gre
ccw
-aaf
-aaT
-ctv
+uvy
aaT
aaf
aaa
@@ -83988,30 +82860,30 @@ cig
cig
cTf
cgR
-ccw
+cnZ
cDh
cpy
-cDv
-cDD
-cqU
-cMD
-cEu
-cEz
-cEz
-cMD
-cFL
-cGf
-kQq
-cMm
-ciZ
-cHc
-cAu
-cAu
-ciZ
ccw
+hyz
+ccw
+ccw
+cqY
+cqY
+cqY
+cAq
+aoV
+aoV
+aoV
+hCi
+aaf
aaa
-aaT
-ctv
+aoV
+aoV
+aoV
+mWO
+gre
+ccw
+uvy
aaT
aaa
aaa
@@ -84245,30 +83117,30 @@ ckI
clJ
cmL
cBO
+cnZ
+cDh
ccw
-chV
-cpx
cqf
cqD
-cMD
+oUs
crs
cEv
-cEv
-cFe
-cMD
-cFM
-czE
-kQq
-ccw
-cGT
-csd
-csd
-csd
-csd
-ccw
+ugZ
+cqY
+cAq
+aoV
+aoV
+aaa
+aaa
aaf
-aaT
-ctv
+aaa
+aaa
+aoV
+aoV
+mWO
+gre
+ccw
+uvy
aaT
aaa
aaa
@@ -84502,30 +83374,30 @@ ckK
clJ
cmL
cgR
-cgL
+cnZ
chX
-cpx
+spp
cqh
cqF
cra
crI
cEw
-cEw
-cEw
-cFw
-cFN
-csH
-csR
-cMm
-cGU
-csd
-csd
-cHo
-csd
-ccw
+ejb
+cqY
+cAq
aaa
-aaT
-ctv
+aaa
+aaa
+cDO
+cGU
+sWi
+aaa
+hCi
+cFK
+mWO
+gre
+ccw
+uvy
aaT
aaa
aaa
@@ -84759,30 +83631,30 @@ ckI
clJ
cmL
cnv
-cMm
-chX
-cpx
+cnZ
+eHD
+ccw
cqg
cqE
cqZ
crt
cMH
cAm
-cMH
+mMg
cMN
-cFO
-cSI
-cSI
-cMm
+gXs
+aaf
+aaf
+kNw
cGV
-csd
-cGV
-noK
-csd
+tHc
+aaf
+aaf
+gXs
+mWO
+gre
ccw
-aaa
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -85016,30 +83888,30 @@ cfb
ccw
cmN
cgR
-cgL
-chX
-cpx
+cnZ
+eHD
+hyz
cqj
cSG
crb
cru
cEx
-cEx
-cEx
-cAP
-cFP
-csI
-cAt
-cMm
-csd
-csd
-csd
-cHp
-csd
+oAQ
+cqY
+cAq
+cFK
+hCi
+aaa
+hmW
+sAz
+ieW
+aaa
+aaa
+aaa
+mWO
+gre
ccw
-aaf
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -85273,30 +84145,30 @@ cfb
clM
cfz
cgR
+cnZ
+eHD
ccw
-cii
-cpx
cqi
cMD
cAP
-crv
-cEy
-cEy
-cFh
cMD
-cFM
-czE
-kQq
-ccw
-cGT
-csd
-csd
-csd
-csd
-ccw
+cMD
+cEy
+cqY
+cAq
+aoV
+aoV
+aaa
+aaa
aaf
-aaT
-ctv
+aaa
+aaa
+aoV
+aoV
+mWO
+gre
+ccw
+uvy
aaT
aaa
aaa
@@ -85530,30 +84402,30 @@ cfb
cfa
cje
cgR
+cnZ
+eHD
+cpy
ccw
-cDi
-cDr
-cDw
-cDE
-cEa
-cMD
-cEz
-cEz
-cEz
-cMD
-cFR
-cSJ
-kQq
-cMm
-ciZ
-cHd
-cHj
-cHd
-ciZ
+hyz
ccw
+ccw
+cqY
+cqY
+cqY
+cAq
+aoV
+aoV
aaa
-aaT
-ctv
+aaa
+aaf
+hCi
+aaa
+aoV
+aoV
+mWO
+gre
+ccw
+uvy
aaT
aaa
aaa
@@ -85787,30 +84659,30 @@ ckL
cmF
cje
cgR
-cMm
-chX
+cnZ
+cjS
cpD
cDw
cDF
cEa
-cEg
-cEA
-cET
-cFj
-cEf
-cFS
-cGg
-mBv
-cGI
-cGS
-cHe
-cHe
-cHr
-oDF
+fFB
+csP
+gre
+rNn
+cAq
+cFK
+aoV
+aaa
+aaa
+gXs
+cFK
+aoV
+aoV
+cFK
+mWO
+gre
ccw
-aaf
-aaT
-ctv
+uvy
aaT
aaf
aaa
@@ -86044,30 +84916,30 @@ ceq
clQ
cje
cgR
-cMm
-cDj
-cDs
-cql
-cDG
-cDG
-cEh
-cEB
-cEU
-cFk
-cAs
-cFT
+cnZ
+cjS
+cgR
+cgR
+cgR
+cqT
+fFB
+csP
+gre
+gre
+cAq
+mWO
cSK
-cGx
-cGK
-nzh
-nzh
-cGY
-csd
-csd
+mWO
+cSK
+mWO
+cSK
+mWO
+cSK
+mWO
+gre
+gre
ccw
-aaf
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -86301,30 +85173,30 @@ ckO
ckH
cja
cny
-ccw
-cip
+cnZ
+cjS
cnx
cDx
cqb
-cqb
-cqb
-cEC
-cqb
-cqb
+cqT
+fFB
+cEs
+gre
+rNn
cAr
-cqb
+xJs
cGh
-cGC
-cey
-ijc
-csd
-cEk
-csd
-udp
+xJs
+cGh
+xJs
+cGh
+xJs
+vie
+gre
+gre
+gre
ccw
-aaf
-aaT
-ctv
+uvy
aaT
aaa
aaa
@@ -86558,30 +85430,30 @@ cfb
clR
cgR
cgR
-cMm
-cir
+cnZ
+cjS
cDt
cDy
cqC
+cqT
+ccw
+ccw
+ccw
crc
-cEi
-cED
-crc
-crc
-cFy
+gre
cBR
-cGi
-cGD
-cGL
+gre
+gre
+gre
+gre
+gre
+gre
+gre
+cBR
+gre
+riY
ccw
-ccw
-ccw
-ccw
-ccw
-ccw
-aaa
-aaT
-aaT
+uvy
aaT
aaa
aaa
@@ -86819,27 +85691,27 @@ cDe
cDk
coc
cqa
-cig
-ccw
-ccw
+uuA
+uAt
+hMa
czF
+cEK
csd
-csd
-cFz
+gre
cFU
-cGj
+gre
cGE
-cGM
+vHQ
cGZ
-aag
-aaa
-aaf
-aaa
-aaa
-aaa
-aaa
-aaf
-aaa
+vHQ
+csx
+gre
+cFU
+gre
+gre
+ccw
+uvy
+hCi
aaa
aaa
aaa
@@ -87075,28 +85947,28 @@ cgU
cgU
cis
cjN
-cDz
-cDH
-cMm
-csd
-crM
-crV
-crV
-cFA
-csd
-cGk
+cgR
+cgR
+cqT
ccw
-aag
-aag
-aag
-aaf
-aaf
-aaf
-aaf
-gXs
-aaf
-aaf
-aaf
+crM
+ccw
+crV
+cFn
+xMh
+cFn
+mLm
+ccw
+ccw
+ccw
+cGr
+cFn
+rZV
+mzz
+mzz
+ccw
+uvy
+yck
aaf
aaa
aaa
@@ -87328,32 +86200,32 @@ ccw
cet
cfd
cfB
-cfI
-cgQ
+cfB
+cfB
cjS
cjN
-cqm
cgR
-crd
-cEk
-crL
-cEW
-cse
-cse
-csu
-cGl
+cgR
+cqT
ccw
-aaa
-aaa
-aaf
-aaa
-aaf
-ctv
-aaT
-aaa
-aaa
-aaf
-aaa
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+cpy
+ccw
+ccw
+ccw
+ccw
+ccw
+ccw
+jyX
+uvy
+hCi
aaa
aaa
aaa
@@ -87589,28 +86461,28 @@ ccw
ccw
cDl
cjN
-cjh
-cDI
+cgR
+cgR
+cgR
+cqS
ccw
ccw
ccw
ccw
ccw
-cMm
-cMm
-cMm
ccw
-aaf
-aaf
-aaf
-aaf
-aaf
-ctv
-aaT
-aaa
-aaa
-aaf
+hQd
+pmD
+pmD
+pmD
+uvy
+uvy
+uvy
+uvy
+uvy
aaa
+yck
+hCi
aaa
aaa
aaa
@@ -87847,7 +86719,7 @@ ccw
cDm
cjP
ckF
-cDJ
+ckF
ckF
cpE
cjR
@@ -87860,13 +86732,13 @@ aaa
aaa
aaa
aaa
-ctv
-ctv
-ctv
-aaT
-aaa
-aaa
-aaa
+pmD
+uvy
+uvy
+uvy
+hCi
+hCi
+hCi
aaa
aaa
aaa
@@ -88089,7 +86961,7 @@ caE
cbA
ccy
bOd
-bOd
+yam
bQu
cfO
cgW
@@ -88111,17 +86983,17 @@ ccw
crX
cfK
aag
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaT
-aaT
-aaT
-aaT
-aaa
+hCi
+hCi
+hCi
+hCi
+hCi
+hCi
+gXs
+gXs
+gXs
+gXs
+hCi
aaa
aaa
aae
@@ -88334,7 +87206,7 @@ bIF
bOZ
bQp
bRA
-bOd
+yam
bTO
bUL
bVU
@@ -88361,7 +87233,7 @@ ccw
cpa
cjc
cqo
-cDL
+ccw
cjk
cjm
ccw
@@ -88377,7 +87249,7 @@ aaa
aaa
aaa
aaa
-eRz
+gXs
aaa
aaa
aaa
@@ -88618,7 +87490,7 @@ ccw
ccw
cpI
ccw
-cDL
+ccw
cjl
cjQ
cjV
@@ -88875,7 +87747,7 @@ cig
cpb
ciZ
cqp
-cDN
+cig
cjT
cgR
crP
@@ -89132,7 +88004,7 @@ cig
cig
czg
cig
-cDN
+cig
crh
crA
crR
@@ -89389,7 +88261,7 @@ cig
cpc
cpJ
cpc
-cDN
+cig
cqY
cqY
cqY
@@ -89622,7 +88494,7 @@ bRF
bSM
bTS
bUQ
-agd
+bWa
bUO
bVZ
bVZ
@@ -89646,7 +88518,7 @@ cig
cpd
czM
cpd
-cDN
+cig
aaa
aaa
aaa
@@ -89879,8 +88751,8 @@ bRE
bSJ
bPe
bOd
-cCB
-cCC
+bOd
+bOd
bXT
bXT
bXT
@@ -89903,7 +88775,7 @@ ccw
cpd
czL
cpd
-cDL
+ccw
aaf
aaa
aaa
@@ -90137,7 +89009,7 @@ bSM
bTU
bUS
bUS
-cCD
+bUS
bXU
bUS
bUS
@@ -90160,7 +89032,7 @@ aaa
cpd
cpM
cpd
-cCQ
+aaf
aaf
aaa
aaa
@@ -90394,7 +89266,7 @@ bSN
bTT
bUR
bWb
-cCE
+bUR
bTT
bUR
bZJ
@@ -90417,7 +89289,7 @@ aaa
aaa
czN
aaa
-cCQ
+aaf
aaf
aaa
aaa
@@ -90674,7 +89546,7 @@ aaa
aaa
aaa
aaa
-cCQ
+aaf
aaf
aaa
aaa
@@ -90908,7 +89780,7 @@ bSP
bPh
bQy
bRI
-cCF
+bQy
bPh
bQy
bRI
@@ -90931,7 +89803,7 @@ aaa
aaa
aaa
aaa
-cCQ
+aaf
aaf
aaa
aaa
@@ -91165,16 +90037,16 @@ aaf
bRK
aaf
bVv
-cCG
-cCH
-cCI
-cCJ
-cCI
-cCH
-cCI
-cCJ
-cCI
-cCP
+aaf
+bRK
+aaf
+bVv
+aaf
+bRK
+aaf
+bVv
+aaf
+aaf
bLK
chg
bLK
@@ -91188,7 +90060,7 @@ aoV
aoV
aoV
aoV
-cCQ
+aaf
aoV
aaa
aaa
@@ -91431,7 +90303,7 @@ bPj
bQA
bPj
bOh
-cCQ
+aaf
bLK
cyG
bLK
@@ -91445,7 +90317,7 @@ aoV
aoV
aoV
aoV
-cCQ
+aaf
aoV
aaa
aaa
@@ -91688,21 +90560,21 @@ cbI
ccC
cdD
bOh
-cCG
-cCS
-cCS
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cCI
-cDY
+aaf
+aah
+aah
+aaf
+aaf
+aaf
+aaf
+aaf
+aah
+aah
+aah
+aah
+aah
+aah
+aaf
aaf
aaf
aaf
@@ -97857,7 +96729,7 @@ bDb
bDb
bDb
bDb
-cNW
+bDb
cNW
cQB
czY
@@ -98110,11 +96982,11 @@ bJN
bRT
bEm
bEm
+bJN
+bRT
+bEm
+bEm
bDb
-cfr
-cho
-bDb
-aaa
cNW
cQB
czY
@@ -98353,7 +97225,7 @@ bJJ
bKY
bMi
bNo
-bIP
+bOx
bPA
bJN
bRU
@@ -98367,12 +97239,12 @@ bJN
bRU
bEm
bEm
+bJN
+bRU
+bEm
+bEm
bDb
-cgi
-chq
-ccQ
-aaa
-cOT
+cNW
cQB
czY
cOT
@@ -98624,12 +97496,12 @@ bJN
bRU
bEm
cBz
+bJN
+bRU
+bEm
+cBz
bDb
-cgi
-chq
-ccQ
-aaa
-cOT
+cNW
cQB
czY
cOT
@@ -98868,7 +97740,7 @@ bLa
bMi
bNo
bPy
-bPA
+dos
bJN
bRW
bTb
@@ -98881,11 +97753,11 @@ bJN
bZV
caV
cbS
-bDb
+bJN
cgl
chs
+dnf
bDb
-aaa
cNW
cQB
czY
@@ -99138,11 +98010,11 @@ bVi
bRV
bTa
cbR
+bVi
+bRV
+bTa
+vDd
bDb
-cgk
-chr
-bDb
-aaa
cNW
cBN
czY
@@ -99395,12 +98267,12 @@ bZa
bMi
bMi
bRZ
-cTY
-cTZ
-chu
-ccQ
-aaf
-cOT
+bZa
+bMi
+bMi
+bRZ
+bDb
+cNW
cQB
cAa
cOT
@@ -99651,13 +98523,13 @@ bUf
bTc
bRX
bTc
+bUf
+bTc
+bRX
+bTc
cbT
-ccP
-ccP
-cht
-ckn
csk
-czQ
+cko
czU
czZ
cOT
@@ -99909,12 +98781,12 @@ bZb
bRZ
bMi
bMi
-cfy
-cgn
-cjB
-ccQ
-aaf
-cOT
+bZb
+bRZ
+bMi
+bMi
+bDb
+cNW
cgm
czY
cOT
@@ -100166,11 +99038,11 @@ bVi
bZW
bTd
bUg
+bVi
+ezw
+bTd
+bUg
bDb
-bDb
-bDb
-bDb
-aaa
cNW
cgm
czY
@@ -100423,11 +99295,11 @@ bJN
bZX
caW
cbU
+bJN
+bWn
+bXg
+bYh
bDb
-aaf
-aaf
-aaa
-aaa
cNW
cgm
czY
@@ -100680,12 +99552,12 @@ bJN
bEm
bEm
bRU
+bJN
+bEm
+bEm
+bRU
bDb
-aaf
-aaa
-aaa
-aaa
-cOT
+cNW
cgm
czY
cOT
@@ -100937,12 +99809,12 @@ bJN
bEm
bEm
bRU
+bJN
+bEm
+bEm
+bRU
bDb
-aaf
-aaa
-aaa
-aaa
-cOT
+cNW
cgm
czY
cOT
@@ -101194,12 +100066,12 @@ bJN
bEm
bEm
bUi
+bJN
+bEm
+bEm
+bUi
bDb
-aaf
-aaf
-aaa
-aaa
-cOT
+cNW
cgm
czY
cOT
@@ -101452,10 +100324,10 @@ bDb
bDb
bDb
bDb
-cNW
-cNW
-cNW
-cNW
+bDb
+bDb
+bDb
+bDb
cNW
czX
cAc
diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 7951c5a282..b1b3f234f9 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -9182,10 +9182,6 @@
},
/turf/open/floor/circuit/green,
/area/engine/supermatter)
-"ayK" = (
-/obj/machinery/power/supermatter_shard/crystal/engine,
-/turf/open/floor/engine,
-/area/engine/supermatter)
"ayL" = (
/obj/machinery/atmospherics/pipe/manifold/general/visible{
dir = 4
@@ -50251,6 +50247,10 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/machinery/power/emitter{
+ anchored = 1;
+ state = 2
+ },
/turf/open/floor/plating/airless,
/area/engine/engineering)
"cdE" = (
@@ -51319,6 +51319,7 @@
dir = 8;
network = list("singularity")
},
+/obj/machinery/power/grounding_rod,
/turf/open/floor/plating/airless,
/area/engine/engineering)
"cfC" = (
@@ -52290,7 +52291,6 @@
/turf/open/space,
/area/space/nearstation)
"chu" = (
-/obj/structure/reagent_dispensers/fueltank,
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/engine/engineering)
@@ -53055,10 +53055,10 @@
"cjb" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
- icon_state = "2-4"
+ icon_state = "4-8"
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "2-4"
},
/turf/open/space,
/area/space/nearstation)
@@ -53074,28 +53074,11 @@
/turf/open/floor/plating,
/area/engine/engineering)
"cje" = (
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/effect/turf_decal/stripes/line{
dir = 4
},
/turf/open/floor/plating,
/area/engine/engineering)
-"cjf" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engpa";
- name = "Engineering Chamber Shutters"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"cjg" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/stripes/line{
@@ -53660,13 +53643,6 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"ckx" = (
-/obj/structure/cable,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
"cky" = (
/obj/structure/cable,
/obj/effect/turf_decal/stripes/line{
@@ -53682,6 +53658,7 @@
/obj/effect/turf_decal/stripes/corner{
dir = 8
},
+/obj/machinery/power/grounding_rod,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"ckA" = (
@@ -53690,35 +53667,11 @@
id = "engpa";
name = "Engineering Chamber Shutters"
},
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
/turf/open/floor/plating,
/area/engine/engineering)
-"ckB" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"ckC" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel/neutral,
-/area/engine/engineering)
"ckD" = (
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/neutral,
@@ -54289,20 +54242,9 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"clS" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
/obj/machinery/field/generator{
- anchored = 1
- },
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
-"clT" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/field/generator{
- anchored = 1
+ anchored = 1;
+ state = 2
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
@@ -54315,19 +54257,6 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"clV" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engpa";
- name = "Engineering Chamber Shutters"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"clW" = (
/obj/structure/rack,
/obj/item/crowbar,
@@ -54337,9 +54266,6 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"clX" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -55205,9 +55131,6 @@
id = "engpa";
name = "Engineering Chamber Shutters"
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/effect/turf_decal/stripes/line{
dir = 2
},
@@ -55893,9 +55816,6 @@
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/effect/turf_decal/stripes/line{
dir = 1
},
@@ -56455,6 +56375,10 @@
/turf/open/floor/plating,
/area/engine/engineering)
"cqr" = (
+/obj/structure/particle_accelerator/particle_emitter/left{
+ icon_state = "emitter_left";
+ dir = 8
+ },
/turf/open/floor/plating,
/area/engine/engineering)
"cqs" = (
@@ -56463,6 +56387,7 @@
/area/engine/engineering)
"cqt" = (
/obj/structure/cable,
+/obj/machinery/particle_accelerator/control_box,
/turf/open/floor/plating,
/area/engine/engineering)
"cqu" = (
@@ -57024,7 +56949,7 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"crJ" = (
-/obj/item/wrench,
+/obj/machinery/the_singularitygen/tesla,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"crK" = (
@@ -57065,7 +56990,10 @@
/turf/open/floor/plating,
/area/engine/engineering)
"crO" = (
-/obj/item/weldingtool/largetank,
+/obj/structure/particle_accelerator/fuel_chamber{
+ icon_state = "fuel_chamber";
+ dir = 8
+ },
/turf/open/floor/plating,
/area/engine/engineering)
"crP" = (
@@ -57843,7 +57771,10 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"ctp" = (
-/obj/item/wrench,
+/obj/structure/particle_accelerator/particle_emitter/right{
+ icon_state = "emitter_right";
+ dir = 8
+ },
/turf/open/floor/plating,
/area/engine/engineering)
"ctq" = (
@@ -58656,9 +58587,6 @@
/obj/structure/cable{
icon_state = "1-8"
},
-/obj/structure/cable{
- icon_state = "1-2"
- },
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/engine/engineering)
@@ -58713,6 +58641,7 @@
dir = 8
},
/obj/effect/turf_decal/bot,
+/obj/structure/reagent_dispensers/fueltank,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cva" = (
@@ -59870,24 +59799,6 @@
dir = 4
},
/area/crew_quarters/fitness/recreation)
-"cxA" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/field/generator{
- anchored = 1
- },
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
-"cxB" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/field/generator{
- anchored = 1
- },
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
"cxD" = (
/obj/structure/rack,
/obj/item/crowbar,
@@ -60707,13 +60618,6 @@
},
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"czp" = (
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/plating/airless,
-/area/space/nearstation)
"czq" = (
/obj/structure/cable{
icon_state = "0-2"
@@ -60727,33 +60631,9 @@
icon_state = "1-2"
},
/obj/effect/turf_decal/stripes/corner,
+/obj/machinery/power/grounding_rod,
/turf/open/floor/plating/airless,
/area/space/nearstation)
-"czs" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engpa";
- name = "Engineering Chamber Shutters"
- },
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"czt" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/turf/open/floor/plasteel/neutral,
-/area/engine/engineering)
"czu" = (
/obj/structure/cable/white{
icon_state = "0-2"
@@ -61355,10 +61235,10 @@
"cAI" = (
/obj/structure/lattice/catwalk,
/obj/structure/cable{
- icon_state = "1-4"
+ icon_state = "4-8"
},
/obj/structure/cable{
- icon_state = "4-8"
+ icon_state = "1-4"
},
/turf/open/space,
/area/space/nearstation)
@@ -61370,11 +61250,7 @@
/turf/open/space,
/area/space/nearstation)
"cAK" = (
-/obj/machinery/power/rad_collector/anchored,
/obj/effect/decal/cleanable/dirt,
-/obj/structure/cable{
- icon_state = "0-4"
- },
/obj/effect/turf_decal/stripes/line{
dir = 4
},
@@ -62960,6 +62836,7 @@
dir = 8;
network = list("singularity")
},
+/obj/machinery/power/grounding_rod,
/turf/open/floor/plating/airless,
/area/engine/engineering)
"cDW" = (
@@ -63843,6 +63720,12 @@
icon_state = "0-2"
},
/obj/effect/turf_decal/stripes/line,
+/obj/machinery/power/emitter{
+ anchored = 1;
+ dir = 1;
+ icon_state = "emitter";
+ state = 2
+ },
/turf/open/floor/plating/airless,
/area/engine/engineering)
"cFI" = (
@@ -67649,9 +67532,6 @@
dir = 5
},
/area/science/xenobiology)
-"cNh" = (
-/turf/open/floor/plasteel/vault/killroom,
-/area/science/xenobiology)
"cNi" = (
/obj/machinery/light/small{
dir = 1
@@ -67662,7 +67542,9 @@
name = "xenobiology camera";
network = list("ss13","xeno","rd")
},
-/turf/open/floor/plasteel/vault/killroom,
+/turf/open/floor/plasteel/vault{
+ dir = 5
+ },
/area/science/xenobiology)
"cNj" = (
/obj/structure/closet/crate{
@@ -68378,26 +68260,6 @@
"cON" = (
/turf/open/floor/circuit/green,
/area/science/xenobiology)
-"cOO" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 2;
- external_pressure_bound = 140;
- name = "killroom vent";
- pressure_checks = 0
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"cOP" = (
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"cOQ" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
- dir = 2;
- external_pressure_bound = 120;
- name = "server vent"
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
"cOR" = (
/turf/closed/wall/r_wall,
/area/science/research)
@@ -69153,24 +69015,6 @@
dir = 1
},
/area/science/xenobiology)
-"cQw" = (
-/obj/machinery/atmospherics/pipe/manifold/general/hidden{
- dir = 8
- },
-/turf/open/floor/plasteel/vault/killroom,
-/area/science/xenobiology)
-"cQx" = (
-/obj/machinery/atmospherics/pipe/simple/general/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/vault/killroom,
-/area/science/xenobiology)
-"cQy" = (
-/obj/machinery/atmospherics/pipe/simple/general/hidden{
- dir = 9
- },
-/turf/open/floor/plasteel/vault/killroom,
-/area/science/xenobiology)
"cQz" = (
/obj/structure/closet/wardrobe/science_white,
/obj/machinery/light/small{
@@ -69874,7 +69718,6 @@
icon_state = "0-4"
},
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/general/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"cSg" = (
@@ -69885,7 +69728,7 @@
icon_state = "2-8"
},
/obj/machinery/door/airlock/research/glass{
- name = "Xenobiology Kill Room";
+ name = "Xenobiology Isolation Pin";
req_access_txt = "47"
},
/obj/effect/turf_decal/stripes/line{
@@ -70675,13 +70518,19 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTR" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- dir = 1;
- min_temperature = 80;
- on = 1;
- target_temperature = 80
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/table/glass,
+/obj/item/extinguisher,
+/obj/item/extinguisher{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/extinguisher{
+ pixel_x = 5;
+ pixel_y = 5
},
-/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTS" = (
@@ -72377,9 +72226,6 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cXm" = (
-/obj/machinery/computer/camera_advanced/xenobio{
- dir = 8
- },
/obj/machinery/status_display{
pixel_x = 32
},
@@ -100905,6 +100751,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall/r_wall,
/area/science/circuit)
+"gsR" = (
+/turf/open/space,
+/area/space)
"gKr" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 1
@@ -100964,6 +100813,25 @@
},
/turf/open/floor/plasteel,
/area/maintenance/port/aft)
+"htt" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/table/glass,
+/obj/item/extinguisher,
+/obj/item/extinguisher{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/extinguisher{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"hGT" = (
/obj/machinery/door/firedoor,
/obj/structure/cable/white{
@@ -100995,6 +100863,9 @@
dir = 9
},
/area/science/circuit)
+"hRG" = (
+/turf/open/space/basic,
+/area/space/nearstation)
"iQh" = (
/obj/structure/bodycontainer/morgue{
dir = 1
@@ -101053,6 +100924,9 @@
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel/neutral,
/area/medical/morgue)
+"jKb" = (
+/turf/open/space,
+/area/space/nearstation)
"kwx" = (
/obj/effect/turf_decal/loading_area,
/turf/open/floor/plasteel/whitepurple/corner,
@@ -101078,6 +100952,9 @@
dir = 5
},
/area/crew_quarters/locker)
+"lkn" = (
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"loI" = (
/obj/machinery/autolathe,
/obj/machinery/door/window/southleft{
@@ -101093,6 +100970,10 @@
dir = 4
},
/area/science/lab)
+"lxv" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space/nearstation)
"lEl" = (
/obj/effect/turf_decal/stripes/line{
dir = 1
@@ -101137,6 +101018,13 @@
dir = 1
},
/area/science/circuit)
+"mqk" = (
+/obj/structure/particle_accelerator/end_cap{
+ icon_state = "end_cap";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"mvm" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/cable/white{
@@ -101148,6 +101036,10 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/circuit/green,
/area/science/research/abandoned)
+"nJG" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space)
"oZC" = (
/obj/machinery/door/firedoor,
/obj/machinery/door/airlock/command{
@@ -101161,6 +101053,13 @@
},
/turf/open/floor/wood,
/area/bridge/showroom/corporate)
+"pfd" = (
+/obj/structure/particle_accelerator/particle_emitter/center{
+ icon_state = "emitter_center";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"pmQ" = (
/obj/structure/table/reinforced,
/obj/machinery/newscaster{
@@ -101224,6 +101123,19 @@
"saw" = (
/turf/closed/wall,
/area/science/circuit)
+"shc" = (
+/obj/machinery/status_display{
+ pixel_x = 32
+ },
+/obj/structure/reagent_dispensers/watertank/high,
+/turf/open/floor/circuit/green,
+/area/science/xenobiology)
+"tdp" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 2
+ },
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"tmi" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -101262,6 +101174,9 @@
/obj/structure/reagent_dispensers/water_cooler,
/turf/open/floor/plasteel/whitepurple/side,
/area/science/misc_lab)
+"uDN" = (
+/turf/open/floor/plating/airless,
+/area/space)
"uYS" = (
/obj/machinery/door/airlock/atmos/glass{
heat_proof = 1;
@@ -101319,6 +101234,13 @@
},
/turf/open/floor/plasteel,
/area/crew_quarters/fitness/recreation)
+"xwB" = (
+/obj/structure/particle_accelerator/power_box{
+ icon_state = "power_box";
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"xwK" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
@@ -121811,14 +121733,14 @@ aaa
cja
ckw
clS
-aad
-aad
-clR
-aaa
-abj
-aad
-aad
-cxA
+jKb
+jKb
+clS
+nJG
+hRG
+jKb
+jKb
+clS
ctn
cja
aaa
@@ -122066,17 +121988,17 @@ cdC
cfA
aad
cjb
-ckx
+cky
+jKb
+gsR
+gsR
+lxv
aad
-aaa
-aaa
-abj
-aad
-abj
-aaa
-aaa
-aad
-czp
+hRG
+gsR
+gsR
+jKb
+czq
cAI
aad
cDT
@@ -122324,15 +122246,15 @@ cfA
aaa
cja
ckw
+jKb
+gsR
+hRG
+hRG
aad
-aaa
-abj
-abj
-abj
-abj
-abj
-aaa
-aad
+hRG
+hRG
+gsR
+jKb
ctn
cja
aaa
@@ -122579,19 +122501,19 @@ car
cbP
cfA
abj
-cja
-ckw
-ckw
-abj
-abj
+cjb
+cky
+hRG
+hRG
+hRG
cqo
clR
ctm
-abj
-abj
-abj
-ctn
-cja
+hRG
+lxv
+clS
+czq
+cAI
abj
cDT
cFJ
@@ -122836,19 +122758,19 @@ car
cbP
cdC
aad
-cjb
-cky
-aaa
+cja
+ckw
+nJG
+aad
aad
-abj
ckw
crJ
-ctn
-abj
+tdp
aad
-aaa
-czq
-cAI
+aad
+nJG
+ctn
+cja
aad
cdC
cFJ
@@ -123093,19 +123015,19 @@ car
cbP
cfA
abj
-cja
-ckw
-abj
-abj
-abj
+cjb
+cky
+clS
+lxv
+hRG
cqp
crK
cto
-abj
-abj
-ctn
-ctn
-cja
+hRG
+hRG
+hRG
+czq
+cAI
abj
cDT
cFJ
@@ -123352,15 +123274,15 @@ cfA
aaa
cja
ckw
+jKb
+gsR
+hRG
+hRG
aad
-aaa
-abj
-abj
-abj
-abj
-abj
-aaa
-aad
+hRG
+hRG
+gsR
+jKb
ctn
cja
aaa
@@ -123608,17 +123530,17 @@ cdC
cfA
aad
cjb
-ckx
+cky
+jKb
+gsR
+aaa
+hRG
aad
+lxv
aaa
-aaa
-abj
-aad
-abj
-aaa
-aaa
-aad
-czp
+gsR
+jKb
+czq
cAI
aad
cDU
@@ -123866,15 +123788,15 @@ cfA
aaa
cja
ckw
-clT
-aad
-aad
-abj
-aaa
-crK
-aad
-aad
-cxB
+clS
+jKb
+hRG
+hRG
+nJG
+clS
+jKb
+jKb
+clS
ctn
cja
aaa
@@ -124377,8 +124299,8 @@ car
cbT
cdG
cfB
-aaa
-aad
+uDN
+lkn
aaa
aad
cjd
@@ -124390,8 +124312,8 @@ cjd
cjd
aad
aaa
-aad
-aaa
+lkn
+uDN
cDV
cFL
cHg
@@ -124898,7 +124820,7 @@ cje
cjd
cpa
cqr
-cqr
+pfd
ctp
cuQ
cjd
@@ -125149,19 +125071,19 @@ cbV
cdJ
car
chv
-cjf
+chv
ckA
-clV
+chv
cnC
cpa
cqs
-cqr
+xwB
ctq
cuR
cnC
-cjf
-czs
-clV
+chv
+chv
+chv
chv
car
cFO
@@ -125407,7 +125329,7 @@ cdK
cfD
chw
cjg
-ckB
+chw
clW
cnD
cpb
@@ -125417,7 +125339,7 @@ ctr
cuS
cnD
cxD
-ckB
+chw
chw
chw
cDW
@@ -125664,17 +125586,17 @@ cdL
cfE
chx
cjh
-ckC
+cjn
clX
cnE
cpc
cqu
-cqr
+mqk
cts
cuT
cnE
clX
-czt
+cjn
cAL
cCs
cDX
@@ -127151,7 +127073,7 @@ atS
avb
awh
axz
-ayK
+axz
axz
aAW
axz
@@ -128522,7 +128444,7 @@ das
dcd
cMY
deX
-dgo
+htt
dhR
lKu
tmi
@@ -132622,9 +132544,9 @@ cHA
cjp
cKl
cLI
-cNh
-cNh
-cNh
+cNd
+cNd
+cNd
cNc
cTQ
cVI
@@ -132879,9 +132801,9 @@ cHB
cjp
cKj
cLI
-cNh
-cOO
-cQw
+cNd
+cNd
+cNd
cSf
cTR
cVP
@@ -133137,8 +133059,8 @@ caE
cKm
cLI
cNi
-cOP
-cQx
+cNd
+cNd
cSg
cTS
cVQ
@@ -133393,9 +133315,9 @@ cHB
cjp
cKk
cLI
-cNh
-cOQ
-cQy
+cNd
+cNd
+cNd
cSh
cTT
cVR
@@ -133650,9 +133572,9 @@ cHA
ceb
cKk
cLI
-cNh
-cNh
-cNh
+cNd
+cNd
+cNd
cNc
cTU
cVS
@@ -133915,7 +133837,7 @@ cTV
cVT
cXm
cZb
-cXm
+shc
dcu
ddV
cMY
diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm
index a2e2d840b5..e32792718e 100644
--- a/_maps/map_files/MetaStation/MetaStation.dmm
+++ b/_maps/map_files/MetaStation/MetaStation.dmm
@@ -5314,10 +5314,6 @@
"alq" = (
/turf/closed/wall,
/area/maintenance/starboard)
-"alr" = (
-/obj/effect/spawner/structure/window/reinforced,
-/turf/open/floor/plating,
-/area/maintenance/starboard)
"als" = (
/obj/machinery/light{
dir = 8
@@ -11251,6 +11247,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
+/obj/machinery/light/small{
+ dir = 1
+ },
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"axN" = (
@@ -11354,17 +11353,21 @@
req_one_access_txt = "0"
},
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 9
+ },
/area/engine/engineering)
"axV" = (
/obj/structure/sign/warning/securearea{
pixel_y = 32
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"axW" = (
/obj/structure/disposalpipe/segment,
@@ -11374,10 +11377,9 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 1
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"axX" = (
/obj/machinery/light_switch{
@@ -11393,41 +11395,21 @@
/obj/structure/sign/warning/securearea{
pixel_y = 32
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 5
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"axY" = (
/turf/closed/wall/r_wall,
/area/engine/engineering)
-"axZ" = (
-/obj/structure/closet/firecloset,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"aya" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"ayc" = (
-/obj/structure/table/reinforced,
-/obj/item/tank/internals/emergency_oxygen/engi,
-/obj/item/tank/internals/emergency_oxygen/engi,
-/obj/item/clothing/mask/breath{
- pixel_x = 4
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/white{
+ icon_state = "2-4"
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
-"aye" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
"ayf" = (
/obj/structure/closet/crate,
/obj/item/stack/sheet/glass{
@@ -11770,46 +11752,59 @@
dir = 1;
pixel_y = 2
},
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
+ },
/area/engine/engineering)
"ayT" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"ayV" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"ayW" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/cable/white{
+ icon_state = "4-8"
},
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine";
- req_access_txt = "10"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"ayX" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/engine/engineering)
-"aza" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+"ayX" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 4
},
-/turf/open/floor/plasteel/dark,
+/obj/machinery/door/airlock/external{
+ name = "External Containment Access";
+ req_access_txt = "10; 13"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"aza" = (
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"azb" = (
/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
@@ -11821,13 +11816,18 @@
},
/area/security/brig)
"azd" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"aze" = (
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-22"
@@ -12266,6 +12266,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/machinery/light/small{
+ dir = 1
+ },
/turf/open/floor/plating{
icon_state = "platingdmg2"
},
@@ -12455,13 +12458,20 @@
"aAo" = (
/obj/structure/closet/secure_closet/engineering_personal,
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 9
+ },
/area/engine/engineering)
"aAp" = (
/obj/structure/closet/secure_closet/engineering_personal,
/obj/item/clothing/suit/hooded/wintercoat/engineering,
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
+ },
/area/engine/engineering)
"aAr" = (
/obj/item/device/radio/intercom{
@@ -12474,15 +12484,12 @@
c_tag = "Engineering - Fore";
dir = 2
},
-/obj/effect/turf_decal/stripes/line{
+/obj/structure/closet/secure_closet/engineering_personal,
+/turf/open/floor/plasteel/yellow/side{
dir = 1
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aAt" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 8
},
@@ -12496,27 +12503,21 @@
sortType = 4
},
/obj/effect/landmark/start/station_engineer,
+/obj/structure/cable/white{
+ icon_state = "1-4"
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aAv" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aAw" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"aAx" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/turf/closed/wall/r_wall,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"aAz" = (
/obj/structure/table/wood,
@@ -12540,7 +12541,7 @@
id = "mining_home";
name = "mining shuttle bay";
width = 7;
- roundstart_template = /datum/map_template/shuttle/mining/box;
+ roundstart_template = /datum/map_template/shuttle/mining/box
},
/turf/open/space/basic,
/area/space)
@@ -12743,7 +12744,7 @@
id = "laborcamp_home";
name = "fore bay 1";
width = 9;
- roundstart_template = /datum/map_template/shuttle/labour/box;
+ roundstart_template = /datum/map_template/shuttle/labour/box
},
/turf/open/space/basic,
/area/space)
@@ -13134,18 +13135,14 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
},
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aBK" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aBL" = (
@@ -13157,9 +13154,6 @@
},
/obj/machinery/rnd/circuit_imprinter,
/obj/effect/turf_decal/delivery,
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aBM" = (
@@ -13169,9 +13163,6 @@
},
/obj/machinery/rnd/protolathe/department/engineering,
/obj/effect/turf_decal/delivery,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aBN" = (
@@ -13180,21 +13171,10 @@
dir = 1
},
/obj/effect/turf_decal/delivery,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aBO" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"aBQ" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aBS" = (
/obj/item/stack/ore/silver,
@@ -13707,9 +13687,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aCV" = (
@@ -13719,38 +13696,29 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aCW" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 9
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"aCX" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 5
- },
-/turf/closed/wall/r_wall,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aCY" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible,
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
+/obj/structure/cable{
+ icon_state = "2-4"
},
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine";
- req_access_txt = "10"
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
+/area/space)
"aCZ" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
+/obj/structure/cable,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/power/tesla_coil,
+/turf/open/floor/plating/airless,
+/area/space)
"aDa" = (
/obj/effect/turf_decal/stripes/line{
dir = 9
@@ -14352,10 +14320,9 @@
icon_state = "4-8"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aEo" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -14378,31 +14345,16 @@
/obj/structure/cable/yellow{
icon_state = "2-8"
},
-/obj/structure/cable/white{
- icon_state = "1-4"
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aEq" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aEr" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
+/obj/machinery/camera/emp_proof{
+ c_tag = "Containment - Fore Port";
+ dir = 4;
+ network = list("singularity")
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"aEt" = (
/obj/structure/table,
@@ -14940,10 +14892,9 @@
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
dir = 2
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aFw" = (
/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
@@ -14961,52 +14912,26 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aFz" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine";
- req_access_txt = "10"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
"aFA" = (
-/obj/structure/cable{
- icon_state = "2-4"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aFB" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/structure/rack,
+/obj/machinery/button/door{
+ id = "engpa";
+ name = "Engineering Chamber Shutters Control";
+ pixel_y = -26;
+ req_access_txt = "11"
},
-/obj/effect/turf_decal/stripes/corner,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
- },
-/turf/open/floor/engine,
+/obj/item/clothing/gloves/color/black,
+/obj/item/wrench,
+/obj/item/clothing/glasses/meson/engine,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aFC" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"aFD" = (
-/obj/structure/cable/white{
- icon_state = "1-4"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/meter,
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/turf/open/floor/engine,
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aFE" = (
/obj/structure/table/wood,
@@ -15753,10 +15678,9 @@
/obj/structure/extinguisher_cabinet{
pixel_x = -27
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aGW" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -15767,31 +15691,14 @@
/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aGY" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"aGZ" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 8;
- name = "External Gas to Loop"
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engpa";
+ name = "Engineering Chamber Shutters"
},
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"aHa" = (
-/obj/structure/cable/white,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aHb" = (
/obj/machinery/camera{
@@ -16196,6 +16103,9 @@
lootcount = 2;
name = "2maintenance loot spawner"
},
+/obj/machinery/light/small{
+ dir = 8
+ },
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aHW" = (
@@ -16212,42 +16122,21 @@
dir = 8;
pixel_x = -24
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aHY" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aHZ" = (
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/gloves/color/yellow,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/clothing/suit/hazardvest,
-/obj/item/tank/internals/emergency_oxygen/engi,
-/obj/item/tank/internals/emergency_oxygen/engi,
-/obj/effect/turf_decal/delivery,
-/obj/structure/table,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aIc" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/plating,
-/area/engine/engineering)
"aIe" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/space,
+/area/space)
"aIf" = (
/obj/machinery/camera{
c_tag = "Auxillary Base Construction";
@@ -16924,34 +16813,13 @@
/obj/structure/table,
/obj/item/airlock_painter,
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aJp" = (
-/obj/structure/table,
-/obj/effect/turf_decal/delivery,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/glasses/meson/engine,
-/obj/item/clothing/glasses/meson/engine,
-/obj/machinery/light{
- dir = 4
+/turf/open/floor/plasteel/yellow/side{
+ dir = 9
},
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/item/pipe_dispenser,
-/obj/item/pipe_dispenser,
-/obj/item/pipe_dispenser,
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aJu" = (
/turf/open/floor/plating,
/area/engine/engineering)
-"aJv" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 6
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
"aJB" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/structure/sign/warning/vacuum/external,
@@ -17398,12 +17266,6 @@
},
/turf/open/floor/plating,
/area/engine/engineering)
-"aKA" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"aKB" = (
/obj/machinery/holopad,
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -17417,53 +17279,26 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aKF" = (
-/obj/machinery/button/door{
- id = "engsm";
- name = "Radiation Shutters Control";
- pixel_x = 24;
- req_access_txt = "10"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"aKG" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
+/obj/structure/particle_accelerator/end_cap{
+ icon_state = "end_cap";
dir = 4
},
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
+/turf/open/floor/plating,
+/area/engine/engineering)
"aKH" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 4;
- name = "Gas to Chamber";
- on = 0
+/obj/structure/particle_accelerator/fuel_chamber{
+ icon_state = "fuel_chamber";
+ dir = 4
},
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/turf/open/floor/plating,
+/area/engine/engineering)
"aKI" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
+/obj/structure/particle_accelerator/power_box{
+ icon_state = "power_box";
+ dir = 4
},
-/obj/machinery/meter,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"aKL" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 8;
- name = "Mix Bypass";
- on = 0
- },
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
"aKN" = (
/obj/machinery/door/poddoor{
@@ -18014,12 +17849,6 @@
/obj/effect/landmark/blobstart,
/turf/open/floor/plating,
/area/engine/engineering)
-"aMc" = (
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
"aMd" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{
@@ -18040,62 +17869,52 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"aMg" = (
-/obj/machinery/door/firedoor,
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/machinery/door/airlock/engineering/glass{
- name = "Supermatter Engine";
- req_access_txt = "10"
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
},
-/turf/open/floor/plating,
/area/engine/engineering)
"aMh" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engpa";
+ name = "Engineering Chamber Shutters"
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/engine/engineering)
+"aMi" = (
/obj/structure/cable{
icon_state = "2-8"
},
-/obj/structure/cable{
- icon_state = "1-8"
- },
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
-"aMi" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- name = "Gas to Filter"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"aMj" = (
-/obj/machinery/door/airlock/engineering/glass{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
"aMk" = (
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"aMm" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/plasteel/dark,
+/obj/machinery/particle_accelerator/control_box,
+/obj/structure/cable{
+ icon_state = "0-2";
+ pixel_y = 1
+ },
+/turf/open/floor/plating,
/area/engine/engineering)
"aMo" = (
-/obj/structure/reflector/box/anchored{
- dir = 8
+/obj/effect/turf_decal/stripes/line{
+ dir = 2
},
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"aMq" = (
/obj/structure/window/reinforced,
/turf/open/space,
@@ -18542,7 +18361,9 @@
maxcharge = 15000
},
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 10
+ },
/area/engine/engineering)
"aNr" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -18552,17 +18373,27 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"aNu" = (
-/obj/machinery/atmospherics/components/binary/pump/on{
- dir = 8;
- name = "Gas to Filter";
- on = 0
+/obj/structure/cable{
+ icon_state = "4-8"
},
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/obj/machinery/camera/emp_proof{
+ c_tag = "Containment - Particle Accelerator";
+ dir = 1;
+ network = list("singularity")
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"aNv" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
"aNw" = (
/obj/structure/window/reinforced{
dir = 4
@@ -19226,10 +19057,9 @@
/obj/structure/cable/yellow{
icon_state = "0-4"
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aOP" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
@@ -19252,26 +19082,12 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aOR" = (
-/obj/effect/turf_decal/delivery,
-/obj/structure/closet/firecloset,
-/obj/effect/turf_decal/stripes/line{
+"aOS" = (
+/obj/effect/turf_decal/stripes/corner{
dir = 4
},
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aOS" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/item/device/radio/intercom{
- freerange = 0;
- frequency = 1459;
- name = "Station Intercom (General)";
- pixel_y = 21
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/floor/plating/airless,
+/area/space)
"aOT" = (
/obj/structure/window/reinforced{
dir = 4
@@ -19815,41 +19631,32 @@
icon_state = "2-8"
},
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 9
+ },
/area/engine/engineering)
"aPZ" = (
/obj/machinery/vending/tool,
/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aQa" = (
-/obj/structure/table,
-/obj/effect/turf_decal/delivery,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/item/clothing/glasses/meson,
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
},
-/obj/item/storage/belt/utility,
-/obj/item/storage/belt/utility,
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aQd" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/obj/structure/rack,
+/obj/machinery/button/door{
+ id = "engpa";
+ name = "Engineering Chamber Shutters Control";
+ pixel_y = 26;
+ req_access_txt = "11"
},
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
+/obj/item/storage/belt/utility,
+/obj/item/weldingtool,
+/obj/item/clothing/head/welding,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/plasteel/yellow/side{
dir = 1
},
-/turf/open/floor/engine,
-/area/engine/engineering)
-"aQe" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
/area/engine/engineering)
"aQf" = (
/obj/structure/chair{
@@ -20454,19 +20261,9 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 9
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
},
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aRo" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aRp" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
@@ -20478,9 +20275,6 @@
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aRq" = (
@@ -20507,13 +20301,6 @@
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
-"aRv" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
- dir = 5
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"aRy" = (
/turf/closed/wall/r_wall,
/area/aisat)
@@ -20930,10 +20717,9 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
+/turf/open/floor/plasteel/yellow/side{
dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aSu" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
@@ -20962,9 +20748,7 @@
/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
- },
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
"aSx" = (
@@ -20975,36 +20759,39 @@
/obj/structure/cable/yellow{
icon_state = "1-8"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aSz" = (
-/obj/structure/cable{
- icon_state = "1-4"
+/obj/item/pen,
+/obj/item/storage/belt/utility,
+/obj/item/clothing/glasses/meson,
+/obj/item/paper_bin{
+ layer = 2.9
},
-/obj/effect/turf_decal/stripes/line{
+/obj/structure/table/glass,
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 8
},
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aSA" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/item/book/manual/wiki/engineering_hacking{
+ pixel_x = 3;
+ pixel_y = 3
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 5
- },
-/turf/open/floor/engine,
+/obj/item/book/manual/wiki/engineering_construction,
+/obj/item/clothing/gloves/color/yellow,
+/obj/structure/table/glass,
+/obj/item/device/flashlight,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"aSB" = (
/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aSD" = (
@@ -21489,10 +21276,9 @@
/obj/structure/cable/yellow{
icon_state = "1-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 10
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
},
-/turf/open/floor/plasteel,
/area/engine/engineering)
"aTG" = (
/obj/structure/disposalpipe/segment{
@@ -21504,26 +21290,18 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 6
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aTH" = (
/obj/structure/disposalpipe/segment{
dir = 9
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/turf/open/floor/plasteel,
+/obj/machinery/light,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aTI" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
@@ -21534,9 +21312,6 @@
/obj/structure/cable/yellow{
icon_state = "1-2"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 2
- },
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
@@ -21549,31 +21324,6 @@
/obj/structure/cable/white{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"aTM" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"aTN" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"aTO" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
/turf/open/floor/plasteel,
/area/engine/engineering)
"aTQ" = (
@@ -22178,7 +21928,9 @@
"aUY" = (
/obj/effect/turf_decal/delivery,
/obj/structure/closet/wardrobe/engineering_yellow,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 10
+ },
/area/engine/engineering)
"aUZ" = (
/obj/structure/disposalpipe/segment,
@@ -22189,8 +21941,8 @@
/obj/effect/turf_decal/bot{
dir = 1
},
-/turf/open/floor/plasteel{
- dir = 1
+/turf/open/floor/plasteel/yellow/side{
+ dir = 6
},
/area/engine/engineering)
"aVa" = (
@@ -22227,31 +21979,13 @@
dir = 4
},
/obj/structure/closet/secure_closet/engineering_electrical,
-/turf/open/floor/plasteel,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aVe" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"aVf" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/door/airlock/engineering{
- name = "Supermatter Engine";
- req_access_txt = "10"
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard)
-"aVh" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"aVk" = (
/obj/structure/window/reinforced{
@@ -22791,8 +22525,10 @@
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
"aWu" = (
-/obj/machinery/door/airlock/maintenance{
- req_access_txt = "12"
+/obj/machinery/door/airlock/external{
+ name = "Escape Pod Four";
+ req_access = null;
+ req_access_txt = "32"
},
/turf/open/floor/plating,
/area/maintenance/starboard)
@@ -22880,18 +22616,16 @@
dir = 1
},
/area/engine/engineering)
-"aWH" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 10
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard)
"aWK" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 10
+/obj/structure/cable/white{
+ icon_state = "2-4"
},
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"aWL" = (
/obj/machinery/ai_status_display{
pixel_x = -32
@@ -23788,12 +23522,15 @@
/turf/closed/wall,
/area/security/checkpoint/engineering)
"aYx" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"aYy" = (
/obj/machinery/camera{
c_tag = "AI Chamber - Port";
@@ -32033,9 +31770,6 @@
dir = 6
},
/area/security/checkpoint/customs)
-"bpu" = (
-/turf/closed/wall/r_wall,
-/area/space/nearstation)
"bpv" = (
/obj/structure/sign/warning/securearea{
pixel_y = 32
@@ -35370,9 +35104,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
/turf/open/floor/plating,
/area/maintenance/department/science/xenobiology)
"bvU" = (
@@ -38467,7 +38198,6 @@
/obj/machinery/atmospherics/pipe/simple/purple/visible{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
/turf/open/space,
/area/space/nearstation)
"bCA" = (
@@ -41244,11 +40974,8 @@
/turf/open/floor/plasteel/bar,
/area/crew_quarters/bar)
"bIv" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 10
- },
/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"bIw" = (
/obj/machinery/light,
/obj/machinery/camera{
@@ -42921,10 +42648,6 @@
/obj/machinery/meter,
/turf/open/floor/plasteel,
/area/engine/atmos)
-"bMi" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/turf/open/floor/plasteel,
-/area/engine/atmos)
"bMj" = (
/obj/machinery/holopad,
/turf/open/floor/plasteel,
@@ -46279,10 +46002,10 @@
/turf/closed/wall,
/area/maintenance/solars/port/aft)
"bTq" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 10
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
},
-/turf/closed/wall/r_wall,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"bTr" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
@@ -46858,8 +46581,12 @@
},
/area/maintenance/starboard)
"bUw" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible,
-/turf/open/floor/plasteel/dark,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/delivery,
+/turf/open/floor/plating,
/area/engine/engineering)
"bUx" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
@@ -47346,7 +47073,6 @@
/turf/closed/wall,
/area/hallway/secondary/service)
"bVA" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/machinery/door/airlock{
name = "Service Hall";
req_access_txt = "null";
@@ -48106,6 +47832,9 @@
/obj/structure/cable/yellow{
icon_state = "2-4"
},
+/obj/machinery/light/small{
+ dir = 1
+ },
/turf/open/floor/plating,
/area/maintenance/starboard)
"bXc" = (
@@ -57167,23 +56896,23 @@
},
/area/maintenance/port/aft)
"cpR" = (
+/obj/machinery/button/door{
+ id = "engpa";
+ name = "Engineering Chamber Shutters Control";
+ pixel_y = -26;
+ req_access_txt = "11"
+ },
/obj/effect/turf_decal/stripes/line{
- dir = 4
+ dir = 10
},
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Port";
- dir = 8;
- network = list("ss13","engine")
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/obj/machinery/airalarm/engine{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
+/obj/machinery/light{
dir = 8
},
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/turf/open/floor/plating,
+/area/engine/engineering)
"cpS" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -68169,15 +67898,6 @@
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/aft)
-"cLE" = (
-/obj/machinery/atmospherics/components/unary/thermomachine/freezer{
- dir = 1;
- name = "euthanization chamber freezer";
- on = 1;
- target_temperature = 80
- },
-/turf/open/floor/plating,
-/area/science/xenobiology)
"cLF" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -71855,7 +71575,7 @@
"cTT" = (
/obj/structure/disposalpipe/segment,
/turf/closed/wall/r_wall,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"cUH" = (
/obj/structure/table/optable,
/turf/open/floor/plasteel/white,
@@ -72101,6 +71821,12 @@
},
/turf/open/floor/plating,
/area/shuttle/auxillary_base)
+"cWu" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"cWA" = (
/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
@@ -72137,18 +71863,6 @@
/obj/structure/easel,
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
-"cXz" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Aft";
- dir = 1;
- network = list("ss13","engine")
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"cXA" = (
/turf/closed/wall/r_wall,
/area/security/checkpoint/engineering)
@@ -72161,7 +71875,12 @@
},
/area/construction/mining/aux_base)
"cXI" = (
-/obj/effect/spawner/lootdrop/maintenance,
+/obj/structure/sign/warning/vacuum/external{
+ pixel_x = 32
+ },
+/obj/machinery/light/small{
+ dir = 1
+ },
/turf/open/floor/plating,
/area/maintenance/starboard)
"cXR" = (
@@ -72173,11 +71892,12 @@
},
/area/construction/mining/aux_base)
"cXZ" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/structure/window/reinforced{
- dir = 8
+/obj/machinery/door/airlock/external{
+ req_access_txt = "13"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 4
},
-/obj/effect/spawner/lootdrop/maintenance,
/turf/open/floor/plating,
/area/maintenance/starboard)
"cYc" = (
@@ -72197,8 +71917,9 @@
},
/area/science/robotics/lab)
"cYj" = (
-/obj/structure/closet/firecloset,
-/obj/effect/spawner/lootdrop/maintenance,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/maintenance/starboard)
"cYE" = (
@@ -72326,9 +72047,6 @@
},
/turf/open/floor/plasteel,
/area/hallway/secondary/entry)
-"cZv" = (
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
"cZR" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/cable/yellow{
@@ -72474,9 +72192,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 6
- },
/obj/machinery/light/small{
dir = 1
},
@@ -72486,33 +72201,28 @@
/obj/structure/disposalpipe/segment{
dir = 10
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"daR" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1;
- external_pressure_bound = 140;
- name = "server vent";
- pressure_checks = 0
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"daS" = (
/obj/structure/disposalpipe/segment,
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"daW" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+/turf/open/floor/plating{
+ icon_state = "platingdmg2"
},
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
+/area/maintenance/department/science/xenobiology)
+"daW" = (
+/obj/machinery/button/door{
+ id = "engpa";
+ name = "Engineering Chamber Shutters Control";
+ pixel_y = 26;
+ req_access_txt = "11"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/machinery/light{
dir = 8
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
"daX" = (
/obj/structure/cable/yellow{
@@ -72522,27 +72232,20 @@
icon_state = "platingdmg2"
},
/area/maintenance/port/fore)
-"daY" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
"daZ" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible{
- dir = 1
+/obj/structure/particle_accelerator/particle_emitter/right{
+ icon_state = "emitter_right";
+ dir = 4
},
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable,
-/obj/structure/window/plasma/reinforced,
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/turf/open/floor/plating,
+/area/engine/engineering)
"dbb" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
+/obj/structure/particle_accelerator/particle_emitter/center{
+ icon_state = "emitter_center";
+ dir = 4
},
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/turf/open/floor/plating,
+/area/engine/engineering)
"dbd" = (
/obj/structure/sink/kitchen{
pixel_y = 28
@@ -72555,30 +72258,6 @@
},
/turf/open/floor/carpet,
/area/crew_quarters/heads/hop)
-"dbg" = (
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dbh" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
"dbj" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 5
@@ -72664,17 +72343,10 @@
"dbv" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/light/small,
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
-"dbw" = (
-/obj/machinery/camera{
- c_tag = "Xenobiology Lab - Kill Chamber";
- dir = 1;
- network = list("ss13","rd","xeno");
- start_active = 1
+/turf/open/floor/plating{
+ icon_state = "platingdmg2"
},
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"dbE" = (
/obj/machinery/plantgenes,
/obj/effect/turf_decal/stripes/line{
@@ -73081,15 +72753,18 @@
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"dcm" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/machinery/computer/camera_advanced/xenobio,
/obj/effect/turf_decal/stripes/line{
- dir = 9
+ dir = 1
+ },
+/obj/structure/table/glass,
+/obj/item/extinguisher,
+/obj/item/extinguisher{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/extinguisher{
+ pixel_x = 5;
+ pixel_y = 5
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
@@ -73113,7 +72788,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 10
},
-/obj/machinery/computer/camera_advanced/xenobio,
/obj/structure/cable/yellow{
icon_state = "4-8"
},
@@ -73183,9 +72857,6 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 10
},
-/obj/structure/chair/comfy/black{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 10
},
@@ -73200,9 +72871,6 @@
/area/science/xenobiology)
"dcx" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/chair/comfy/black{
- dir = 1
- },
/obj/effect/turf_decal/stripes/line{
dir = 6
},
@@ -73280,18 +72948,13 @@
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"dcJ" = (
-/obj/structure/reagent_dispensers/watertank,
-/obj/item/extinguisher{
- pixel_x = 4;
- pixel_y = 3
- },
-/obj/item/extinguisher,
/obj/structure/disposalpipe/segment{
dir = 4
},
/obj/effect/turf_decal/stripes/corner{
dir = 1
},
+/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"dcK" = (
@@ -73717,11 +73380,8 @@
},
/obj/structure/chair,
/obj/item/cigbutt,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 1
- },
/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"ddy" = (
/turf/open/floor/plating{
icon_state = "platingdmg1"
@@ -73729,9 +73389,8 @@
/area/maintenance/department/science/xenobiology)
"ddz" = (
/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/plating,
-/area/science/xenobiology)
+/turf/closed/wall/r_wall,
+/area/maintenance/department/science/xenobiology)
"ddA" = (
/obj/structure/disposalpipe/segment,
/obj/machinery/door/firedoor,
@@ -73741,23 +73400,15 @@
opacity = 0;
req_access_txt = "55"
},
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
-"ddB" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{
- dir = 1;
- external_pressure_bound = 120;
- name = "server vent"
- },
-/turf/open/floor/circuit/killroom,
-/area/science/xenobiology)
+/turf/closed/wall/r_wall,
+/area/maintenance/department/science/xenobiology)
"ddC" = (
/obj/structure/disposalpipe/trunk{
dir = 1
},
/obj/structure/disposaloutlet,
/turf/open/floor/plating/airless,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"ddE" = (
/obj/effect/landmark/start/cook,
/obj/machinery/holopad,
@@ -73775,16 +73426,12 @@
/turf/open/floor/plating,
/area/shuttle/auxillary_base)
"ddO" = (
-/obj/machinery/atmospherics/components/unary/portables_connector/visible,
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"ddP" = (
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/engine/engineering)
@@ -73798,41 +73445,10 @@
},
/turf/open/floor/plasteel,
/area/engine/engineering)
-"ddS" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 6
- },
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Fore";
- dir = 4;
- network = list("ss13","engine")
- },
-/obj/machinery/firealarm{
- dir = 8;
- pixel_x = -26
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"ddT" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"ddU" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/obj/machinery/meter,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"ddV" = (
-/obj/machinery/atmospherics/pipe/manifold4w/general/visible,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
"ddW" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/effect/turf_decal/stripes/corner{
- dir = 4
- },
/obj/structure/cable/yellow{
icon_state = "2-4"
},
@@ -73845,28 +73461,14 @@
/obj/structure/cable/yellow{
icon_state = "4-8"
},
-/obj/effect/turf_decal/stripes/corner,
-/turf/open/floor/plasteel,
-/area/engine/engineering)
-"ddY" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/structure/cable/yellow{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plasteel,
/area/engine/engineering)
"ddZ" = (
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"dea" = (
-/obj/machinery/atmospherics/components/unary/outlet_injector/on{
- volume_rate = 200
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
},
/turf/open/floor/plating/airless,
-/area/engine/engineering)
+/area/space)
"deb" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -73874,644 +73476,153 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"ded" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 1
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dee" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"def" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"deh" = (
-/obj/structure/cable/white{
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
icon_state = "4-8"
},
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dei" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dej" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dek" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 2;
- name = "Mix to Gas"
- },
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"del" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/space,
+/area/space)
"dem" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Gas to Mix"
- },
-/obj/structure/cable/white{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"den" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dep" = (
-/obj/machinery/firealarm{
- pixel_y = 32
- },
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"deq" = (
-/obj/item/device/radio/intercom{
- freerange = 0;
- frequency = 1459;
- name = "Station Intercom (General)";
- pixel_y = 21
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"der" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/light,
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"des" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deu" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/corner{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 10
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dev" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dew" = (
-/obj/machinery/door/firedoor,
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/machinery/door/airlock/engineering/glass{
- name = "Laser Room";
- req_access_txt = "10"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dex" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dey" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/structure/cable/white{
- icon_state = "2-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"deA" = (
-/obj/structure/cable/white{
- icon_state = "2-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"deB" = (
+/obj/structure/lattice/catwalk,
/obj/structure/cable{
icon_state = "1-2"
},
+/turf/open/space,
+/area/space)
+"den" = (
/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deC" = (
-/obj/effect/turf_decal/bot{
dir = 1
},
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/machinery/portable_atmospherics/canister/nitrogen,
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"der" = (
+/obj/structure/closet/secure_closet/engineering_welding,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
-"deD" = (
-/obj/machinery/status_display,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"deI" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deJ" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deK" = (
-/obj/structure/cable/white,
-/obj/machinery/power/emitter/anchored{
- dir = 2;
+"dev" = (
+/obj/machinery/field/generator{
+ anchored = 1;
state = 2
},
-/turf/open/floor/plating,
-/area/engine/engineering)
-"deL" = (
-/obj/structure/cable/white,
-/obj/machinery/light{
- dir = 4
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"dew" = (
+/turf/open/space,
+/area/space/nearstation)
+"deB" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "engpa";
+ name = "Engineering Chamber Shutters"
},
-/turf/open/floor/plating,
-/area/engine/engineering)
-"deM" = (
-/obj/structure/sign/warning/securearea,
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"deN" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deO" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/engine,
+/turf/open/floor/plasteel,
/area/engine/engineering)
-"deS" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable,
-/obj/structure/window/plasma/reinforced,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"deU" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
+"deD" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-2"
},
+/turf/open/floor/plating/airless,
+/area/space)
+"deM" = (
+/obj/structure/table,
+/obj/effect/turf_decal/delivery,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/glasses/meson/engine,
+/obj/item/clothing/glasses/meson/engine,
/obj/machinery/light{
dir = 4
},
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical,
-/turf/open/floor/engine,
+/obj/item/pipe_dispenser,
+/obj/item/pipe_dispenser,
+/obj/item/pipe_dispenser,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
/area/engine/engineering)
"deV" = (
-/obj/structure/sign/warning/fire,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"deW" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
+/obj/structure/cable{
+ icon_state = "1-8"
},
-/obj/machinery/camera{
- c_tag = "Engineering Supermatter Starboard";
- dir = 4;
- network = list("ss13","engine")
+/obj/structure/cable{
+ icon_state = "2-8"
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"deX" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
+/turf/open/floor/plating/airless,
+/area/space)
"deY" = (
-/obj/structure/reflector/single/anchored{
- dir = 9
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
},
-/turf/open/floor/plating,
-/area/engine/engineering)
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
"dfa" = (
-/obj/machinery/power/supermatter_shard/crystal/engine,
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"dfb" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/obj/machinery/meter,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"dfc" = (
-/obj/structure/sign/warning/electricshock,
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"dfd" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 9
- },
-/obj/machinery/atmospherics/pipe/manifold/cyan/visible{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfe" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dff" = (
-/obj/structure/reflector/double/anchored{
- dir = 5
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"dfg" = (
-/obj/structure/reflector/single/anchored{
- dir = 10
+/obj/structure/cable{
+ icon_state = "1-2"
},
/turf/open/floor/plating,
/area/engine/engineering)
"dfh" = (
-/obj/structure/sign/warning/nosmoking,
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"dfi" = (
-/obj/effect/turf_decal/stripes/line{
+/obj/structure/table,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson,
+/obj/item/storage/belt/utility,
+/obj/item/storage/belt/utility,
+/obj/item/storage/toolbox/electrical{
+ pixel_x = 1;
+ pixel_y = 10
+ },
+/turf/open/floor/plasteel/yellow/side{
dir = 4
},
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
/area/engine/engineering)
-"dfj" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"dfk" = (
-/obj/machinery/atmospherics/pipe/manifold/general/visible,
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"dfm" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 9
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/structure/window/plasma/reinforced{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
"dfp" = (
-/obj/effect/turf_decal/bot{
+/obj/structure/closet/firecloset,
+/turf/open/floor/plasteel/yellow/side{
dir = 1
},
-/obj/machinery/atmospherics/components/unary/portables_connector/visible{
- dir = 8
- },
-/obj/machinery/portable_atmospherics/canister,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"dfq" = (
-/obj/machinery/camera{
- c_tag = "Supermatter Chamber";
- dir = 4;
- network = list("engine")
- },
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
-"dft" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 8
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 5
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfu" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{
- filter_type = "n2"
- },
-/turf/open/floor/engine,
/area/engine/engineering)
"dfz" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/meter,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfA" = (
-/obj/structure/cable/white{
- icon_state = "0-2"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dfB" = (
-/obj/structure/cable/white{
- icon_state = "0-2"
- },
-/obj/machinery/power/emitter/anchored{
- dir = 1;
- state = 2
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dfC" = (
-/obj/structure/cable/white{
- icon_state = "0-2"
- },
-/obj/machinery/power/emitter/anchored{
- dir = 1;
- state = 2
- },
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/airless,
+/area/space)
"dfD" = (
-/obj/structure/cable{
- icon_state = "4-8"
+/obj/item/book/manual/engineering_singularity_safety{
+ pixel_x = 3;
+ pixel_y = 3
},
-/obj/effect/turf_decal/stripes/line{
- dir = 1
+/obj/item/book/manual/wiki/engineering_guide,
+/obj/item/book/manual/engineering_particle_accelerator{
+ pixel_x = -3;
+ pixel_y = -3
},
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfE" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/manifold/green/visible{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfF" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/meter,
-/obj/machinery/light{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfG" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/cable{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/turf/open/floor/engine,
+/obj/item/clothing/gloves/color/yellow,
+/obj/structure/table/glass,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"dfI" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Cooling Loop Bypass"
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/obj/structure/cable/white{
- icon_state = "2-4"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/light{
- dir = 1
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfJ" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/orange/visible{
- dir = 4
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfM" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/structure/cable/white{
- icon_state = "1-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
-"dfO" = (
-/obj/structure/cable/white{
- icon_state = "1-8"
- },
-/turf/open/floor/plating,
-/area/engine/engineering)
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
+/area/space)
"dfP" = (
/obj/structure/cable/white{
- icon_state = "4-8"
+ icon_state = "2-8"
},
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Atmos to Loop"
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfQ" = (
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -24
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfR" = (
-/obj/machinery/atmospherics/components/binary/pump{
- name = "Gas to Cold Loop";
- on = 1
- },
-/obj/structure/cable/white{
- icon_state = "4-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfS" = (
-/obj/structure/cable/white{
- icon_state = "1-8"
- },
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfT" = (
-/obj/effect/turf_decal/stripes/line,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfU" = (
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 1;
- name = "Cold Loop to Gas";
- on = 1
- },
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dfV" = (
-/obj/machinery/airalarm{
- dir = 1;
- pixel_y = -22
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"dfW" = (
-/obj/item/wrench,
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/engine/engineering)
"dfX" = (
/obj/structure/disposalpipe/segment,
@@ -74529,137 +73640,82 @@
},
/area/engine/engineering)
"dfY" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/cable/white{
+ icon_state = "1-4"
},
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"dfZ" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/turf/closed/wall/r_wall,
+/turf/open/floor/plasteel/yellow/side,
/area/engine/engineering)
"dga" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/junction,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+/obj/structure/cable/white{
+ icon_state = "2-8"
},
-/turf/closed/wall/r_wall,
-/area/engine/engineering)
-"dgb" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/turf/closed/wall/r_wall,
+/turf/open/floor/plating/airless,
/area/engine/engineering)
"dgc" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
+/obj/item/clothing/gloves/color/rainbow,
+/obj/item/clothing/head/soft/rainbow,
+/obj/item/clothing/shoes/sneakers/rainbow,
+/obj/item/clothing/under/color/rainbow,
+/turf/open/floor/plating{
+ icon_state = "platingdmg3"
},
-/turf/open/floor/plating,
/area/maintenance/starboard)
"dgd" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/turf/open/space,
-/area/space/nearstation)
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dge" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
-"dgf" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
+/obj/structure/cable/white{
+ icon_state = "0-2"
},
-/turf/open/space,
-/area/space/nearstation)
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/power/emitter{
+ anchored = 1;
+ dir = 1;
+ icon_state = "emitter";
+ state = 2
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dgg" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
+/obj/structure/cable/white{
+ icon_state = "4-8"
},
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
-"dgh" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 6
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"dgi" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/floor/plating,
-/area/maintenance/starboard)
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dgj" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
+/obj/structure/grille,
+/obj/structure/cable/white{
+ icon_state = "1-4"
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dgk" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/corner{
dir = 4
},
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dgm" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
+/obj/structure/cable/white{
+ icon_state = "1-4"
},
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/structure/lattice,
-/turf/open/space,
-/area/space/nearstation)
-"dgo" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
},
-/turf/open/floor/plating,
-/area/maintenance/starboard)
-"dgp" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/maintenance/starboard)
-"dgr" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 10
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgt" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgu" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple,
-/turf/open/space,
-/area/space/nearstation)
-"dgv" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 9
- },
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
-"dgw" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dgz" = (
/obj/structure/closet/toolcloset,
/obj/effect/turf_decal/delivery,
@@ -74667,134 +73723,13 @@
/turf/open/floor/plasteel,
/area/engine/engineering)
"dgA" = (
-/obj/structure/lattice/catwalk,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dgB" = (
-/obj/machinery/atmospherics/pipe/heat_exchanging/simple{
- dir = 5
+/obj/machinery/light{
+ dir = 4
},
-/obj/structure/lattice/catwalk,
-/turf/open/space,
-/area/space/nearstation)
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"dgI" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 5
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgJ" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgK" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgM" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 10
- },
-/turf/open/space,
-/area/space/nearstation)
-"dgN" = (
-/obj/structure/lattice,
-/obj/structure/grille,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dgO" = (
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dgS" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/structure/lattice/catwalk,
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/structure/transit_tube/horizontal,
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dha" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dhc" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible,
-/turf/open/space,
-/area/space/nearstation)
-"dhe" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 10
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"dhg" = (
-/obj/machinery/atmospherics/pipe/simple/general/visible{
- dir = 5
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"dhh" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible,
-/obj/machinery/atmospherics/components/binary/pump{
- dir = 4;
- name = "Mix to Engine";
- on = 0
- },
-/turf/open/floor/plasteel,
-/area/engine/atmos)
-"dhi" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/obj/machinery/door/window/northleft{
- dir = 8;
- icon_state = "left";
- name = "Inner Pipe Access";
- req_access_txt = "24"
- },
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/atmos)
-"dhj" = (
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/engine/atmos)
-"dhk" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 4
- },
-/turf/open/floor/plating,
-/area/engine/atmos)
-"dhl" = (
-/obj/structure/lattice,
-/obj/machinery/atmospherics/pipe/simple/orange/visible{
- dir = 9
- },
-/turf/open/space,
+/turf/closed/wall/mineral/plastitanium,
/area/space/nearstation)
"dhn" = (
/obj/structure/table,
@@ -75813,26 +74748,18 @@
/turf/open/space,
/area/science/xenobiology)
"djt" = (
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
+/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
-/area/engine/supermatter)
+/area/engine/engineering)
"djx" = (
-/obj/structure/cable{
- icon_state = "1-2"
+/obj/machinery/camera/emp_proof{
+ c_tag = "Containment - Aft Port";
+ dir = 4;
+ network = list("singularity")
},
-/obj/item/crowbar,
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "engsm";
- name = "Radiation Chamber Shutters"
- },
-/turf/open/floor/plating,
-/area/engine/supermatter)
+/obj/machinery/power/grounding_rod,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"djz" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper,
/obj/machinery/door/airlock/external{
@@ -75870,7 +74797,7 @@
id = "arrivals_stationary";
name = "arrivals";
width = 7;
- roundstart_template = /datum/map_template/shuttle/arrival/box;
+ roundstart_template = /datum/map_template/shuttle/arrival/box
},
/turf/open/space/basic,
/area/space)
@@ -75892,12 +74819,11 @@
/turf/open/floor/plating,
/area/chapel/main)
"dlI" = (
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"dlN" = (
-/obj/effect/spawner/structure/window/plasma/reinforced,
-/turf/open/floor/plating,
-/area/engine/supermatter)
+/obj/structure/closet/secure_closet/engineering_electrical,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
+ },
+/area/engine/engineering)
"dlV" = (
/turf/closed/wall/r_wall,
/area/maintenance/department/science/xenobiology)
@@ -75905,9 +74831,6 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
-/obj/machinery/atmospherics/pipe/simple/cyan/visible{
- dir = 4
- },
/obj/machinery/door/airlock/research{
glass = 1;
name = "Slime Euthanization Chamber";
@@ -75918,7 +74841,7 @@
dir = 4
},
/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"dmr" = (
/obj/machinery/door/airlock/research{
glass = 1;
@@ -75930,7 +74853,7 @@
dir = 8
},
/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
+/area/maintenance/department/science/xenobiology)
"dmD" = (
/obj/structure/displaycase/trophy,
/turf/open/floor/wood,
@@ -76108,6 +75031,14 @@
icon_state = "platingdmg2"
},
/area/maintenance/port/fore)
+"drT" = (
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"dsg" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -76148,6 +75079,13 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"dtL" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/space,
+/area/space)
"dtP" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -76481,46 +75419,24 @@
/turf/closed/wall,
/area/engine/gravity_generator)
"dBw" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/cyan/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dBx" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/plasteel/dark,
-/area/engine/engineering)
-"dBy" = (
-/obj/machinery/atmospherics/pipe/simple/green/visible{
- dir = 4
- },
-/turf/closed/wall/r_wall,
-/area/engine/supermatter)
-"dBz" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/light{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dBA" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/simple/green/visible,
-/turf/open/floor/engine,
-/area/engine/engineering)
-"dBB" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
},
-/turf/open/floor/engine,
+/turf/open/floor/plating,
/area/engine/engineering)
+"dBy" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"dBB" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"dBC" = (
/obj/machinery/meter,
/obj/structure/grille,
@@ -77200,6 +76116,23 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard)
+"dPf" = (
+/obj/structure/cable/white{
+ icon_state = "1-4"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"dPp" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/machinery/light,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"dYu" = (
/obj/machinery/door/airlock/external{
name = "Auxiliary Airlock"
@@ -77209,6 +76142,19 @@
},
/turf/open/floor/plating,
/area/hallway/secondary/entry)
+"dZD" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/space)
+"eln" = (
+/turf/open/space/basic,
+/area/engine/engineering)
+"enN" = (
+/obj/effect/landmark/event_spawn,
+/turf/open/floor/plasteel,
+/area/engine/engineering)
"eoK" = (
/obj/structure/disposalpipe/segment{
dir = 9
@@ -77241,6 +76187,17 @@
},
/turf/open/floor/plasteel,
/area/science/circuit)
+"esV" = (
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"evy" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -77251,6 +76208,25 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"eEu" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ name = "External Containment Access";
+ req_access_txt = "10; 13"
+ },
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"eFN" = (
/obj/structure/bodycontainer/crematorium{
id = "crematoriumChapel";
@@ -77281,12 +76257,48 @@
/obj/structure/closet/firecloset,
/turf/open/floor/plating,
/area/engine/engineering)
+"fjy" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plating/airless,
+/area/space)
+"foU" = (
+/obj/machinery/light{
+ dir = 4
+ },
+/obj/machinery/computer/security/telescreen{
+ desc = "Used for watching the Engine.";
+ dir = 8;
+ layer = 4;
+ name = "Engine Monitor";
+ network = list("singularity");
+ pixel_x = 30
+ },
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
+/area/engine/engineering)
"fDD" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"fGs" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"fWO" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"gfh" = (
/obj/machinery/libraryscanner,
/turf/open/floor/plasteel/white,
@@ -77309,6 +76321,14 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"goZ" = (
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"gEk" = (
/obj/structure/cable/yellow{
icon_state = "2-8"
@@ -77334,6 +76354,14 @@
/obj/effect/spawner/structure/window/plasma/reinforced,
/turf/open/floor/plating,
/area/engine/atmos)
+"gKb" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Containment - Fore Starboard";
+ dir = 8;
+ network = list("singularity")
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"gLC" = (
/obj/structure/reagent_dispensers/water_cooler,
/turf/open/floor/plasteel,
@@ -77366,6 +76394,9 @@
},
/turf/open/floor/plating,
/area/security/prison)
+"hWU" = (
+/turf/open/floor/plating/airless,
+/area/space)
"ioI" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -77393,6 +76424,41 @@
},
/turf/open/floor/plasteel/whitepurple,
/area/science/lab)
+"iOa" = (
+/turf/closed/wall/mineral/plastitanium,
+/area/maintenance/starboard)
+"iTS" = (
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/gloves/color/yellow,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/clothing/suit/hazardvest,
+/obj/item/tank/internals/emergency_oxygen/engi,
+/obj/item/tank/internals/emergency_oxygen/engi,
+/obj/effect/turf_decal/delivery,
+/obj/structure/table,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
+/area/engine/engineering)
+"iYY" = (
+/obj/machinery/light/small,
+/turf/open/floor/plating,
+/area/engine/engineering)
+"jjF" = (
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"jot" = (
+/obj/effect/spawner/structure/window/reinforced,
+/turf/open/floor/plating,
+/area/maintenance/department/science/xenobiology)
"jwW" = (
/turf/closed/wall/mineral/plastitanium,
/area/crew_quarters/fitness/recreation)
@@ -77423,6 +76489,21 @@
},
/turf/open/floor/plating,
/area/maintenance/solars/port/aft)
+"jFx" = (
+/obj/machinery/door/airlock/external{
+ req_access_txt = "13"
+ },
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard)
+"jIV" = (
+/obj/structure/closet/secure_closet/engineering_personal,
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
+ },
+/area/engine/engineering)
"jKK" = (
/obj/machinery/door/airlock/external{
req_access_txt = "13"
@@ -77432,6 +76513,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/fore)
+"jYQ" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"kfu" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/white,
@@ -77537,6 +76624,14 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"lHL" = (
+/turf/open/space/basic,
+/area/space/nearstation)
+"lLj" = (
+/turf/open/floor/plasteel/yellow/side{
+ dir = 8
+ },
+/area/engine/engineering)
"lMz" = (
/obj/structure/falsewall,
/turf/open/floor/plating,
@@ -77578,6 +76673,12 @@
},
/turf/open/floor/plating,
/area/maintenance/starboard/aft)
+"moI" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"mvj" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -77587,6 +76688,12 @@
},
/turf/closed/wall,
/area/hallway/secondary/service)
+"mwK" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"mzh" = (
/obj/machinery/firealarm{
dir = 1;
@@ -77615,6 +76722,30 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/science/circuit)
+"nte" = (
+/obj/machinery/the_singularitygen/tesla,
+/turf/open/floor/plating/airless,
+/area/space/nearstation)
+"nwU" = (
+/obj/effect/mapping_helpers/airlock/cyclelink_helper{
+ dir = 8
+ },
+/obj/machinery/door/airlock/external{
+ name = "External Containment Access";
+ req_access_txt = "10; 13"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"nyo" = (
/obj/structure/cable/yellow{
icon_state = "1-4"
@@ -77649,10 +76780,33 @@
},
/turf/open/floor/plasteel,
/area/construction/storage/wing)
+"nKh" = (
+/turf/open/floor/plasteel/yellow/side{
+ dir = 1
+ },
+/area/engine/engineering)
"obb" = (
/obj/structure/target_stake,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"obN" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/space,
+/area/space)
+"ocj" = (
+/obj/structure/cable/white{
+ icon_state = "2-4"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"ocT" = (
/obj/machinery/light{
dir = 1
@@ -77767,6 +76921,13 @@
dir = 2
},
/area/crew_quarters/locker)
+"pWF" = (
+/obj/effect/decal/cleanable/oil,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"qnJ" = (
/obj/structure/cable/yellow{
icon_state = "4-8"
@@ -77797,6 +76958,12 @@
"qBq" = (
/turf/closed/wall/mineral/plastitanium,
/area/hallway/secondary/entry)
+"qJG" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
"qJZ" = (
/obj/effect/turf_decal/stripes/line{
dir = 6
@@ -77820,6 +76987,18 @@
dir = 1
},
/area/science/lab)
+"rEi" = (
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"rFx" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/closed/wall,
+/area/engine/engineering)
"rQK" = (
/obj/structure/cable/yellow{
icon_state = "1-2"
@@ -77839,6 +77018,29 @@
/obj/machinery/vending/snack/random,
/turf/open/floor/plasteel,
/area/science/mixing)
+"rTo" = (
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
+"rVX" = (
+/obj/structure/particle_accelerator/particle_emitter/left{
+ icon_state = "emitter_left";
+ dir = 4
+ },
+/turf/open/floor/plating,
+/area/engine/engineering)
+"rWa" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/turf/open/floor/plasteel/yellow/side,
+/area/engine/engineering)
"sdi" = (
/obj/effect/turf_decal/stripes/line{
dir = 10
@@ -77875,6 +77077,21 @@
"sJW" = (
/turf/closed/wall/mineral/plastitanium,
/area/engine/break_room)
+"sOW" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/space)
+"sSU" = (
+/turf/closed/wall/r_wall,
+/area/space)
+"tdB" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/open/floor/plating{
+ icon_state = "platingdmg2"
+ },
+/area/maintenance/starboard/fore)
"tjH" = (
/obj/structure/table/reinforced,
/obj/machinery/computer/libraryconsole/bookmanagement,
@@ -77896,22 +77113,19 @@
/turf/open/floor/plasteel/white,
/area/science/circuit)
"tDM" = (
-/obj/machinery/door/airlock/engineering/glass{
- heat_proof = 1;
- name = "Supermatter Chamber";
- req_access_txt = "10"
- },
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 8
- },
-/turf/open/floor/engine,
-/area/engine/supermatter)
+/obj/item/wrench,
+/turf/open/floor/plating,
+/area/engine/engineering)
"tFJ" = (
/obj/structure/bodycontainer/morgue{
dir = 8
},
/turf/open/floor/plasteel/dark,
/area/medical/morgue)
+"tMT" = (
+/obj/structure/lattice,
+/turf/open/space,
+/area/engine/engineering)
"tVY" = (
/obj/structure/closet/crate,
/obj/item/target/alien,
@@ -77962,6 +77176,11 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/maintenance/starboard)
+"uQo" = (
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
+/area/engine/engineering)
"uRM" = (
/obj/structure/disposalpipe/segment{
dir = 4
@@ -77990,10 +77209,30 @@
},
/turf/open/floor/plasteel,
/area/science/misc_lab)
+"vmz" = (
+/obj/structure/lattice/catwalk,
+/turf/open/space,
+/area/space)
+"vAk" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/maintenance/starboard/fore)
"vLD" = (
/obj/structure/lattice,
/turf/open/space/basic,
/area/space)
+"vSl" = (
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable/white{
+ icon_state = "1-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"wiZ" = (
/obj/machinery/door/airlock/external{
name = "Security External Airlock";
@@ -78044,11 +77283,39 @@
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/science/misc_lab)
+"xcM" = (
+/obj/structure/closet/firecloset,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/plasteel/yellow/side{
+ dir = 4
+ },
+/area/engine/engineering)
+"xfK" = (
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/power/tesla_coil,
+/turf/open/floor/plating/airless,
+/area/space)
"xkG" = (
/obj/item/device/integrated_electronics/wirer,
/obj/structure/table/reinforced,
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"xqB" = (
+/obj/structure/cable/white,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/power/emitter{
+ anchored = 1;
+ state = 2
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"xse" = (
/obj/machinery/door/airlock/external{
name = "Solar Maintenance";
@@ -78080,6 +77347,19 @@
/obj/structure/chair/comfy,
/turf/open/floor/plasteel,
/area/science/misc_lab)
+"xLP" = (
+/obj/structure/lattice/catwalk,
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
+/turf/open/space,
+/area/space)
+"xNI" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plating/airless,
+/area/engine/engineering)
"xVl" = (
/turf/closed/wall,
/area/hallway/secondary/service)
@@ -78090,6 +77370,24 @@
},
/turf/open/floor/plasteel/white,
/area/science/circuit)
+"xWZ" = (
+/obj/structure/cable/white{
+ icon_state = "2-8"
+ },
+/obj/structure/grille,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/closed/wall/r_wall,
+/area/engine/engineering)
+"yeY" = (
+/obj/machinery/camera/emp_proof{
+ c_tag = "Containment - Aft Starboard";
+ dir = 8;
+ network = list("singularity")
+ },
+/turf/open/floor/plating/airless,
+/area/space)
"ygk" = (
/obj/effect/turf_decal/stripes/line{
dir = 8
@@ -110961,7 +110259,7 @@ cRi
cRi
cRi
daP
-cLE
+cTA
dlV
aaa
aaa
@@ -111218,10 +110516,10 @@ daF
daJ
cRi
bvT
-cRi
-cRi
-cRi
-cRi
+dlV
+dlV
+dlV
+dlV
aaa
aai
aaa
@@ -111475,10 +110773,10 @@ cSn
cSn
cRi
dmq
-cRi
-cZv
-cZv
-cRi
+dlV
+ddj
+ddj
+dlV
aaf
aag
aaa
@@ -111733,9 +111031,9 @@ cSn
cRi
ddx
ddz
-daR
-cZv
-cRe
+ddj
+ddj
+jot
aaa
aaa
aaa
@@ -112247,9 +111545,9 @@ daK
cRi
bIv
ddz
-ddB
-cZv
-cRe
+ddj
+ddj
+jot
aaa
aaf
aaa
@@ -112503,10 +111801,10 @@ cSn
daN
cRi
dmr
-cRi
-cZv
-dbw
-cRi
+dlV
+ddj
+ddj
+dlV
aaa
aag
aaa
@@ -112760,10 +112058,10 @@ daI
daM
cRi
cTA
-cRi
-cRi
-cRi
-cRi
+dlV
+dlV
+dlV
+dlV
aaf
aag
aaa
@@ -118297,12 +117595,12 @@ aFu
aBI
aBI
aJn
-aCO
-aFq
+lLj
+lLj
aNq
aBI
aPZ
-aRo
+aSB
aSu
aTG
aUZ
@@ -118543,7 +117841,7 @@ arJ
arI
dnh
dqu
-doh
+tdB
axO
axY
aAo
@@ -118553,12 +117851,12 @@ aEn
aFv
aGV
aHX
-aEi
-aKA
-aMc
-aEi
+aBO
+aBO
+aBO
+aBO
aOO
-aEi
+aBO
aRp
aSv
aTH
@@ -119060,7 +118358,7 @@ avt
awJ
axS
axY
-aCO
+jIV
ddW
aCT
aEp
@@ -119320,18 +118618,18 @@ axY
aAr
ddX
aCU
-aEq
-aTO
+aCW
+aBO
aGX
-aHZ
-aJp
-aTO
+aBO
+aBO
+aBO
aSB
-aTO
-aOR
-aQa
+aBO
+aBO
+aBO
aGX
-aTO
+aBK
aTK
aVd
aBI
@@ -119574,23 +118872,23 @@ avv
axY
axU
ayS
-dCk
-ddY
+enN
+ddX
deb
-deh
-aFz
-aCZ
+aBO
+aBO
+iTS
deM
-axY
-aCZ
+uQo
+foU
aMg
-aCZ
+xcM
dfh
-deM
-aCZ
-aFz
-deh
-aVe
+aBO
+aBO
+aBK
+dPp
+rFx
axY
aYu
aYu
@@ -119834,21 +119132,21 @@ ddP
aAt
aBL
deb
-dei
+aBO
aFA
+axY
+axY
deB
-deB
-deB
-deB
+axY
aMh
-deB
-deB
-deB
-deB
+axY
+axY
+nKh
+aBO
aSz
-aTM
+aTK
aVe
-apc
+aJu
aYu
aZL
bbB
@@ -120091,21 +119389,21 @@ aAu
ddQ
aBM
aCV
-aEr
+aBO
aFB
-aGY
+axY
daW
dBw
-aKF
+dBw
aMi
cpR
-dfi
+axY
aQd
-dBA
+aBO
aSA
-aTN
-aVf
-apc
+aTK
+aVe
+aJu
aYu
aZM
bbC
@@ -120348,21 +119646,21 @@ ayV
aAv
aBN
aCW
-aEr
-aFC
+aBO
+aFA
aGZ
-aGZ
-dlI
+qJG
+aJu
aKG
-aMj
+aJu
dBy
-dlI
-aQe
-aRv
+aGZ
+nKh
+aBO
dfD
-aTN
-aVe
-apc
+aTK
+rWa
+aJu
aYu
aZN
bbD
@@ -120603,23 +119901,23 @@ axY
axY
ayW
bTq
+dgA
+aBO
aBO
-aCX
-dej
aFC
-deC
-deC
-dlI
+axY
+qJG
+aJu
aKH
aMk
aNu
-dlI
+axY
dfp
-dfp
-dfE
+aBO
+dgA
dfP
dfY
-dgc
+axY
aYu
cXA
cXA
@@ -120857,30 +120155,30 @@ ath
ajb
avA
axY
-axZ
+axY
ayX
-ddS
-bUw
-aCY
-dek
+axY
+axY
+aBO
+aBO
der
-deD
-dlI
-aJv
+axY
+qJG
+aJu
aKI
tDM
-dfb
-dfj
+dBy
+axY
dlI
-deD
-dfF
-aTN
-aVe
-aWH
-dgi
+aBO
+axY
+axY
+ayX
+axY
+atm
dgc
-aqq
-aqr
+alq
+apc
aWu
bif
bif
@@ -121114,29 +120412,29 @@ ati
ajb
avB
axY
-ddO
+jYQ
bUw
-ddT
-ddZ
-ded
-del
-des
+aJu
+axY
+axY
+axY
+axY
djt
-daY
+qJG
daZ
dbb
-aMk
-aNv
-dfk
-dfq
+rVX
+dBy
djt
-dfG
-dfQ
-dfZ
-apc
-apc
-dgo
-apc
+axY
+axY
+axY
+aJu
+bUw
+iYY
+axY
+alq
+alq
cXZ
atm
bfZ
@@ -121371,31 +120669,31 @@ ajb
ajb
avC
axY
-aya
-bUw
-ddU
-aBQ
-dee
+axY
+eEu
+axY
+axY
+ddO
aEr
-des
+ddO
djt
-daY
-daZ
-dbb
+qJG
+aJu
+rEi
dfa
aNv
-dfk
-daY
+djt
+ddO
djx
-dfG
-cXz
-aVe
-atm
-alr
-dgp
+axY
+axY
+nwU
+axY
+axY
+alq
cXI
cYj
-atm
+iOa
bga
big
bga
@@ -121414,7 +120712,7 @@ bFS
bHy
bIV
bKC
-bMi
+bAQ
bNU
bMg
bQV
@@ -121628,31 +120926,31 @@ dps
dpL
avD
axY
+axY
+xNI
+ddO
+ddO
+ddO
+ddO
ddO
-bUw
-ddV
-aBQ
-dee
-aEr
-aKL
djt
-daY
-deS
-dbb
-aMk
-aNv
-dfm
-daY
djt
-dbg
-dfR
+djt
+aRm
+djt
+djt
+djt
+ddO
+ddO
+ddO
+ddO
dga
dgd
dgj
-dgp
-alr
-atm
atm
+alq
+jFx
+iOa
bgb
cTu
bgb
@@ -121671,8 +120969,8 @@ bFT
bHz
bIW
bKD
-dhe
-dhg
+bCi
+bCi
bPu
bPu
bPu
@@ -121887,28 +121185,28 @@ avE
axY
ayc
aza
-aAw
-bUw
+ddO
+aaa
aCY
dem
-aFD
+dem
+deD
+deD
deD
-dlI
-dlI
deV
-dlN
-dfc
-dlI
-dlI
-deD
+dem
+dem
+dem
+dem
+dem
dfI
-dfS
-aVh
-aaf
+aaa
+ddO
+ddO
aYx
-dgr
-dgw
-dgA
+sSU
+lHL
+lMJ
dgI
bgb
cTi
@@ -121929,7 +121227,7 @@ bHy
bIX
bKE
bKE
-dhh
+bKE
bPv
bKE
bKE
@@ -122139,34 +121437,34 @@ apn
aqy
arT
apm
-dnS
+vAk
avB
axY
-axY
-bTq
+goZ
+ddO
aAx
-aBO
+sOW
aIe
aOS
-deu
-deI
-deN
-deI
-deW
-aMm
-dfd
-deN
-dft
+mwK
+mwK
+mwK
+mwK
+mwK
+mwK
+mwK
+mwK
+mwK
dBB
-dbh
-dfT
-aVh
-aaa
+aIe
+sOW
+cWu
+ddO
aYx
-dgf
-dgj
-ack
-dgJ
+sSU
+lMJ
+lMJ
+lHL
bgb
bij
bgb
@@ -122186,7 +121484,7 @@ bHA
bIY
bKF
bMk
-dhi
+bNV
bPw
bQW
bSj
@@ -122399,31 +121697,31 @@ atk
aux
avF
dqT
-dqT
-aaf
-ack
-dea
-aIc
-den
+esV
+xqB
+aAx
+aaa
+aIe
+dZD
+dev
+aav
+aav
+dev
+lMJ
+aaa
+aav
+aav
dev
-deJ
-deO
-deU
-deX
-dBx
-dfe
-dBz
-dfu
dfz
-dfJ
-dfU
-dga
+aIe
+aaa
+cWu
dge
azd
-azd
-azd
-dgB
-dgK
+sSU
+lMJ
+lMJ
+lHL
aaa
cUL
aaa
@@ -122443,7 +121741,7 @@ bHB
bIZ
bKG
bMl
-dhj
+bKG
bIZ
bKG
bMl
@@ -122656,31 +121954,31 @@ atl
auy
dnS
dqT
-dqT
-aaf
-ack
-ack
+fGs
+ddO
+aAx
+sOW
def
aCZ
-dew
-aCZ
-axY
-axY
-aCZ
-aCZ
-aCZ
-axY
-axY
-aCZ
-dew
-aCZ
-aVe
-dgf
-dgk
-dgt
-dgk
-dgv
-dgJ
+aav
+aav
+aav
+vLD
+aaf
+aaa
+aav
+aav
+aav
+xfK
+obN
+sOW
+cWu
+ddO
+dgg
+sSU
+lMJ
+lHL
+lHL
anT
aaf
aaf
@@ -122700,7 +121998,7 @@ bza
bJa
bza
bFX
-dhk
+bza
bJa
bza
bFX
@@ -122912,52 +122210,52 @@ apm
apm
dnh
dnS
-dnz
dqT
+xWZ
+dPf
+aAx
+aaa
+aIe
+dZD
+aav
+aav
+aaa
+aaa
aaf
-aaf
-aaf
-def
-ddZ
-dex
-aJu
-ddZ
-ddZ
-ddZ
-aMo
-dff
-ddZ
-ddZ
-aJu
-dex
-ddZ
-aVe
+aaa
+aaa
+aav
+aav
+dfz
+aIe
+aaa
+cWu
aWK
dgk
-dgt
-dgk
-dgB
-dgM
-dgN
-dgO
-dgO
-dgw
-dgO
-dgS
-dgO
-dgO
-dgw
-dgw
-dgw
-dgw
+sSU
+lMJ
+lHL
+lHL
+anT
+dew
+dew
+aaf
+dew
+bpw
+dew
+dew
+aaf
+aaf
+aaf
+aaf
bCz
-dgw
-dha
-dgw
-dhc
-dgw
-dha
-dhl
+aaf
+bFY
+aaf
+bJb
+aaf
+bFY
+aaf
bJb
aaf
bFY
@@ -123170,31 +122468,31 @@ dnh
auz
dqp
dqT
-dqT
+axY
+fGs
+aAx
+vmz
+def
+aCZ
aaa
aaa
aaa
-bTq
-dep
-dey
-aHa
ddZ
-ddZ
-ddZ
-ddZ
-ddZ
-ddZ
-ddZ
-dfA
-dfM
-dfV
-dgb
+cDu
+fWO
+aaa
+vLD
+dev
+xfK
+obN
+vmz
+cWu
dgg
-azd
-azd
-azd
-dgv
-aaf
+axY
+sSU
+lMJ
+lHL
+lHL
anT
aaa
aaa
@@ -123427,30 +122725,30 @@ dni
auA
dnS
dqT
-aaa
-aaa
-aaa
-aaa
axY
-deq
-dey
-deK
-ddZ
-ddZ
-ddZ
+fGs
+ddO
+sOW
+aIe
+dZD
+lMJ
+aaf
+aaf
+den
+nte
aMo
-ddZ
-ddZ
-ddZ
-dfB
-dfM
-dfW
+aaf
+aaf
+lMJ
+dfz
+aIe
+sOW
+ddO
+dgg
axY
-aWK
-dgk
-dgt
-dgk
-dgB
+sSU
+lMJ
+lHL
aaa
anT
aaa
@@ -123684,31 +122982,31 @@ dnh
auB
avG
dqT
-aaa
-aaa
-aaa
-aaa
axY
-aJu
-deA
-deL
-aJu
-aJu
+fGs
+aAx
+vmz
+def
+aCZ
+dev
+vLD
+aaa
+fjy
deY
+moI
+aaa
+aaa
+aaa
+xfK
+obN
+vmz
+cWu
+dgg
axY
-dfg
-aJu
-aJu
-dfC
-dfO
-ddZ
-axY
-dgh
-dgk
-dgk
-dgk
-dgv
-aaf
+sSU
+lMJ
+lHL
+lHL
anT
aaa
aaa
@@ -123941,30 +123239,30 @@ dnh
dnh
jKK
dqT
+ocj
+rTo
+aAx
+aaa
+aIe
+dZD
+aav
+aav
+aaa
+aaa
aaf
aaa
aaa
+aav
+aav
+dfz
+aIe
aaa
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-axY
-aWK
+cWu
+jjF
dgm
-dgu
-dgm
-dgB
+sSU
+lMJ
+lHL
aaa
anT
aaa
@@ -124198,31 +123496,31 @@ atn
bOY
avG
dqT
-aaf
-aaa
-aaa
+fGs
+ddO
+aAx
+sOW
+dtL
+aCZ
+aav
+aav
aaa
aaa
aaf
+vLD
aaa
-aaf
-aaa
-aaa
-aaf
-aaa
-aaf
-aaa
-aaf
-aaa
-aaf
-aaf
-ack
-ack
-aye
-dgv
-aye
-dgv
-aaf
+aav
+aav
+xfK
+xLP
+sOW
+pWF
+ddO
+dgg
+sSU
+lMJ
+lHL
+lHL
anT
aaf
aaf
@@ -124455,29 +123753,29 @@ dnh
dnh
lNZ
dqT
-aaf
+drT
+xqB
+aAx
+aaa
+vmz
+dZD
+dev
+aav
aaa
aaa
+lMJ
+dev
+aav
+aav
+dev
+dfz
+vmz
aaa
-aaa
-aaf
-aaa
-aaf
-aaa
-aaa
-aaf
-aaa
-aaf
-aaa
-aaf
-aaa
-aaa
-aaf
-aaf
-aaf
-aaa
-aaa
-aaf
+cWu
+dge
+vSl
+sSU
+lMJ
aaa
aaa
aaf
@@ -124712,29 +124010,29 @@ aaa
aaf
ack
dqT
-aaf
-anT
-anT
-anT
-anT
-aaf
-anT
-anT
-anT
-anT
-anT
-anT
-aqB
-anT
-anT
-anT
-anT
-anT
-anT
-aaf
-aaa
-aaa
-aaf
+axY
+axY
+ddO
+hWU
+hWU
+gKb
+hWU
+hWU
+hWU
+hWU
+hWU
+hWU
+hWU
+hWU
+hWU
+yeY
+hWU
+hWU
+ddO
+axY
+axY
+sSU
+lMJ
aaa
aaa
aaf
@@ -124969,29 +124267,29 @@ aaf
aaf
ack
aaf
-aaa
-aaa
-aaa
-aaf
-aaa
-aaa
-bpu
-bpu
-bpu
-bpu
-bpu
-bpu
-bpu
-bpu
-bpu
-bpu
-aaa
-aaa
-aaa
-aaf
-aaf
-aaf
-aaf
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+sSU
+lMJ
aaa
aaa
aaa
@@ -125225,30 +124523,30 @@ aaa
aaa
aaa
aaa
+vLD
aaa
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+axY
+eln
+tMT
aaa
-aaa
-aaa
-aaf
-aaf
-aaf
-anT
-anT
-anT
-anT
-aqB
-anT
-anT
-anT
-anT
-aqB
-aaf
-aaf
-aaf
-aaf
-aaa
-aaf
-aaf
+lHL
+lMJ
aaa
aaa
aaa
@@ -125482,7 +124780,7 @@ aaa
aaa
aaa
aaa
-aaa
+vLD
aaa
aaa
aaa
@@ -125739,26 +125037,26 @@ aaa
aaa
aaa
aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
-aaa
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
+vLD
aaf
aai
aaa
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index d1c0b770dd..6bf52ab60a 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -8933,16 +8933,6 @@
dir = 4
},
/area/bridge)
-"axf" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/door/poddoor/preopen{
- id = "bridgespace";
- name = "bridge external shutters"
- },
-/turf/open/floor/plasteel/vault{
- dir = 8
- },
-/area/bridge)
"axg" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel/dark,
@@ -12234,11 +12224,6 @@
/obj/structure/disposalpipe/segment,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"aEY" = (
-/obj/machinery/door/firedoor,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/plasteel,
-/area/hallway/primary/central)
"aEZ" = (
/obj/structure/sink{
dir = 8;
@@ -12942,6 +12927,11 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel,
/area/hallway/primary/central)
+"aGW" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"aGX" = (
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
@@ -15026,6 +15016,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "2-4"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMq" = (
@@ -15033,6 +15026,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMr" = (
@@ -15040,6 +15036,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMs" = (
@@ -15049,6 +15048,9 @@
/obj/structure/sign/poster/official/random{
pixel_y = 32
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMt" = (
@@ -15063,6 +15065,9 @@
c_tag = "Cargo Warehouse";
dir = 2
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMu" = (
@@ -15070,6 +15075,9 @@
/obj/structure/disposalpipe/segment{
dir = 4
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMv" = (
@@ -15083,6 +15091,9 @@
pixel_x = 26
},
/obj/structure/cable,
+/obj/structure/cable{
+ icon_state = "0-8"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aMw" = (
@@ -15649,6 +15660,9 @@
/obj/structure/sign/poster/official/random{
pixel_x = -32
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aNO" = (
@@ -16155,6 +16169,9 @@
"aOY" = (
/obj/effect/spawner/lootdrop/maintenance,
/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aOZ" = (
@@ -16542,6 +16559,9 @@
req_access_txt = "31"
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel/floorgrime,
/area/quartermaster/warehouse)
"aQd" = (
@@ -17040,6 +17060,14 @@
/area/quartermaster/sorting)
"aRl" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/machinery/power/apc/highcap/fifteen_k{
+ dir = 4;
+ name = "Delivery Office APC";
+ pixel_x = 28
+ },
+/obj/structure/cable{
+ icon_state = "0-2"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
"aRm" = (
@@ -17057,6 +17085,9 @@
},
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/delivery,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/warehouse)
"aRo" = (
@@ -17434,6 +17465,9 @@
"aSh" = (
/obj/effect/spawner/structure/window/reinforced,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plating,
/area/quartermaster/sorting)
"aSi" = (
@@ -17447,6 +17481,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 1
},
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"aSj" = (
@@ -17825,6 +17862,9 @@
dir = 4
},
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable{
+ icon_state = "1-4"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/office)
"aTi" = (
@@ -17839,6 +17879,9 @@
departmentType = 2;
pixel_y = 32
},
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"aTj" = (
@@ -17851,6 +17894,9 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 9
},
+/obj/structure/cable{
+ icon_state = "1-8"
+ },
/turf/open/floor/plasteel,
/area/quartermaster/storage)
"aTl" = (
@@ -22032,8 +22078,7 @@
},
/area/maintenance/department/cargo)
"bdA" = (
-/obj/item/cigbutt,
-/obj/effect/spawner/lootdrop/maintenance,
+/obj/machinery/droneDispenser,
/turf/open/floor/plating,
/area/maintenance/department/cargo)
"bdB" = (
@@ -26568,12 +26613,6 @@
},
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
-"bpp" = (
-/obj/machinery/computer/camera_advanced/xenobio{
- dir = 8
- },
-/turf/open/floor/plasteel/white,
-/area/science/xenobiology)
"bpq" = (
/obj/structure/sign/warning/electricshock,
/turf/closed/wall/r_wall,
@@ -27772,9 +27811,6 @@
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"brQ" = (
-/obj/machinery/computer/camera_advanced/xenobio{
- dir = 8
- },
/obj/machinery/camera{
c_tag = "Xenobiology Port";
dir = 8;
@@ -28377,7 +28413,7 @@
/turf/open/floor/plasteel/white,
/area/science/explab)
"btj" = (
-/obj/machinery/droneDispenser,
+/obj/structure/table,
/turf/open/floor/plasteel/white,
/area/science/explab)
"btk" = (
@@ -28566,11 +28602,11 @@
/turf/open/floor/plating,
/area/science/xenobiology)
"btD" = (
-/turf/open/floor/plating/airless,
+/turf/open/floor/plating,
/area/science/xenobiology)
"btE" = (
/obj/effect/decal/remains/xeno,
-/turf/open/floor/plating/airless,
+/turf/open/floor/plating,
/area/science/xenobiology)
"btF" = (
/obj/structure/chair{
@@ -29191,12 +29227,7 @@
/obj/machinery/light/small{
dir = 4
},
-/obj/machinery/camera{
- c_tag = "Xenobiology Kill Room";
- dir = 8;
- network = list("ss13","rd")
- },
-/turf/open/floor/plating/airless,
+/turf/open/floor/plating,
/area/science/xenobiology)
"bva" = (
/turf/closed/wall,
@@ -31263,16 +31294,22 @@
/turf/open/floor/plasteel/whitepurple/side,
/area/science/xenobiology)
"bzi" = (
-/obj/item/extinguisher{
- pixel_x = 4;
- pixel_y = 3
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
},
-/obj/item/extinguisher,
/obj/structure/table/glass,
-/turf/open/floor/plasteel/whitepurple/side,
+/obj/item/extinguisher,
+/obj/item/extinguisher{
+ pixel_x = 2;
+ pixel_y = 2
+ },
+/obj/item/extinguisher{
+ pixel_x = 5;
+ pixel_y = 5
+ },
+/turf/open/floor/plasteel,
/area/science/xenobiology)
"bzj" = (
-/obj/structure/reagent_dispensers/watertank,
/obj/machinery/requests_console{
department = "Science";
departmentType = 2;
@@ -31280,6 +31317,7 @@
pixel_x = 32;
receive_ore_updates = 1
},
+/obj/structure/reagent_dispensers/watertank/high,
/turf/open/floor/plasteel/whitepurple/side,
/area/science/xenobiology)
"bzk" = (
@@ -32314,6 +32352,9 @@
/area/crew_quarters/heads/hor)
"bBw" = (
/obj/machinery/computer/security,
+/obj/machinery/light{
+ dir = 8
+ },
/turf/open/floor/plasteel/red/side{
dir = 8
},
@@ -36419,6 +36460,14 @@
/obj/effect/spawner/structure/window,
/turf/open/floor/plating,
/area/hallway/primary/aft)
+"bKN" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/door/poddoor/preopen{
+ id = "prison release";
+ name = "prisoner processing blast door"
+ },
+/turf/open/floor/plasteel/dark,
+/area/security/brig)
"bKO" = (
/obj/effect/turf_decal/delivery,
/obj/machinery/door/poddoor/preopen{
@@ -38108,6 +38157,7 @@
},
/obj/item/stack/sheet/glass,
/obj/item/stack/rods/fifty,
+/obj/item/pipe_dispenser,
/turf/open/floor/plasteel/yellow/side,
/area/engine/atmos)
"bOY" = (
@@ -40916,9 +40966,6 @@
/obj/structure/table/reinforced,
/obj/item/clipboard,
/obj/item/lighter,
-/obj/item/clothing/glasses/meson{
- pixel_y = 4
- },
/obj/item/stamp/ce,
/obj/item/stock_parts/cell/high/plus,
/obj/machinery/keycard_auth{
@@ -40933,6 +40980,7 @@
/obj/structure/cable{
icon_state = "0-8"
},
+/obj/item/clothing/glasses/meson/engine,
/turf/open/floor/plasteel/yellow/side{
dir = 4
},
@@ -42850,10 +42898,7 @@
},
/obj/effect/turf_decal/stripes/line,
/obj/item/airlock_painter,
-/obj/item/clothing/glasses/meson{
- pixel_x = 3;
- pixel_y = -4
- },
+/obj/item/clothing/glasses/meson/engine,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cap" = (
@@ -43188,11 +43233,11 @@
"cbe" = (
/obj/item/pen,
/obj/item/storage/belt/utility,
-/obj/item/clothing/glasses/meson,
/obj/item/paper_bin{
layer = 2.9
},
/obj/structure/table/glass,
+/obj/item/clothing/glasses/meson/engine,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cbf" = (
@@ -43279,7 +43324,7 @@
/obj/structure/table,
/obj/item/clothing/gloves/color/yellow,
/obj/item/storage/belt/utility,
-/obj/item/clothing/glasses/meson,
+/obj/item/clothing/glasses/meson/engine,
/turf/open/floor/plasteel,
/area/engine/engineering)
"cbo" = (
@@ -43728,6 +43773,9 @@
/obj/item/stack/sheet/mineral/plasma{
amount = 30
},
+/obj/item/device/gps{
+ gpstag = "ENG0"
+ },
/turf/open/floor/plating,
/area/engine/engineering)
"ccS" = (
@@ -45129,9 +45177,6 @@
icon_state = "0-8"
},
/obj/machinery/power/tesla_coil,
-/obj/structure/window/plasma/reinforced{
- dir = 4
- },
/turf/open/floor/plating/airless,
/area/engine/engineering)
"chz" = (
@@ -45139,9 +45184,6 @@
icon_state = "0-4"
},
/obj/machinery/power/tesla_coil,
-/obj/structure/window/plasma/reinforced{
- dir = 8
- },
/turf/open/floor/plating/airless,
/area/engine/engineering)
"chA" = (
@@ -45249,16 +45291,6 @@
/obj/structure/grille,
/turf/open/floor/plating/airless,
/area/engine/engineering)
-"chQ" = (
-/obj/structure/window/plasma/reinforced{
- dir = 4
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-8"
- },
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
"chR" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -45412,14 +45444,13 @@
/turf/open/floor/plating/airless,
/area/space/nearstation)
"cit" = (
-/obj/machinery/the_singularitygen,
+/obj/machinery/the_singularitygen/tesla,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"ciu" = (
/obj/effect/turf_decal/stripes/line{
dir = 4
},
-/obj/machinery/the_singularitygen/tesla,
/turf/open/floor/plating/airless,
/area/space/nearstation)
"civ" = (
@@ -49350,6 +49381,18 @@
dir = 1
},
/area/library/lounge)
+"cyr" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = 29
+ },
+/turf/open/floor/plasteel/red/side{
+ dir = 1
+ },
+/area/security/brig)
"cyy" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
@@ -49952,26 +49995,6 @@
/obj/machinery/power/rad_collector,
/turf/open/floor/plating,
/area/engine/engineering)
-"cBR" = (
-/obj/structure/cable/yellow{
- icon_state = "1-2"
- },
-/obj/structure/cable/yellow{
- icon_state = "1-4"
- },
-/obj/item/tank/internals/plasma,
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
-"cBS" = (
-/obj/structure/window/plasma/reinforced{
- dir = 8
- },
-/obj/machinery/power/rad_collector/anchored,
-/obj/structure/cable/yellow{
- icon_state = "0-4"
- },
-/turf/open/floor/plating/airless,
-/area/engine/engineering)
"cBT" = (
/obj/effect/spawner/structure/window/plasma/reinforced,
/turf/open/floor/plating/airless,
@@ -50094,18 +50117,25 @@
"cDa" = (
/turf/closed/wall,
/area/quartermaster/warehouse)
-"dse" = (
-/obj/structure/disposalpipe/segment{
- dir = 6
+"dTw" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "1-4"
},
-/turf/open/floor/plasteel,
-/area/quartermaster/sorting)
-"dMB" = (
+/turf/open/floor/carpet,
+/area/library)
+"ecV" = (
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
"eHp" = (
/turf/closed/wall,
/area/crew_quarters/cryopod)
+"eIE" = (
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 8
+ },
+/turf/open/floor/plasteel/dark,
+/area/library/lounge)
"eJt" = (
/obj/machinery/computer/cryopod{
pixel_y = 24
@@ -50119,29 +50149,43 @@
},
/turf/open/floor/plasteel/darkpurple,
/area/crew_quarters/cryopod)
-"fwl" = (
+"fki" = (
/obj/structure/disposalpipe/segment{
- dir = 4
+ dir = 6
},
/turf/open/floor/plasteel,
/area/quartermaster/sorting)
-"fWv" = (
-/obj/structure/bookcase/random/religion,
-/turf/open/floor/plasteel/dark,
-/area/library/lounge)
-"ick" = (
+"frt" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/obj/structure/cable{
icon_state = "4-8"
},
-/turf/open/floor/plasteel/dark,
-/area/library)
-"ijF" = (
+/turf/open/floor/plasteel,
+/area/quartermaster/office)
+"fyh" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/structure/cable{
icon_state = "1-2"
},
/turf/open/floor/carpet,
/area/library)
+"fID" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/quartermaster/sorting)
+"izp" = (
+/obj/effect/spawner/structure/window/reinforced,
+/obj/machinery/door/poddoor/preopen{
+ id = "Engineering";
+ name = "engineering security door"
+ },
+/turf/open/floor/plating,
+/area/security/checkpoint/engineering)
"izB" = (
/obj/machinery/door/airlock/external{
name = "Escape Pod"
@@ -50151,7 +50195,7 @@
},
/turf/open/floor/plating,
/area/crew_quarters/dorms)
-"iKb" = (
+"iCc" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/quartermaster/sorting)
@@ -50178,31 +50222,6 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/library)
-"jvi" = (
-/obj/structure/cable{
- icon_state = "4-8"
- },
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = -26
- },
-/turf/open/floor/plasteel/darkred/side{
- dir = 1
- },
-/area/crew_quarters/heads/hos)
-"jFO" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/cable{
- icon_state = "1-2"
- },
-/turf/open/floor/carpet,
-/area/library/lounge)
-"jXh" = (
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/library/lounge)
"jZg" = (
/obj/machinery/cryopod,
/turf/open/floor/plasteel/darkpurple,
@@ -50234,6 +50253,24 @@
},
/turf/open/floor/plating,
/area/ai_monitored/turret_protected/AIsatextAP)
+"kqj" = (
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel,
+/area/quartermaster/storage)
+"krG" = (
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/library)
+"let" = (
+/turf/closed/wall/r_wall,
+/area/space)
"lqy" = (
/obj/machinery/door/airlock/centcom{
name = "Library"
@@ -50243,37 +50280,64 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/library/lounge)
-"lAs" = (
-/turf/closed/wall,
-/area/quartermaster/sorting)
-"lQQ" = (
-/obj/machinery/door/poddoor/preopen{
- id = "bridgespace";
- name = "bridge external shutters"
- },
-/turf/open/floor/plasteel/vault{
- dir = 8
- },
-/area/bridge)
-"mdL" = (
-/obj/structure/table,
-/obj/item/stock_parts/matter_bin,
-/obj/item/stock_parts/matter_bin,
-/obj/item/stock_parts/micro_laser,
-/obj/item/stock_parts/micro_laser,
-/obj/item/stack/cable_coil,
-/obj/item/stack/cable_coil,
-/turf/open/floor/plasteel/whitepurple/side,
-/area/science/lab)
-"mCe" = (
-/obj/effect/spawner/structure/window/reinforced,
-/obj/machinery/door/poddoor/preopen{
- id = "Engineering";
- name = "engineering security door"
- },
+"lvl" = (
+/obj/effect/spawner/lootdrop/maintenance,
+/obj/item/cigbutt,
/turf/open/floor/plating,
-/area/security/checkpoint/engineering)
-"mKc" = (
+/area/maintenance/department/cargo)
+"mHo" = (
+/obj/structure/table,
+/obj/machinery/microwave{
+ pixel_x = -3;
+ pixel_y = 6
+ },
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = 27
+ },
+/turf/open/floor/plasteel/cafeteria,
+/area/crew_quarters/kitchen)
+"mLe" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -26
+ },
+/turf/open/floor/plasteel/darkred/side{
+ dir = 1
+ },
+/area/crew_quarters/heads/hos)
+"nuB" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/structure/cable{
+ icon_state = "1-2"
+ },
+/turf/open/floor/carpet,
+/area/library/lounge)
+"nJY" = (
+/obj/structure/rack,
+/obj/item/stack/sheet/glass/fifty{
+ pixel_x = 3;
+ pixel_y = 3
+ },
+/obj/item/stack/sheet/metal/fifty,
+/turf/open/floor/plating,
+/area/maintenance/department/cargo)
+"opC" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/power/apc{
+ dir = 4;
+ name = "Library APC";
+ pixel_x = 24
+ },
+/obj/structure/cable,
+/turf/open/floor/plasteel/dark,
+/area/library)
+"oJF" = (
/obj/structure/bookcase/random/nonfiction,
/turf/open/floor/plasteel/dark,
/area/library/lounge)
@@ -50300,16 +50364,6 @@
"pps" = (
/turf/closed/wall,
/area/engine/break_room)
-"pXc" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
-/obj/structure/cable{
- icon_state = "1-4"
- },
-/turf/open/floor/carpet,
-/area/library)
-"qOE" = (
-/turf/open/floor/plasteel/dark,
-/area/library/lounge)
"qWK" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -50322,30 +50376,10 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/central)
-"rxV" = (
-/obj/structure/table,
-/obj/machinery/microwave{
- pixel_x = -3;
- pixel_y = 6
- },
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = 27
- },
-/turf/open/floor/plasteel/cafeteria,
-/area/crew_quarters/kitchen)
-"sBA" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
- dir = 4
- },
-/obj/machinery/firealarm{
- dir = 1;
- pixel_y = 29
- },
-/turf/open/floor/plasteel/red/side{
- dir = 1
- },
-/area/security/brig)
+"sHK" = (
+/obj/structure/bookcase/random/religion,
+/turf/open/floor/plasteel/dark,
+/area/library/lounge)
"sQt" = (
/obj/machinery/door/airlock/external{
name = "Supply Dock Airlock";
@@ -50368,6 +50402,10 @@
},
/turf/open/floor/plasteel/darkpurple,
/area/crew_quarters/cryopod)
+"tez" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/carpet,
+/area/library/lounge)
"tjW" = (
/obj/machinery/light{
dir = 8
@@ -50379,6 +50417,15 @@
},
/turf/open/floor/plasteel/dark,
/area/security/prison)
+"ufi" = (
+/turf/open/floor/plasteel/dark,
+/area/library/lounge)
+"urZ" = (
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/plasteel/dark,
+/area/library)
"uyt" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
@@ -50415,36 +50462,32 @@
/obj/machinery/door/firedoor,
/turf/open/floor/plasteel/dark,
/area/library)
-"wxJ" = (
-/obj/effect/turf_decal/delivery,
+"vTA" = (
/obj/machinery/door/poddoor/preopen{
- id = "prison release";
- name = "prisoner processing blast door"
+ id = "bridgespace";
+ name = "bridge external shutters"
},
-/turf/open/floor/plasteel/dark,
-/area/security/brig)
-"xhj" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/turf/open/floor/carpet,
-/area/library/lounge)
-"xja" = (
-/obj/machinery/light/small{
- dir = 4
+/turf/open/floor/plasteel/vault{
+ dir = 8
},
-/obj/machinery/power/apc{
- dir = 4;
- name = "Library APC";
- pixel_x = 24
- },
-/obj/structure/cable,
-/turf/open/floor/plasteel/dark,
-/area/library)
-"xjc" = (
-/obj/structure/cable{
- icon_state = "2-8"
- },
-/turf/open/floor/plasteel/dark,
-/area/library)
+/area/bridge)
+"xzr" = (
+/turf/closed/wall,
+/area/quartermaster/sorting)
+"yhZ" = (
+/obj/structure/table,
+/obj/item/stock_parts/matter_bin,
+/obj/item/stock_parts/matter_bin,
+/obj/item/stock_parts/micro_laser,
+/obj/item/stock_parts/micro_laser,
+/obj/item/stack/cable_coil,
+/obj/item/stack/cable_coil,
+/turf/open/floor/plasteel/whitepurple/side,
+/area/science/lab)
+"yia" = (
+/obj/structure/lattice,
+/turf/open/space/basic,
+/area/space)
(1,1,1) = {"
aaa
@@ -68110,13 +68153,13 @@ cgG
cfn
ckE
ckT
-xhj
-xhj
+tez
+tez
cwK
-xhj
-xhj
+tez
+tez
cxn
-xhj
+tez
lqy
cxC
cxK
@@ -68368,12 +68411,12 @@ cvw
cvK
cwg
cjR
-jFO
+nuB
ckF
-jFO
+nuB
cxe
-jFO
-jFO
+nuB
+nuB
cxz
cxD
cxL
@@ -68381,8 +68424,8 @@ cxY
cym
cyA
vOw
-ijF
-pXc
+fyh
+dTw
ckm
ckm
ckm
@@ -68628,7 +68671,7 @@ cwr
clm
ckG
cwU
-jXh
+eIE
ckU
cwe
cwe
@@ -68639,7 +68682,7 @@ cxM
cyB
cjp
cyR
-ick
+urZ
ckH
ckH
ckH
@@ -68882,10 +68925,10 @@ cvy
cvL
cwe
cwe
-fWv
-qOE
+sHK
+ufi
ckV
-qOE
+ufi
cln
cwe
cfN
@@ -68896,7 +68939,7 @@ aaa
aaa
cjp
cyS
-ick
+urZ
cyZ
ckH
czo
@@ -69139,10 +69182,10 @@ cvc
cvM
cfm
cwe
-fWv
-qOE
-mKc
-qOE
+sHK
+ufi
+oJF
+ufi
cln
cwe
caS
@@ -69153,7 +69196,7 @@ aht
aht
cjp
cko
-ick
+urZ
ckH
ckH
clp
@@ -69410,7 +69453,7 @@ aaa
aaa
cjp
cyT
-ick
+urZ
cyZ
ckH
czp
@@ -69667,8 +69710,8 @@ aht
aht
cjp
cjp
-xjc
-xja
+krG
+opC
ckH
czq
czw
@@ -70574,7 +70617,7 @@ aok
aoO
apF
apE
-wxJ
+bKN
apE
bBW
ajM
@@ -73914,7 +73957,7 @@ anJ
amX
aoY
apN
-sBA
+cyr
arp
asB
atB
@@ -74701,7 +74744,7 @@ aDv
aBh
aBh
aGd
-aEY
+aGW
aHG
aIM
aJG
@@ -77251,7 +77294,7 @@ akW
alK
amw
ani
-jvi
+mLe
aiR
aph
ajM
@@ -79160,8 +79203,8 @@ bXk
bXk
bXk
bXk
-aaa
-aaa
+bXk
+let
aaa
aaa
aaa
@@ -79416,9 +79459,9 @@ chR
cgt
cjT
ckq
+ckq
bXk
-aaa
-aaa
+let
aaa
aaa
aaa
@@ -79673,9 +79716,9 @@ chS
cfV
cgS
cfV
+cfV
bXk
-aaa
-aaa
+let
aaa
aaa
aaa
@@ -79858,7 +79901,7 @@ aRN
aWa
aRN
aRN
-rxV
+mHo
aYS
cpn
bch
@@ -79929,10 +79972,10 @@ cfV
cfV
cfV
cgT
+cfV
ckr
bXk
-aaa
-aaa
+let
aaa
aaa
aaa
@@ -80179,17 +80222,17 @@ cfU
cgu
cgU
chw
-cBR
-chw
-chw
+cgU
chw
+cgU
chw
+cgU
cjs
cfV
cfV
-bTE
-aaa
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -80436,17 +80479,17 @@ cfV
cgv
cfV
chx
-chQ
+cfV
chx
-chQ
+cfV
chx
-chQ
+cfV
chx
cfV
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -80694,16 +80737,16 @@ cgv
cgV
bBW
bBW
-aaa
cgV
+aht
aaa
bBW
bBW
cgV
cfV
-bTE
-abI
-abI
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -80951,16 +80994,16 @@ cgv
bBW
bBW
bBW
-aaa
+yia
abI
aaa
bBW
bBW
bBW
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -81215,9 +81258,9 @@ aaa
bBW
bBW
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -81469,12 +81512,12 @@ cii
cis
ciG
aaa
-aaa
-aaa
+yia
+cgV
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -81719,7 +81762,7 @@ cfd
cfw
cfW
cgw
-cgV
+aht
abI
abI
cij
@@ -81727,11 +81770,11 @@ cit
ciH
abI
abI
-cgV
+aht
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -81976,8 +82019,8 @@ cfe
cfx
cfa
cgv
-aaa
-aaa
+cgV
+yia
aaa
cik
ciu
@@ -81986,9 +82029,9 @@ aaa
aaa
aaa
cfV
-bTE
-aaa
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -82243,9 +82286,9 @@ aaa
bBW
bBW
cfV
-bTE
-aaa
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -82495,14 +82538,14 @@ bBW
aaa
aaa
abI
-aaa
+yia
aaa
bBW
bBW
cfV
-bTE
-aaa
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -82733,7 +82776,7 @@ bUi
bUV
bVO
bWA
-mCe
+izp
bYj
bYQ
bZA
@@ -82751,15 +82794,15 @@ cgV
bBW
aaa
aaa
+aht
cgV
-aaa
bBW
bBW
cgV
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
aaa
aaa
aaa
@@ -82990,7 +83033,7 @@ bUj
bUW
bVP
bWB
-mCe
+izp
bYk
bYQ
bZA
@@ -83006,17 +83049,17 @@ cfV
cgv
cfV
chz
-cBS
+cfV
chz
-cBS
+cfV
chz
-cBS
+cfV
chz
cfV
cfV
-bTE
-abI
-abI
+cfV
+bXk
+let
abI
abI
aaa
@@ -83172,9 +83215,9 @@ ahi
atY
auU
atY
-lQQ
+vTA
ayf
-axf
+vTA
aAF
aBz
aCP
@@ -83247,7 +83290,7 @@ bUk
bUX
bVQ
bWC
-mCe
+izp
bYl
bYO
bZC
@@ -83263,17 +83306,17 @@ cfU
cgx
cgU
chA
+cgU
chA
+cgU
chA
-chA
-chA
-chA
+cgU
cjt
cfV
cfV
-bTE
-abI
-aaa
+cfV
+bXk
+let
abI
aaa
aaa
@@ -83527,10 +83570,10 @@ cfV
cfV
cfV
cgY
+cfV
cks
bXk
-abI
-aaa
+let
aaa
aaa
aaa
@@ -83785,9 +83828,9 @@ chO
cfV
cgZ
cfV
+cfV
bXk
-abI
-abI
+let
abI
aaa
aaa
@@ -84042,9 +84085,9 @@ chP
cgt
cjU
ckq
+ckq
bXk
-abI
-aaa
+let
aaa
aaa
aaa
@@ -84299,9 +84342,9 @@ bXk
bXk
bXk
bXk
+bXk
ckJ
-abI
-aaa
+let
aaa
aaa
aaa
@@ -85021,7 +85064,7 @@ bsT
bus
bvz
bxg
-mdL
+yhZ
bAs
bBu
bCI
@@ -85752,7 +85795,7 @@ aBI
aES
aBI
aBI
-aEY
+aGW
aHG
aBI
aJX
@@ -85775,7 +85818,7 @@ aMb
aSX
aMb
aBI
-aEY
+aGW
bgA
bhe
aDZ
@@ -87058,7 +87101,7 @@ aVu
bat
aLf
bcy
-aKq
+lvl
aEj
aEj
bgC
@@ -87555,13 +87598,13 @@ eHp
aHN
aIU
aJI
-lAs
-lAs
+xzr
+xzr
aNG
aOR
-iKb
-lAs
-lAs
+iCc
+xzr
+xzr
aTb
aOT
aVp
@@ -87572,7 +87615,7 @@ aPY
bav
aLf
aFi
-aFi
+nJY
beI
bfv
bgE
@@ -87812,7 +87855,7 @@ aET
aHN
aIU
aJI
-lAs
+xzr
aMg
aNH
aOS
@@ -88069,11 +88112,11 @@ aET
aHN
aJh
bhe
-lAs
+xzr
aMh
aNI
-fwl
-dMB
+fID
+ecV
aRi
aSf
aTd
@@ -88326,13 +88369,13 @@ aHn
aIi
aJi
aKe
-lAs
+xzr
aMi
aNJ
-fwl
+fID
aPZ
aRj
-lAs
+xzr
aTe
aUo
aVs
@@ -88583,13 +88626,13 @@ aET
aHN
aIU
aJI
-lAs
+xzr
aMj
aNK
-fwl
-dMB
-dMB
-iKb
+fID
+ecV
+ecV
+iCc
aTf
aUp
aVt
@@ -88840,7 +88883,7 @@ aET
aHN
aIU
aJI
-lAs
+xzr
aMk
aNL
aOU
@@ -89097,10 +89140,10 @@ cos
coy
aJj
aJI
-lAs
+xzr
aMl
aNM
-dse
+fki
aQb
aRl
aSh
@@ -89354,14 +89397,14 @@ aDZ
aDZ
aJk
aJH
-lAs
+xzr
aMm
-lAs
+xzr
aOW
-lAs
-lAs
-lAs
-aSY
+xzr
+xzr
+xzr
+frt
aUs
aLf
aLf
@@ -89604,18 +89647,18 @@ aAP
avk
aDg
aEc
-aEY
+aGW
cot
aBI
aBI
aBI
aJl
aKf
-lAs
+xzr
aMn
-lAs
+xzr
aOX
-lAs
+xzr
aRm
aLg
aTi
@@ -89875,7 +89918,7 @@ cDa
cDa
cDa
aLg
-aTj
+kqj
aUu
aVx
aVx
@@ -93238,7 +93281,7 @@ bkE
aht
bnd
boh
-bpp
+bpn
bqx
brQ
btr
diff --git a/cfg/admin.txt b/cfg/admin.txt
index 8b13789179..fcc587124a 100644
--- a/cfg/admin.txt
+++ b/cfg/admin.txt
@@ -1 +1 @@
-
+poojawa role=admin
diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm
index db496f1cba..b4a9f41213 100644
--- a/code/__DEFINES/preferences.dm
+++ b/code/__DEFINES/preferences.dm
@@ -14,9 +14,10 @@
#define SOUND_ANNOUNCEMENTS 2048
#define DISABLE_DEATHRATTLE 4096
#define DISABLE_ARRIVALRATTLE 8192
-#define MEDIHOUND_SLEEPER 16384
-
-#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|MEMBER_PUBLIC|INTENT_STYLE|MIDROUND_ANTAG|SOUND_INSTRUMENTS|SOUND_SHIP_AMBIENCE|SOUND_PRAYERS|SOUND_ANNOUNCEMENTS|MEDIHOUND_SLEEPER)
+#define MEDIHOUND_SLEEPER 16384 //CITADEL EDITS, vore prefs.
+#define EATING_NOISES 32768
+#define DIGESTION_NOISES 65536
+#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|MEMBER_PUBLIC|INTENT_STYLE|MIDROUND_ANTAG|SOUND_INSTRUMENTS|SOUND_SHIP_AMBIENCE|SOUND_PRAYERS|SOUND_ANNOUNCEMENTS|MEDIHOUND_SLEEPER|EATING_NOISES|DIGESTION_NOISES)
//Chat toggles
#define CHAT_OOC 1
@@ -66,4 +67,4 @@
#define EXP_TYPE_GHOST "Ghost"
//Flags in the players table in the db
-#define DB_FLAG_EXEMPT 1
\ No newline at end of file
+#define DB_FLAG_EXEMPT 1
diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm
index 7766bd2319..453a02db01 100644
--- a/code/__DEFINES/sound.dm
+++ b/code/__DEFINES/sound.dm
@@ -11,12 +11,13 @@
//CIT CHANNELS - TRY NOT TO REGRESS
#define CHANNEL_PRED 1015
-#define CHANNEL_PREYLOOP 1014
+#define CHANNEL_DIGEST 1014
+#define CHANNEL_PREYLOOP 1013
//THIS SHOULD ALWAYS BE THE LOWEST ONE!
//KEEP IT UPDATED
-#define CHANNEL_HIGHEST_AVAILABLE 1013 //CIT CHANGE - COMPENSATES FOR VORESOUND CHANNELS
+#define CHANNEL_HIGHEST_AVAILABLE 1012 //CIT CHANGE - COMPENSATES FOR VORESOUND CHANNELS
#define SOUND_MINIMUM_PRESSURE 10
diff --git a/code/__DEFINES/voreconstants.dm b/code/__DEFINES/voreconstants.dm
index edcf4f7fd2..19830c9f72 100644
--- a/code/__DEFINES/voreconstants.dm
+++ b/code/__DEFINES/voreconstants.dm
@@ -5,6 +5,9 @@
#define DM_NOISY "Noisy"
#define DM_DRAGON "Dragon"
+#define isbelly(A) istype(A, /obj/belly)
+
+#define QDEL_NULL_LIST(x) if(x) { for(var/y in x) { qdel(y) } ; x = null }
#define VORE_STRUGGLE_EMOTE_CHANCE 40
// Stance for hostile mobs to be in while devouring someone.
@@ -60,6 +63,10 @@ GLOBAL_LIST_INIT(pred_vore_sounds, list(
"Squish3" = 'sound/vore/pred/squish_03.ogg',
"Squish4" = 'sound/vore/pred/squish_04.ogg',
"Rustle (cloth)" = 'sound/effects/rustle5.ogg',
+ "rustle2(cloth)" = 'sound/effects/rustle2.ogg',
+ "rustle3(cloth)" = 'sound/effects/rustle3.ogg',
+ "rustle4(cloth)" = 'sound/effects/rustle4.ogg',
+ "rustle5(cloth)" = 'sound/effects/rustle5.ogg',
"None" = null))
/*
GLOBAL_LIST_INIT(pred_struggle_sounds, list(
@@ -121,3 +128,14 @@ GLOBAL_LIST_INIT(death_prey, list(
"death9" = 'sound/vore/prey/death_09.ogg',
"death10" = 'sound/vore/prey/death_10.ogg'))
*/
+
+GLOBAL_LIST_INIT(release_sound, list(
+ "rustle (cloth)" = 'sound/effects/rustle1.ogg',
+ "rustle2 (cloth)" = 'sound/effects/rustle2.ogg',
+ "rustle3 (cloth)" = 'sound/effects/rustle3.ogg',
+ "rustle4 (cloth)" = 'sound/effects/rustle4.ogg',
+ "rustle5 (cloth)" = 'sound/effects/rustle5.ogg',
+ "Stomach Move" = 'sound/vore/pred/stomachmove.ogg',
+ "Pred Escape" = 'sound/vore/pred/escape.ogg',
+ "Splatter" = 'sound/effects/splat.ogg',
+ "None" = null))
\ No newline at end of file
diff --git a/code/citadel/_cit_helpers.dm b/code/__HELPERS/_cit_helpers.dm
similarity index 100%
rename from code/citadel/_cit_helpers.dm
rename to code/__HELPERS/_cit_helpers.dm
diff --git a/code/__HELPERS/type2type_vr.dm b/code/__HELPERS/type2type_vr.dm
index 09ea0a158a..96e04585d7 100644
--- a/code/__HELPERS/type2type_vr.dm
+++ b/code/__HELPERS/type2type_vr.dm
@@ -105,3 +105,7 @@
. += copytext(text, last_found, found)
last_found = found + delim_len
while (found)
+
+// Returns true if val is from min to max, inclusive.
+/proc/IsInRange(val, min, max)
+ return (val >= min) && (val <= max)
\ No newline at end of file
diff --git a/code/_globalvars/tooltips.dm b/code/_globalvars/tooltips.dm
deleted file mode 100755
index 58bb6bcea5..0000000000
--- a/code/_globalvars/tooltips.dm
+++ /dev/null
@@ -1 +0,0 @@
-GLOBAL_VAR_INIT(enable_examine_tips, TRUE)
\ No newline at end of file
diff --git a/code/_onclick/god.dm b/code/_onclick/god.dm
deleted file mode 100644
index 24629a0635..0000000000
--- a/code/_onclick/god.dm
+++ /dev/null
@@ -1,8 +0,0 @@
-/mob/camera/god/UnarmedAttack(atom/A)
- A.attack_god(src)
-
-/mob/camera/god/RangedAttack(atom/A)
- A.attack_god(src)
-
-/atom/proc/attack_god(mob/user)
- return
diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm
deleted file mode 100644
index fa2a4ebf31..0000000000
--- a/code/_onclick/hud/other_mobs.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-
-/datum/hud/brain/show_hud(version = 0)
- if(!ismob(mymob))
- return 0
- if(!mymob.client)
- return 0
- mymob.client.screen = list()
- mymob.client.screen += mymob.client.void
-
-/mob/living/brain/create_mob_hud()
- if(client && !hud_used)
- hud_used = new /datum/hud/brain(src)
-
diff --git a/code/citadel/cit_guns.dm b/code/citadel/cit_guns.dm
deleted file mode 100644
index 3b0f86dae4..0000000000
--- a/code/citadel/cit_guns.dm
+++ /dev/null
@@ -1,1249 +0,0 @@
-/obj/item/gun/energy/laser/carbine
- name = "laser carbine"
- desc = "A ruggedized laser carbine featuring much higher capacity and improved handling when compared to a normal laser gun."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "lasernew"
- item_state = "laser"
- force = 10
- throwforce = 10
- ammo_type = list(/obj/item/ammo_casing/energy/lasergun)
- cell_type = /obj/item/stock_parts/cell/lascarbine
- resistance_flags = FIRE_PROOF | ACID_PROOF
-
-/obj/item/gun/energy/laser/carbine/nopin
- pin = null
-
-/obj/item/stock_parts/cell/lascarbine
- name = "laser carbine power supply"
- maxcharge = 2500
-
-/datum/design/lasercarbine
- name = "Laser Carbine"
- desc = "Beefed up version of a standard laser gun."
- id = "lasercarbine"
- build_type = PROTOLATHE
- materials = list(MAT_GOLD = 2500, MAT_METAL = 5000, MAT_GLASS = 5000)
- build_path = /obj/item/gun/energy/laser/carbine/nopin
- category = list("Weapons")
-
-////////////Anti Tank Pistol////////////
-
-/obj/item/gun/ballistic/automatic/pistol/antitank
- name = "Anti Tank Pistol"
- desc = "A massively impractical and silly monstrosity of a pistol that fires .50 calliber rounds. The recoil is likely to dislocate your wrist."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "atp"
- item_state = "pistol"
- recoil = 4
- mag_type = /obj/item/ammo_box/magazine/sniper_rounds
- fire_delay = 50
- burst_size = 1
- can_suppress = 0
- w_class = WEIGHT_CLASS_NORMAL
- actions_types = list()
- fire_sound = 'sound/weapons/blastcannon.ogg'
- spread = 20 //damn thing has no rifling.
-
-/obj/item/gun/ballistic/automatic/pistol/antitank/update_icon()
- ..()
- if(magazine)
- cut_overlays()
- add_overlay("atp-mag")
- else
- cut_overlays()
- icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
-
-/obj/item/gun/ballistic/automatic/pistol/antitank/syndicate
- name = "Syndicate Anti Tank Pistol"
- desc = "A massively impractical and silly monstrosity of a pistol that fires .50 calliber rounds. The recoil is likely to dislocate a variety of joints without proper bracing."
- pin = /obj/item/device/firing_pin/implant/pindicate
-
-/////////////spinfusor stuff////////////////
-
-/obj/item/projectile/bullet/spinfusor
- name ="spinfusor disk"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state= "spinner"
- damage = 30
- dismemberment = 25
-
-/obj/item/projectile/bullet/spinfusor/on_hit(atom/target, blocked = FALSE) //explosion to emulate the spinfusor's AOE
- ..()
- explosion(target, -1, -1, 2, 0, -1)
- return 1
-
-/obj/item/ammo_casing/caseless/spinfusor
- name = "spinfusor disk"
- desc = "A magnetic disk designed specifically for the Stormhammer magnetic cannon. Warning: extremely volatile!"
- projectile_type = /obj/item/projectile/bullet/spinfusor
- caliber = "spinfusor"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "disk"
- throwforce = 15 //still deadly when thrown
- throw_speed = 3
-
-/obj/item/ammo_casing/caseless/spinfusor/throw_impact(atom/target) //disks detonate when thrown
- if(!..()) // not caught in mid-air
- visible_message("[src] detonates!")
- playsound(src.loc, "sparks", 50, 1)
- explosion(target, -1, -1, 1, 1, -1)
- qdel(src)
- return 1
-
-/obj/item/ammo_box/magazine/internal/spinfusor
- name = "spinfusor internal magazine"
- ammo_type = /obj/item/ammo_casing/caseless/spinfusor
- caliber = "spinfusor"
- max_ammo = 1
-
-/obj/item/gun/ballistic/automatic/spinfusor
- name = "Stormhammer Magnetic Cannon"
- desc = "An innovative weapon utilizing mag-lev technology to spin up a magnetic fusor and launch it at extreme velocities."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "spinfusor"
- item_state = "spinfusor"
- mag_type = /obj/item/ammo_box/magazine/internal/spinfusor
- fire_sound = 'sound/weapons/rocketlaunch.ogg'
- w_class = WEIGHT_CLASS_BULKY
- can_suppress = 0
- burst_size = 1
- fire_delay = 40
- select = 0
- actions_types = list()
- casing_ejector = 0
-
-/obj/item/gun/ballistic/automatic/spinfusor/attackby(obj/item/A, mob/user, params)
- var/num_loaded = magazine.attackby(A, user, params, 1)
- if(num_loaded)
- to_chat(user, "You load [num_loaded] disk\s into \the [src].")
- update_icon()
- chamber_round()
-
-/obj/item/gun/ballistic/automatic/spinfusor/attack_self(mob/living/user)
- return //caseless rounds are too glitchy to unload properly. Best to make it so that you cannot remove disks from the spinfusor
-
-/obj/item/gun/ballistic/automatic/spinfusor/update_icon()
- ..()
- icon_state = "spinfusor[magazine ? "-[get_ammo(1)]" : ""]"
-
-/obj/item/ammo_box/aspinfusor
- name = "ammo box (spinfusor disks)"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "spinfusorbox"
- ammo_type = /obj/item/ammo_casing/caseless/spinfusor
- max_ammo = 8
-
-/datum/supply_pack/security/armory/spinfusor
- name = "Stormhammer Spinfusor Crate"
- cost = 14000
- contains = list(/obj/item/gun/ballistic/automatic/spinfusor,
- /obj/item/gun/ballistic/automatic/spinfusor)
- crate_name = "spinfusor crate"
-
-/datum/supply_pack/security/armory/spinfusorammo
- name = "Spinfusor Disk Crate"
- cost = 7000
- contains = list(/obj/item/ammo_box/aspinfusor,
- /obj/item/ammo_box/aspinfusor,
- /obj/item/ammo_box/aspinfusor,
- /obj/item/ammo_box/aspinfusor)
- crate_name = "spinfusor disk crate"
-
-///////XCOM X9 AR///////
-
-/obj/item/gun/ballistic/automatic/x9 //will be adminspawn only so ERT or something can use them
- name = "\improper X9 Assault Rifle"
- desc = "A rather old design of a cheap, reliable assault rifle made for combat against unknown enemies. Uses 5.56mm ammo."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "x9"
- item_state = "arg"
- slot_flags = 0
- mag_type = /obj/item/ammo_box/magazine/m556 //Uses the m90gl's magazine, just like the NT-ARG
- fire_sound = 'sound/weapons/gunshot_smg.ogg'
- can_suppress = 0
- burst_size = 6 //in line with XCOMEU stats. This can fire 5 bursts from a full magazine.
- fire_delay = 1
- spread = 30 //should be 40 for XCOM memes, but since its adminspawn only, might as well make it useable
- recoil = 1
-
-///toy memes///
-
-/obj/item/ammo_box/magazine/toy/x9
- name = "foam force X9 magazine"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "toy9magazine"
- max_ammo = 30
- multiple_sprites = 2
- materials = list(MAT_METAL = 200)
-
-/obj/item/gun/ballistic/automatic/x9/toy
- name = "\improper Foam Force X9"
- desc = "An old but reliable assault rifle made for combat against unknown enemies. Appears to be hastily converted. Ages 8 and up."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "toy9"
- can_suppress = 0
- obj_flags = 0
- mag_type = /obj/item/ammo_box/magazine/toy/x9
- casing_ejector = 0
- spread = 90 //MAXIMUM XCOM MEMES (actually that'd be 180 spread)
- w_class = WEIGHT_CLASS_BULKY
- weapon_weight = WEAPON_HEAVY
-
-////////XCOM2 Magpistol/////////
-
-//////projectiles//////
-
-/obj/item/projectile/bullet/mags
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "magjectile"
- damage = 15
- armour_penetration = 10
- light_range = 2
- speed = 0.6
- range = 25
- light_color = LIGHT_COLOR_RED
-
-/obj/item/projectile/bullet/nlmags //non-lethal boolets
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "magjectile-nl"
- damage = 0
- knockdown = 0
- stamina = 25
- armour_penetration = -10
- light_range = 2
- speed = 0.7
- range = 25
- light_color = LIGHT_COLOR_BLUE
-
-
-/////actual ammo/////
-
-/obj/item/ammo_casing/caseless/amags
- desc = "A ferromagnetic slug intended to be launched out of a compatible weapon."
- caliber = "mags"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "mag-casing-live"
- projectile_type = /obj/item/projectile/bullet/mags
-
-/obj/item/ammo_casing/caseless/anlmags
- desc = "A specialized ferromagnetic slug designed with a less-than-lethal payload."
- caliber = "mags"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "mag-casing-live"
- projectile_type = /obj/item/projectile/bullet/nlmags
-
-//////magazines/////
-
-/obj/item/ammo_box/magazine/mmag/small
- name = "magpistol magazine (non-lethal disabler)"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "nlmagmag"
- ammo_type = /obj/item/ammo_casing/caseless/anlmags
- caliber = "mags"
- max_ammo = 15
- multiple_sprites = 2
-
-/obj/item/ammo_box/magazine/mmag/small/lethal
- name = "magpistol magazine (lethal)"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "smallmagmag"
- ammo_type = /obj/item/ammo_casing/caseless/amags
-
-//////the gun itself//////
-
-/obj/item/gun/ballistic/automatic/pistol/mag
- name = "magpistol"
- desc = "A handgun utilizing maglev technologies to propel a ferromagnetic slug to extreme velocities."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "magpistol"
- force = 10
- fire_sound = 'sound/weapons/magpistol.ogg'
- mag_type = /obj/item/ammo_box/magazine/mmag/small
- can_suppress = 0
- casing_ejector = 0
- fire_delay = 2
- recoil = 0.2
-
-/obj/item/gun/ballistic/automatic/pistol/mag/update_icon()
- ..()
- if(magazine)
- cut_overlays()
- add_overlay("magpistol-magazine")
- else
- cut_overlays()
- icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
-
-///research memes///
-
-/obj/item/gun/ballistic/automatic/pistol/mag/nopin
- pin = null
- spawnwithmagazine = FALSE
-
-/datum/design/magpistol
- name = "Magpistol"
- desc = "A weapon which fires ferromagnetic slugs."
- id = "magpisol"
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 7500, MAT_GLASS = 1000, MAT_URANIUM = 1000, MAT_TITANIUM = 5000, MAT_SILVER = 2000)
- build_path = /obj/item/gun/ballistic/automatic/pistol/mag/nopin
- category = list("Weapons")
- departmental_flags = DEPARTMENTAL_FLAG_SECURITY
-
-/datum/design/mag_magpistol
- name = "Magpistol Magazine"
- desc = "A 14 round magazine for the Magpistol."
- id = "mag_magpistol"
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 4000, MAT_SILVER = 500)
- build_path = /obj/item/ammo_box/magazine/mmag/small/lethal
- category = list("Ammo")
- departmental_flags = DEPARTMENTAL_FLAG_SECURITY
-
-/datum/design/mag_magpistol/nl
- name = "Magpistol Magazine (Non-Lethal)"
- desc = "A 14 round non-lethal magazine for the Magpistol."
- id = "mag_magpistol_nl"
- materials = list(MAT_METAL = 3000, MAT_SILVER = 250, MAT_TITANIUM = 250)
- build_path = /obj/item/ammo_box/magazine/mmag/small
- departmental_flags = DEPARTMENTAL_FLAG_SECURITY
-
-//////toy memes/////
-
-/obj/item/projectile/bullet/reusable/foam_dart/mag
- name = "magfoam dart"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "magjectile-toy"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/mag
- light_range = 2
- light_color = LIGHT_COLOR_YELLOW
-
-/obj/item/ammo_casing/caseless/foam_dart/mag
- name = "magfoam dart"
- desc = "A foam dart with fun light-up projectiles powered by magnets!"
- projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/mag
-
-/obj/item/ammo_box/magazine/internal/shot/toy/mag
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/mag
- max_ammo = 14
-
-/obj/item/gun/ballistic/shotgun/toy/mag
- name = "foam force magpistol"
- desc = "A fancy toy sold alongside light-up foam force darts. Ages 8 and up."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "toymag"
- item_state = "gun"
- mag_type = /obj/item/ammo_box/magazine/internal/shot/toy/mag
- fire_sound = 'sound/weapons/magpistol.ogg'
- slot_flags = SLOT_BELT
- w_class = WEIGHT_CLASS_SMALL
-
-/obj/item/ammo_box/foambox/mag
- name = "ammo box (Magnetic Foam Darts)"
- icon = 'icons/obj/guns/toy.dmi'
- icon_state = "foambox"
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/mag
- max_ammo = 42
-
-//////Magrifle//////
-
-///projectiles///
-
-/obj/item/projectile/bullet/magrifle
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "magjectile-large"
- damage = 20
- armour_penetration = 25
- light_range = 3
- speed = 0.7
- range = 35
- light_color = LIGHT_COLOR_RED
-
-/obj/item/projectile/bullet/nlmagrifle //non-lethal boolets
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "magjectile-large-nl"
- damage = 0
- knockdown = 0
- stamina = 25
- armour_penetration = -10
- light_range = 3
- speed = 0.65
- range = 35
- light_color = LIGHT_COLOR_BLUE
-
-///ammo casings///
-
-/obj/item/ammo_casing/caseless/amagm
- desc = "A large ferromagnetic slug intended to be launched out of a compatible weapon."
- caliber = "magm"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "mag-casing-live"
- projectile_type = /obj/item/projectile/bullet/magrifle
-
-/obj/item/ammo_casing/caseless/anlmagm
- desc = "A large, specialized ferromagnetic slug designed with a less-than-lethal payload."
- caliber = "magm"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "mag-casing-live"
- projectile_type = /obj/item/projectile/bullet/nlmagrifle
-
-///magazines///
-
-/obj/item/ammo_box/magazine/mmag/
- name = "magrifle magazine (non-lethal disabler)"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "mediummagmag"
- ammo_type = /obj/item/ammo_casing/caseless/anlmagm
- caliber = "magm"
- max_ammo = 24
- multiple_sprites = 2
-
-/obj/item/ammo_box/magazine/mmag/lethal
- name = "magrifle magazine (lethal)"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "mediummagmag"
- ammo_type = /obj/item/ammo_casing/caseless/amagm
- max_ammo = 24
-
-///the gun itself///
-
-/obj/item/gun/ballistic/automatic/magrifle
- name = "\improper Magnetic Rifle"
- desc = "A simple upscalling of the technologies used in the magpistol, the magrifle is capable of firing slightly larger slugs in bursts. Compatible with the magpistol's slugs."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "magrifle"
- item_state = "arg"
- slot_flags = 0
- mag_type = /obj/item/ammo_box/magazine/mmag
- fire_sound = 'sound/weapons/magrifle.ogg'
- can_suppress = 0
- burst_size = 3
- fire_delay = 2
- spread = 5
- recoil = 0.15
- casing_ejector = 0
-
-///research///
-
-/obj/item/gun/ballistic/automatic/magrifle/nopin
- pin = null
- spawnwithmagazine = FALSE
-
-/datum/design/magrifle
- name = "Magrifle"
- desc = "An upscaled Magpistol in rifle form."
- id = "magrifle"
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_URANIUM = 2000, MAT_TITANIUM = 10000, MAT_SILVER = 4000, MAT_GOLD = 2000)
- build_path = /obj/item/gun/ballistic/automatic/magrifle/nopin
- category = list("Weapons")
- departmental_flags = DEPARTMENTAL_FLAG_SECURITY
-
-/datum/design/mag_magrifle
- name = "Magrifle Magazine (Lethal)"
- desc = "A 24-round magazine for the Magrifle."
- id = "mag_magrifle"
- build_type = PROTOLATHE
- materials = list(MAT_METAL = 8000, MAT_SILVER = 1000)
- build_path = /obj/item/ammo_box/magazine/mmag/lethal
- category = list("Ammo")
- departmental_flags = DEPARTMENTAL_FLAG_SECURITY
-
-/datum/design/mag_magrifle/nl
- name = "Magrifle Magazine (Non-Lethal)"
- desc = "A 24- round non-lethal magazine for the Magrifle."
- id = "mag_magrifle_nl"
- materials = list(MAT_METAL = 6000, MAT_SILVER = 500, MAT_TITANIUM = 500)
- build_path = /obj/item/ammo_box/magazine/mmag
- departmental_flags = DEPARTMENTAL_FLAG_SECURITY
-
-///foamagrifle///
-
-/obj/item/ammo_box/magazine/toy/foamag
- name = "foam force magrifle magazine"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "foamagmag"
- max_ammo = 24
- multiple_sprites = 2
- ammo_type = /obj/item/ammo_casing/caseless/foam_dart/mag
- materials = list(MAT_METAL = 200)
-
-/obj/item/gun/ballistic/automatic/magrifle/toy
- name = "foamag rifle"
- desc = "A foam launching magnetic rifle. Ages 8 and up."
- icon_state = "foamagrifle"
- obj_flags = 0
- mag_type = /obj/item/ammo_box/magazine/toy/foamag
- casing_ejector = FALSE
- spread = 60
- w_class = WEIGHT_CLASS_BULKY
- weapon_weight = WEAPON_HEAVY
-
-/*
-// TECHWEBS IMPLEMENTATION
-*/
-
-/datum/techweb_node/magnetic_weapons
- id = "magnetic_weapons"
- display_name = "Magnetic Weapons"
- description = "Weapons using magnetic technology"
- prereq_ids = list("weaponry", "adv_weaponry", "emp_adv")
- design_ids = list("magrifle", "magpisol", "mag_magrifle", "mag_magrifle_nl", "mag_magpistol", "mag_magpistol_nl")
- research_cost = 2500
- export_price = 5000
-
-
-//////Hyper-Burst Rifle//////
-
-///projectiles///
-
-/obj/item/projectile/bullet/mags/hyper
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "magjectile"
- damage = 10
- armour_penetration = 10
- stamina = 10
- forcedodge = TRUE
- range = 6
- light_range = 1
- light_color = LIGHT_COLOR_RED
-
-/obj/item/projectile/bullet/mags/hyper/inferno
- icon_state = "magjectile-large"
- stamina = 0
- forcedodge = FALSE
- range = 25
- light_range = 4
-
-/obj/item/projectile/bullet/mags/hyper/inferno/on_hit(atom/target, blocked = FALSE)
- ..()
- explosion(target, -1, 1, 2, 4, 5)
- return 1
-
-///ammo casings///
-
-/obj/item/ammo_casing/caseless/ahyper
- desc = "A large block of speciallized ferromagnetic material designed to be fired out of the experimental Hyper-Burst Rifle."
- caliber = "hypermag"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "hyper-casing-live"
- projectile_type = /obj/item/projectile/bullet/mags/hyper
- pellets = 12
- variance = 40
-
-/obj/item/ammo_casing/caseless/ahyper/inferno
- projectile_type = /obj/item/projectile/bullet/mags/hyper/inferno
- pellets = 1
- variance = 0
-
-///magazines///
-
-/obj/item/ammo_box/magazine/mhyper
- name = "hyper-burst rifle magazine"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "hypermag-4"
- ammo_type = /obj/item/ammo_casing/caseless/ahyper
- caliber = "hypermag"
- desc = "A magazine for the Hyper-Burst Rifle. Loaded with a special slug that fragments into 12 smaller shards which can absolutely puncture anything, but has rather short effective range."
- max_ammo = 4
-
-/obj/item/ammo_box/magazine/mhyper/update_icon()
- ..()
- icon_state = "hypermag-[ammo_count() ? "4" : "0"]"
-
-/obj/item/ammo_box/magazine/mhyper/inferno
- name = "hyper-burst rifle magazine (inferno)"
- ammo_type = /obj/item/ammo_casing/caseless/ahyper/inferno
- desc = "A magazine for the Hyper-Burst Rifle. Loaded with a special slug that violently reacts with whatever surface it strikes, generating a massive amount of heat and light."
-
-///gun itself///
-
-/obj/item/gun/ballistic/automatic/hyperburst
- name = "\improper Hyper-Burst Rifle"
- desc = "An extremely beefed up version of a stolen Nanotrasen weapon prototype, this 'rifle' is more like a cannon, with an extremely large bore barrel capable of generating several smaller magnetic 'barrels' to simultaneously launch multiple projectiles at once."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "hyperburst"
- item_state = "arg"
- slot_flags = 0
- mag_type = /obj/item/ammo_box/magazine/mhyper
- fire_sound = 'sound/weapons/magburst.ogg'
- can_suppress = 0
- burst_size = 1
- fire_delay = 40
- recoil = 2
- casing_ejector = 0
- weapon_weight = WEAPON_HEAVY
-
-/obj/item/gun/ballistic/automatic/hyperburst/update_icon()
- ..()
- icon_state = "hyperburst[magazine ? "-[get_ammo()]" : ""][chambered ? "" : "-e"]"
-
-///toy memes///
-
-/obj/item/projectile/beam/lasertag/mag //the projectile, compatible with regular laser tag armor
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "magjectile-toy"
- name = "lasertag magbolt"
- forcedodge = TRUE //for penetration memes
- range = 5 //so it isn't super annoying
- light_range = 2
- light_color = LIGHT_COLOR_YELLOW
- eyeblur = 0
-
-/obj/item/ammo_casing/energy/laser/magtag
- projectile_type = /obj/item/projectile/beam/lasertag/mag
- select_name = "magtag"
- pellets = 3
- variance = 30
- e_cost = 1000
- fire_sound = 'sound/weapons/magburst.ogg'
-
-/obj/item/gun/energy/laser/practice/hyperburst
- name = "toy hyper-burst launcher"
- desc = "A toy laser with a unique beam shaping lens that projects harmless bolts capable of going through objects. Compatible with existing laser tag systems."
- ammo_type = list(/obj/item/ammo_casing/energy/laser/magtag)
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "toyburst"
- clumsy_check = FALSE
- obj_flags = 0
- fire_delay = 40
- weapon_weight = WEAPON_HEAVY
- selfcharge = TRUE
- charge_delay = 2
- recoil = 2
- cell_type = /obj/item/stock_parts/cell/toymagburst
-
-/obj/item/stock_parts/cell/toymagburst
- name = "toy mag burst rifle power supply"
- maxcharge = 4000
-
-/* made redundant by reskinnable stetchkins
-//////Stealth Pistol//////
-
-/obj/item/gun/ballistic/automatic/pistol/stealth
- name = "stealth pistol"
- desc = "A unique bullpup pistol with a compact frame. Has an integrated surpressor."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "stealthpistol"
- w_class = WEIGHT_CLASS_SMALL
- mag_type = /obj/item/ammo_box/magazine/m10mm
- can_suppress = 0
- fire_sound = 'sound/weapons/gunshot_silenced.ogg'
- suppressed = 1
- burst_size = 1
-
-/obj/item/gun/ballistic/automatic/pistol/stealth/update_icon()
- ..()
- if(magazine)
- cut_overlays()
- add_overlay("stealthpistol-magazine")
- else
- cut_overlays()
- icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
-
-*/
-
-///foam stealth pistol///
-
-/obj/item/gun/ballistic/automatic/toy/pistol/stealth
- name = "foam force stealth pistol"
- desc = "A small, easily concealable toy bullpup handgun. Ages 8 and up."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "foamsp"
- w_class = WEIGHT_CLASS_SMALL
- mag_type = /obj/item/ammo_box/magazine/toy/pistol
- can_suppress = FALSE
- fire_sound = 'sound/weapons/gunshot_silenced.ogg'
- suppressed = TRUE
- burst_size = 1
- fire_delay = 0
- spread = 20
- actions_types = list()
-
-/obj/item/gun/ballistic/automatic/toy/pistol/stealth/update_icon()
- ..()
- if(magazine)
- cut_overlays()
- add_overlay("foamsp-magazine")
- else
- cut_overlays()
- icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
-
-//////10mm soporific bullets//////
-
-obj/item/projectile/bullet/c10mm/soporific
- name ="10mm soporific bullet"
- armour_penetration = 0
- nodamage = TRUE
- dismemberment = 0
- knockdown = 0
-
-/obj/item/projectile/bullet/c10mm/soporific/on_hit(atom/target, blocked = FALSE)
- if((blocked != 100) && isliving(target))
- var/mob/living/L = target
- L.blur_eyes(6)
- if(L.getStaminaLoss() >= 60)
- L.Sleeping(300)
- else
- L.adjustStaminaLoss(25)
- return 1
-
-/obj/item/ammo_casing/c10mm/soporific
- name = ".10mm soporific bullet casing"
- desc = "A 10mm soporific bullet casing."
- projectile_type = /obj/item/projectile/bullet/c10mm/soporific
-
-/obj/item/ammo_box/magazine/m10mm/soporific
- name = "pistol magazine (10mm soporific)"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "9x19pS"
- desc = "A gun magazine. Loaded with rounds which inject the target with a variety of illegal substances to induce sleep in the target."
- ammo_type = /obj/item/ammo_casing/c10mm/soporific
-
-/obj/item/ammo_box/c10mm/soporific
- name = "ammo box (10mm soporific)"
- ammo_type = /obj/item/ammo_casing/c10mm/soporific
- max_ammo = 24
-
-//////Flechette Launcher//////
-
-///projectiles///
-
-/obj/item/projectile/bullet/cflechetteap //shreds armor
- name = "flechette (armor piercing)"
- damage = 8
- armour_penetration = 80
-
-/obj/item/projectile/bullet/cflechettes //shreds flesh and forces bleeding
- name = "flechette (serrated)"
- damage = 15
- dismemberment = 10
- armour_penetration = -80
-
-/obj/item/projectile/bullet/cflechettes/on_hit(atom/target, blocked = FALSE)
- if((blocked != 100) && iscarbon(target))
- var/mob/living/carbon/C = target
- C.bleed(10)
- return ..()
-
-///ammo casings (CASELESS AMMO CASINGS WOOOOOOOO)///
-
-/obj/item/ammo_casing/caseless/flechetteap
- name = "flechette (armor piercing)"
- desc = "A flechette made with a tungsten alloy."
- projectile_type = /obj/item/projectile/bullet/cflechetteap
- caliber = "flechette"
- throwforce = 1
- throw_speed = 3
-
-/obj/item/ammo_casing/caseless/flechettes
- name = "flechette (serrated)"
- desc = "A serrated flechette made of a special alloy intended to deform drastically upon penetration of human flesh."
- projectile_type = /obj/item/projectile/bullet/cflechettes
- caliber = "flechette"
- throwforce = 2
- throw_speed = 3
- embedding = list("embedded_pain_multiplier" = 0, "embed_chance" = 40, "embedded_fall_chance" = 10)
-
-///magazine///
-
-/obj/item/ammo_box/magazine/flechette
- name = "flechette magazine (armor piercing)"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "flechettemag"
- ammo_type = /obj/item/ammo_casing/caseless/flechetteap
- caliber = "flechette"
- max_ammo = 40
- multiple_sprites = 2
-
-/obj/item/ammo_box/magazine/flechette/s
- name = "flechette magazine (serrated)"
- ammo_type = /obj/item/ammo_casing/caseless/flechettes
-
-///the gun itself///
-
-/obj/item/gun/ballistic/automatic/flechette
- name = "\improper CX Flechette Launcher"
- desc = "A flechette launching machine pistol with an unconventional bullpup frame."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "flechettegun"
- item_state = "gun"
- w_class = WEIGHT_CLASS_NORMAL
- slot_flags = 0
- /obj/item/device/firing_pin/implant/pindicate
- mag_type = /obj/item/ammo_box/magazine/flechette/
- fire_sound = 'sound/weapons/gunshot_smg.ogg'
- can_suppress = 0
- burst_size = 5
- fire_delay = 1
- casing_ejector = 0
- spread = 10
- recoil = 0.05
-
-/obj/item/gun/ballistic/automatic/flechette/update_icon()
- ..()
- if(magazine)
- cut_overlays()
- add_overlay("flechettegun-magazine")
- else
- cut_overlays()
- icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
-
-///unique variant///
-
-/obj/item/projectile/bullet/cflechetteshredder
- name = "flechette (shredder)"
- damage = 5
- dismemberment = 40
-
-/obj/item/ammo_casing/caseless/flechetteshredder
- name = "flechette (shredder)"
- desc = "A serrated flechette made of a special alloy that forms a monofilament edge."
- projectile_type = /obj/item/projectile/bullet/cflechettes
-
-/obj/item/ammo_box/magazine/flechette/shredder
- name = "flechette magazine (shredder)"
- icon_state = "shreddermag"
- ammo_type = /obj/item/ammo_casing/caseless/flechetteshredder
-
-/obj/item/gun/ballistic/automatic/flechette/shredder
- name = "\improper CX Shredder"
- desc = "A flechette launching machine pistol made of ultra-light CFRP optimized for firing serrated monofillament flechettes."
- w_class = WEIGHT_CLASS_SMALL
- mag_type = /obj/item/ammo_box/magazine/flechette/shredder
- spread = 15
- recoil = 0.1
-
-/obj/item/gun/ballistic/automatic/flechette/shredder/update_icon()
- ..()
- if(magazine)
- cut_overlays()
- add_overlay("shreddergun-magazine")
- else
- cut_overlays()
- icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
-
-//////modular pistol////// (reskinnable stetchkins)
-
-/obj/item/gun/ballistic/automatic/pistol/modular
- name = "modular pistol"
- desc = "A small, easily concealable 10mm handgun. Has a threaded barrel for suppressors."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "cde"
- can_unsuppress = TRUE
- obj_flags = UNIQUE_RENAME
- unique_reskin = list("Default" = "cde",
- "NT-99" = "n99",
- "Stealth" = "stealthpistol",
- "HKVP-78" = "vp78",
- "Luger" = "p08b",
- "Mk.58" = "secguncomp",
- "PX4 Storm" = "px4"
- )
-
-/obj/item/gun/ballistic/automatic/pistol/modular/update_icon()
- ..()
- if(current_skin)
- icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]"
- else
- icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]"
- if(magazine && suppressed)
- cut_overlays()
- add_overlay("[unique_reskin[current_skin]]-magazine-sup") //Yes, this means the default iconstate can't have a magazine overlay
- else if (magazine)
- cut_overlays()
- add_overlay("[unique_reskin[current_skin]]-magazine")
- else
- cut_overlays()
-
-/////////RAYGUN MEMES/////////
-
-/obj/item/projectile/beam/lasertag/ray //the projectile, compatible with regular laser tag armor
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "ray"
- name = "ray bolt"
- eyeblur = 0
-
-/obj/item/ammo_casing/energy/laser/raytag
- projectile_type = /obj/item/projectile/beam/lasertag/ray
- select_name = "raytag"
- fire_sound = 'sound/weapons/raygun.ogg'
-
-/obj/item/gun/energy/laser/practice/raygun
- name = "toy ray gun"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "raygun"
- desc = "A toy laser with a classic, retro feel and look. Compatible with existing laser tag systems."
- ammo_type = list(/obj/item/ammo_casing/energy/laser/raytag)
- selfcharge = TRUE
-
-/*/////////////////////////////////////////////////////////////////////////////////////////////
- The Recolourable Gun
-*//////////////////////////////////////////////////////////////////////////////////////////////
-
-/obj/item/gun/ballistic/automatic/pistol/p37
- name = "\improper CX Mk.37P"
- desc = "A modern reimagining of an old legendary gun, the Mk.37 is a handgun with a toggle-locking mechanism manufactured by CX Armories. \
- This model is coated with a special polychromic material. \
- Has a small warning on the receiver that boldly states 'WARNING: WILL DETONATE UPON UNAUTHORIZED USE'. \
- Uses 9mm bullets loaded into proprietary magazines."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "p37"
- w_class = WEIGHT_CLASS_NORMAL
- spawnwithmagazine = FALSE
- mag_type = /obj/item/ammo_box/magazine/m9mm/p37
- can_suppress = FALSE
- pin = /obj/item/device/firing_pin/dna/dredd //goes boom if whoever isn't DNA locked to it tries to use it
- actions_types = list(/datum/action/item_action/pick_color)
-
- var/frame_color = "#808080" //RGB
- var/receiver_color = "#808080"
- var/body_color = "#0098FF"
- var/barrel_color = "#808080"
- var/tip_color = "#808080"
- var/arm_color = "#808080"
- var/grip_color = "#00FFCB" //Does not actually colour the grip, just the lights surrounding it
- var/energy_color = "#00FFCB"
-
-///Defining all the colourable bits and displaying them///
-
-/obj/item/gun/ballistic/automatic/pistol/p37/update_icon()
- var/mutable_appearance/frame_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_frame")
- var/mutable_appearance/receiver_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_receiver")
- var/mutable_appearance/body_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_body")
- var/mutable_appearance/barrel_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_barrel")
- var/mutable_appearance/tip_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_tip")
- var/mutable_appearance/grip_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_grip")
- var/mutable_appearance/energy_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_light")
- var/mutable_appearance/arm_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_arm")
- var/mutable_appearance/arm_overlay_e = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_arm-e")
-
- if(frame_color)
- frame_overlay.color = frame_color
- if(receiver_color)
- receiver_overlay.color = receiver_color
- if(body_color)
- body_overlay.color = body_color
- if(barrel_color)
- barrel_overlay.color = barrel_color
- if(tip_color)
- tip_overlay.color = tip_color
- if(grip_color)
- grip_overlay.color = grip_color
- if(energy_color)
- energy_overlay.color = energy_color
- if(arm_color)
- arm_overlay.color = arm_color
- if(arm_color)
- arm_overlay_e.color = arm_color
-
- cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
-
- add_overlay(frame_overlay)
- add_overlay(receiver_overlay)
- add_overlay(body_overlay)
- add_overlay(barrel_overlay)
- add_overlay(tip_overlay)
- add_overlay(grip_overlay)
- add_overlay(energy_overlay)
-
- if(magazine) //does not need a cut_overlays proc call here because it's already called further up
- add_overlay("p37_mag")
-
- if(chambered)
- cut_overlay(arm_overlay_e)
- add_overlay(arm_overlay)
- else
- cut_overlay(arm_overlay)
- add_overlay(arm_overlay_e)
-
-///letting you actually recolor things///
-
-/obj/item/gun/ballistic/automatic/pistol/p37/ui_action_click(mob/user, var/datum/action/A)
- if(istype(A, /datum/action/item_action/pick_color))
-
- var/choice = input(user,"Mk.37P polychrome options", "Gun Recolor") in list("Frame Color","Receiver Color","Body Color",
- "Barrel Color", "Barrel Tip Color", "Grip Light Color",
- "Light Color", "Arm Color", "*CANCEL*")
-
- switch(choice)
-
- if("Frame Color")
- var/frame_color_input = input(usr,"","Choose Frame Color",frame_color) as color|null
- if(frame_color_input)
- frame_color = sanitize_hexcolor(frame_color_input, desired_format=6, include_crunch=1)
- update_icon()
-
- if("Receiver Color")
- var/receiver_color_input = input(usr,"","Choose Receiver Color",receiver_color) as color|null
- if(receiver_color_input)
- receiver_color = sanitize_hexcolor(receiver_color_input, desired_format=6, include_crunch=1)
- update_icon()
-
- if("Body Color")
- var/body_color_input = input(usr,"","Choose Body Color",body_color) as color|null
- if(body_color_input)
- body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
- update_icon()
-
- if("Barrel Color")
- var/barrel_color_input = input(usr,"","Choose Barrel Color",barrel_color) as color|null
- if(barrel_color_input)
- barrel_color = sanitize_hexcolor(barrel_color_input, desired_format=6, include_crunch=1)
- update_icon()
-
- if("Barrel Tip Color")
- var/tip_color_input = input(usr,"","Choose Barrel Tip Color",tip_color) as color|null
- if(tip_color_input)
- tip_color = sanitize_hexcolor(tip_color_input, desired_format=6, include_crunch=1)
- update_icon()
-
- if("Grip Light Color")
- var/grip_color_input = input(usr,"","Choose Grip Light Color",grip_color) as color|null
- if(grip_color_input)
- grip_color = sanitize_hexcolor(grip_color_input, desired_format=6, include_crunch=1)
- update_icon()
-
- if("Light Color")
- var/energy_color_input = input(usr,"","Choose Light Color",energy_color) as color|null
- if(energy_color_input)
- energy_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
- update_icon()
-
- if("Arm Color")
- var/arm_color_input = input(usr,"","Choose Arm Color",arm_color) as color|null
- if(arm_color_input)
- arm_color = sanitize_hexcolor(arm_color_input, desired_format=6, include_crunch=1)
- update_icon()
- A.UpdateButtonIcon()
-
- else
- ..()
-
-///boolets///
-
-/obj/item/projectile/bullet/c9mm/frangible
- name = "9mm frangible bullet"
- damage = 15
- stamina = 0
- speed = 1.0
- range = 20
- armour_penetration = -25
-
-/obj/item/projectile/bullet/c9mm/rubber
- name = "9mm rubber bullet"
- damage = 5
- stamina = 30
- speed = 1.2
- range = 14
- knockdown = 0
-
-/obj/item/ammo_casing/c9mm/frangible
- name = "9mm frangible bullet casing"
- desc = "A 9mm frangible bullet casing."
- projectile_type = /obj/item/projectile/bullet/c9mm/frangible
-
-/obj/item/ammo_casing/c9mm/rubber
- name = "9mm rubber bullet casing"
- desc = "A 9mm rubber bullet casing."
- projectile_type = /obj/item/projectile/bullet/c9mm/rubber
-
-/obj/item/ammo_box/magazine/m9mm/p37
- name = "\improper P37 magazine (9mm frangible)"
- desc = "A gun magazine. Loaded with plastic composite rounds which fragment upon impact to minimize collateral damage."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "11mm" //topkek
- ammo_type = /obj/item/ammo_casing/c9mm/frangible
- caliber = "9mm"
- max_ammo = 11
- multiple_sprites = 1
-
-/obj/item/ammo_box/magazine/m9mm/p37/fmj
- name = "\improper P37 magazine (9mm)"
- ammo_type = /obj/item/ammo_casing/c9mm
- desc = "A gun magazine. Loaded with conventional full metal jacket rounds."
-
-/obj/item/ammo_box/magazine/m9mm/p37/rubber
- name = "\improper P37 magazine (9mm Non-Lethal Rubbershot)"
- ammo_type = /obj/item/ammo_casing/c9mm/rubber
- desc = "A gun magazine. Loaded with less-than-lethal rubber bullets."
-
-/obj/item/ammo_box/c9mm/frangible
- name = "ammo box (9mm frangible)"
- ammo_type = /obj/item/ammo_casing/c9mm/frangible
-
-/obj/item/ammo_box/c9mm/rubber
- name = "ammo box (9mm non-lethal rubbershot)"
- ammo_type = /obj/item/ammo_casing/c9mm/rubber
-
-/datum/design/c9mmfrag
- name = "Box of 9mm Frangible Bullets"
- id = "9mm_frag"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 25000)
- build_path = /obj/item/ammo_box/c9mm/frangible
- category = list("hacked", "Security")
-
-/datum/design/c9mmrubber
- name = "Box of 9mm Rubber Bullets"
- id = "9mm_rubber"
- build_type = AUTOLATHE
- materials = list(MAT_METAL = 30000)
- build_path = /obj/item/ammo_box/c9mm/rubber
- category = list("initial", "Security")
-
-
-///Security Variant///
-
-/obj/item/gun/ballistic/automatic/pistol/p37/sec
- name = "\improper CX Mk.37S"
- desc = "A modern reimagining of an old legendary gun, the Mk.37 is a handgun with a toggle-locking mechanism manufactured by CX Armories. Uses 9mm bullets loaded into proprietary magazines."
- spawnwithmagazine = FALSE
- pin = /obj/item/device/firing_pin/implant/mindshield
- actions_types = list() //so you can't recolor it
-
- frame_color = "#808080" //RGB
- receiver_color = "#808080"
- body_color = "#282828"
- barrel_color = "#808080"
- tip_color = "#808080"
- arm_color = "#800000"
- grip_color = "#FFFF00" //Does not actually colour the grip, just the lights surrounding it
- energy_color = "#FFFF00"
-
-///Foam Variant because WE NEED MEMES///
-
-/obj/item/gun/ballistic/automatic/pistol/p37/foam
- name = "\improper Foam Force Mk.37F"
- desc = "A licensed foam-firing reproduction of a handgun with a toggle-locking mechanism manufactured by CX Armories. This model is coated with a special polychromic material. Uses standard foam pistol magazines."
- icon_state = "p37_foam"
- pin = /obj/item/device/firing_pin
- spawnwithmagazine = TRUE
- obj_flags = 0
- casing_ejector = FALSE
- mag_type = /obj/item/ammo_box/magazine/toy/pistol
- can_suppress = FALSE
- actions_types = list(/datum/action/item_action/pick_color)
-
-/*/////////////////////////////////////////////////////////////////////////////////////////////
- The Recolourable Energy Gun
-*//////////////////////////////////////////////////////////////////////////////////////////////
-
-obj/item/gun/energy/e_gun/cx
- name = "\improper CX Model D Energy Gun"
- desc = "An overpriced hybrid energy gun with two settings: disable, and kill. Manufactured by CX Armories. Has a polychromic coating."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "cxe"
- lefthand_file = 'icons/mob/citadel/guns_lefthand.dmi'
- righthand_file = 'icons/mob/citadel/guns_righthand.dmi'
- ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser)
- flight_x_offset = 15
- flight_y_offset = 10
- var/body_color = "#252528"
-
-obj/item/gun/energy/e_gun/cx/update_icon()
- ..()
- var/mutable_appearance/body_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "cxegun_body")
- if(body_color)
- body_overlay.color = body_color
- add_overlay(body_overlay)
-
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_hands()
-
-obj/item/gun/energy/e_gun/cx/AltClick(mob/living/user)
- if(!in_range(src, user)) //Basic checks to prevent abuse
- return
- if(user.incapacitated() || !istype(user))
- to_chat(user, "You can't do that right now!")
- return
- if(alert("Are you sure you want to repaint your gun?", "Confirm Repaint", "Yes", "No") == "Yes")
- var/body_color_input = input(usr,"","Choose Body Color",body_color) as color|null
- if(body_color_input)
- body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
- update_icon()
-
-obj/item/gun/energy/e_gun/cx/worn_overlays(isinhands, icon_file)
- . = ..()
- if(isinhands)
- var/mutable_appearance/body_inhand = mutable_appearance(icon_file, "cxe_body")
- body_inhand.color = body_color
- . += body_inhand
-
-/obj/item/ammo_box/magazine/toy/pistol //forcing this might be a bad idea, but it'll fix the foam gun infinite material exploit
- materials = list(MAT_METAL = 200)
-
-/*/////////////////////////////////////////////////////////////
-//////////////////////// Zero's Meme //////////////////////////
-*//////////////////////////////////////////////////////////////
-/obj/item/ammo_box/magazine/toy/AM4B
- name = "foam force AM4-B magazine"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "AM4MAG-60"
- max_ammo = 60
- multiple_sprites = 0
- materials = list(MAT_METAL = 200)
-
-/obj/item/gun/ballistic/automatic/AM4B
- name = "AM4-B"
- desc = "A Relic from a bygone age. Nobody quite knows why it's here. Has a polychromic coating."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "AM4"
- item_state = "arg"
- mag_type = /obj/item/ammo_box/magazine/toy/AM4B
- can_suppress = 0
- item_flags = NEEDS_PERMIT
- casing_ejector = 0
- spread = 30 //Assault Rifleeeeeee
- w_class = WEIGHT_CLASS_NORMAL
- burst_size = 4 //Shh.
- fire_delay = 1
- var/body_color = "#3333aa"
-
-/obj/item/gun/ballistic/automatic/AM4B/update_icon()
- ..()
- var/mutable_appearance/body_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "AM4-Body")
- if(body_color)
- body_overlay.color = body_color
- cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
- add_overlay(body_overlay)
- if(ismob(loc))
- var/mob/M = loc
- M.update_inv_hands()
-/obj/item/gun/ballistic/automatic/AM4B/AltClick(mob/living/user)
- if(!in_range(src, user)) //Basic checks to prevent abuse
- return
- if(user.incapacitated() || !istype(user))
- to_chat(user, "You can't do that right now!")
- return
- if(alert("Are you sure you want to recolor your gun?", "Confirm Repaint", "Yes", "No") == "Yes")
- var/body_color_input = input(usr,"","Choose Shroud Color",body_color) as color|null
- if(body_color_input)
- body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
- update_icon()
-/obj/item/gun/ballistic/automatic/AM4B/examine(mob/user)
- ..()
- to_chat(user, "Alt-click to recolor it.")
-
-/obj/item/ammo_box/magazine/toy/AM4C
- name = "foam force AM4-C magazine"
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "AM4MAG-32"
- max_ammo = 32
- multiple_sprites = 0
- materials = list(MAT_METAL = 200)
-
-/obj/item/gun/ballistic/automatic/AM4C
- name = "AM4-C"
- desc = "A Relic from a bygone age. This one seems newer, yet less effective."
- icon = 'icons/obj/guns/cit_guns.dmi'
- icon_state = "AM4C"
- item_state = "arg"
- mag_type = /obj/item/ammo_box/magazine/toy/AM4C
- can_suppress = 0
- item_flags = NEEDS_PERMIT
- casing_ejector = 0
- spread = 45 //Assault Rifleeeeeee
- w_class = WEIGHT_CLASS_NORMAL
- burst_size = 4 //Shh.
- fire_delay = 1
diff --git a/code/citadel/cit_uniforms.dm b/code/citadel/cit_uniforms.dm
deleted file mode 100644
index fc7e03a676..0000000000
--- a/code/citadel/cit_uniforms.dm
+++ /dev/null
@@ -1,40 +0,0 @@
-/obj/item/clothing/under/bb_sweater
- name = "cream sweater"
- desc = "Why trade style for comfort? Now you can go commando down south and still be cozy up north."
- icon_state = "bb_turtle"
- item_state = "w_suit"
- item_color = "bb_turtle"
- body_parts_covered = CHEST|ARMS
- can_adjust = 1
- icon = 'icons/obj/clothing/turtlenecks.dmi'
- icon_override = 'icons/mob/citadel/uniforms.dmi'
-
-/obj/item/clothing/under/bb_sweater/black
- name = "black sweater"
- icon_state = "bb_turtleblk"
- item_state = "bl_suit"
- item_color = "bb_turtleblk"
-
-/obj/item/clothing/under/bb_sweater/purple
- name = "purple sweater"
- icon_state = "bb_turtlepur"
- item_state = "p_suit"
- item_color = "bb_turtlepur"
-
-/obj/item/clothing/under/bb_sweater/green
- name = "green sweater"
- icon_state = "bb_turtlegrn"
- item_state = "g_suit"
- item_color = "bb_turtlegrn"
-
-/obj/item/clothing/under/bb_sweater/red
- name = "red sweater"
- icon_state = "bb_turtlered"
- item_state = "r_suit"
- item_color = "bb_turtlered"
-
-/obj/item/clothing/under/bb_sweater/blue
- name = "blue sweater"
- icon_state = "bb_turtleblu"
- item_state = "b_suit"
- item_color = "bb_turtleblu"
diff --git a/code/citadel/cit_vendors.dm b/code/citadel/cit_vendors.dm
deleted file mode 100644
index c8ae48c251..0000000000
--- a/code/citadel/cit_vendors.dm
+++ /dev/null
@@ -1,102 +0,0 @@
-#define STANDARD_CHARGE 1
-#define CONTRABAND_CHARGE 2
-#define COIN_CHARGE 3
-
-/obj/machinery/vending/kink
- name = "KinkMate"
- desc = "A vending machine for all your unmentionable desires."
- icon = 'icons/obj/citvending.dmi'
- icon_state = "kink"
- product_slogans = "Kinky!;Sexy!;Check me out, big boy!"
- vend_reply = "Have fun, you shameless pervert!"
- products = list(
- /obj/item/clothing/under/maid = 5,
- /obj/item/clothing/under/stripper_pink = 5,
- /obj/item/clothing/under/stripper_green = 5,
- /obj/item/dildo/custom = 5
- )
- contraband = list(/obj/item/restraints/handcuffs/fake/kinky = 5,
- /obj/item/clothing/neck/petcollar = 5,
- /obj/item/clothing/under/mankini = 1,
- /obj/item/dildo/flared/huge = 1
- )
- premium = list(/obj/item/device/electropack/shockcollar = 1)
- refill_canister = /obj/item/vending_refill/kink
-/*
-/obj/machinery/vending/nazivend
- name = "Nazivend"
- desc = "A vending machine containing Nazi German supplies. A label reads: \"Remember the gorrilions lost.\""
- icon = 'icons/obj/citvending.dmi'
- icon_state = "nazi"
- vend_reply = "SIEG HEIL!"
- product_slogans = "Das Vierte Reich wird zuruckkehren!;ENTFERNEN JUDEN!;Billiger als die Juden jemals geben!;Rader auf dem adminbus geht rund und rund.;Warten Sie, warum wir wieder hassen Juden?- *BZZT*"
- products = list(
- /obj/item/clothing/head/stalhelm = 20,
- /obj/item/clothing/head/panzer = 20,
- /obj/item/clothing/suit/soldiercoat = 20,
- // /obj/item/clothing/under/soldieruniform = 20,
- /obj/item/clothing/shoes/jackboots = 20
- )
- contraband = list(
- /obj/item/clothing/head/naziofficer = 10,
- // /obj/item/clothing/suit/officercoat = 10,
- // /obj/item/clothing/under/officeruniform = 10,
- /obj/item/clothing/suit/space/hardsuit/nazi = 3,
- /obj/item/gun/energy/plasma/MP40k = 4
- )
- premium = list()
-
- refill_canister = /obj/item/vending_refill/nazi
-*/
-/obj/machinery/vending/sovietvend
- name = "KomradeVendtink"
- desc = "Rodina-mat' zovyot!"
- icon = 'icons/obj/citvending.dmi'
- icon_state = "soviet"
- vend_reply = "The fascist and capitalist svin'ya shall fall, komrade!"
- product_slogans = "Quality worth waiting in line for!; Get Hammer and Sickled!; Sosvietsky soyuz above all!; With capitalist pigsky, you would have paid a fortunetink! ; Craftink in Motherland herself!"
- products = list(
- /obj/item/clothing/under/soviet = 20,
- /obj/item/clothing/head/ushanka = 20,
- /obj/item/clothing/shoes/jackboots = 20,
- /obj/item/clothing/head/squatter_hat = 20,
- /obj/item/clothing/under/squatter_outfit = 20,
- /obj/item/clothing/under/russobluecamooutfit = 20,
- /obj/item/clothing/head/russobluecamohat = 20
- )
- contraband = list(
- /obj/item/clothing/under/syndicate/tacticool = 4,
- /obj/item/clothing/mask/balaclava = 4,
- /obj/item/clothing/suit/russofurcoat = 4,
- /obj/item/clothing/head/russofurhat = 4,
- /obj/item/clothing/suit/space/hardsuit/soviet = 3,
- /obj/item/gun/energy/laser/LaserAK = 4
- )
- premium = list()
-
- refill_canister = /obj/item/vending_refill/soviet
-
-
-#undef STANDARD_CHARGE
-#undef CONTRABAND_CHARGE
-#undef COIN_CHARGE
-
-
-/obj/item/vending_refill/kink
- machine_name = "KinkMate"
- icon = 'modular_citadel/icons/vending_restock.dmi'
- icon_state = "refill_kink"
- charges = list(8, 5, 0)// of 20 standard, 12 contraband, 0 premium
- init_charges = list(8, 5, 0)
-
-/obj/item/vending_refill/nazi
- machine_name = "nazivend"
- icon_state = "refill_nazi"
- charges = list(33, 13, 0)
- init_charges = list(33, 13, 0)
-
-/obj/item/vending_refill/soviet
- machine_name = "sovietvend"
- icon_state = "refill_soviet"
- charges = list(47, 7, 0)
- init_charges = list(47, 7, 0)
diff --git a/code/citadel/discordbot.dm b/code/citadel/discordbot.dm
deleted file mode 100644
index 41c0f21b49..0000000000
--- a/code/citadel/discordbot.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/proc/send2maindiscord(var/msg)
- send2discord(msg, FALSE)
-
-/proc/send2admindiscord(var/msg, var/ping = FALSE)
- send2discord(msg, TRUE, ping)
-
-/proc/send2discord(var/msg, var/admin = FALSE, var/ping = FALSE)
-// if (!config.discord_url || !config.discord_password)
-// return
-
-// var/url = "[config.discord_url]?pass=[url_encode(config.discord_password)]&admin=[admin ? "true" : "false"]&content=[url_encode(msg)]&ping=[ping ? "true" : "false"]"
-// world.Export(url)
- return
\ No newline at end of file
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
deleted file mode 100644
index 1e4a574e13..0000000000
--- a/code/controllers/configuration.dm
+++ /dev/null
@@ -1,287 +0,0 @@
-GLOBAL_VAR_INIT(config_dir, "config/")
-GLOBAL_PROTECT(config_dir)
-
-/datum/controller/configuration
- name = "Configuration"
-
- var/hiding_entries_by_type = TRUE //Set for readability, admins can set this to FALSE if they want to debug it
- var/list/entries
- var/list/entries_by_type
-
- var/list/maplist
- var/datum/map_config/defaultmap
-
- var/list/modes // allowed modes
- var/list/gamemode_cache
- var/list/votable_modes // votable modes
- var/list/mode_names
- var/list/mode_reports
- var/list/mode_false_report_weight
-
-/datum/controller/configuration/New()
- config = src
- var/list/config_files = InitEntries()
- LoadModes()
- for(var/I in config_files)
- LoadEntries(I)
- if(Get(/datum/config_entry/flag/maprotation))
- loadmaplist(CONFIG_MAPS_FILE)
-
-/datum/controller/configuration/Destroy()
- entries_by_type.Cut()
- QDEL_LIST_ASSOC_VAL(entries)
- QDEL_LIST_ASSOC_VAL(maplist)
- QDEL_NULL(defaultmap)
-
- config = null
-
- return ..()
-
-/datum/controller/configuration/proc/InitEntries()
- var/list/_entries = list()
- entries = _entries
- var/list/_entries_by_type = list()
- entries_by_type = _entries_by_type
-
- . = list()
-
- for(var/I in typesof(/datum/config_entry)) //typesof is faster in this case
- var/datum/config_entry/E = I
- if(initial(E.abstract_type) == I)
- continue
- E = new I
- _entries_by_type[I] = E
- var/esname = E.name
- var/datum/config_entry/test = _entries[esname]
- if(test)
- log_config("Error: [test.type] has the same name as [E.type]: [esname]! Not initializing [E.type]!")
- qdel(E)
- continue
- _entries[esname] = E
- .[E.resident_file] = TRUE
-
-/datum/controller/configuration/proc/RemoveEntry(datum/config_entry/CE)
- entries -= CE.name
- entries_by_type -= CE.type
-
-/datum/controller/configuration/proc/LoadEntries(filename)
- log_config("Loading config file [filename]...")
- var/list/lines = world.file2list("[GLOB.config_dir][filename]")
- var/list/_entries = entries
- for(var/L in lines)
- if(!L)
- continue
-
- if(copytext(L, 1, 2) == "#")
- continue
-
- var/pos = findtext(L, " ")
- var/entry = null
- var/value = null
-
- if(pos)
- entry = lowertext(copytext(L, 1, pos))
- value = copytext(L, pos + 1)
- else
- entry = lowertext(L)
-
- if(!entry)
- continue
-
- var/datum/config_entry/E = _entries[entry]
- if(!E)
- log_config("Unknown setting in configuration: '[entry]'")
- continue
-
- if(filename != E.resident_file)
- log_config("Found [entry] in [filename] when it should have been in [E.resident_file]! Ignoring.")
- continue
-
- var/validated = E.ValidateAndSet(value)
- if(!validated)
- log_config("Failed to validate setting \"[value]\" for [entry]")
- else if(E.modified && !E.dupes_allowed)
- log_config("Duplicate setting for [entry] ([value]) detected! Using latest.")
-
- if(validated)
- E.modified = TRUE
-
-/datum/controller/configuration/can_vv_get(var_name)
- return (var_name != "entries_by_type" || !hiding_entries_by_type) && ..()
-
-/datum/controller/configuration/vv_edit_var(var_name, var_value)
- return !(var_name in list("entries_by_type", "entries")) && ..()
-
-/datum/controller/configuration/stat_entry()
- if(!statclick)
- statclick = new/obj/effect/statclick/debug(null, "Edit", src)
- stat("[name]:", statclick)
-
-/datum/controller/configuration/proc/Get(entry_type)
- if(IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "Get" && GLOB.LastAdminCalledTargetRef == "\ref[src]")
- log_admin_private("Config access of [entry_type] attempted by [key_name(usr)]")
- return
- var/datum/config_entry/E = entry_type
- var/entry_is_abstract = initial(E.abstract_type) == entry_type
- if(entry_is_abstract)
- CRASH("Tried to retrieve an abstract config_entry: [entry_type]")
- E = entries_by_type[entry_type]
- if(!E)
- CRASH("Missing config entry for [entry_type]!")
- return E.value
-
-/datum/controller/configuration/proc/Set(entry_type, new_val)
- if(IsAdminAdvancedProcCall() && GLOB.LastAdminCalledProc == "Set" && GLOB.LastAdminCalledTargetRef == "\ref[src]")
- log_admin_private("Config rewrite of [entry_type] to [new_val] attempted by [key_name(usr)]")
- return
- var/datum/config_entry/E = entry_type
- var/entry_is_abstract = initial(E.abstract_type) == entry_type
- if(entry_is_abstract)
- CRASH("Tried to retrieve an abstract config_entry: [entry_type]")
- E = entries_by_type[entry_type]
- if(!E)
- CRASH("Missing config entry for [entry_type]!")
- return E.ValidateAndSet(new_val)
-
-/datum/controller/configuration/proc/LoadModes()
- gamemode_cache = typecacheof(/datum/game_mode, TRUE)
- modes = list()
- mode_names = list()
- mode_reports = list()
- mode_false_report_weight = list()
- votable_modes = list()
- var/list/probabilities = Get(/datum/config_entry/keyed_number_list/probability)
- for(var/T in gamemode_cache)
- // I wish I didn't have to instance the game modes in order to look up
- // their information, but it is the only way (at least that I know of).
- var/datum/game_mode/M = new T()
-
- if(M.config_tag)
- if(!(M.config_tag in modes)) // ensure each mode is added only once
- modes += M.config_tag
- mode_names[M.config_tag] = M.name
- probabilities[M.config_tag] = M.probability
- mode_reports[M.config_tag] = M.generate_report()
- mode_false_report_weight[M.config_tag] = M.false_report_weight
- if(M.votable)
- votable_modes += M.config_tag
- qdel(M)
- votable_modes += "secret"
-
-/datum/controller/configuration/proc/loadmaplist(filename)
- filename = "[GLOB.config_dir][filename]"
- var/list/Lines = world.file2list(filename)
-
- var/datum/map_config/currentmap = null
- for(var/t in Lines)
- if(!t)
- continue
-
- t = trim(t)
- if(length(t) == 0)
- continue
- else if(copytext(t, 1, 2) == "#")
- continue
-
- var/pos = findtext(t, " ")
- var/command = null
- var/data = null
-
- if(pos)
- command = lowertext(copytext(t, 1, pos))
- data = copytext(t, pos + 1)
- else
- command = lowertext(t)
-
- if(!command)
- continue
-
- if (!currentmap && command != "map")
- continue
-
- switch (command)
- if ("map")
- currentmap = new ("_maps/[data].json")
- if(currentmap.defaulted)
- log_config("Failed to load map config for [data]!")
- if ("minplayers","minplayer")
- currentmap.config_min_users = text2num(data)
- if ("maxplayers","maxplayer")
- currentmap.config_max_users = text2num(data)
- if ("weight","voteweight")
- currentmap.voteweight = text2num(data)
- if ("default","defaultmap")
- defaultmap = currentmap
- if ("endmap")
- LAZYINITLIST(maplist)
- maplist[currentmap.map_name] = currentmap
- currentmap = null
- if ("disabled")
- currentmap = null
- else
- WRITE_FILE(GLOB.config_error_log, "Unknown command in map vote config: '[command]'")
-
-
-/datum/controller/configuration/proc/pick_mode(mode_name)
- // I wish I didn't have to instance the game modes in order to look up
- // their information, but it is the only way (at least that I know of).
- // ^ This guy didn't try hard enough
- for(var/T in gamemode_cache)
- var/datum/game_mode/M = T
- var/ct = initial(M.config_tag)
- if(ct && ct == mode_name)
- return new T
- return new /datum/game_mode/extended()
-
-/datum/controller/configuration/proc/get_runnable_modes()
- var/list/datum/game_mode/runnable_modes = new
- var/list/probabilities = Get(/datum/config_entry/keyed_number_list/probability)
- var/list/min_pop = Get(/datum/config_entry/keyed_number_list/min_pop)
- var/list/max_pop = Get(/datum/config_entry/keyed_number_list/max_pop)
- var/list/repeated_mode_adjust = Get(/datum/config_entry/number_list/repeated_mode_adjust)
- for(var/T in gamemode_cache)
- var/datum/game_mode/M = new T()
- if(!(M.config_tag in modes))
- qdel(M)
- continue
- if(probabilities[M.config_tag]<=0)
- qdel(M)
- continue
- if(min_pop[M.config_tag])
- M.required_players = min_pop[M.config_tag]
- if(max_pop[M.config_tag])
- M.maximum_players = max_pop[M.config_tag]
- if(M.can_start())
- var/final_weight = probabilities[M.config_tag]
- if(SSpersistence.saved_modes.len == 3 && repeated_mode_adjust.len == 3)
- var/recent_round = min(SSpersistence.saved_modes.Find(M.config_tag),3)
- var/adjustment = 0
- while(recent_round)
- adjustment += repeated_mode_adjust[recent_round]
- recent_round = SSpersistence.saved_modes.Find(M.config_tag,recent_round+1,0)
- final_weight *= ((100-adjustment)/100)
- runnable_modes[M] = final_weight
- return runnable_modes
-
-/datum/controller/configuration/proc/get_runnable_midround_modes(crew)
- var/list/datum/game_mode/runnable_modes = new
- var/list/probabilities = Get(/datum/config_entry/keyed_number_list/probability)
- var/list/min_pop = Get(/datum/config_entry/keyed_number_list/min_pop)
- var/list/max_pop = Get(/datum/config_entry/keyed_number_list/max_pop)
- for(var/T in (gamemode_cache - SSticker.mode.type))
- var/datum/game_mode/M = new T()
- if(!(M.config_tag in modes))
- qdel(M)
- continue
- if(probabilities[M.config_tag]<=0)
- qdel(M)
- continue
- if(min_pop[M.config_tag])
- M.required_players = min_pop[M.config_tag]
- if(max_pop[M.config_tag])
- M.maximum_players = max_pop[M.config_tag]
- if(M.required_players <= crew)
- if(M.maximum_players >= 0 && M.maximum_players < crew)
- continue
- runnable_modes[M] = probabilities[M.config_tag]
- return runnable_modes
diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm
deleted file mode 100644
index 42212e266c..0000000000
--- a/code/controllers/hooks-defs.dm
+++ /dev/null
@@ -1,87 +0,0 @@
-/**
- * Startup hook.
- * Called in world.dm when the server starts.
- */
-/hook/startup
-
-/**
- * Roundstart hook.
- * Called in gameticker.dm when a round starts.
- */
-/hook/roundstart
-
-/**
- * Roundend hook.
- * Called in gameticker.dm when a round ends.
- */
-/hook/roundend
-
-/**
- * Death hook.
- * Called in death.dm when someone dies.
- * Parameters: var/mob/living/carbon/human, var/gibbed
- */
-/hook/death
-
-/**
- * Cloning hook.
- * Called in cloning.dm when someone is brought back by the wonders of modern science.
- * Parameters: var/mob/living/carbon/human
- */
-/hook/clone
-
-/**
- * Debrained hook.
- * Called in brain_item.dm when someone gets debrained.
- * Parameters: var/obj/item/organ/brain
- */
-/hook/debrain
-
-/**
- * Borged hook.
- * Called in robot_parts.dm when someone gets turned into a cyborg.
- * Parameters: var/mob/living/silicon/robot
- */
-/hook/borgify
-
-/**
- * Podman hook.
- * Called in podmen.dm when someone is brought back as a Diona.
- * Parameters: var/mob/living/carbon/alien/diona
- */
-/hook/harvest_podman
-
-/**
- * Payroll revoked hook.
- * Called in Accounts_DB.dm when someone's payroll is stolen at the Accounts terminal.
- * Parameters: var/datum/money_account
- */
-/hook/revoke_payroll
-
-/**
- * Account suspension hook.
- * Called in Accounts_DB.dm when someone's account is suspended or unsuspended at the Accounts terminal.
- * Parameters: var/datum/money_account
- */
-/hook/change_account_status
-
-/**
- * Employee reassignment hook.
- * Called in card.dm when someone's card is reassigned at the HoP's desk.
- * Parameters: var/obj/item/card/id
- */
-/hook/reassign_employee
-
-/**
- * Employee terminated hook.
- * Called in card.dm when someone's card is terminated at the HoP's desk.
- * Parameters: var/obj/item/card/id
- */
-/hook/terminate_employee
-
-/**
- * Crate sold hook.
- * Called in supplyshuttle.dm when a crate is sold on the shuttle.
- * Parameters: var/obj/structure/closet/crate/sold, var/area/shuttle
- */
-/hook/sell_crate
diff --git a/code/controllers/subsystem/explosion.dm b/code/controllers/subsystem/explosion.dm
deleted file mode 100644
index 1e3a6f8a6e..0000000000
--- a/code/controllers/subsystem/explosion.dm
+++ /dev/null
@@ -1,510 +0,0 @@
-SUBSYSTEM_DEF(explosion)
- priority = 99
- wait = 1
- flags = SS_TICKER|SS_NO_INIT
-
- var/list/explosions
-
- var/rebuild_tick_split_count = FALSE
- var/tick_portions_required = 0
-
- var/list/logs
-
- var/list/zlevels_that_ignore_bombcap
- var/list/doppler_arrays
-
- //legacy caps, set by config
- var/devastation_cap = 3
- var/heavy_cap = 7
- var/light_cap = 14
- var/flash_cap = 14
- var/flame_cap = 14
- var/dyn_ex_scale = 0.5
-
- var/id_counter = 0
-
-/datum/controller/subsystem/explosion/PreInit()
- doppler_arrays = list()
- logs = list()
- explosions = list()
- zlevels_that_ignore_bombcap = list("[ZLEVEL_MINING]")
-
-/datum/controller/subsystem/explosion/Shutdown()
- QDEL_LIST(explosions)
- QDEL_LIST(logs)
- zlevels_that_ignore_bombcap.Cut()
-
-/datum/controller/subsystem/explosion/Recover()
- explosions = SSexplosion.explosions
- logs = SSexplosion.logs
- id_counter = SSexplosion.id_counter
- rebuild_tick_split_count = TRUE
- zlevels_that_ignore_bombcap = SSexplosion.zlevels_that_ignore_bombcap
- doppler_arrays = SSexplosion.doppler_arrays
-
- devastation_cap = SSexplosion.devastation_cap
- heavy_cap = SSexplosion.heavy_cap
- light_cap = SSexplosion.light_cap
- flash_cap = SSexplosion.flash_cap
- flame_cap = SSexplosion.flame_cap
- dyn_ex_scale = SSexplosion.dyn_ex_scale
-
-/datum/controller/subsystem/explosion/fire()
- var/list/cached_explosions = explosions
- var/num_explosions = cached_explosions.len
- if(!num_explosions)
- return
-
- //figure exactly how many tick splits are required
- var/num_splits
- if(rebuild_tick_split_count)
- var/reactionary = config.reactionary_explosions
- num_splits = num_explosions
- for(var/I in cached_explosions)
- var/datum/explosion/E = I
- if(!E.turfs_processed)
- ++num_splits
- if(reactionary && !E.densities_processed)
- ++num_splits
- tick_portions_required = num_splits
- else
- num_splits = tick_portions_required
-
- MC_SPLIT_TICK_INIT(num_splits)
-
- for(var/I in cached_explosions)
- var/datum/explosion/E = I
-
- var/etp = E.turfs_processed
- if(!etp)
- if(GatherTurfs(E))
- --tick_portions_required
- etp = TRUE
- MC_SPLIT_TICK
-
- var/edp = E.densities_processed
- if(!edp)
- if(DensityCalculate(E, etp))
- --tick_portions_required
- edp = TRUE
- MC_SPLIT_TICK
-
- if(ProcessExplosion(E, edp)) //splits the tick
- --tick_portions_required
- explosions -= E
- logs += E
- NotifyDopplers(E)
- MC_SPLIT_TICK
-
-/datum/controller/subsystem/explosion/proc/NotifyDopplers(datum/explosion/E)
- for(var/array in doppler_arrays)
- var/obj/machinery/doppler_array/A = array
- A.sense_explosion(E.epicenter, E.devastation, E.heavy, E.light, E.finished_at - E.started_at, E.orig_dev_range, E.orig_heavy_range, E.orig_light_range)
-
-/datum/controller/subsystem/explosion/proc/Create(atom/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = TRUE, ignorecap = FALSE, flame_range = 0 , silent = FALSE, smoke = FALSE)
- epicenter = get_turf(epicenter)
- if(!epicenter)
- return
-
- if(adminlog)
- message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area: [get_area(epicenter)] [ADMIN_COORDJMP(epicenter)]")
- log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] ([epicenter.x],[epicenter.y],[epicenter.z])")
-
- var/datum/explosion/E = new(++id_counter, epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, flame_range, silent, smoke, ignorecap)
-
- if(heavy_impact_range > 1)
- var/datum/effect_system/explosion/Eff
- if(smoke)
- Eff = new /datum/effect_system/explosion/smoke
- else
- Eff = new
- Eff.set_up(epicenter)
- Eff.start()
-
- //flash mobs
- if(flash_range)
- for(var/mob/living/L in viewers(flash_range, epicenter))
- L.flash_act()
-
- if(!silent)
- ExplosionSound(epicenter, devastation_range, heavy_impact_range, E.extent)
-
- //add to SS
- if(E.extent)
- tick_portions_required += 2 + (config.reactionary_explosions ? 1 : 0)
- explosions += E
- else
- logs += E //Already done processing
-
-/datum/controller/subsystem/explosion/proc/CreateDynamic(atom/epicenter, power, flash_range, adminlog = TRUE, ignorecap = TRUE, flame_range = 0 , silent = FALSE, smoke = TRUE)
- if(!power)
- return
- var/range = round((2 * power) ** dyn_ex_scale)
- Create(epicenter, round(range * 0.25), round(range * 0.5), round(range), flash_range*range, adminlog, ignorecap, flame_range*range, silent, smoke)
-
-// Using default dyn_ex scale:
-// 100 explosion power is a (5, 10, 20) explosion.
-// 75 explosion power is a (4, 8, 17) explosion.
-// 50 explosion power is a (3, 7, 14) explosion.
-// 25 explosion power is a (2, 5, 10) explosion.
-// 10 explosion power is a (1, 3, 6) explosion.
-// 5 explosion power is a (0, 1, 3) explosion.
-// 1 explosion power is a (0, 0, 1) explosion.
-
-/datum/explosion
- var/explosion_id
- var/turf/epicenter
-
- var/started_at
- var/finished_at
- var/tick_started
- var/tick_finished
-
- var/turfs_processed = FALSE
- var/densities_processed = FALSE
-
- var/orig_dev_range
- var/orig_heavy_range
- var/orig_light_range
- var/orig_flash_range
- var/orig_flame_range
-
- var/devastation
- var/heavy
- var/light
- var/extent
-
- var/flash
- var/flame
-
- var/gather_dist = 0
-
- var/list/gathered_turfs
- var/list/calculated_turfs
-
- var/list/unsafe_turfs
-
-/datum/explosion/New(id, turf/epi, devastation_range, heavy_impact_range, light_impact_range, flash_range, flame_range, silent, smoke, ignorecap)
- explosion_id = id
- epicenter = epi
-
- densities_processed = !config.reactionary_explosions
-
- orig_dev_range = devastation_range
- orig_heavy_range = heavy_impact_range
- orig_light_range = light_impact_range
- orig_flash_range = flash_range
- orig_flame_range = flame_range
-
- if(!ignorecap && !("[epicenter.z]" in SSexplosion.zlevels_that_ignore_bombcap))
- //Clamp all values
- devastation_range = min(SSexplosion.devastation_cap, devastation_range)
- heavy_impact_range = min(SSexplosion.heavy_cap, heavy_impact_range)
- light_impact_range = min(SSexplosion.light_cap, light_impact_range)
- flash_range = min(SSexplosion.flash_cap, flash_range)
- flame_range = min(SSexplosion.flame_cap, flame_range)
-
- //store this
- devastation = devastation_range
- heavy = heavy_impact_range
- light = light_impact_range
-
- extent = max(devastation_range, heavy_impact_range, light_impact_range, flame_range)
-
- flash = flash_range
- flame = flame_range
-
- started_at = REALTIMEOFDAY
- tick_started = world.time
-
- gathered_turfs = list()
- calculated_turfs = list()
- unsafe_turfs = list()
-
-// Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves.
-// Stereo users will also hear the direction of the explosion!
-
-// Calculate far explosion sound range. Only allow the sound effect for heavy/devastating explosions.
-// 3/7/14 will calculate to 80 + 35
-/proc/ExplosionSound(turf/epicenter, devastation_range, heavy_impact_range, extent)
- var/far_dist = 0
- far_dist += heavy_impact_range * 5
- far_dist += devastation_range * 20
-
- var/z0 = epicenter.z
-
- var/frequency = get_rand_frequency()
- var/ex_sound = get_sfx("explosion")
- for(var/mob/M in GLOB.player_list)
- // Double check for client
- var/turf/M_turf = get_turf(M)
- if(M_turf && M_turf.z == z0)
- var/dist = get_dist(M_turf, epicenter)
- // If inside the blast radius + world.view - 2
- if(dist <= round(extent + world.view - 2, 1))
- M.playsound_local(epicenter, ex_sound, 100, 1, frequency, falloff = 5)
- // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
- else if(dist <= far_dist)
- var/far_volume = Clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
- far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
- M.playsound_local(epicenter, 'sound/effects/explosionfar.ogg', far_volume, 1, frequency, falloff = 5)
-
-/datum/explosion/Destroy()
- SSexplosion.explosions -= src
- SSexplosion.logs -= src
- LAZYCLEARLIST(gathered_turfs)
- LAZYCLEARLIST(calculated_turfs)
- LAZYCLEARLIST(unsafe_turfs)
- return ..()
-
-/datum/controller/subsystem/explosion/proc/GatherTurfs(datum/explosion/E)
- var/turf/epicenter = E.epicenter
-
- var/x0 = epicenter.x
- var/y0 = epicenter.y
- var/z0 = epicenter.z
-
- var/c_dist = E.gather_dist
- var/dist = E.extent
-
- var/list/L = E.gathered_turfs
-
- if(!c_dist)
- L += epicenter
- ++c_dist
-
- while( c_dist <= dist )
- var/y = y0 + c_dist
- var/x = x0 - c_dist + 1
- for(x in x to x0 + c_dist)
- var/turf/T = locate(x, y, z0)
- if(T)
- L += T
-
- y = y0 + c_dist - 1
- x = x0 + c_dist
- for(y in y0 - c_dist to y)
- var/turf/T = locate(x, y, z0)
- if(T)
- L += T
-
- y = y0 - c_dist
- x = x0 + c_dist - 1
- for(x in x0 - c_dist to x)
- var/turf/T = locate(x, y, z0)
- if(T)
- L += T
-
- y = y0 - c_dist + 1
- x = x0 - c_dist
- for(y in y to y0 + c_dist)
- var/turf/T = locate(x, y, z0)
- if(T)
- L += T
- ++c_dist
-
- if(MC_TICK_CHECK)
- break
-
- if(c_dist > dist)
- E.turfs_processed = TRUE
- return TRUE
- else
- E.gather_dist = c_dist
- return FALSE
-
-/datum/controller/subsystem/explosion/proc/DensityCalculate(datum/explosion/E, done_gathering_turfs)
- var/list/L = E.calculated_turfs
- var/cut_to = 1
- for(var/I in E.gathered_turfs) // we cache the explosion block rating of every turf in the explosion area
- var/turf/T = I
- ++cut_to
-
- var/current_exp_block = T.density ? T.explosion_block : 0
-
- for(var/obj/machinery/door/D in T)
- if(D.density)
- current_exp_block += D.explosion_block
-
- for(var/obj/structure/window/W in T)
- if(W.reinf && W.fulltile)
- current_exp_block += W.explosion_block
-
- for(var/obj/structure/blob/B in T)
- current_exp_block += B.explosion_block
-
- L[T] = current_exp_block
-
- if(MC_TICK_CHECK)
- E.gathered_turfs.Cut(1, cut_to)
- return FALSE
-
- E.gathered_turfs.Cut()
- return done_gathering_turfs
-
-/datum/controller/subsystem/explosion/proc/ProcessExplosion(datum/explosion/E, done_calculating_turfs)
- //cache shit for speed
- var/id = E.explosion_id
-
- var/list/cached_unsafe = E.unsafe_turfs
- var/list/cached_exp_block = E.calculated_turfs
- var/list/affected_turfs = cached_exp_block ? cached_exp_block : E.gathered_turfs
-
- var/devastation_range = E.devastation
- var/heavy_impact_range = E.heavy
- var/light_impact_range = E.light
-
- var/flame_range = E.flame
- var/throw_range_max = E.extent
-
- var/turf/epi = E.epicenter
-
- var/x0 = epi.x
- var/y0 = epi.y
-
- var/cut_to = 1
- for(var/TI in affected_turfs)
- var/turf/T = TI
- ++cut_to
-
- var/init_dist = cheap_hypotenuse(T.x, T.y, x0, y0)
- var/dist = init_dist
-
- if(cached_exp_block)
- var/turf/Trajectory = T
- while(Trajectory != epi)
- Trajectory = get_step_towards(Trajectory, epi)
- dist += cached_exp_block[Trajectory]
-
- var/flame_dist = dist < flame_range
- var/throw_dist = dist
-
- if(dist < devastation_range)
- dist = 1
- else if(dist < heavy_impact_range)
- dist = 2
- else if(dist < light_impact_range)
- dist = 3
- else
- dist = 0
-
- //------- EX_ACT AND TURF FIRES -------
-
- if(flame_dist && prob(40) && !isspaceturf(T) && !T.density)
- new /obj/effect/hotspot(T) //Mostly for ambience!
-
- if(dist > 0)
- T.explosion_level = max(T.explosion_level, dist) //let the bigger one have it
- T.explosion_id = id
- T.ex_act(dist)
- cached_unsafe += T
-
- //--- THROW ITEMS AROUND ---
-
- var/throw_dir = get_dir(epi, T)
- for(var/obj/item/I in T)
- if(!I.anchored)
- var/throw_range = rand(throw_dist, throw_range_max)
- var/turf/throw_at = get_ranged_target_turf(I, throw_dir, throw_range)
- I.throw_speed = 4 //Temporarily change their throw_speed for embedding purposes (Resets when it finishes throwing, regardless of hitting anything)
- I.throw_at(throw_at, throw_range, 4)
-
- if(MC_TICK_CHECK)
- var/circumference = (PI * (init_dist + 4) * 2) //+4 to radius to prevent shit gaps
- if(cached_unsafe.len > circumference) //only do this every revolution
- for(var/Unexplode in cached_unsafe)
- var/turf/UnexplodeT = Unexplode
- UnexplodeT.explosion_level = 0
- cached_unsafe.Cut()
- done_calculating_turfs = FALSE
- break
-
- affected_turfs.Cut(1, cut_to)
-
- if(!done_calculating_turfs)
- return FALSE
-
- //unfuck the shit
- for(var/Unexplode in cached_unsafe)
- var/turf/UnexplodeT = Unexplode
- UnexplodeT.explosion_level = 0
- cached_unsafe.Cut()
-
- E.finished_at = REALTIMEOFDAY
- E.tick_finished = world.time
-
- return TRUE
-
-/client/proc/check_bomb_impacts()
- set name = "Check Bomb Impact"
- set category = "Debug"
-
- var/newmode = alert("Use reactionary explosions?","Check Bomb Impact", "Yes", "No")
- var/turf/epicenter = get_turf(mob)
- if(!epicenter)
- return
-
- var/x0 = epicenter.x
- var/y0 = epicenter.y
-
- var/dev = 0
- var/heavy = 0
- var/light = 0
- var/list/choices = list("Small Bomb","Medium Bomb","Big Bomb","Custom Bomb")
- var/choice = input("Bomb Size?") in choices
- switch(choice)
- if(null)
- return 0
- if("Small Bomb")
- dev = 1
- heavy = 2
- light = 3
- if("Medium Bomb")
- dev = 2
- heavy = 3
- light = 4
- if("Big Bomb")
- dev = 3
- heavy = 5
- light = 7
- if("Custom Bomb")
- dev = input("Devestation range (Tiles):") as num
- heavy = input("Heavy impact range (Tiles):") as num
- light = input("Light impact range (Tiles):") as num
- else
- return
-
- var/datum/explosion/E = new(null, epicenter, dev, heavy, light, ignorecap = TRUE)
-
- while(!SSexplosion.GatherTurfs(E))
- stoplag()
- var/list/turfs
- if(newmode)
- while(!SSexplosion.DensityCalculate(E, TRUE))
- stoplag()
- turfs = E.calculated_turfs.Copy()
- else
- turfs = E.gathered_turfs.Copy()
-
- qdel(E)
-
- for(var/I in turfs)
- var/turf/T = I
- var/dist = cheap_hypotenuse(T.x, T.y, x0, y0) + turfs[T]
-
- if(dist < dev)
- T.color = "red"
- T.maptext = "Dev"
- else if (dist < heavy)
- T.color = "yellow"
- T.maptext = "Heavy"
- else if (dist < light)
- T.color = "blue"
- T.maptext = "Light"
- CHECK_TICK
-
- sleep(100)
- for(var/I in turfs)
- var/turf/T = I
- T.color = null
- T.maptext = null
diff --git a/code/controllers/subsystem/ping.dm b/code/controllers/subsystem/ping.dm
deleted file mode 100644
index a6b444c4e7..0000000000
--- a/code/controllers/subsystem/ping.dm
+++ /dev/null
@@ -1,42 +0,0 @@
-#define PING_BUFFER_TIME 25
-
-SUBSYSTEM_DEF(ping)
- name = "Ping"
- wait = 6
- flags = SS_POST_FIRE_TIMING|SS_FIRE_IN_LOBBY
- priority = 10
- var/list/currentrun
-
-/datum/controller/subsystem/ping/Initialize()
- if (config.hub)
- world.visibility = 1
- ..()
-
-/datum/controller/subsystem/ping/fire(resumed = FALSE)
- if (!resumed)
- src.currentrun = GLOB.clients.Copy()
-
- var/round_started = Master.round_started
- var/list/currentrun = src.currentrun
- while (length(currentrun))
- var/client/C = currentrun[currentrun.len]
- currentrun.len--
- if (!C || world.time - C.connection_time < PING_BUFFER_TIME || C.inactivity >= (wait-1))
- if (MC_TICK_CHECK)
- return
- continue
-
- if(round_started && C.is_afk(INACTIVITY_KICK))
- if(!istype(C.mob, /mob/dead))
- log_access("AFK: [key_name(C)]")
- to_chat(C, "You have been inactive for more than 10 minutes and have been disconnected.")
- qdel(C)
-
- winset(C, null, "command=.update_ping+[world.time+world.tick_lag*world.tick_usage/100]")
-
- if (MC_TICK_CHECK) //one day, when ss13 has 1000 people per server, you guys are gonna be glad I added this tick check
- return
-
- currentrun = null
-
-#undef PING_BUFFER_TIME
diff --git a/code/controllers/subsystem/vore.dm b/code/controllers/subsystem/vore.dm
new file mode 100644
index 0000000000..faaa297ca3
--- /dev/null
+++ b/code/controllers/subsystem/vore.dm
@@ -0,0 +1,41 @@
+#define SSBELLIES_PROCESSED 1
+#define SSBELLIES_IGNORED 2
+
+//
+// Bellies subsystem - Process vore bellies
+//
+
+SUBSYSTEM_DEF(bellies)
+ name = "Bellies"
+ priority = 5
+ wait = 1 SECONDS
+ flags = SS_KEEP_TIMING|SS_NO_INIT
+ runlevels = RUNLEVEL_GAME|RUNLEVEL_POSTGAME
+
+ var/static/list/belly_list = list()
+ var/list/currentrun = list()
+ var/ignored_bellies = 0
+
+/datum/controller/subsystem/bellies/stat_entry()
+ ..("#: [belly_list.len] | P: [ignored_bellies]")
+
+/datum/controller/subsystem/bellies/fire(resumed = 0)
+ if (!resumed)
+ ignored_bellies = 0
+ src.currentrun = belly_list.Copy()
+
+ //cache for sanic speed (lists are references anyways)
+ var/list/currentrun = src.currentrun
+ var/times_fired = src.times_fired
+ while(currentrun.len)
+ var/obj/belly/B = currentrun[currentrun.len]
+ currentrun.len--
+
+ if(QDELETED(B))
+ belly_list -= B
+ else
+ if(B.process_belly(times_fired,wait) == SSBELLIES_IGNORED)
+ ignored_bellies++
+
+ if (MC_TICK_CHECK)
+ return
diff --git a/code/datums/antagonists/abductor.dm b/code/datums/antagonists/abductor.dm
deleted file mode 100644
index fde8d0059b..0000000000
--- a/code/datums/antagonists/abductor.dm
+++ /dev/null
@@ -1,182 +0,0 @@
-#define ABDUCTOR_MAX_TEAMS 4
-
-/datum/antagonist/abductor
- name = "Abductor"
- roundend_category = "abductors"
- antagpanel_category = "Abductor"
- job_rank = ROLE_ABDUCTOR
- show_in_antagpanel = FALSE //should only show subtypes
- var/datum/team/abductor_team/team
- var/sub_role
- var/outfit
- var/landmark_type
- var/greet_text
-
-
-/datum/antagonist/abductor/agent
- name = "Abductor Agent"
- sub_role = "Agent"
- outfit = /datum/outfit/abductor/agent
- landmark_type = /obj/effect/landmark/abductor/agent
- greet_text = "Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve."
- show_in_antagpanel = TRUE
-
-/datum/antagonist/abductor/scientist
- name = "Abductor Scientist"
- sub_role = "Scientist"
- outfit = /datum/outfit/abductor/scientist
- landmark_type = /obj/effect/landmark/abductor/scientist
- greet_text = "Use your stealth technology and equipment to incapacitate humans for your scientist to retrieve."
- show_in_antagpanel = TRUE
-
-/datum/antagonist/abductor/create_team(datum/team/abductor_team/new_team)
- if(!new_team)
- return
- if(!istype(new_team))
- stack_trace("Wrong team type passed to [type] initialization.")
- team = new_team
-
-/datum/antagonist/abductor/get_team()
- return team
-
-/datum/antagonist/abductor/on_gain()
- SSticker.mode.abductors += owner
- owner.special_role = "[name] [sub_role]"
- owner.assigned_role = "[name] [sub_role]"
- owner.objectives += team.objectives
- finalize_abductor()
- return ..()
-
-/datum/antagonist/abductor/on_removal()
- SSticker.mode.abductors -= owner
- owner.objectives -= team.objectives
- if(owner.current)
- to_chat(owner.current,"You are no longer the [owner.special_role]!")
- owner.special_role = null
- return ..()
-
-/datum/antagonist/abductor/greet()
- to_chat(owner.current, "You are the [owner.special_role]!")
- to_chat(owner.current, "With the help of your teammate, kidnap and experiment on station crew members!")
- to_chat(owner.current, "[greet_text]")
- owner.announce_objectives()
-
-/datum/antagonist/abductor/proc/finalize_abductor()
- //Equip
- var/mob/living/carbon/human/H = owner.current
- H.set_species(/datum/species/abductor)
- H.real_name = "[team.name] [sub_role]"
- H.equipOutfit(outfit)
-
- //Teleport to ship
- for(var/obj/effect/landmark/abductor/LM in GLOB.landmarks_list)
- if(istype(LM, landmark_type) && LM.team_number == team.team_number)
- H.forceMove(LM.loc)
- break
-
- SSticker.mode.update_abductor_icons_added(owner)
-
-/datum/antagonist/abductor/scientist/finalize_abductor()
- ..()
- var/mob/living/carbon/human/H = owner.current
- var/datum/species/abductor/A = H.dna.species
- A.scientist = TRUE
-
-/datum/antagonist/abductor/admin_add(datum/mind/new_owner,mob/admin)
- var/list/current_teams = list()
- for(var/datum/team/abductor_team/T in get_all_teams(/datum/team/abductor_team))
- current_teams[T.name] = T
- var/choice = input(admin,"Add to which team ?") as null|anything in (current_teams + "new team")
- if (choice == "new team")
- team = new
- else if(choice in current_teams)
- team = current_teams[choice]
- else
- return
- new_owner.add_antag_datum(src)
- log_admin("[key_name(usr)] made [key_name(new_owner.current)] [name] on [choice]!")
- message_admins("[key_name_admin(usr)] made [key_name_admin(new_owner.current)] [name] on [choice] !")
-
-/datum/antagonist/abductor/get_admin_commands()
- . = ..()
- .["Equip"] = CALLBACK(src,.proc/admin_equip)
-
-/datum/antagonist/abductor/proc/admin_equip(mob/admin)
- if(!ishuman(owner.current))
- to_chat(admin, "This only works on humans!")
- return
- var/mob/living/carbon/human/H = owner.current
- var/gear = alert(admin,"Agent or Scientist Gear","Gear","Agent","Scientist")
- if(gear)
- if(gear=="Agent")
- H.equipOutfit(/datum/outfit/abductor/agent)
- else
- H.equipOutfit(/datum/outfit/abductor/scientist)
-
-/datum/team/abductor_team
- member_name = "abductor"
- var/team_number
- var/list/datum/mind/abductees = list()
- var/static/team_count = 1
-
-/datum/team/abductor_team/New()
- ..()
- team_number = team_count++
- name = "Mothership [pick(GLOB.possible_changeling_IDs)]" //TODO Ensure unique and actual alieny names
- add_objective(new/datum/objective/experiment)
-
-/datum/team/abductor_team/is_solo()
- return FALSE
-
-/datum/team/abductor_team/proc/add_objective(datum/objective/O)
- O.team = src
- O.update_explanation_text()
- objectives += O
-
-/datum/team/abductor_team/roundend_report()
- var/list/result = list()
-
- var/won = TRUE
- for(var/datum/objective/O in objectives)
- if(!O.check_completion())
- won = FALSE
- if(won)
- result += "[name] team fulfilled its mission!"
- else
- result += "[name] team failed its mission."
-
- result += ""
- for(var/datum/mind/abductor_mind in members)
- result += printplayer(abductor_mind)
- result += printobjectives(abductor_mind)
-
- return result.Join("
")
-
-/datum/antagonist/abductee
- name = "Abductee"
- roundend_category = "abductees"
- antagpanel_category = "Abductee"
-
-/datum/antagonist/abductee/on_gain()
- give_objective()
- . = ..()
-
-/datum/antagonist/abductee/greet()
- to_chat(owner, "Your mind snaps!")
- to_chat(owner, "You can't remember how you got here...")
- owner.announce_objectives()
-
-/datum/antagonist/abductee/proc/give_objective()
- var/mob/living/carbon/human/H = owner.current
- if(istype(H))
- H.gain_trauma_type(BRAIN_TRAUMA_MILD)
- var/objtype = (prob(75) ? /datum/objective/abductee/random : pick(subtypesof(/datum/objective/abductee/) - /datum/objective/abductee/random))
- var/datum/objective/abductee/O = new objtype()
- objectives += O
- owner.objectives += objectives
-
-/datum/antagonist/abductee/apply_innate_effects(mob/living/mob_override)
- SSticker.mode.update_abductor_icons_added(mob_override ? mob_override.mind : owner)
-
-/datum/antagonist/abductee/remove_innate_effects(mob/living/mob_override)
- SSticker.mode.update_abductor_icons_removed(mob_override ? mob_override.mind : owner)
\ No newline at end of file
diff --git a/code/datums/antagonists/antag_datum.dm b/code/datums/antagonists/antag_datum.dm
deleted file mode 100644
index 5f12d02398..0000000000
--- a/code/datums/antagonists/antag_datum.dm
+++ /dev/null
@@ -1,246 +0,0 @@
-GLOBAL_LIST_EMPTY(antagonists)
-
-/datum/antagonist
- var/name = "Antagonist"
- var/roundend_category = "other antagonists" //Section of roundend report, datums with same category will be displayed together, also default header for the section
- var/show_in_roundend = TRUE //Set to false to hide the antagonists from roundend report
- var/datum/mind/owner //Mind that owns this datum
- var/silent = FALSE //Silent will prevent the gain/lose texts to show
- var/can_coexist_with_others = TRUE //Whether or not the person will be able to have more than one datum
- var/list/typecache_datum_blacklist = list() //List of datums this type can't coexist with
- var/delete_on_mind_deletion = TRUE
- var/job_rank
- var/replace_banned = TRUE //Should replace jobbaned player with ghosts if granted.
- var/list/objectives = list()
- var/antag_memory = ""//These will be removed with antag datum
-
- //Antag panel properties
- var/show_in_antagpanel = TRUE //This will hide adding this antag type in antag panel, use only for internal subtypes that shouldn't be added directly but still show if possessed by mind
- var/antagpanel_category = "Uncategorized" //Antagpanel will display these together, REQUIRED
-
-/datum/antagonist/New()
- GLOB.antagonists += src
- typecache_datum_blacklist = typecacheof(typecache_datum_blacklist)
-
-/datum/antagonist/Destroy()
- GLOB.antagonists -= src
- if(owner)
- LAZYREMOVE(owner.antag_datums, src)
- owner = null
- return ..()
-
-/datum/antagonist/proc/can_be_owned(datum/mind/new_owner)
- . = TRUE
- var/datum/mind/tested = new_owner || owner
- if(tested.has_antag_datum(type))
- return FALSE
- for(var/i in tested.antag_datums)
- var/datum/antagonist/A = i
- if(is_type_in_typecache(src, A.typecache_datum_blacklist))
- return FALSE
-
-//This will be called in add_antag_datum before owner assignment.
-//Should return antag datum without owner.
-/datum/antagonist/proc/specialization(datum/mind/new_owner)
- return src
-
-/datum/antagonist/proc/on_body_transfer(mob/living/old_body, mob/living/new_body)
- remove_innate_effects(old_body)
- apply_innate_effects(new_body)
-
-//This handles the application of antag huds/special abilities
-/datum/antagonist/proc/apply_innate_effects(mob/living/mob_override)
- return
-
-//This handles the removal of antag huds/special abilities
-/datum/antagonist/proc/remove_innate_effects(mob/living/mob_override)
- return
-
-//Assign default team and creates one for one of a kind team antagonists
-/datum/antagonist/proc/create_team(datum/team/team)
- return
-
-//Proc called when the datum is given to a mind.
-/datum/antagonist/proc/on_gain()
- if(owner && owner.current)
- if(!silent)
- greet()
- apply_innate_effects()
- if(is_banned(owner.current) && replace_banned)
- replace_banned_player()
-
-/datum/antagonist/proc/is_banned(mob/M)
- if(!M)
- return FALSE
- . = (jobban_isbanned(M, ROLE_SYNDICATE) || (job_rank && jobban_isbanned(M,job_rank)))
-
-/datum/antagonist/proc/replace_banned_player()
- set waitfor = FALSE
-
- var/list/mob/dead/observer/candidates = pollCandidatesForMob("Do you want to play as a [name]?", "[name]", null, job_rank, 50, owner.current)
- if(LAZYLEN(candidates))
- var/client/C = pick(candidates)
- to_chat(owner, "Your mob has been taken over by a ghost! Appeal your job ban if you want to avoid this in the future!")
- message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(owner.current)]) to replace a jobbaned player.")
- owner.current.ghostize(0)
- owner.current.key = C.key
-
-/datum/antagonist/proc/on_removal()
- remove_innate_effects()
- if(owner)
- LAZYREMOVE(owner.antag_datums, src)
- if(!silent && owner.current)
- farewell()
- var/datum/team/team = get_team()
- if(team)
- team.remove_member(owner)
- qdel(src)
-
-/datum/antagonist/proc/greet()
- return
-
-/datum/antagonist/proc/farewell()
- return
-
-//Returns the team antagonist belongs to if any.
-/datum/antagonist/proc/get_team()
- return
-
-//Individual roundend report
-/datum/antagonist/proc/roundend_report()
- var/list/report = list()
-
- if(!owner)
- CRASH("antagonist datum without owner")
-
- report += printplayer(owner)
-
- var/objectives_complete = TRUE
- if(owner.objectives.len)
- report += printobjectives(owner)
- for(var/datum/objective/objective in owner.objectives)
- if(!objective.check_completion())
- objectives_complete = FALSE
- break
-
- if(owner.objectives.len == 0 || objectives_complete)
- report += "The [name] was successful!"
- else
- report += "The [name] has failed!"
-
- return report.Join("
")
-
-//Displayed at the start of roundend_category section, default to roundend_category header
-/datum/antagonist/proc/roundend_report_header()
- return "
"
-
-//Displayed at the end of roundend_category section
-/datum/antagonist/proc/roundend_report_footer()
- return
-
-
-//ADMIN TOOLS
-
-//Called when using admin tools to give antag status
-/datum/antagonist/proc/admin_add(datum/mind/new_owner,mob/admin)
- message_admins("[key_name_admin(admin)] made [new_owner.current] into [name].")
- log_admin("[key_name(admin)] made [new_owner.current] into [name].")
- new_owner.add_antag_datum(src)
-
-//Called when removing antagonist using admin tools
-/datum/antagonist/proc/admin_remove(mob/user)
- if(!user)
- return
- message_admins("[key_name_admin(user)] has removed [name] antagonist status from [owner.current].")
- log_admin("[key_name(user)] has removed [name] antagonist status from [owner.current].")
- on_removal()
-
-//gamemode/proc/is_mode_antag(antagonist/A) => TRUE/FALSE
-
-//Additional data to display in antagonist panel section
-//nuke disk code, genome count, etc
-/datum/antagonist/proc/antag_panel_data()
- return ""
-
-/datum/antagonist/proc/enabled_in_preferences(datum/mind/M)
- if(job_rank)
- if(M.current && M.current.client && (job_rank in M.current.client.prefs.be_special))
- return TRUE
- else
- return FALSE
- return TRUE
-
-// List if ["Command"] = CALLBACK(), user will be appeneded to callback arguments on execution
-/datum/antagonist/proc/get_admin_commands()
- . = list()
-
-/datum/antagonist/Topic(href,href_list)
- if(!check_rights(R_ADMIN))
- return
- //Antag memory edit
- if (href_list["memory_edit"])
- edit_memory(usr)
- owner.traitor_panel()
- return
-
- //Some commands might delete/modify this datum clearing or changing owner
- var/datum/mind/persistent_owner = owner
-
- var/commands = get_admin_commands()
- for(var/admin_command in commands)
- if(href_list["command"] == admin_command)
- var/datum/callback/C = commands[admin_command]
- C.Invoke(usr)
- persistent_owner.traitor_panel()
- return
-
-/datum/antagonist/proc/edit_memory(mob/user)
- var/new_memo = copytext(trim(input(user,"Write new memory", "Memory", antag_memory) as null|message),1,MAX_MESSAGE_LEN)
- if (isnull(new_memo))
- return
- antag_memory = new_memo
-
-//Should probably be on ticker or job ss ?
-/proc/get_antagonists(antag_type,specific = FALSE)
- . = list()
- for(var/datum/antagonist/A in GLOB.antagonists)
- if(!A.owner)
- continue
- if(!antag_type || !specific && istype(A,antag_type) || specific && A.type == antag_type)
- . += A.owner
-
-//This datum will autofill the name with special_role
-//Used as placeholder for minor antagonists, please create proper datums for these
-/datum/antagonist/auto_custom
- show_in_antagpanel = FALSE
- antagpanel_category = "Other"
-
-/datum/antagonist/auto_custom/on_gain()
- ..()
- name = owner.special_role
- //Add all objectives not already owned by other datums to this one.
- var/list/already_registered_objectives = list()
- for(var/datum/antagonist/A in owner.antag_datums)
- if(A == src)
- continue
- else
- already_registered_objectives |= A.objectives
- objectives = owner.objectives - already_registered_objectives
-
-/datum/antagonist/auto_custom/antag_listing_name()
- return ..() + "([name])"
-
-//This one is created by admin tools for custom objectives
-/datum/antagonist/custom
- antagpanel_category = "Custom"
-
-/datum/antagonist/custom/admin_add(datum/mind/new_owner,mob/admin)
- var/custom_name = stripped_input(admin, "Custom antagonist name:", "Custom antag", "Antagonist")
- if(custom_name)
- name = custom_name
- else
- return
- ..()
-
-/datum/antagonist/custom/antag_listing_name()
- return ..() + "([name])"
\ No newline at end of file
diff --git a/code/datums/antagonists/blob.dm b/code/datums/antagonists/blob.dm
deleted file mode 100644
index 964bc99311..0000000000
--- a/code/datums/antagonists/blob.dm
+++ /dev/null
@@ -1,67 +0,0 @@
-/datum/antagonist/blob
- name = "Blob"
- roundend_category = "blobs"
- antagpanel_category = "Blob"
- job_rank = ROLE_BLOB
-
- var/datum/action/innate/blobpop/pop_action
- var/starting_points_human_blob = 60
- var/point_rate_human_blob = 2
-
-/datum/antagonist/blob/roundend_report()
- var/basic_report = ..()
- //Display max blobpoints for blebs that lost
- if(isovermind(owner.current)) //embarrasing if not
- var/mob/camera/blob/overmind = owner.current
- if(!overmind.victory_in_progress) //if it won this doesn't really matter
- var/point_report = "
[owner.name] took over [overmind.max_count] tiles at the height of its growth."
- return basic_report+point_report
- return basic_report
-
-/datum/antagonist/blob/greet()
- if(!isovermind(owner.current))
- to_chat(owner,"You feel bloated.")
-
-/datum/antagonist/blob/on_gain()
- create_objectives()
- . = ..()
-
-/datum/antagonist/blob/proc/create_objectives()
- var/datum/objective/blob_takeover/main = new
- main.owner = owner
- objectives += main
- owner.objectives |= objectives
-
-/datum/antagonist/blob/apply_innate_effects(mob/living/mob_override)
- if(!isovermind(owner.current))
- if(!pop_action)
- pop_action = new
- pop_action.Grant(owner.current)
-
-/datum/objective/blob_takeover
- explanation_text = "Reach critical mass!"
-
-//Non-overminds get this on blob antag assignment
-/datum/action/innate/blobpop
- name = "Pop"
- desc = "Unleash the blob"
- icon_icon = 'icons/mob/blob.dmi'
- button_icon_state = "blob"
-
-/datum/action/innate/blobpop/Activate()
- var/mob/old_body = owner
- var/datum/antagonist/blob/blobtag = owner.mind.has_antag_datum(/datum/antagonist/blob)
- if(!blobtag)
- Remove()
- return
- var/mob/camera/blob/B = new /mob/camera/blob(get_turf(old_body), blobtag.starting_points_human_blob)
- owner.mind.transfer_to(B)
- old_body.gib()
- B.place_blob_core(blobtag.point_rate_human_blob, pop_override = TRUE)
-
-/datum/antagonist/blob/antag_listing_status()
- . = ..()
- if(owner && owner.current)
- var/mob/camera/blob/B = owner.current
- if(istype(B))
- . += "(Progress: [B.blobs_legit.len]/[B.blobwincount])"
\ No newline at end of file
diff --git a/code/datums/antagonists/brother.dm b/code/datums/antagonists/brother.dm
deleted file mode 100644
index d8371d3751..0000000000
--- a/code/datums/antagonists/brother.dm
+++ /dev/null
@@ -1,154 +0,0 @@
-/datum/antagonist/brother
- name = "Brother"
- antagpanel_category = "Brother"
- job_rank = ROLE_BROTHER
- var/special_role = ROLE_BROTHER
- var/datum/team/brother_team/team
-
-/datum/antagonist/brother/create_team(datum/team/brother_team/new_team)
- if(!new_team)
- return
- if(!istype(new_team))
- stack_trace("Wrong team type passed to [type] initialization.")
- team = new_team
-
-/datum/antagonist/brother/get_team()
- return team
-
-/datum/antagonist/brother/on_gain()
- SSticker.mode.brothers += owner
- objectives += team.objectives
- owner.objectives += objectives
- owner.special_role = special_role
- finalize_brother()
- return ..()
-
-/datum/antagonist/brother/on_removal()
- SSticker.mode.brothers -= owner
- owner.objectives -= objectives
- if(owner.current)
- to_chat(owner.current,"You are no longer the [special_role]!")
- owner.special_role = null
- return ..()
-
-/datum/antagonist/brother/proc/give_meeting_area()
- if(!owner.current || !team || !team.meeting_area)
- return
- to_chat(owner.current, "Your designated meeting area: [team.meeting_area]")
- antag_memory += "Meeting Area: [team.meeting_area]
"
-
-/datum/antagonist/brother/greet()
- var/brother_text = ""
- var/list/brothers = team.members - owner
- for(var/i = 1 to brothers.len)
- var/datum/mind/M = brothers[i]
- brother_text += M.name
- if(i == brothers.len - 1)
- brother_text += " and "
- else if(i != brothers.len)
- brother_text += ", "
- to_chat(owner.current, "You are the [owner.special_role] of [brother_text].")
- to_chat(owner.current, "The Syndicate only accepts those that have proven themself. Prove yourself and prove your [team.member_name]s by completing your objectives together!")
- owner.announce_objectives()
- give_meeting_area()
-
-/datum/antagonist/brother/proc/finalize_brother()
- SSticker.mode.update_brother_icons_added(owner)
-
-/datum/antagonist/brother/admin_add(datum/mind/new_owner,mob/admin)
- //show list of possible brothers
- var/list/candidates = list()
- for(var/mob/living/L in GLOB.alive_mob_list)
- if(!L.mind || L.mind == new_owner || !can_be_owned(L.mind))
- continue
- candidates[L.mind.name] = L.mind
-
- var/choice = input(admin,"Choose the blood brother.", "Brother") as null|anything in candidates
- if(!choice)
- return
- var/datum/mind/bro = candidates[choice]
- var/datum/team/brother_team/T = new
- T.add_member(new_owner)
- T.add_member(bro)
- T.pick_meeting_area()
- T.forge_brother_objectives()
- new_owner.add_antag_datum(/datum/antagonist/brother,T)
- bro.add_antag_datum(/datum/antagonist/brother, T)
- T.update_name()
- message_admins("[key_name_admin(admin)] made [new_owner.current] and [bro.current] into blood brothers.")
- log_admin("[key_name(admin)] made [new_owner.current] and [bro.current] into blood brothers.")
-
-/datum/team/brother_team
- name = "brotherhood"
- member_name = "blood brother"
- var/meeting_area
- var/static/meeting_areas = list("The Bar", "Dorms", "Escape Dock", "Arrivals", "Holodeck", "Primary Tool Storage", "Recreation Area", "Chapel", "Library")
-
-/datum/team/brother_team/is_solo()
- return FALSE
-
-/datum/team/brother_team/proc/pick_meeting_area()
- meeting_area = pick(meeting_areas)
- meeting_areas -= meeting_area
-
-/datum/team/brother_team/proc/update_name()
- var/list/last_names = list()
- for(var/datum/mind/M in members)
- var/list/split_name = splittext(M.name," ")
- last_names += split_name[split_name.len]
-
- name = last_names.Join(" & ")
-
-/datum/team/brother_team/roundend_report()
- var/list/parts = list()
-
- parts += ""
- for(var/datum/mind/M in members)
- parts += printplayer(M)
- var/win = TRUE
- var/objective_count = 1
- for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- parts += "Objective #[objective_count]: [objective.explanation_text] Success!"
- else
- parts += "Objective #[objective_count]: [objective.explanation_text] Fail."
- win = FALSE
- objective_count++
- if(win)
- parts += "The blood brothers were successful!"
- else
- parts += "The blood brothers have failed!"
-
- return "
[parts.Join("
")]
"
-
-/datum/team/brother_team/proc/add_objective(datum/objective/O, needs_target = FALSE)
- O.team = src
- if(needs_target)
- O.find_target()
- O.update_explanation_text()
- objectives += O
-
-/datum/team/brother_team/proc/forge_brother_objectives()
- objectives = list()
- var/is_hijacker = prob(10)
- for(var/i = 1 to max(1, CONFIG_GET(number/brother_objectives_amount) + (members.len > 2) - is_hijacker))
- forge_single_objective()
- if(is_hijacker)
- if(!locate(/datum/objective/hijack) in objectives)
- add_objective(new/datum/objective/hijack)
- else if(!locate(/datum/objective/escape) in objectives)
- add_objective(new/datum/objective/escape)
-
-/datum/team/brother_team/proc/forge_single_objective()
- if(prob(50))
- if(LAZYLEN(active_ais()) && prob(100/GLOB.joined_player_list.len))
- add_objective(new/datum/objective/destroy, TRUE)
- else if(prob(30))
- add_objective(new/datum/objective/maroon, TRUE)
- else
- add_objective(new/datum/objective/assassinate, TRUE)
- else
- add_objective(new/datum/objective/steal, TRUE)
-
-/datum/team/brother_team/antag_listing_name()
- return "[name] blood brothers"
\ No newline at end of file
diff --git a/code/datums/antagonists/changeling.dm b/code/datums/antagonists/changeling.dm
deleted file mode 100644
index 2bc4900ac5..0000000000
--- a/code/datums/antagonists/changeling.dm
+++ /dev/null
@@ -1,545 +0,0 @@
-#define LING_FAKEDEATH_TIME 400 //40 seconds
-#define LING_DEAD_GENETICDAMAGE_HEAL_CAP 50 //The lowest value of geneticdamage handle_changeling() can take it to while dead.
-#define LING_ABSORB_RECENT_SPEECH 8 //The amount of recent spoken lines to gain on absorbing a mob
-
-/datum/antagonist/changeling
- name = "Changeling"
- roundend_category = "changelings"
- antagpanel_category = "Changeling"
- job_rank = ROLE_CHANGELING
-
- var/you_are_greet = TRUE
- var/give_objectives = TRUE
- var/team_mode = FALSE //Should assign team objectives ?
-
- //Changeling Stuff
-
- var/list/stored_profiles = list() //list of datum/changelingprofile
- var/datum/changelingprofile/first_prof = null
- var/dna_max = 6 //How many extra DNA strands the changeling can store for transformation.
- var/absorbedcount = 0
- var/chem_charges = 20
- var/chem_storage = 75
- var/chem_recharge_rate = 1
- var/chem_recharge_slowdown = 0
- var/sting_range = 2
- var/changelingID = "Changeling"
- var/geneticdamage = 0
- var/isabsorbing = 0
- var/islinking = 0
- var/geneticpoints = 10
- var/purchasedpowers = list()
- var/mimicing = ""
- var/canrespec = 0
- var/changeling_speak = 0
- var/datum/dna/chosen_dna
- var/obj/effect/proc_holder/changeling/sting/chosen_sting
- var/datum/cellular_emporium/cellular_emporium
- var/datum/action/innate/cellular_emporium/emporium_action
-
- // wip stuff
- var/static/list/all_powers = typecacheof(/obj/effect/proc_holder/changeling,TRUE)
-
-
-/datum/antagonist/changeling/Destroy()
- QDEL_NULL(cellular_emporium)
- QDEL_NULL(emporium_action)
- . = ..()
-
-/datum/antagonist/changeling/proc/generate_name()
- var/honorific
- if(owner.current.gender == FEMALE)
- honorific = "Ms."
- else
- honorific = "Mr."
- if(GLOB.possible_changeling_IDs.len)
- changelingID = pick(GLOB.possible_changeling_IDs)
- GLOB.possible_changeling_IDs -= changelingID
- changelingID = "[honorific] [changelingID]"
- else
- changelingID = "[honorific] [rand(1,999)]"
-
-/datum/antagonist/changeling/proc/create_actions()
- cellular_emporium = new(src)
- emporium_action = new(cellular_emporium)
-
-/datum/antagonist/changeling/on_gain()
- generate_name()
- create_actions()
- reset_powers()
- create_initial_profile()
- if(give_objectives)
- if(team_mode)
- forge_team_objectives()
- forge_objectives()
- remove_clownmut()
- . = ..()
-
-/datum/antagonist/changeling/on_removal()
- //We'll be using this from now on
- var/mob/living/carbon/C = owner.current
- if(istype(C))
- var/obj/item/organ/brain/B = C.getorganslot(ORGAN_SLOT_BRAIN)
- if(B && (B.decoy_override != initial(B.decoy_override)))
- B.vital = TRUE
- B.decoy_override = FALSE
- remove_changeling_powers()
- owner.objectives -= objectives
- . = ..()
-
-/datum/antagonist/changeling/proc/remove_clownmut()
- if (owner)
- var/mob/living/carbon/human/H = owner.current
- if(istype(H) && owner.assigned_role == "Clown")
- to_chat(H, "You have evolved beyond your clownish nature, allowing you to wield weapons without harming yourself.")
- H.dna.remove_mutation(CLOWNMUT)
-
-/datum/antagonist/changeling/proc/reset_properties()
- changeling_speak = 0
- chosen_sting = null
- geneticpoints = initial(geneticpoints)
- sting_range = initial(sting_range)
- chem_storage = initial(chem_storage)
- chem_recharge_rate = initial(chem_recharge_rate)
- chem_charges = min(chem_charges, chem_storage)
- chem_recharge_slowdown = initial(chem_recharge_slowdown)
- mimicing = ""
-
-/datum/antagonist/changeling/proc/remove_changeling_powers()
- if(ishuman(owner.current) || ismonkey(owner.current))
- reset_properties()
- for(var/obj/effect/proc_holder/changeling/p in purchasedpowers)
- if(p.always_keep)
- continue
- purchasedpowers -= p
- p.on_refund(owner.current)
-
- //MOVE THIS
- if(owner.current.hud_used)
- owner.current.hud_used.lingstingdisplay.icon_state = null
- owner.current.hud_used.lingstingdisplay.invisibility = INVISIBILITY_ABSTRACT
-
-/datum/antagonist/changeling/proc/reset_powers()
- if(purchasedpowers)
- remove_changeling_powers()
- //Repurchase free powers.
- for(var/path in all_powers)
- var/obj/effect/proc_holder/changeling/S = new path()
- if(!S.dna_cost)
- if(!has_sting(S))
- purchasedpowers += S
- S.on_purchase(owner.current,TRUE)
-
-/datum/antagonist/changeling/proc/has_sting(obj/effect/proc_holder/changeling/power)
- for(var/obj/effect/proc_holder/changeling/P in purchasedpowers)
- if(initial(power.name) == P.name)
- return TRUE
- return FALSE
-
-
-/datum/antagonist/changeling/proc/purchase_power(sting_name)
- var/obj/effect/proc_holder/changeling/thepower = null
-
- for(var/path in all_powers)
- var/obj/effect/proc_holder/changeling/S = path
- if(initial(S.name) == sting_name)
- thepower = new path()
- break
-
- if(!thepower)
- to_chat(owner.current, "This is awkward. Changeling power purchase failed, please report this bug to a coder!")
- return
-
- if(absorbedcount < thepower.req_dna)
- to_chat(owner.current, "We lack the energy to evolve this ability!")
- return
-
- if(has_sting(thepower))
- to_chat(owner.current, "We have already evolved this ability!")
- return
-
- if(thepower.dna_cost < 0)
- to_chat(owner.current, "We cannot evolve this ability.")
- return
-
- if(geneticpoints < thepower.dna_cost)
- to_chat(owner.current, "We have reached our capacity for abilities.")
- return
-
- if(owner.current.status_flags & FAKEDEATH)//To avoid potential exploits by buying new powers while in stasis, which clears your verblist.
- to_chat(owner.current, "We lack the energy to evolve new abilities right now.")
- return
-
- geneticpoints -= thepower.dna_cost
- purchasedpowers += thepower
- thepower.on_purchase(owner.current)
-
-/datum/antagonist/changeling/proc/readapt()
- if(!ishuman(owner.current))
- to_chat(owner.current, "We can't remove our evolutions in this form!")
- return
- if(canrespec)
- to_chat(owner.current, "We have removed our evolutions from this form, and are now ready to readapt.")
- reset_powers()
- canrespec = 0
- SSblackbox.record_feedback("tally", "changeling_power_purchase", 1, "Readapt")
- return 1
- else
- to_chat(owner.current, "You lack the power to readapt your evolutions!")
- return 0
-
-//Called in life()
-/datum/antagonist/changeling/proc/regenerate()
- var/mob/living/carbon/the_ling = owner.current
- if(istype(the_ling))
- emporium_action.Grant(the_ling)
- if(the_ling.stat == DEAD)
- chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), (chem_storage*0.5))
- geneticdamage = max(LING_DEAD_GENETICDAMAGE_HEAL_CAP,geneticdamage-1)
- else //not dead? no chem/geneticdamage caps.
- chem_charges = min(max(0, chem_charges + chem_recharge_rate - chem_recharge_slowdown), chem_storage)
- geneticdamage = max(0, geneticdamage-1)
-
-
-/datum/antagonist/changeling/proc/get_dna(dna_owner)
- for(var/datum/changelingprofile/prof in stored_profiles)
- if(dna_owner == prof.name)
- return prof
-
-/datum/antagonist/changeling/proc/has_dna(datum/dna/tDNA)
- for(var/datum/changelingprofile/prof in stored_profiles)
- if(tDNA.is_same_as(prof.dna))
- return TRUE
- return FALSE
-
-/datum/antagonist/changeling/proc/can_absorb_dna(mob/living/carbon/human/target, var/verbose=1)
- var/mob/living/carbon/user = owner.current
- if(!istype(user))
- return
- if(stored_profiles.len)
- var/datum/changelingprofile/prof = stored_profiles[1]
- if(prof.dna == user.dna && stored_profiles.len >= dna_max)//If our current DNA is the stalest, we gotta ditch it.
- if(verbose)
- to_chat(user, "We have reached our capacity to store genetic information! We must transform before absorbing more.")
- return
- if(!target)
- return
- if(NO_DNA_COPY in target.dna.species.species_traits)
- if(verbose)
- to_chat(user, "[target] is not compatible with our biology.")
- return
- if((target.has_disability(DISABILITY_NOCLONE)) || (target.has_disability(DISABILITY_NOCLONE)))
- if(verbose)
- to_chat(user, "DNA of [target] is ruined beyond usability!")
- return
- if(!ishuman(target))//Absorbing monkeys is entirely possible, but it can cause issues with transforming. That's what lesser form is for anyway!
- if(verbose)
- to_chat(user, "We could gain no benefit from absorbing a lesser creature.")
- return
- if(has_dna(target.dna))
- if(verbose)
- to_chat(user, "We already have this DNA in storage!")
- return
- if(!target.has_dna())
- if(verbose)
- to_chat(user, "[target] is not compatible with our biology.")
- return
- return 1
-
-
-/datum/antagonist/changeling/proc/create_profile(mob/living/carbon/human/H, protect = 0)
- var/datum/changelingprofile/prof = new
-
- H.dna.real_name = H.real_name //Set this again, just to be sure that it's properly set.
- var/datum/dna/new_dna = new H.dna.type
- H.dna.copy_dna(new_dna)
- prof.dna = new_dna
- prof.name = H.real_name
- prof.protected = protect
-
- prof.underwear = H.underwear
- prof.undershirt = H.undershirt
- prof.socks = H.socks
-
- var/list/slots = list("head", "wear_mask", "back", "wear_suit", "w_uniform", "shoes", "belt", "gloves", "glasses", "ears", "wear_id", "s_store")
- for(var/slot in slots)
- if(slot in H.vars)
- var/obj/item/I = H.vars[slot]
- if(!I)
- continue
- prof.name_list[slot] = I.name
- prof.appearance_list[slot] = I.appearance
- prof.flags_cover_list[slot] = I.flags_cover
- prof.item_color_list[slot] = I.item_color
- prof.item_state_list[slot] = I.item_state
- prof.exists_list[slot] = 1
- else
- continue
-
- return prof
-
-/datum/antagonist/changeling/proc/add_profile(datum/changelingprofile/prof)
- if(stored_profiles.len > dna_max)
- if(!push_out_profile())
- return
-
- if(!first_prof)
- first_prof = prof
-
- stored_profiles += prof
- absorbedcount++
-
-/datum/antagonist/changeling/proc/add_new_profile(mob/living/carbon/human/H, protect = 0)
- var/datum/changelingprofile/prof = create_profile(H, protect)
- add_profile(prof)
- return prof
-
-/datum/antagonist/changeling/proc/remove_profile(mob/living/carbon/human/H, force = 0)
- for(var/datum/changelingprofile/prof in stored_profiles)
- if(H.real_name == prof.name)
- if(prof.protected && !force)
- continue
- stored_profiles -= prof
- qdel(prof)
-
-/datum/antagonist/changeling/proc/get_profile_to_remove()
- for(var/datum/changelingprofile/prof in stored_profiles)
- if(!prof.protected)
- return prof
-
-/datum/antagonist/changeling/proc/push_out_profile()
- var/datum/changelingprofile/removeprofile = get_profile_to_remove()
- if(removeprofile)
- stored_profiles -= removeprofile
- return 1
- return 0
-
-
-/datum/antagonist/changeling/proc/create_initial_profile()
- var/mob/living/carbon/C = owner.current //only carbons have dna now, so we have to typecaste
- if(ishuman(C))
- add_new_profile(C)
-
-/datum/antagonist/changeling/apply_innate_effects()
- //Brains optional.
- var/mob/living/carbon/C = owner.current
- if(istype(C))
- var/obj/item/organ/brain/B = C.getorganslot(ORGAN_SLOT_BRAIN)
- if(B)
- B.vital = FALSE
- B.decoy_override = TRUE
- update_changeling_icons_added()
- return
-
-/datum/antagonist/changeling/remove_innate_effects()
- update_changeling_icons_removed()
- return
-
-
-/datum/antagonist/changeling/greet()
- if (you_are_greet)
- to_chat(owner.current, "You are [changelingID], a changeling! You have absorbed and taken the form of a human.")
- to_chat(owner.current, "Use say \":g message\" to communicate with your fellow changelings.")
- to_chat(owner.current, "You must complete the following tasks:")
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ling_aler.ogg', 100, FALSE, pressure_affected = FALSE)
-
- owner.announce_objectives()
-
-/datum/antagonist/changeling/farewell()
- to_chat(owner.current, "You grow weak and lose your powers! You are no longer a changeling and are stuck in your current form!")
-
-/datum/antagonist/changeling/proc/forge_team_objectives()
- if(GLOB.changeling_team_objective_type)
- var/datum/objective/changeling_team_objective/team_objective = new GLOB.changeling_team_objective_type
- team_objective.owner = owner
- objectives += team_objective
- return
-
-/datum/antagonist/changeling/proc/forge_objectives()
- //OBJECTIVES - random traitor objectives. Unique objectives "steal brain" and "identity theft".
- //No escape alone because changelings aren't suited for it and it'd probably just lead to rampant robusting
- //If it seems like they'd be able to do it in play, add a 10% chance to have to escape alone
-
- var/escape_objective_possible = TRUE
-
- //if there's a team objective, check if it's compatible with escape objectives
- for(var/datum/objective/changeling_team_objective/CTO in objectives)
- if(!CTO.escape_objective_compatible)
- escape_objective_possible = FALSE
- break
-
- var/datum/objective/absorb/absorb_objective = new
- absorb_objective.owner = owner
- absorb_objective.gen_amount_goal(6, 8)
- objectives += absorb_objective
-
- if(prob(60))
- if(prob(85))
- var/datum/objective/steal/steal_objective = new
- steal_objective.owner = owner
- steal_objective.find_target()
- objectives += steal_objective
- else
- var/datum/objective/download/download_objective = new
- download_objective.owner = owner
- download_objective.gen_amount_goal()
- objectives += download_objective
-
- var/list/active_ais = active_ais()
- if(active_ais.len && prob(100/GLOB.joined_player_list.len))
- var/datum/objective/destroy/destroy_objective = new
- destroy_objective.owner = owner
- destroy_objective.find_target()
- objectives += destroy_objective
- else
- if(prob(70))
- var/datum/objective/assassinate/kill_objective = new
- kill_objective.owner = owner
- if(team_mode) //No backstabbing while in a team
- kill_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1)
- else
- kill_objective.find_target()
- objectives += kill_objective
- else
- var/datum/objective/maroon/maroon_objective = new
- maroon_objective.owner = owner
- if(team_mode)
- maroon_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1)
- else
- maroon_objective.find_target()
- objectives += maroon_objective
-
- if (!(locate(/datum/objective/escape) in objectives) && escape_objective_possible)
- var/datum/objective/escape/escape_with_identity/identity_theft = new
- identity_theft.owner = owner
- identity_theft.target = maroon_objective.target
- identity_theft.update_explanation_text()
- objectives += identity_theft
- escape_objective_possible = FALSE
-
- if (!(locate(/datum/objective/escape) in objectives) && escape_objective_possible)
- if(prob(50))
- var/datum/objective/escape/escape_objective = new
- escape_objective.owner = owner
- objectives += escape_objective
- else
- var/datum/objective/escape/escape_with_identity/identity_theft = new
- identity_theft.owner = owner
- if(team_mode)
- identity_theft.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1)
- else
- identity_theft.find_target()
- objectives += identity_theft
- escape_objective_possible = FALSE
-
- owner.objectives |= objectives
-
-/datum/antagonist/changeling/proc/update_changeling_icons_added()
- var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING]
- hud.join_hud(owner.current)
- set_antag_hud(owner.current, "changling")
-
-/datum/antagonist/changeling/proc/update_changeling_icons_removed()
- var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_CHANGELING]
- hud.leave_hud(owner.current)
- set_antag_hud(owner.current, null)
-
-/datum/antagonist/changeling/admin_add(datum/mind/new_owner,mob/admin)
- . = ..()
- to_chat(new_owner.current, "Our powers have awoken. A flash of memory returns to us...we are [changelingID], a changeling!")
-
-/datum/antagonist/changeling/get_admin_commands()
- . = ..()
- if(stored_profiles.len && (owner.current.real_name != first_prof.name))
- .["Transform to initial appearance."] = CALLBACK(src,.proc/admin_restore_appearance)
-
-/datum/antagonist/changeling/proc/admin_restore_appearance(mob/admin)
- if(!stored_profiles.len || !iscarbon(owner.current))
- to_chat(admin, "Resetting DNA failed!")
- else
- var/mob/living/carbon/C = owner.current
- first_prof.dna.transfer_identity(C, transfer_SE=1)
- C.real_name = first_prof.name
- C.updateappearance(mutcolor_update=1)
- C.domutcheck()
-
-// Profile
-
-/datum/changelingprofile
- var/name = "a bug"
-
- var/protected = 0
-
- var/datum/dna/dna = null
- var/list/name_list = list() //associative list of slotname = itemname
- var/list/appearance_list = list()
- var/list/flags_cover_list = list()
- var/list/exists_list = list()
- var/list/item_color_list = list()
- var/list/item_state_list = list()
-
- var/underwear
- var/undershirt
- var/socks
-
-/datum/changelingprofile/Destroy()
- qdel(dna)
- . = ..()
-
-/datum/changelingprofile/proc/copy_profile(datum/changelingprofile/newprofile)
- newprofile.name = name
- newprofile.protected = protected
- newprofile.dna = new dna.type
- dna.copy_dna(newprofile.dna)
- newprofile.name_list = name_list.Copy()
- newprofile.appearance_list = appearance_list.Copy()
- newprofile.flags_cover_list = flags_cover_list.Copy()
- newprofile.exists_list = exists_list.Copy()
- newprofile.item_color_list = item_color_list.Copy()
- newprofile.item_state_list = item_state_list.Copy()
- newprofile.underwear = underwear
- newprofile.undershirt = undershirt
- newprofile.socks = socks
-
-
-/datum/antagonist/changeling/xenobio
- name = "Xenobio Changeling"
- give_objectives = FALSE
- show_in_roundend = FALSE //These are here for admin tracking purposes only
- you_are_greet = FALSE
-
-/datum/antagonist/changeling/roundend_report()
- var/list/parts = list()
-
- var/changelingwin = 1
- if(!owner.current)
- changelingwin = 0
-
- parts += printplayer(owner)
-
- //Removed sanity if(changeling) because we -want- a runtime to inform us that the changelings list is incorrect and needs to be fixed.
- parts += "Changeling ID: [changelingID]."
- parts += "Genomes Extracted: [absorbedcount]"
- parts += " "
- if(objectives.len)
- var/count = 1
- for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- parts += "Objective #[count]: [objective.explanation_text] Success!"
- else
- parts += "Objective #[count]: [objective.explanation_text] Fail."
- changelingwin = 0
- count++
-
- if(changelingwin)
- parts += "The changeling was successful!"
- else
- parts += "The changeling has failed."
-
- return parts.Join("
")
-
-/datum/antagonist/changeling/antag_listing_name()
- return ..() + "([changelingID])"
-
-/datum/antagonist/changeling/xenobio/antag_listing_name()
- return ..() + "(Xenobio)"
\ No newline at end of file
diff --git a/code/datums/antagonists/clockcult.dm b/code/datums/antagonists/clockcult.dm
deleted file mode 100644
index 067801677b..0000000000
--- a/code/datums/antagonists/clockcult.dm
+++ /dev/null
@@ -1,219 +0,0 @@
-//CLOCKCULT PROOF OF CONCEPT
-/datum/antagonist/clockcult
- name = "Clock Cultist"
- roundend_category = "clock cultists"
- antagpanel_category = "Clockcult"
- job_rank = ROLE_SERVANT_OF_RATVAR
- var/datum/action/innate/hierophant/hierophant_network = new()
- var/datum/team/clockcult/clock_team
- var/make_team = TRUE //This should be only false for tutorial scarabs
-
-/datum/antagonist/clockcult/silent
- silent = TRUE
- show_in_antagpanel = FALSE //internal
-
-/datum/antagonist/clockcult/Destroy()
- qdel(hierophant_network)
- return ..()
-
-/datum/antagonist/clockcult/get_team()
- return clock_team
-
-/datum/antagonist/clockcult/create_team(datum/team/clockcult/new_team)
- if(!new_team && make_team)
- //TODO blah blah same as the others, allow multiple
- for(var/datum/antagonist/clockcult/H in GLOB.antagonists)
- if(!H.owner)
- continue
- if(H.clock_team)
- clock_team = H.clock_team
- return
- clock_team = new /datum/team/clockcult
- return
- if(make_team && !istype(new_team))
- stack_trace("Wrong team type passed to [type] initialization.")
- clock_team = new_team
-
-/datum/antagonist/clockcult/can_be_owned(datum/mind/new_owner)
- . = ..()
- if(.)
- . = is_eligible_servant(new_owner.current)
-
-/datum/antagonist/clockcult/greet()
- if(!owner.current || silent)
- return
- owner.current.visible_message("[owner.current]'s eyes glow a blazing yellow!", null, null, 7, owner.current) //don't show the owner this message
- to_chat(owner.current, "Assist your new companions in their righteous efforts. Your goal is theirs, and theirs yours. You serve the Clockwork \
- Justiciar above all else. Perform his every whim without hesitation.")
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/clockcultalr.ogg', 70, FALSE, pressure_affected = FALSE)
-
-/datum/antagonist/clockcult/on_gain()
- var/mob/living/current = owner.current
- SSticker.mode.servants_of_ratvar += owner
- SSticker.mode.update_servant_icons_added(owner)
- owner.special_role = ROLE_SERVANT_OF_RATVAR
- owner.current.log_message("Has been converted to the cult of Ratvar!", INDIVIDUAL_ATTACK_LOG)
- if(issilicon(current))
- if(iscyborg(current) && !silent)
- var/mob/living/silicon/robot/R = current
- if(R.connected_ai && !is_servant_of_ratvar(R.connected_ai))
- to_chat(R, "You have been desynced from your master AI.
\
- In addition, your onboard camera is no longer active and you have gained additional equipment, including a limited clockwork slab.")
- else
- to_chat(R, "Your onboard camera is no longer active and you have gained additional equipment, including a limited clockwork slab.")
- if(isAI(current))
- to_chat(current, "You are now able to use your cameras to listen in on conversations, but can no longer speak in anything but Ratvarian.")
- to_chat(current, "You can communicate with other servants by using the Hierophant Network action button in the upper left.")
- else if(isbrain(current) || isclockmob(current))
- to_chat(current, "You can communicate with other servants by using the Hierophant Network action button in the upper left.")
- ..()
- to_chat(current, "This is Ratvar's will: [CLOCKCULT_OBJECTIVE]")
- antag_memory += "Ratvar's will: [CLOCKCULT_OBJECTIVE]
" //Memorize the objectives
-
-/datum/antagonist/clockcult/apply_innate_effects(mob/living/mob_override)
- . = ..()
- var/mob/living/current = owner.current
- if(istype(mob_override))
- current = mob_override
- GLOB.all_clockwork_mobs += current
- current.faction |= "ratvar"
- current.grant_language(/datum/language/ratvar)
- current.update_action_buttons_icon() //because a few clockcult things are action buttons and we may be wearing/holding them for whatever reason, we need to update buttons
- if(issilicon(current))
- var/mob/living/silicon/S = current
- if(iscyborg(S))
- var/mob/living/silicon/robot/R = S
- if(!R.shell)
- R.UnlinkSelf()
- R.module.rebuild_modules()
- else if(isAI(S))
- var/mob/living/silicon/ai/A = S
- A.can_be_carded = FALSE
- A.requires_power = POWER_REQ_CLOCKCULT
- var/list/AI_frame = list(mutable_appearance('icons/mob/clockwork_mobs.dmi', "aiframe")) //make the AI's cool frame
- for(var/d in GLOB.cardinals)
- AI_frame += image('icons/mob/clockwork_mobs.dmi', A, "eye[rand(1, 10)]", dir = d) //the eyes are randomly fast or slow
- A.add_overlay(AI_frame)
- if(!A.lacks_power())
- A.ai_restore_power()
- if(A.eyeobj)
- A.eyeobj.relay_speech = TRUE
- for(var/mob/living/silicon/robot/R in A.connected_robots)
- if(R.connected_ai == A)
- add_servant_of_ratvar(R)
- S.laws = new/datum/ai_laws/ratvar
- S.laws.associate(S)
- S.update_icons()
- S.show_laws()
- hierophant_network.title = "Silicon"
- hierophant_network.span_for_name = "nezbere"
- hierophant_network.span_for_message = "brass"
- else if(isbrain(current))
- hierophant_network.title = "Vessel"
- hierophant_network.span_for_name = "nezbere"
- hierophant_network.span_for_message = "alloy"
- else if(isclockmob(current))
- hierophant_network.title = "Construct"
- hierophant_network.span_for_name = "nezbere"
- hierophant_network.span_for_message = "brass"
- hierophant_network.Grant(current)
- current.throw_alert("clockinfo", /obj/screen/alert/clockwork/infodump)
- var/obj/structure/destructible/clockwork/massive/celestial_gateway/G = GLOB.ark_of_the_clockwork_justiciar
- if(G.active && ishuman(current))
- current.add_overlay(mutable_appearance('icons/effects/genetics.dmi', "servitude", -MUTATIONS_LAYER))
-
-/datum/antagonist/clockcult/remove_innate_effects(mob/living/mob_override)
- var/mob/living/current = owner.current
- if(istype(mob_override))
- current = mob_override
- GLOB.all_clockwork_mobs -= current
- current.faction -= "ratvar"
- current.remove_language(/datum/language/ratvar)
- current.clear_alert("clockinfo")
- for(var/datum/action/innate/clockwork_armaments/C in owner.current.actions) //Removes any bound clockwork armor
- qdel(C)
- for(var/datum/action/innate/call_weapon/W in owner.current.actions) //and weapons too
- qdel(W)
- if(issilicon(current))
- var/mob/living/silicon/S = current
- if(isAI(S))
- var/mob/living/silicon/ai/A = S
- A.can_be_carded = initial(A.can_be_carded)
- A.requires_power = initial(A.requires_power)
- A.cut_overlays()
- S.make_laws()
- S.update_icons()
- S.show_laws()
- var/mob/living/temp_owner = current
- ..()
- if(iscyborg(temp_owner))
- var/mob/living/silicon/robot/R = temp_owner
- R.module.rebuild_modules()
- if(temp_owner)
- temp_owner.update_action_buttons_icon() //because a few clockcult things are action buttons and we may be wearing/holding them, we need to update buttons
- temp_owner.cut_overlays()
- temp_owner.regenerate_icons()
-
-/datum/antagonist/clockcult/on_removal()
- SSticker.mode.servants_of_ratvar -= owner
- SSticker.mode.update_servant_icons_removed(owner)
- if(!silent)
- owner.current.visible_message("[owner] seems to have remembered their true allegiance!", null, null, null, owner.current)
- to_chat(owner, "A cold, cold darkness flows through your mind, extinguishing the Justiciar's light and all of your memories as his servant.")
- owner.current.log_message("Has renounced the cult of Ratvar!", INDIVIDUAL_ATTACK_LOG)
- owner.special_role = null
- if(iscyborg(owner.current))
- to_chat(owner.current, "Despite your freedom from Ratvar's influence, you are still irreparably damaged and no longer possess certain functions such as AI linking.")
- . = ..()
-
-
-/datum/antagonist/clockcult/admin_add(datum/mind/new_owner,mob/admin)
- add_servant_of_ratvar(new_owner.current, TRUE)
- message_admins("[key_name_admin(admin)] has made [new_owner.current] into a servant of Ratvar.")
- log_admin("[key_name(admin)] has made [new_owner.current] into a servant of Ratvar.")
-
-/datum/antagonist/clockcult/admin_remove(mob/user)
- remove_servant_of_ratvar(owner.current, TRUE)
- message_admins("[key_name_admin(user)] has removed clockwork servant status from [owner.current].")
- log_admin("[key_name(user)] has removed clockwork servant status from [owner.current].")
-
-/datum/antagonist/clockcult/get_admin_commands()
- . = ..()
- .["Give slab"] = CALLBACK(src,.proc/admin_give_slab)
-
-/datum/antagonist/clockcult/proc/admin_give_slab(mob/admin)
- if(!SSticker.mode.equip_servant(owner.current))
- to_chat(admin, "Failed to outfit [owner.current]!")
- else
- to_chat(admin, "Successfully gave [owner.current] servant equipment!")
-
-/datum/team/clockcult
- name = "Clockcult"
- var/list/objective
- var/datum/mind/eminence
-
-/datum/team/clockcult/proc/check_clockwork_victory()
- if(GLOB.clockwork_gateway_activated)
- return TRUE
- return FALSE
-
-/datum/team/clockcult/roundend_report()
- var/list/parts = list()
-
- if(check_clockwork_victory())
- parts += "Ratvar's servants defended the Ark until its activation!"
- else
- parts += "The Ark was destroyed! Ratvar will rust away for all eternity!"
- parts += " "
- parts += "The servants' objective was: [CLOCKCULT_OBJECTIVE]."
- parts += "Construction Value(CV) was: [GLOB.clockwork_construction_value]"
- for(var/i in SSticker.scripture_states)
- if(i != SCRIPTURE_DRIVER)
- parts += "[i] scripture was: [SSticker.scripture_states[i] ? "UN":""]LOCKED"
- if(eminence)
- parts += " [printplayer(eminence)]"
- if(members.len)
- parts += ""
- parts += printplayerlist(members - eminence)
-
- return "[parts.Join("
")]
"
\ No newline at end of file
diff --git a/code/datums/antagonists/cult.dm b/code/datums/antagonists/cult.dm
deleted file mode 100644
index 3b9fa7b8c4..0000000000
--- a/code/datums/antagonists/cult.dm
+++ /dev/null
@@ -1,329 +0,0 @@
-#define SUMMON_POSSIBILITIES 3
-
-/datum/antagonist/cult
- name = "Cultist"
- roundend_category = "cultists"
- antagpanel_category = "Cult"
- var/datum/action/innate/cult/comm/communion = new
- var/datum/action/innate/cult/mastervote/vote = new
- job_rank = ROLE_CULTIST
- var/ignore_implant = FALSE
- var/give_equipment = FALSE
-
- var/datum/team/cult/cult_team
-
-/datum/antagonist/cult/get_team()
- return cult_team
-
-/datum/antagonist/cult/create_team(datum/team/cult/new_team)
- if(!new_team)
- //todo remove this and allow admin buttons to create more than one cult
- for(var/datum/antagonist/cult/H in GLOB.antagonists)
- if(!H.owner)
- continue
- if(H.cult_team)
- cult_team = H.cult_team
- return
- cult_team = new /datum/team/cult
- cult_team.setup_objectives()
- return
- if(!istype(new_team))
- stack_trace("Wrong team type passed to [type] initialization.")
- cult_team = new_team
-
-/datum/antagonist/cult/proc/add_objectives()
- objectives |= cult_team.objectives
- owner.objectives |= objectives
-
-/datum/antagonist/cult/proc/remove_objectives()
- owner.objectives -= objectives
-
-/datum/antagonist/cult/Destroy()
- QDEL_NULL(communion)
- QDEL_NULL(vote)
- return ..()
-
-/datum/antagonist/cult/can_be_owned(datum/mind/new_owner)
- . = ..()
- if(. && !ignore_implant)
- . = is_convertable_to_cult(new_owner.current,cult_team)
-
-/datum/antagonist/cult/greet()
- to_chat(owner, "You are a member of the cult!")
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/bloodcult.ogg', 100, FALSE, pressure_affected = FALSE)//subject to change
- owner.announce_objectives()
-
-/datum/antagonist/cult/on_gain()
- . = ..()
- var/mob/living/current = owner.current
- add_objectives()
- if(give_equipment)
- equip_cultist()
- SSticker.mode.cult += owner // Only add after they've been given objectives
- SSticker.mode.update_cult_icons_added(owner)
- current.log_message("Has been converted to the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG)
-
- if(cult_team.blood_target && cult_team.blood_target_image && current.client)
- current.client.images += cult_team.blood_target_image
-
-
-/datum/antagonist/cult/proc/equip_cultist(tome=FALSE)
- var/mob/living/carbon/H = owner.current
- if(!istype(H))
- return
- if (owner.assigned_role == "Clown")
- to_chat(owner, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
- H.dna.remove_mutation(CLOWNMUT)
-
- if(tome)
- . += cult_give_item(/obj/item/tome, H)
- else
- . += cult_give_item(/obj/item/paper/talisman/supply, H)
- to_chat(owner, "These will help you start the cult on this station. Use them well, and remember - you are not the only one.")
-
-
-/datum/antagonist/cult/proc/cult_give_item(obj/item/item_path, mob/living/carbon/human/mob)
- var/list/slots = list(
- "backpack" = slot_in_backpack,
- "left pocket" = slot_l_store,
- "right pocket" = slot_r_store
- )
-
- var/T = new item_path(mob)
- var/item_name = initial(item_path.name)
- var/where = mob.equip_in_one_of_slots(T, slots)
- if(!where)
- to_chat(mob, "Unfortunately, you weren't able to get a [item_name]. This is very bad and you should adminhelp immediately (press F1).")
- return 0
- else
- to_chat(mob, "You have a [item_name] in your [where].")
- if(where == "backpack")
- var/obj/item/storage/B = mob.back
- B.orient2hud(mob)
- B.show_to(mob)
- return 1
-
-/datum/antagonist/cult/apply_innate_effects(mob/living/mob_override)
- . = ..()
- var/mob/living/current = owner.current
- if(mob_override)
- current = mob_override
- current.faction |= "cult"
- current.grant_language(/datum/language/narsie)
- current.verbs += /mob/living/proc/cult_help
- if(!cult_team.cult_mastered)
- vote.Grant(current)
- communion.Grant(current)
- current.throw_alert("bloodsense", /obj/screen/alert/bloodsense)
-
-/datum/antagonist/cult/remove_innate_effects(mob/living/mob_override)
- . = ..()
- var/mob/living/current = owner.current
- if(mob_override)
- current = mob_override
- current.faction -= "cult"
- current.remove_language(/datum/language/narsie)
- current.verbs -= /mob/living/proc/cult_help
- vote.Remove(current)
- communion.Remove(current)
- current.clear_alert("bloodsense")
-
-/datum/antagonist/cult/on_removal()
- remove_objectives()
- SSticker.mode.cult -= owner
- SSticker.mode.update_cult_icons_removed(owner)
- if(!silent)
- owner.current.visible_message("[owner.current] looks like [owner.current.p_they()] just reverted to their old faith!", null, null, null, owner.current)
- to_chat(owner.current, "An unfamiliar white light flashes through your mind, cleansing the taint of the Geometer and all your memories as her servant.")
- owner.current.log_message("Has renounced the cult of Nar'Sie!", INDIVIDUAL_ATTACK_LOG)
- if(cult_team.blood_target && cult_team.blood_target_image && owner.current.client)
- owner.current.client.images -= cult_team.blood_target_image
- . = ..()
-
-/datum/antagonist/cult/admin_add(datum/mind/new_owner,mob/admin)
- give_equipment = FALSE
- new_owner.add_antag_datum(src)
- message_admins("[key_name_admin(admin)] has cult'ed [new_owner.current].")
- log_admin("[key_name(admin)] has cult'ed [new_owner.current].")
-
-/datum/antagonist/cult/admin_remove(mob/user)
- message_admins("[key_name_admin(user)] has decult'ed [owner.current].")
- log_admin("[key_name(user)] has decult'ed [owner.current].")
- SSticker.mode.remove_cultist(owner,silent=TRUE) //disgusting
-
-/datum/antagonist/cult/get_admin_commands()
- . = ..()
- .["Tome"] = CALLBACK(src,.proc/admin_give_tome)
- .["Amulet"] = CALLBACK(src,.proc/admin_give_amulet)
-
-/datum/antagonist/cult/proc/admin_give_tome(mob/admin)
- if(equip_cultist(owner.current,1))
- to_chat(admin, "Spawning tome failed!")
-
-/datum/antagonist/cult/proc/admin_give_amulet(mob/admin)
- if (equip_cultist(owner.current))
- to_chat(admin, "Spawning amulet failed!")
-
-/datum/antagonist/cult/master
- ignore_implant = TRUE
- show_in_antagpanel = FALSE //Feel free to add this later
- var/datum/action/innate/cult/master/finalreck/reckoning = new
- var/datum/action/innate/cult/master/cultmark/bloodmark = new
- var/datum/action/innate/cult/master/pulse/throwing = new
-
-/datum/antagonist/cult/master/Destroy()
- QDEL_NULL(reckoning)
- QDEL_NULL(bloodmark)
- QDEL_NULL(throwing)
- return ..()
-
-/datum/antagonist/cult/master/on_gain()
- . = ..()
- var/mob/living/current = owner.current
- set_antag_hud(current, "cultmaster")
-
-/datum/antagonist/cult/master/greet()
- to_chat(owner.current, "You are the cult's Master. As the cult's Master, you have a unique title and loud voice when communicating, are capable of marking \
- targets, such as a location or a noncultist, to direct the cult to them, and, finally, you are capable of summoning the entire living cult to your location once.")
- to_chat(owner.current, "Use these abilities to direct the cult to victory at any cost.")
-
-/datum/antagonist/cult/master/apply_innate_effects(mob/living/mob_override)
- . = ..()
- var/mob/living/current = owner.current
- if(mob_override)
- current = mob_override
- if(!cult_team.reckoning_complete)
- reckoning.Grant(current)
- bloodmark.Grant(current)
- throwing.Grant(current)
- current.update_action_buttons_icon()
- current.apply_status_effect(/datum/status_effect/cult_master)
-
-/datum/antagonist/cult/master/remove_innate_effects(mob/living/mob_override)
- . = ..()
- var/mob/living/current = owner.current
- if(mob_override)
- current = mob_override
- reckoning.Remove(current)
- bloodmark.Remove(current)
- throwing.Remove(current)
- current.update_action_buttons_icon()
- current.remove_status_effect(/datum/status_effect/cult_master)
-
-/datum/team/cult
- name = "Cult"
-
- var/blood_target
- var/image/blood_target_image
- var/blood_target_reset_timer
-
- var/cult_vote_called = FALSE
- var/cult_mastered = FALSE
- var/reckoning_complete = FALSE
-
-
-/datum/team/cult/proc/setup_objectives()
- //SAC OBJECTIVE , todo: move this to objective internals
- var/list/target_candidates = list()
- var/datum/objective/sacrifice/sac_objective = new
- sac_objective.team = src
-
- for(var/mob/living/carbon/human/player in GLOB.player_list)
- if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && !is_convertable_to_cult(player) && player.stat != DEAD)
- target_candidates += player.mind
-
- if(target_candidates.len == 0)
- message_admins("Cult Sacrifice: Could not find unconvertable target, checking for convertable target.")
- for(var/mob/living/carbon/human/player in GLOB.player_list)
- if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && player.stat != DEAD)
- target_candidates += player.mind
- listclearnulls(target_candidates)
- if(LAZYLEN(target_candidates))
- sac_objective.target = pick(target_candidates)
- sac_objective.update_explanation_text()
-
- var/datum/job/sacjob = SSjob.GetJob(sac_objective.target.assigned_role)
- var/datum/preferences/sacface = sac_objective.target.current.client.prefs
- var/icon/reshape = get_flat_human_icon(null, sacjob, sacface)
- reshape.Shift(SOUTH, 4)
- reshape.Shift(EAST, 1)
- reshape.Crop(7,4,26,31)
- reshape.Crop(-5,-3,26,30)
- sac_objective.sac_image = reshape
-
- objectives += sac_objective
- else
- message_admins("Cult Sacrifice: Could not find unconvertable or convertable target. WELP!")
-
-
- //SUMMON OBJECTIVE
-
- var/datum/objective/eldergod/summon_objective = new()
- summon_objective.team = src
- objectives += summon_objective
-
-/datum/objective/sacrifice
- var/sacced = FALSE
- var/sac_image
-
-/datum/objective/sacrifice/check_completion()
- return sacced || completed
-
-/datum/objective/sacrifice/update_explanation_text()
- if(target)
- explanation_text = "Sacrifice [target], the [target.assigned_role] via invoking a Sacrifice rune with them on it and three acolytes around it."
- else
- explanation_text = "The veil has already been weakened here, proceed to the final objective."
-
-/datum/objective/eldergod
- var/summoned = FALSE
- var/list/summon_spots = list()
-
-/datum/objective/eldergod/New()
- ..()
- var/sanity = 0
- while(summon_spots.len < SUMMON_POSSIBILITIES && sanity < 100)
- var/area/summon = pick(GLOB.sortedAreas - summon_spots)
- if(summon && is_station_level(summon.z) && summon.valid_territory)
- summon_spots += summon
- sanity++
- update_explanation_text()
-
-/datum/objective/eldergod/update_explanation_text()
- explanation_text = "Summon Nar-Sie by invoking the rune 'Summon Nar-Sie'. The summoning can only be accomplished in [english_list(summon_spots)] - where the veil is weak enough for the ritual to begin."
-
-/datum/objective/eldergod/check_completion()
- return summoned || completed
-
-/datum/team/cult/proc/check_cult_victory()
- for(var/datum/objective/O in objectives)
- if(!O.check_completion())
- return FALSE
- return TRUE
-
-/datum/team/cult/roundend_report()
- var/list/parts = list()
-
- if(check_cult_victory())
- parts += "The cult has succeeded! Nar-sie has snuffed out another torch in the void!"
- else
- parts += "The staff managed to stop the cult! Dark words and heresy are no match for Nanotrasen's finest!"
-
- if(objectives.len)
- parts += "The cultists' objectives were:"
- var/count = 1
- for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- parts += "Objective #[count]: [objective.explanation_text] Success!"
- else
- parts += "Objective #[count]: [objective.explanation_text] Fail."
- count++
-
- if(members.len)
- parts += ""
- parts += printplayerlist(members)
-
- return "[parts.Join("
")]
"
-
-/datum/team/cult/is_gamemode_hero()
- return SSticker.mode.name == "cult"
\ No newline at end of file
diff --git a/code/datums/antagonists/datum_iaa.dm b/code/datums/antagonists/datum_iaa.dm
deleted file mode 100644
index fd2c4e89a0..0000000000
--- a/code/datums/antagonists/datum_iaa.dm
+++ /dev/null
@@ -1,11 +0,0 @@
-/datum/antagonist/iaa
-
-/datum/antagonist/iaa/apply_innate_effects()
- .=..() //in case the base is used in future
- if(owner&&owner.current)
- give_pinpointer(owner.current)
-
-/datum/antagonist/iaa/remove_innate_effects()
- .=..()
- if(owner&&owner.current)
- owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer)
\ No newline at end of file
diff --git a/code/datums/antagonists/datum_traitor.dm b/code/datums/antagonists/datum_traitor.dm
deleted file mode 100644
index da34debf95..0000000000
--- a/code/datums/antagonists/datum_traitor.dm
+++ /dev/null
@@ -1,352 +0,0 @@
-/datum/antagonist/traitor
- name = "Traitor"
- roundend_category = "traitors"
- antagpanel_category = "Traitor"
- job_rank = ROLE_TRAITOR
- var/should_specialise = TRUE //do we split into AI and human, set to true on inital assignment only
- var/ai_datum = /datum/antagonist/traitor/AI
- var/human_datum = /datum/antagonist/traitor/human
- var/special_role = ROLE_TRAITOR
- var/employer = "The Syndicate"
- var/give_objectives = TRUE
- var/should_give_codewords = TRUE
-
-
-
-/datum/antagonist/traitor/human
- show_in_antagpanel = FALSE
- should_specialise = FALSE
- var/should_equip = TRUE
-
-
-/datum/antagonist/traitor/AI
- show_in_antagpanel = FALSE
- should_specialise = FALSE
-
-/datum/antagonist/traitor/specialization(datum/mind/new_owner)
- if(should_specialise)
- if(new_owner.current && isAI(new_owner.current))
- return new ai_datum()
- else
- return new human_datum()
- else
- return ..()
-
-/datum/antagonist/traitor/on_gain()
- SSticker.mode.traitors += owner
- owner.special_role = special_role
- if(give_objectives)
- forge_traitor_objectives()
- finalize_traitor()
- ..()
-
-/datum/antagonist/traitor/apply_innate_effects()
- if(owner.assigned_role == "Clown")
- var/mob/living/carbon/human/traitor_mob = owner.current
- if(traitor_mob && istype(traitor_mob))
- if(!silent)
- to_chat(traitor_mob, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
- traitor_mob.dna.remove_mutation(CLOWNMUT)
-
-/datum/antagonist/traitor/remove_innate_effects()
- if(owner.assigned_role == "Clown")
- var/mob/living/carbon/human/traitor_mob = owner.current
- if(traitor_mob && istype(traitor_mob))
- traitor_mob.dna.add_mutation(CLOWNMUT)
-
-/datum/antagonist/traitor/on_removal()
- SSticker.mode.traitors -= owner
- for(var/O in objectives)
- owner.objectives -= O
- objectives = list()
- if(!silent && owner.current)
- to_chat(owner.current," You are no longer the [special_role]! ")
- owner.special_role = null
- ..()
-
-/datum/antagonist/traitor/AI/on_removal()
- if(owner.current && isAI(owner.current))
- var/mob/living/silicon/ai/A = owner.current
- A.set_zeroth_law("")
- A.verbs -= /mob/living/silicon/ai/proc/choose_modules
- A.malf_picker.remove_malf_verbs(A)
- qdel(A.malf_picker)
- ..()
-
-/datum/antagonist/traitor/proc/add_objective(var/datum/objective/O)
- owner.objectives += O
- objectives += O
-
-/datum/antagonist/traitor/proc/remove_objective(var/datum/objective/O)
- owner.objectives -= O
- objectives -= O
-
-/datum/antagonist/traitor/proc/forge_traitor_objectives()
- return
-
-/datum/antagonist/traitor/human/forge_traitor_objectives()
- var/is_hijacker = FALSE
- if (GLOB.joined_player_list.len >= 30) // Less murderboning on lowpop thanks
- is_hijacker = prob(10)
- var/martyr_chance = prob(20)
- var/objective_count = is_hijacker //Hijacking counts towards number of objectives
- if(!SSticker.mode.exchange_blue && SSticker.mode.traitors.len >= 8) //Set up an exchange if there are enough traitors
- if(!SSticker.mode.exchange_red)
- SSticker.mode.exchange_red = owner
- else
- SSticker.mode.exchange_blue = owner
- assign_exchange_role(SSticker.mode.exchange_red)
- assign_exchange_role(SSticker.mode.exchange_blue)
- objective_count += 1 //Exchange counts towards number of objectives
- var/toa = CONFIG_GET(number/traitor_objectives_amount)
- for(var/i = objective_count, i < toa, i++)
- forge_single_objective()
-
- if(is_hijacker && objective_count <= toa) //Don't assign hijack if it would exceed the number of objectives set in config.traitor_objectives_amount
- if (!(locate(/datum/objective/hijack) in owner.objectives))
- var/datum/objective/hijack/hijack_objective = new
- hijack_objective.owner = owner
- add_objective(hijack_objective)
- return
-
-
- var/martyr_compatibility = 1 //You can't succeed in stealing if you're dead.
- for(var/datum/objective/O in owner.objectives)
- if(!O.martyr_compatible)
- martyr_compatibility = 0
- break
-
- if(martyr_compatibility && martyr_chance)
- var/datum/objective/martyr/martyr_objective = new
- martyr_objective.owner = owner
- add_objective(martyr_objective)
- return
-
- else
- if(!(locate(/datum/objective/escape) in owner.objectives))
- var/datum/objective/escape/escape_objective = new
- escape_objective.owner = owner
- add_objective(escape_objective)
- return
-
-/datum/antagonist/traitor/AI/forge_traitor_objectives()
- var/objective_count = 0
-
- if(prob(30))
- objective_count += forge_single_objective()
-
- for(var/i = objective_count, i < CONFIG_GET(number/traitor_objectives_amount), i++)
- var/datum/objective/assassinate/kill_objective = new
- kill_objective.owner = owner
- kill_objective.find_target()
- add_objective(kill_objective)
-
- var/datum/objective/survive/exist/exist_objective = new
- exist_objective.owner = owner
- add_objective(exist_objective)
-/datum/antagonist/traitor/proc/forge_single_objective()
- return 0
-/datum/antagonist/traitor/human/forge_single_objective() //Returns how many objectives are added
- .=1
- if(prob(50))
- var/list/active_ais = active_ais()
- if(active_ais.len && prob(100/GLOB.joined_player_list.len))
- var/datum/objective/destroy/destroy_objective = new
- destroy_objective.owner = owner
- destroy_objective.find_target()
- add_objective(destroy_objective)
- else if(prob(30))
- var/datum/objective/maroon/maroon_objective = new
- maroon_objective.owner = owner
- maroon_objective.find_target()
- add_objective(maroon_objective)
- else
- var/datum/objective/assassinate/kill_objective = new
- kill_objective.owner = owner
- kill_objective.find_target()
- add_objective(kill_objective)
- else
- if(prob(15) && !(locate(/datum/objective/download in owner.objectives)))
- var/datum/objective/download/download_objective = new
- download_objective.owner = owner
- download_objective.gen_amount_goal()
- add_objective(download_objective)
- else
- var/datum/objective/steal/steal_objective = new
- steal_objective.owner = owner
- steal_objective.find_target()
- add_objective(steal_objective)
-
-/datum/antagonist/traitor/AI/forge_single_objective()
- .=1
- var/special_pick = rand(1,4)
- switch(special_pick)
- if(1)
- var/datum/objective/block/block_objective = new
- block_objective.owner = owner
- add_objective(block_objective)
- if(2)
- var/datum/objective/purge/purge_objective = new
- purge_objective.owner = owner
- add_objective(purge_objective)
- if(3)
- var/datum/objective/robot_army/robot_objective = new
- robot_objective.owner = owner
- add_objective(robot_objective)
- if(4) //Protect and strand a target
- var/datum/objective/protect/yandere_one = new
- yandere_one.owner = owner
- add_objective(yandere_one)
- yandere_one.find_target()
- var/datum/objective/maroon/yandere_two = new
- yandere_two.owner = owner
- yandere_two.target = yandere_one.target
- yandere_two.update_explanation_text() // normally called in find_target()
- add_objective(yandere_two)
- .=2
-
-/datum/antagonist/traitor/greet()
- to_chat(owner.current, "You are the [owner.special_role].")
- owner.announce_objectives()
- if(should_give_codewords)
- give_codewords()
-
-/datum/antagonist/traitor/proc/finalize_traitor()
- SSticker.mode.update_traitor_icons_added(owner)
- return
-
-/datum/antagonist/traitor/AI/finalize_traitor()
- ..()
- add_law_zero()
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/malf.ogg', 100, FALSE, pressure_affected = FALSE)
- owner.current.grant_language(/datum/language/codespeak)
-
-/datum/antagonist/traitor/human/finalize_traitor()
- ..()
- if(should_equip)
- equip(silent)
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/tatoralert.ogg', 100, FALSE, pressure_affected = FALSE)
-
-/datum/antagonist/traitor/proc/give_codewords()
- if(!owner.current)
- return
- var/mob/traitor_mob=owner.current
-
- to_chat(traitor_mob, "The Syndicate provided you with the following information on how to identify their agents:")
- to_chat(traitor_mob, "Code Phrase: [GLOB.syndicate_code_phrase]")
- to_chat(traitor_mob, "Code Response: [GLOB.syndicate_code_response]")
-
- antag_memory += "Code Phrase: [GLOB.syndicate_code_phrase]
"
- antag_memory += "Code Response: [GLOB.syndicate_code_response]
"
-
- to_chat(traitor_mob, "Use the code words in the order provided, during regular conversation, to identify other agents. Proceed with caution, however, as everyone is a potential foe.")
-
-/datum/antagonist/traitor/AI/proc/add_law_zero()
- var/mob/living/silicon/ai/killer = owner.current
- if(!killer || !istype(killer))
- return
- var/law = "Accomplish your objectives at all costs."
- var/law_borg = "Accomplish your AI's objectives at all costs."
- killer.set_zeroth_law(law, law_borg)
- killer.set_syndie_radio()
- to_chat(killer, "Your radio has been upgraded! Use :t to speak on an encrypted channel with Syndicate Agents!")
- killer.add_malf_picker()
-
-/datum/antagonist/traitor/proc/equip(var/silent = FALSE)
- return
-
-/datum/antagonist/traitor/human/equip(var/silent = FALSE)
- owner.equip_traitor(employer, silent, src)
-
-/datum/antagonist/traitor/human/proc/assign_exchange_role()
- //set faction
- var/faction = "red"
- if(owner == SSticker.mode.exchange_blue)
- faction = "blue"
-
- //Assign objectives
- var/datum/objective/steal/exchange/exchange_objective = new
- exchange_objective.set_faction(faction,((faction == "red") ? SSticker.mode.exchange_blue : SSticker.mode.exchange_red))
- exchange_objective.owner = owner
- add_objective(exchange_objective)
-
- if(prob(20))
- var/datum/objective/steal/exchange/backstab/backstab_objective = new
- backstab_objective.set_faction(faction)
- backstab_objective.owner = owner
- add_objective(backstab_objective)
-
- //Spawn and equip documents
- var/mob/living/carbon/human/mob = owner.current
-
- var/obj/item/folder/syndicate/folder
- if(owner == SSticker.mode.exchange_red)
- folder = new/obj/item/folder/syndicate/red(mob.loc)
- else
- folder = new/obj/item/folder/syndicate/blue(mob.loc)
-
- var/list/slots = list (
- "backpack" = slot_in_backpack,
- "left pocket" = slot_l_store,
- "right pocket" = slot_r_store
- )
-
- var/where = "At your feet"
- var/equipped_slot = mob.equip_in_one_of_slots(folder, slots)
- if (equipped_slot)
- where = "In your [equipped_slot]"
- to_chat(mob, "
[where] is a folder containing secret documents that another Syndicate group wants. We have set up a meeting with one of their agents on station to make an exchange. Exercise extreme caution as they cannot be trusted and may be hostile.
")
-
-//TODO Collate
-/datum/antagonist/traitor/roundend_report()
- var/list/result = list()
-
- var/traitorwin = TRUE
-
- result += printplayer(owner)
-
- var/TC_uses = 0
- var/uplink_true = FALSE
- var/purchases = ""
- var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[owner.key]
- if(H)
- TC_uses = H.total_spent
- uplink_true = TRUE
- purchases += H.generate_render(FALSE)
-
- var/objectives_text = ""
- if(objectives.len)//If the traitor had no objectives, don't need to process this.
- var/count = 1
- for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- objectives_text += "
Objective #[count]: [objective.explanation_text] Success!"
- else
- objectives_text += "
Objective #[count]: [objective.explanation_text] Fail."
- traitorwin = FALSE
- count++
-
- if(uplink_true)
- var/uplink_text = "(used [TC_uses] TC) [purchases]"
- if(TC_uses==0 && traitorwin)
- var/static/icon/badass = icon('icons/badass.dmi', "badass")
- uplink_text += "[icon2html(badass, world)]"
- result += uplink_text
-
- result += objectives_text
-
- var/special_role_text = lowertext(name)
-
- if(traitorwin)
- result += "The [special_role_text] was successful!"
- else
- result += "The [special_role_text] has failed!"
- SEND_SOUND(owner.current, 'sound/ambience/ambifailure.ogg')
-
- return result.Join("
")
-
-/datum/antagonist/traitor/roundend_report_footer()
- return "
The code phrases were: [GLOB.syndicate_code_phrase]
\
- The code responses were: [GLOB.syndicate_code_response]
"
-
-/datum/antagonist/traitor/is_gamemode_hero()
- return SSticker.mode.name == "traitor"
\ No newline at end of file
diff --git a/code/datums/antagonists/devil.dm b/code/datums/antagonists/devil.dm
deleted file mode 100644
index 858b2d1ef1..0000000000
--- a/code/datums/antagonists/devil.dm
+++ /dev/null
@@ -1,582 +0,0 @@
-#define BLOOD_THRESHOLD 3 //How many souls are needed per stage.
-#define TRUE_THRESHOLD 7
-#define ARCH_THRESHOLD 12
-
-#define BASIC_DEVIL 0
-#define BLOOD_LIZARD 1
-#define TRUE_DEVIL 2
-#define ARCH_DEVIL 3
-
-#define LOSS_PER_DEATH 2
-
-#define SOULVALUE soulsOwned.len-reviveNumber
-
-#define DEVILRESURRECTTIME 600
-
-GLOBAL_LIST_EMPTY(allDevils)
-GLOBAL_LIST_INIT(lawlorify, list (
- LORE = list(
- OBLIGATION_FOOD = "This devil seems to always offer its victims food before slaughtering them.",
- OBLIGATION_FIDDLE = "This devil will never turn down a musical challenge.",
- OBLIGATION_DANCEOFF = "This devil will never turn down a dance off.",
- OBLIGATION_GREET = "This devil seems to only be able to converse with people it knows the name of.",
- OBLIGATION_PRESENCEKNOWN = "This devil seems to be unable to attack from stealth.",
- OBLIGATION_SAYNAME = "He will always chant his name upon killing someone.",
- OBLIGATION_ANNOUNCEKILL = "This devil always loudly announces his kills for the world to hear.",
- OBLIGATION_ANSWERTONAME = "This devil always responds to his truename.",
- BANE_SILVER = "Silver seems to gravely injure this devil.",
- BANE_SALT = "Throwing salt at this devil will hinder his ability to use infernal powers temporarily.",
- BANE_LIGHT = "Bright flashes will disorient the devil, likely causing him to flee.",
- BANE_IRON = "Cold iron will slowly injure him, until he can purge it from his system.",
- BANE_WHITECLOTHES = "Wearing clean white clothing will help ward off this devil.",
- BANE_HARVEST = "Presenting the labors of a harvest will disrupt the devil.",
- BANE_TOOLBOX = "That which holds the means of creation also holds the means of the devil's undoing.",
- BAN_HURTWOMAN = "This devil seems to prefer hunting men.",
- BAN_CHAPEL = "This devil avoids holy ground.",
- BAN_HURTPRIEST = "The annointed clergy appear to be immune to his powers.",
- BAN_AVOIDWATER = "The devil seems to have some sort of aversion to water, though it does not appear to harm him.",
- BAN_STRIKEUNCONSCIOUS = "This devil only shows interest in those who are awake.",
- BAN_HURTLIZARD = "This devil will not strike a lizardman first.",
- BAN_HURTANIMAL = "This devil avoids hurting animals.",
- BANISH_WATER = "To banish the devil, you must infuse its body with holy water.",
- BANISH_COFFIN = "This devil will return to life if its remains are not placed within a coffin.",
- BANISH_FORMALDYHIDE = "To banish the devil, you must inject its lifeless body with embalming fluid.",
- BANISH_RUNES = "This devil will resurrect after death, unless its remains are within a rune.",
- BANISH_CANDLES = "A large number of nearby lit candles will prevent it from resurrecting.",
- BANISH_DESTRUCTION = "Its corpse must be utterly destroyed to prevent resurrection.",
- BANISH_FUNERAL_GARB = "If clad in funeral garments, this devil will be unable to resurrect. Should the clothes not fit, lay them gently on top of the devil's corpse."
- ),
- LAW = list(
- OBLIGATION_FOOD = "When not acting in self defense, you must always offer your victim food before harming them.",
- OBLIGATION_FIDDLE = "When not in immediate danger, if you are challenged to a musical duel, you must accept it. You are not obligated to duel the same person twice.",
- OBLIGATION_DANCEOFF = "When not in immediate danger, if you are challenged to a dance off, you must accept it. You are not obligated to face off with the same person twice.",
- OBLIGATION_GREET = "You must always greet other people by their last name before talking with them.",
- OBLIGATION_PRESENCEKNOWN = "You must always make your presence known before attacking.",
- OBLIGATION_SAYNAME = "You must always say your true name after you kill someone.",
- OBLIGATION_ANNOUNCEKILL = "Upon killing someone, you must make your deed known to all within earshot, over comms if reasonably possible.",
- OBLIGATION_ANSWERTONAME = "If you are not under attack, you must always respond to your true name.",
- BAN_HURTWOMAN = "You must never harm a female outside of self defense.",
- BAN_CHAPEL = "You must never attempt to enter the chapel.",
- BAN_HURTPRIEST = "You must never attack a priest.",
- BAN_AVOIDWATER = "You must never willingly touch a wet surface.",
- BAN_STRIKEUNCONSCIOUS = "You must never strike an unconscious person.",
- BAN_HURTLIZARD = "You must never harm a lizardman outside of self defense.",
- BAN_HURTANIMAL = "You must never harm a non-sentient creature or robot outside of self defense.",
- BANE_SILVER = "Silver, in all of its forms shall be your downfall.",
- BANE_SALT = "Salt will disrupt your magical abilities.",
- BANE_LIGHT = "Blinding lights will prevent you from using offensive powers for a time.",
- BANE_IRON = "Cold wrought iron shall act as poison to you.",
- BANE_WHITECLOTHES = "Those clad in pristine white garments will strike you true.",
- BANE_HARVEST = "The fruits of the harvest shall be your downfall.",
- BANE_TOOLBOX = "Toolboxes are bad news for you, for some reason.",
- BANISH_WATER = "If your corpse is filled with holy water, you will be unable to resurrect.",
- BANISH_COFFIN = "If your corpse is in a coffin, you will be unable to resurrect.",
- BANISH_FORMALDYHIDE = "If your corpse is embalmed, you will be unable to resurrect.",
- BANISH_RUNES = "If your corpse is placed within a rune, you will be unable to resurrect.",
- BANISH_CANDLES = "If your corpse is near lit candles, you will be unable to resurrect.",
- BANISH_DESTRUCTION = "If your corpse is destroyed, you will be unable to resurrect.",
- BANISH_FUNERAL_GARB = "If your corpse is clad in funeral garments, you will be unable to resurrect."
- )
- ))
-
-//These are also used in the codex gigas, so let's declare them globally.
-GLOBAL_LIST_INIT(devil_pre_title, list("Dark ", "Hellish ", "Fallen ", "Fiery ", "Sinful ", "Blood ", "Fluffy "))
-GLOBAL_LIST_INIT(devil_title, list("Lord ", "Prelate ", "Count ", "Viscount ", "Vizier ", "Elder ", "Adept "))
-GLOBAL_LIST_INIT(devil_syllable, list("hal", "ve", "odr", "neit", "ci", "quon", "mya", "folth", "wren", "geyr", "hil", "niet", "twou", "phi", "coa"))
-GLOBAL_LIST_INIT(devil_suffix, list(" the Red", " the Soulless", " the Master", ", the Lord of all things", ", Jr."))
-/datum/antagonist/devil
- name = "Devil"
- roundend_category = "devils"
- antagpanel_category = "Devil"
- job_rank = ROLE_DEVIL
- //Don't delete upon mind destruction, otherwise soul re-selling will break.
- delete_on_mind_deletion = FALSE
- var/obligation
- var/ban
- var/bane
- var/banish
- var/truename
- var/list/datum/mind/soulsOwned = new
- var/reviveNumber = 0
- var/form = BASIC_DEVIL
- var/static/list/devil_spells = typecacheof(list(
- /obj/effect/proc_holder/spell/aimed/fireball/hellish,
- /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork,
- /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater,
- /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended,
- /obj/effect/proc_holder/spell/targeted/infernal_jaunt,
- /obj/effect/proc_holder/spell/targeted/sintouch,
- /obj/effect/proc_holder/spell/targeted/sintouch/ascended,
- /obj/effect/proc_holder/spell/targeted/summon_contract,
- /obj/effect/proc_holder/spell/targeted/conjure_item/violin,
- /obj/effect/proc_holder/spell/targeted/summon_dancefloor))
- var/ascendable = FALSE
-
-/datum/antagonist/devil/can_be_owned(datum/mind/new_owner)
- . = ..()
- return . && (ishuman(new_owner.current) || iscyborg(new_owner.current))
-
-/datum/antagonist/devil/get_admin_commands()
- . = ..()
- .["Toggle ascendable"] = CALLBACK(src,.proc/admin_toggle_ascendable)
-
-
-/datum/antagonist/devil/proc/admin_toggle_ascendable(mob/admin)
- ascendable = !ascendable
- message_admins("[key_name_admin(admin)] set [owner.current] devil ascendable to [ascendable]")
- log_admin("[key_name_admin(admin)] set [owner.current] devil ascendable to [ascendable])")
-
-/datum/antagonist/devil/admin_add(datum/mind/new_owner,mob/admin)
- switch(alert(admin,"Should the devil be able to ascend",,"Yes","No","Cancel"))
- if("Yes")
- ascendable = TRUE
- if("No")
- ascendable = FALSE
- else
- return
- new_owner.add_antag_datum(src)
- message_admins("[key_name_admin(admin)] has devil'ed [new_owner.current]. [ascendable ? "(Ascendable)":""]")
- log_admin("[key_name(admin)] has devil'ed [new_owner.current]. [ascendable ? "(Ascendable)":""]")
-
-/datum/antagonist/devil/antag_listing_name()
- return ..() + "([truename])"
-
-/proc/devilInfo(name)
- if(GLOB.allDevils[lowertext(name)])
- return GLOB.allDevils[lowertext(name)]
- else
- var/datum/fakeDevil/devil = new /datum/fakeDevil(name)
- GLOB.allDevils[lowertext(name)] = devil
- return devil
-
-/proc/randomDevilName()
- var/name = ""
- if(prob(65))
- if(prob(35))
- name = pick(GLOB.devil_pre_title)
- name += pick(GLOB.devil_title)
- var/probability = 100
- name += pick(GLOB.devil_syllable)
- while(prob(probability))
- name += pick(GLOB.devil_syllable)
- probability -= 20
- if(prob(40))
- name += pick(GLOB.devil_suffix)
- return name
-
-/proc/randomdevilobligation()
- return pick(OBLIGATION_FOOD, OBLIGATION_FIDDLE, OBLIGATION_DANCEOFF, OBLIGATION_GREET, OBLIGATION_PRESENCEKNOWN, OBLIGATION_SAYNAME, OBLIGATION_ANNOUNCEKILL, OBLIGATION_ANSWERTONAME)
-
-/proc/randomdevilban()
- return pick(BAN_HURTWOMAN, BAN_CHAPEL, BAN_HURTPRIEST, BAN_AVOIDWATER, BAN_STRIKEUNCONSCIOUS, BAN_HURTLIZARD, BAN_HURTANIMAL)
-
-/proc/randomdevilbane()
- return pick(BANE_SALT, BANE_LIGHT, BANE_IRON, BANE_WHITECLOTHES, BANE_SILVER, BANE_HARVEST, BANE_TOOLBOX)
-
-/proc/randomdevilbanish()
- return pick(BANISH_WATER, BANISH_COFFIN, BANISH_FORMALDYHIDE, BANISH_RUNES, BANISH_CANDLES, BANISH_DESTRUCTION, BANISH_FUNERAL_GARB)
-
-/datum/antagonist/devil/proc/add_soul(datum/mind/soul)
- if(soulsOwned.Find(soul))
- return
- soulsOwned += soul
- owner.current.nutrition = NUTRITION_LEVEL_FULL
- to_chat(owner.current, "You feel satiated as you received a new soul.")
- update_hud()
- switch(SOULVALUE)
- if(0)
- to_chat(owner.current, "Your hellish powers have been restored.")
- give_appropriate_spells()
- if(BLOOD_THRESHOLD)
- increase_blood_lizard()
- if(TRUE_THRESHOLD)
- increase_true_devil()
- if(ARCH_THRESHOLD)
- increase_arch_devil()
-
-/datum/antagonist/devil/proc/remove_soul(datum/mind/soul)
- if(soulsOwned.Remove(soul))
- check_regression()
- to_chat(owner.current, "You feel as though a soul has slipped from your grasp.")
- update_hud()
-
-/datum/antagonist/devil/proc/check_regression()
- if(form == ARCH_DEVIL)
- return //arch devil can't regress
- //Yes, fallthrough behavior is intended, so I can't use a switch statement.
- if(form == TRUE_DEVIL && SOULVALUE < TRUE_THRESHOLD)
- regress_blood_lizard()
- if(form == BLOOD_LIZARD && SOULVALUE < BLOOD_THRESHOLD)
- regress_humanoid()
- if(SOULVALUE < 0)
- give_appropriate_spells()
- to_chat(owner.current, "As punishment for your failures, all of your powers except contract creation have been revoked.")
-
-/datum/antagonist/devil/proc/regress_humanoid()
- to_chat(owner.current, "Your powers weaken, have more contracts be signed to regain power.")
- if(ishuman(owner.current))
- var/mob/living/carbon/human/H = owner.current
- H.set_species(/datum/species/human, 1)
- H.regenerate_icons()
- give_appropriate_spells()
- if(istype(owner.current.loc, /obj/effect/dummy/slaughter/))
- owner.current.forceMove(get_turf(owner.current))//Fixes dying while jaunted leaving you permajaunted.
- form = BASIC_DEVIL
-
-/datum/antagonist/devil/proc/regress_blood_lizard()
- var/mob/living/carbon/true_devil/D = owner.current
- to_chat(D, "Your powers weaken, have more contracts be signed to regain power.")
- D.oldform.forceMove(D.drop_location())
- owner.transfer_to(D.oldform)
- give_appropriate_spells()
- qdel(D)
- form = BLOOD_LIZARD
- update_hud()
-
-
-/datum/antagonist/devil/proc/increase_blood_lizard()
- to_chat(owner.current, "You feel as though your humanoid form is about to shed. You will soon turn into a blood lizard.")
- sleep(50)
- if(ishuman(owner.current))
- var/mob/living/carbon/human/H = owner.current
- H.set_species(/datum/species/lizard, 1)
- H.underwear = "Nude"
- H.undershirt = "Nude"
- H.socks = "Nude"
- H.dna.features["mcolor"] = "511" //A deep red
- H.regenerate_icons()
- else //Did the devil get hit by a staff of transmutation?
- owner.current.color = "#501010"
- give_appropriate_spells()
- form = BLOOD_LIZARD
-
-
-
-/datum/antagonist/devil/proc/increase_true_devil()
- to_chat(owner.current, "You feel as though your current form is about to shed. You will soon turn into a true devil.")
- sleep(50)
- var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(owner.current.loc)
- A.faction |= "hell"
- owner.current.forceMove(A)
- A.oldform = owner.current
- owner.transfer_to(A)
- A.set_name()
- give_appropriate_spells()
- form = TRUE_DEVIL
- update_hud()
-
-/datum/antagonist/devil/proc/increase_arch_devil()
- if(!ascendable)
- return
- var/mob/living/carbon/true_devil/D = owner.current
- to_chat(D, "You feel as though your form is about to ascend.")
- sleep(50)
- if(!D)
- return
- D.visible_message("[D]'s skin begins to erupt with spikes.", \
- "Your flesh begins creating a shield around yourself.")
- sleep(100)
- if(!D)
- return
- D.visible_message("The horns on [D]'s head slowly grow and elongate.", \
- "Your body continues to mutate. Your telepathic abilities grow.")
- sleep(90)
- if(!D)
- return
- D.visible_message("[D]'s body begins to violently stretch and contort.", \
- "You begin to rend apart the final barriers to ultimate power.")
- sleep(40)
- if(!D)
- return
- to_chat(D, "Yes!")
- sleep(10)
- if(!D)
- return
- to_chat(D, "YES!!")
- sleep(10)
- if(!D)
- return
- to_chat(D, "YE--")
- sleep(1)
- if(!D)
- return
- to_chat(world, "\"SLOTH, WRATH, GLUTTONY, ACEDIA, ENVY, GREED, PRIDE! FIRES OF HELL AWAKEN!!\"")
- SEND_SOUND(world, sound('sound/hallucinations/veryfar_noise.ogg'))
- give_appropriate_spells()
- D.convert_to_archdevil()
- if(istype(D.loc, /obj/effect/dummy/slaughter/))
- D.forceMove(get_turf(D))//Fixes dying while jaunted leaving you permajaunted.
- var/area/A = get_area(owner.current)
- if(A)
- notify_ghosts("An arch devil has ascended in \the [A.name]. Reach out to the devil to be given a new shell for your soul.", source = owner.current, action=NOTIFY_ATTACK)
- sleep(50)
- if(!SSticker.mode.devil_ascended)
- SSshuttle.emergency.request(null, set_coefficient = 0.3)
- SSticker.mode.devil_ascended++
- form = ARCH_DEVIL
-
-/datum/antagonist/devil/proc/remove_spells()
- for(var/X in owner.spell_list)
- var/obj/effect/proc_holder/spell/S = X
- if(is_type_in_typecache(S, devil_spells))
- owner.RemoveSpell(S)
-
-/datum/antagonist/devil/proc/give_summon_contract()
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_contract(null))
- if(obligation == OBLIGATION_FIDDLE)
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/violin(null))
- else if(obligation == OBLIGATION_DANCEOFF)
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_dancefloor(null))
-
-/datum/antagonist/devil/proc/give_appropriate_spells()
- remove_spells()
- give_summon_contract()
- if(SOULVALUE >= ARCH_THRESHOLD && ascendable)
- give_arch_spells()
- else if(SOULVALUE >= TRUE_THRESHOLD)
- give_true_spells()
- else if(SOULVALUE >= BLOOD_THRESHOLD)
- give_blood_spells()
- else if(SOULVALUE >= 0)
- give_base_spells()
-
-/datum/antagonist/devil/proc/give_base_spells()
- owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null))
-
-/datum/antagonist/devil/proc/give_blood_spells()
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null))
-
-/datum/antagonist/devil/proc/give_true_spells()
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/greater(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball/hellish(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null))
-
-/datum/antagonist/devil/proc/give_arch_spells()
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/summon_pitchfork/ascended(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch/ascended(null))
-
-/datum/antagonist/devil/proc/beginResurrectionCheck(mob/living/body)
- if(SOULVALUE>0)
- to_chat(owner.current, "Your body has been damaged to the point that you may no longer use it. At the cost of some of your power, you will return to life soon. Remain in your body.")
- sleep(DEVILRESURRECTTIME)
- if (!body || body.stat == DEAD)
- if(SOULVALUE>0)
- if(check_banishment(body))
- to_chat(owner.current, "Unfortunately, the mortals have finished a ritual that prevents your resurrection.")
- return -1
- else
- to_chat(owner.current, "WE LIVE AGAIN!")
- return hellish_resurrection(body)
- else
- to_chat(owner.current, "Unfortunately, the power that stemmed from your contracts has been extinguished. You no longer have enough power to resurrect.")
- return -1
- else
- to_chat(owner.current, " You seem to have resurrected without your hellish powers.")
- else
- to_chat(owner.current, "Your hellish powers are too weak to resurrect yourself.")
-
-/datum/antagonist/devil/proc/check_banishment(mob/living/body)
- switch(banish)
- if(BANISH_WATER)
- if(iscarbon(body))
- var/mob/living/carbon/H = body
- return H.reagents.has_reagent("holy water")
- return 0
- if(BANISH_COFFIN)
- return (body && istype(body.loc, /obj/structure/closet/coffin))
- if(BANISH_FORMALDYHIDE)
- if(iscarbon(body))
- var/mob/living/carbon/H = body
- return H.reagents.has_reagent("formaldehyde")
- return 0
- if(BANISH_RUNES)
- if(body)
- for(var/obj/effect/decal/cleanable/crayon/R in range(0,body))
- if (R.name == "rune")
- return 1
- return 0
- if(BANISH_CANDLES)
- if(body)
- var/count = 0
- for(var/obj/item/candle/C in range(1,body))
- count += C.lit
- if(count>=4)
- return 1
- return 0
- if(BANISH_DESTRUCTION)
- if(body)
- return 0
- return 1
- if(BANISH_FUNERAL_GARB)
- if(ishuman(body))
- var/mob/living/carbon/human/H = body
- if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under/burial))
- return 1
- return 0
- else
- for(var/obj/item/clothing/under/burial/B in range(0,body))
- if(B.loc == get_turf(B)) //Make sure it's not in someone's inventory or something.
- return 1
- return 0
-
-/datum/antagonist/devil/proc/hellish_resurrection(mob/living/body)
- message_admins("[owner.name] (true name is: [truename]) is resurrecting using hellish energy.")
- if(SOULVALUE < ARCH_THRESHOLD || !ascendable) // once ascended, arch devils do not go down in power by any means.
- reviveNumber += LOSS_PER_DEATH
- update_hud()
- if(body)
- body.revive(TRUE, TRUE) //Adminrevive also recovers organs, preventing someone from resurrecting without a heart.
- if(istype(body.loc, /obj/effect/dummy/slaughter/))
- body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted.
- if(istype(body, /mob/living/carbon/true_devil))
- var/mob/living/carbon/true_devil/D = body
- if(D.oldform)
- D.oldform.revive(1,0) // Heal the old body too, so the devil doesn't resurrect, then immediately regress into a dead body.
- if(body.stat == DEAD)
- create_new_body()
- else
- create_new_body()
- check_regression()
-
-/datum/antagonist/devil/proc/create_new_body()
- if(GLOB.blobstart.len > 0)
- var/turf/targetturf = get_turf(pick(GLOB.blobstart))
- var/mob/currentMob = owner.current
- if(!currentMob)
- currentMob = owner.get_ghost()
- if(!currentMob)
- message_admins("[owner.name]'s devil resurrection failed due to client logoff. Aborting.")
- return -1
- if(currentMob.mind != owner)
- message_admins("[owner.name]'s devil resurrection failed due to becoming a new mob. Aborting.")
- return -1
- currentMob.change_mob_type( /mob/living/carbon/human, targetturf, null, 1)
- var/mob/living/carbon/human/H = owner.current
- H.equip_to_slot_or_del(new /obj/item/clothing/under/lawyer/black(H), slot_w_uniform)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
- H.equip_to_slot_or_del(new /obj/item/storage/briefcase(H), slot_hands)
- H.equip_to_slot_or_del(new /obj/item/pen(H), slot_l_store)
- if(SOULVALUE >= BLOOD_THRESHOLD)
- H.set_species(/datum/species/lizard, 1)
- H.underwear = "Nude"
- H.undershirt = "Nude"
- H.socks = "Nude"
- H.dna.features["mcolor"] = "511"
- H.regenerate_icons()
- if(SOULVALUE >= TRUE_THRESHOLD) //Yes, BOTH this and the above if statement are to run if soulpower is high enough.
- var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(targetturf)
- A.faction |= "hell"
- H.forceMove(A)
- A.oldform = H
- owner.transfer_to(A, TRUE)
- A.set_name()
- if(SOULVALUE >= ARCH_THRESHOLD && ascendable)
- A.convert_to_archdevil()
- else
- throw EXCEPTION("Unable to find a blobstart landmark for hellish resurrection")
-
-
-/datum/antagonist/devil/proc/update_hud()
- if(iscarbon(owner.current))
- var/mob/living/C = owner.current
- if(C.hud_used && C.hud_used.devilsouldisplay)
- C.hud_used.devilsouldisplay.update_counter(SOULVALUE)
-
-/datum/antagonist/devil/greet()
- to_chat(owner.current, "You remember your link to the infernal. You are [truename], an agent of hell, a devil. And you were sent to the plane of creation for a reason. A greater purpose. Convince the crew to sin, and embroiden Hell's grasp.")
- to_chat(owner.current, "However, your infernal form is not without weaknesses.")
- to_chat(owner.current, "You may not use violence to coerce someone into selling their soul.")
- to_chat(owner.current, "You may not directly and knowingly physically harm a devil, other than yourself.")
- to_chat(owner.current, GLOB.lawlorify[LAW][bane])
- to_chat(owner.current, GLOB.lawlorify[LAW][ban])
- to_chat(owner.current, GLOB.lawlorify[LAW][obligation])
- to_chat(owner.current, GLOB.lawlorify[LAW][banish])
- to_chat(owner.current, "Remember, the crew can research your weaknesses if they find out your devil name.
")
- .=..()
-
-/datum/antagonist/devil/on_gain()
- truename = randomDevilName()
- ban = randomdevilban()
- bane = randomdevilbane()
- obligation = randomdevilobligation()
- banish = randomdevilbanish()
- GLOB.allDevils[lowertext(truename)] = src
-
- antag_memory += "Your devilic true name is [truename]
[GLOB.lawlorify[LAW][ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][bane]]
[GLOB.lawlorify[LAW][obligation]]
[GLOB.lawlorify[LAW][banish]]
"
- if(issilicon(owner.current))
- var/mob/living/silicon/robot_devil = owner.current
- var/laws = list("You may not use violence to coerce someone into selling their soul.", "You may not directly and knowingly physically harm a devil, other than yourself.", GLOB.lawlorify[LAW][ban], GLOB.lawlorify[LAW][obligation], "Accomplish your objectives at all costs.")
- robot_devil.set_law_sixsixsix(laws)
- sleep(10)
- if(owner.assigned_role == "Clown" && ishuman(owner.current))
- var/mob/living/carbon/human/S = owner.current
- to_chat(S, "Your infernal nature has allowed you to overcome your clownishness.")
- S.dna.remove_mutation(CLOWNMUT)
- .=..()
-
-/datum/antagonist/devil/on_removal()
- to_chat(owner.current, "Your infernal link has been severed! You are no longer a devil!")
- .=..()
-
-/datum/antagonist/devil/apply_innate_effects(mob/living/mob_override)
- give_appropriate_spells()
- owner.current.grant_all_languages(TRUE)
- update_hud()
- .=..()
-
-/datum/antagonist/devil/remove_innate_effects(mob/living/mob_override)
- for(var/X in owner.spell_list)
- var/obj/effect/proc_holder/spell/S = X
- if(is_type_in_typecache(S, devil_spells))
- owner.RemoveSpell(S)
- .=..()
-
-/datum/antagonist/devil/proc/printdevilinfo()
- var/list/parts = list()
- parts += "The devil's true name is: [truename]"
- parts += "The devil's bans were:"
- parts += "[GLOB.TAB][GLOB.lawlorify[LORE][ban]]"
- parts += "[GLOB.TAB][GLOB.lawlorify[LORE][bane]]"
- parts += "[GLOB.TAB][GLOB.lawlorify[LORE][obligation]]"
- parts += "[GLOB.TAB][GLOB.lawlorify[LORE][banish]]"
- return parts.Join("
")
-
-/datum/antagonist/devil/roundend_report()
- var/list/parts = list()
- parts += printplayer(owner)
- parts += printdevilinfo()
- parts += printobjectives(owner)
- return parts.Join("
")
-
-/datum/antagonist/devil/roundend_report_footer()
- //sintouched go here for now as a hack , TODO proper antag datum for these
- var/list/parts = list()
- if(SSticker.mode.sintouched.len)
- parts += ""
- var/list/sintouchedUnique = uniqueList(SSticker.mode.sintouched)
- for(var/S in sintouchedUnique)
- var/datum/mind/sintouched_mind = S
- parts += printplayer(sintouched_mind)
- parts += printobjectives(sintouched_mind)
- return parts.Join("
")
-
-//A simple super light weight datum for the codex gigas.
-/datum/fakeDevil
- var/truename
- var/bane
- var/obligation
- var/ban
- var/banish
- var/ascendable
-
-/datum/fakeDevil/New(name = randomDevilName())
- truename = name
- bane = randomdevilbane()
- obligation = randomdevilobligation()
- ban = randomdevilban()
- banish = randomdevilbanish()
- ascendable = prob(25)
diff --git a/code/datums/antagonists/internal_affairs.dm b/code/datums/antagonists/internal_affairs.dm
deleted file mode 100644
index 9077b84dcd..0000000000
--- a/code/datums/antagonists/internal_affairs.dm
+++ /dev/null
@@ -1,302 +0,0 @@
-#define PINPOINTER_MINIMUM_RANGE 15
-#define PINPOINTER_EXTRA_RANDOM_RANGE 10
-#define PINPOINTER_PING_TIME 40
-#define PROB_ACTUAL_TRAITOR 20
-#define TRAITOR_AGENT_ROLE "Syndicate External Affairs Agent"
-
-/datum/antagonist/traitor/internal_affairs
- name = "Internal Affairs Agent"
- human_datum = /datum/antagonist/traitor/human/internal_affairs
- ai_datum = /datum/antagonist/traitor/AI/internal_affairs
- antagpanel_category = "IAA"
-
-/datum/antagonist/traitor/AI/internal_affairs
- name = "Internal Affairs Agent"
- employer = "Nanotrasen"
- special_role = "internal affairs agent"
- antagpanel_category = "IAA"
- var/syndicate = FALSE
- var/last_man_standing = FALSE
- var/list/datum/mind/targets_stolen
-
-
-/datum/antagonist/traitor/human/internal_affairs
- name = "Internal Affairs Agent"
- employer = "Nanotrasen"
- special_role = "internal affairs agent"
- antagpanel_category = "IAA"
- var/syndicate = FALSE
- var/last_man_standing = FALSE
- var/list/datum/mind/targets_stolen
-
-
-/datum/antagonist/traitor/human/internal_affairs/proc/give_pinpointer()
- if(owner && owner.current)
- owner.current.apply_status_effect(/datum/status_effect/agent_pinpointer)
-
-/datum/antagonist/traitor/human/internal_affairs/apply_innate_effects()
- .=..() //in case the base is used in future
- if(owner && owner.current)
- give_pinpointer(owner.current)
-
-/datum/antagonist/traitor/human/internal_affairs/remove_innate_effects()
- .=..()
- if(owner && owner.current)
- owner.current.remove_status_effect(/datum/status_effect/agent_pinpointer)
-
-/datum/antagonist/traitor/human/internal_affairs/on_gain()
- START_PROCESSING(SSprocessing, src)
- .=..()
-/datum/antagonist/traitor/human/internal_affairs/on_removal()
- STOP_PROCESSING(SSprocessing,src)
- .=..()
-/datum/antagonist/traitor/human/internal_affairs/process()
- iaa_process()
-
-/datum/antagonist/traitor/AI/internal_affairs/on_gain()
- START_PROCESSING(SSprocessing, src)
- .=..()
-/datum/antagonist/traitor/AI/internal_affairs/on_removal()
- STOP_PROCESSING(SSprocessing,src)
- .=..()
-/datum/antagonist/traitor/AI/internal_affairs/process()
- iaa_process()
-
-/datum/status_effect/agent_pinpointer
- id = "agent_pinpointer"
- duration = -1
- tick_interval = PINPOINTER_PING_TIME
- alert_type = /obj/screen/alert/status_effect/agent_pinpointer
- var/minimum_range = PINPOINTER_MINIMUM_RANGE
- var/mob/scan_target = null
-
-/obj/screen/alert/status_effect/agent_pinpointer
- name = "Internal Affairs Integrated Pinpointer"
- desc = "Even stealthier than a normal implant."
- icon = 'icons/obj/device.dmi'
- icon_state = "pinon"
-
-/datum/status_effect/agent_pinpointer/proc/point_to_target() //If we found what we're looking for, show the distance and direction
- if(!scan_target)
- linked_alert.icon_state = "pinonnull"
- return
- var/turf/here = get_turf(owner)
- var/turf/there = get_turf(scan_target)
- if(here.z != there.z)
- linked_alert.icon_state = "pinonnull"
- return
- if(get_dist_euclidian(here,there)<=minimum_range + rand(0, PINPOINTER_EXTRA_RANDOM_RANGE))
- linked_alert.icon_state = "pinondirect"
- else
- linked_alert.setDir(get_dir(here, there))
- switch(get_dist(here, there))
- if(1 to 8)
- linked_alert.icon_state = "pinonclose"
- if(9 to 16)
- linked_alert.icon_state = "pinonmedium"
- if(16 to INFINITY)
- linked_alert.icon_state = "pinonfar"
-
-/datum/status_effect/agent_pinpointer/proc/scan_for_target()
- scan_target = null
- if(owner)
- if(owner.mind)
- if(owner.mind.objectives)
- for(var/datum/objective/objective_ in owner.mind.objectives)
- if(!is_internal_objective(objective_))
- continue
- var/datum/objective/assassinate/internal/objective = objective_
- var/mob/current = objective.target.current
- if(current&¤t.stat!=DEAD)
- scan_target = current
- break
-
-/datum/status_effect/agent_pinpointer/tick()
- if(!owner)
- qdel(src)
- return
- scan_for_target()
- point_to_target()
-
-
-/proc/is_internal_objective(datum/objective/O)
- return (istype(O, /datum/objective/assassinate/internal)||istype(O, /datum/objective/destroy/internal))
-
-/datum/antagonist/traitor/proc/replace_escape_objective()
- if(!owner||!owner.objectives)
- return
- for (var/objective_ in owner.objectives)
- if(!(istype(objective_, /datum/objective/escape)||istype(objective_, /datum/objective/survive)))
- continue
- remove_objective(objective_)
-
- var/datum/objective/martyr/martyr_objective = new
- martyr_objective.owner = owner
- add_objective(martyr_objective)
-
-/datum/antagonist/traitor/proc/reinstate_escape_objective()
- if(!owner||!owner.objectives)
- return
- for (var/objective_ in owner.objectives)
- if(!istype(objective_, /datum/objective/martyr))
- continue
- remove_objective(objective_)
-
-/datum/antagonist/traitor/human/internal_affairs/reinstate_escape_objective()
- ..()
- var/datum/objective/escape/escape_objective = new
- escape_objective.owner = owner
- add_objective(escape_objective)
-
-/datum/antagonist/traitor/AI/internal_affairs/reinstate_escape_objective()
- ..()
- var/datum/objective/survive/survive_objective = new
- survive_objective.owner = owner
- add_objective(survive_objective)
-
-/datum/antagonist/traitor/proc/steal_targets(datum/mind/victim)
- var/datum/antagonist/traitor/human/internal_affairs/this = src //Should only use this if IAA
-
- if(!owner.current||owner.current.stat==DEAD)
- return
- to_chat(owner.current, " Target eliminated: [victim.name]")
- for(var/objective_ in victim.objectives)
- if(istype(objective_, /datum/objective/assassinate/internal))
- var/datum/objective/assassinate/internal/objective = objective_
- if(objective.target==owner)
- continue
- else if(this.targets_stolen.Find(objective.target) == 0)
- var/datum/objective/assassinate/internal/new_objective = new
- new_objective.owner = owner
- new_objective.target = objective.target
- new_objective.update_explanation_text()
- add_objective(new_objective)
- this.targets_stolen += objective.target
- var/status_text = objective.check_completion() ? "neutralised" : "active"
- to_chat(owner.current, " New target added to database: [objective.target.name] ([status_text]) ")
- else if(istype(objective_, /datum/objective/destroy/internal))
- var/datum/objective/destroy/internal/objective = objective_
- var/datum/objective/destroy/internal/new_objective = new
- if(objective.target==owner)
- continue
- else if(this.targets_stolen.Find(objective.target) == 0)
- new_objective.owner = owner
- new_objective.target = objective.target
- new_objective.update_explanation_text()
- add_objective(new_objective)
- this.targets_stolen += objective.target
- var/status_text = objective.check_completion() ? "neutralised" : "active"
- to_chat(owner.current, " New target added to database: [objective.target.name] ([status_text]) ")
- this.last_man_standing = TRUE
- for(var/objective_ in owner.objectives)
- if(!is_internal_objective(objective_))
- continue
- var/datum/objective/assassinate/internal/objective = objective_
- if(!objective.check_completion())
- this.last_man_standing = FALSE
- return
- if(this.last_man_standing)
- if(this.syndicate)
- to_chat(owner.current," All the loyalist agents are dead, and no more is required of you. Die a glorious death, agent. ")
- else
- to_chat(owner.current," All the other agents are dead, and you're the last loose end. Stage a Syndicate terrorist attack to cover up for today's events. You no longer have any limits on collateral damage.")
- replace_escape_objective(owner)
-
-/datum/antagonist/traitor/proc/iaa_process()
- var/datum/antagonist/traitor/human/internal_affairs/this = src //Should only use this if IAA
- if(owner&&owner.current&&owner.current.stat!=DEAD)
- for(var/objective_ in owner.objectives)
- if(!is_internal_objective(objective_))
- continue
- var/datum/objective/assassinate/internal/objective = objective_
- if(!objective.target)
- continue
- if(objective.check_completion())
- if(objective.stolen)
- continue
- else
- steal_targets(objective.target)
- objective.stolen = TRUE
- else
- if(objective.stolen)
- var/fail_msg = "Your sensors tell you that [objective.target.current.real_name], one of the targets you were meant to have killed, pulled one over on you, and is still alive - do the job properly this time! "
- if(this.last_man_standing)
- if(this.syndicate)
- fail_msg += " You no longer have permission to die. "
- else
- fail_msg += " The truth could still slip out! Cease any terrorist actions as soon as possible, unneeded property damage or loss of employee life will lead to your contract being terminated."
- reinstate_escape_objective(owner)
- this.last_man_standing = FALSE
- to_chat(owner.current, fail_msg)
- objective.stolen = FALSE
-
-/datum/antagonist/traitor/proc/forge_iaa_objectives()
- var/datum/antagonist/traitor/human/internal_affairs/this = src //Should only use this if IAA
- if(SSticker.mode.target_list.len && SSticker.mode.target_list[owner]) // Is a double agent
-
- // Assassinate
- var/datum/mind/target_mind = SSticker.mode.target_list[owner]
- if(issilicon(target_mind.current))
- var/datum/objective/destroy/internal/destroy_objective = new
- destroy_objective.owner = owner
- destroy_objective.target = target_mind
- destroy_objective.update_explanation_text()
- else
- var/datum/objective/assassinate/internal/kill_objective = new
- kill_objective.owner = owner
- kill_objective.target = target_mind
- kill_objective.update_explanation_text()
- add_objective(kill_objective)
-
- //Optional traitor objective
- if(prob(PROB_ACTUAL_TRAITOR))
- employer = "The Syndicate"
- owner.special_role = TRAITOR_AGENT_ROLE
- special_role = TRAITOR_AGENT_ROLE
- this.syndicate = TRUE
- forge_single_objective()
-
- else
- ..() // Give them standard objectives.
- return
-
-/datum/antagonist/traitor/human/internal_affairs/forge_traitor_objectives()
- forge_iaa_objectives()
- var/datum/objective/escape/escape_objective = new
- escape_objective.owner = owner
- add_objective(escape_objective)
-
-/datum/antagonist/traitor/AI/internal_affairs/forge_traitor_objectives()
- forge_iaa_objectives()
- var/datum/objective/survive/survive_objective = new
- survive_objective.owner = owner
- add_objective(survive_objective)
-
-/datum/antagonist/traitor/proc/greet_iaa()
- var/datum/antagonist/traitor/human/internal_affairs/this = src //Should only use this if IAA
- var/crime = pick("distribution of contraband" , "unauthorized erotic action on duty", "embezzlement", "piloting under the influence", "dereliction of duty", "syndicate collaboration", "mutiny", "multiple homicides", "corporate espionage", "recieving bribes", "malpractice", "worship of prohbited life forms", "possession of profane texts", "murder", "arson", "insulting their manager", "grand theft", "conspiracy", "attempting to unionize", "vandalism", "gross incompetence")
-
- to_chat(owner.current, "You are the [special_role].")
- if(this.syndicate)
- to_chat(owner.current, "Your target has been framed for [crime], and you have been tasked with eliminating them to prevent them defending themselves in court.")
- to_chat(owner.current, "Any damage you cause will be a further embarrassment to Nanotrasen, so you have no limits on collateral damage.")
- to_chat(owner.current, " You have been provided with a standard uplink to accomplish your task. ")
- else
- to_chat(owner.current, "Your target is suspected of [crime], and you have been tasked with eliminating them by any means necessary to avoid a costly and embarrassing public trial.")
- to_chat(owner.current, "While you have a license to kill, unneeded property damage or loss of employee life will lead to your contract being terminated.")
- to_chat(owner.current, "For the sake of plausible deniability, you have been equipped with an array of captured Syndicate weaponry available via uplink.")
-
- to_chat(owner.current, "Finally, watch your back. Your target has friends in high places, and intel suggests someone may have taken out a contract of their own to protect them.")
- owner.announce_objectives()
-
-/datum/antagonist/traitor/AI/internal_affairs/greet()
- greet_iaa()
-
-/datum/antagonist/traitor/human/internal_affairs/greet()
- greet_iaa()
-
-
-#undef PROB_ACTUAL_TRAITOR
-#undef PINPOINTER_EXTRA_RANDOM_RANGE
-#undef PINPOINTER_MINIMUM_RANGE
-#undef PINPOINTER_PING_TIME
diff --git a/code/datums/antagonists/monkey.dm b/code/datums/antagonists/monkey.dm
deleted file mode 100644
index 25e80f6afb..0000000000
--- a/code/datums/antagonists/monkey.dm
+++ /dev/null
@@ -1,214 +0,0 @@
-#define MONKEYS_ESCAPED 1
-#define MONKEYS_LIVED 2
-#define MONKEYS_DIED 3
-#define DISEASE_LIVED 4
-
-/datum/antagonist/monkey
- name = "Monkey"
- job_rank = ROLE_MONKEY
- roundend_category = "monkeys"
- antagpanel_category = "Monkey"
- var/datum/team/monkey/monkey_team
- var/monkey_only = TRUE
-
-/datum/antagonist/monkey/can_be_owned(datum/mind/new_owner)
- return ..() && (!monkey_only || ismonkey(new_owner.current))
-
-/datum/antagonist/monkey/get_team()
- return monkey_team
-
-/datum/antagonist/monkey/on_gain()
- . = ..()
- SSticker.mode.ape_infectees += owner
- owner.special_role = "Infected Monkey"
-
- var/datum/disease/D = new /datum/disease/transformation/jungle_fever/monkeymode
- if(!owner.current.HasDisease(D))
- owner.current.ForceContractDisease(D)
- else
- QDEL_NULL(D)
-
-/datum/antagonist/monkey/greet()
- to_chat(owner, "You are a monkey now!")
- to_chat(owner, "Bite humans to infect them, follow the orders of the monkey leaders, and help fellow monkeys!")
- to_chat(owner, "Ensure at least one infected monkey escapes on the Emergency Shuttle!")
- to_chat(owner, "As an intelligent monkey, you know how to use technology and how to ventcrawl while wearing things.")
- to_chat(owner, "You can use :k to talk to fellow monkeys!")
- SEND_SOUND(owner.current, sound('sound/ambience/antag/monkey.ogg'))
-
-/datum/antagonist/monkey/on_removal()
- owner.special_role = null
- SSticker.mode.ape_infectees -= owner
-
- var/datum/disease/transformation/jungle_fever/D = locate() in owner.current.viruses
- if(D)
- D.remove_virus()
- qdel(D)
-
- . = ..()
-
-/datum/antagonist/monkey/create_team(datum/team/monkey/new_team)
- if(!new_team)
- for(var/datum/antagonist/monkey/H in GLOB.antagonists)
- if(!H.owner)
- continue
- if(H.monkey_team)
- monkey_team = H.monkey_team
- return
- monkey_team = new /datum/team/monkey
- monkey_team.update_objectives()
- return
- if(!istype(new_team))
- stack_trace("Wrong team type passed to [type] initialization.")
- monkey_team = new_team
-
-/datum/antagonist/monkey/proc/forge_objectives()
- objectives |= monkey_team.objectives
- owner.objectives |= objectives
-
-/datum/antagonist/monkey/admin_remove(mob/admin)
- var/mob/living/carbon/monkey/M = owner.current
- if(istype(M))
- switch(alert(admin, "Humanize?", "Humanize", "Yes", "No"))
- if("Yes")
- if(admin == M)
- admin = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG)
- else
- M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG)
- if("No")
- //nothing
- else
- return
- . = ..()
-
-/datum/antagonist/monkey/leader
- name = "Monkey Leader"
- monkey_only = FALSE
-
-/datum/antagonist/monkey/leader/admin_add(datum/mind/new_owner,mob/admin)
- var/mob/living/carbon/human/H = new_owner.current
- if(istype(H))
- switch(alert(admin, "Monkeyize?", "Monkeyize", "Yes", "No"))
- if("Yes")
- if(admin == H)
- admin = H.monkeyize()
- else
- H.monkeyize()
- if("No")
- //nothing
- else
- return
- new_owner.add_antag_datum(src)
- log_admin("[key_name(admin)] made [key_name(new_owner.current)] a monkey leader!")
- message_admins("[key_name_admin(admin)] made [key_name_admin(new_owner.current)] a monkey leader!")
-
-/datum/antagonist/monkey/leader/on_gain()
- . = ..()
- var/obj/item/organ/heart/freedom/F = new
- F.Insert(owner.current, drop_if_replaced = FALSE)
- SSticker.mode.ape_leaders += owner
- owner.special_role = "Monkey Leader"
-
-/datum/antagonist/monkey/leader/on_removal()
- SSticker.mode.ape_leaders -= owner
- var/obj/item/organ/heart/H = new
- H.Insert(owner.current, drop_if_replaced = FALSE) //replace freedom heart with normal heart
-
- . = ..()
-
-/datum/antagonist/monkey/leader/greet()
- to_chat(owner, "You are the Jungle Fever patient zero!!")
- to_chat(owner, "You have been planted onto this station by the Animal Rights Consortium.")
- to_chat(owner, "Soon the disease will transform you into an ape. Afterwards, you will be able spread the infection to others with a bite.")
- to_chat(owner, "While your infection strain is undetectable by scanners, any other infectees will show up on medical equipment.")
- to_chat(owner, "Your mission will be deemed a success if any of the live infected monkeys reach CentCom.")
- to_chat(owner, "As an initial infectee, you will be considered a 'leader' by your fellow monkeys.")
- to_chat(owner, "You can use :k to talk to fellow monkeys!")
- SEND_SOUND(owner.current, sound('sound/ambience/antag/monkey.ogg'))
-
-/datum/objective/monkey
- explanation_text = "Ensure that infected monkeys escape on the emergency shuttle!"
- martyr_compatible = TRUE
- var/monkeys_to_win = 1
- var/escaped_monkeys = 0
-
-/datum/objective/monkey/check_completion()
- var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
- for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list)
- if (M.HasDisease(D) && (M.onCentCom() || M.onSyndieBase()))
- escaped_monkeys++
- if(escaped_monkeys >= monkeys_to_win)
- return TRUE
- return FALSE
-
-/datum/team/monkey
- name = "Monkeys"
-
-/datum/team/monkey/proc/update_objectives()
- objectives = list()
- var/datum/objective/monkey/O = new()
- O.team = src
- objectives += O
-
-/datum/team/monkey/proc/infected_monkeys_alive()
- var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
- for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list)
- if(M.HasDisease(D))
- return TRUE
- return FALSE
-
-/datum/team/monkey/proc/infected_monkeys_escaped()
- var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
- for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list)
- if(M.HasDisease(D) && (M.onCentCom() || M.onSyndieBase()))
- return TRUE
- return FALSE
-
-/datum/team/monkey/proc/infected_humans_escaped()
- var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
- for(var/mob/living/carbon/human/M in GLOB.alive_mob_list)
- if(M.HasDisease(D) && (M.onCentCom() || M.onSyndieBase()))
- return TRUE
- return FALSE
-
-/datum/team/monkey/proc/infected_humans_alive()
- var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
- for(var/mob/living/carbon/human/M in GLOB.alive_mob_list)
- if(M.HasDisease(D))
- return TRUE
- return FALSE
-
-/datum/team/monkey/proc/get_result()
- if(infected_monkeys_escaped())
- return MONKEYS_ESCAPED
- if(infected_monkeys_alive())
- return MONKEYS_LIVED
- if(infected_humans_alive() || infected_humans_escaped())
- return DISEASE_LIVED
- return MONKEYS_DIED
-
-/datum/team/monkey/roundend_report()
- var/list/parts = list()
- switch(get_result())
- if(MONKEYS_ESCAPED)
- parts += "Monkey Major Victory!"
- parts += "Central Command and [station_name()] were taken over by the monkeys! Ook ook!"
- if(MONKEYS_LIVED)
- parts += "Monkey Minor Victory!"
- parts += "[station_name()] was taken over by the monkeys! Ook ook!"
- if(DISEASE_LIVED)
- parts += "Monkey Minor Defeat!"
- parts += "All the monkeys died, but the disease lives on! The future is uncertain."
- if(MONKEYS_DIED)
- parts += "Monkey Major Defeat!"
- parts += "All the monkeys died, and Jungle Fever was wiped out!"
- var/list/leaders = get_antagonists(/datum/antagonist/monkey/leader, TRUE)
- var/list/monkeys = get_antagonists(/datum/antagonist/monkey, TRUE)
-
- if(LAZYLEN(leaders))
- parts += ""
- parts += printplayerlist(SSticker.mode.ape_leaders)
- if(LAZYLEN(monkeys))
- parts += ""
- parts += printplayerlist(SSticker.mode.ape_infectees)
- return "[parts.Join("
")]
"
diff --git a/code/datums/antagonists/ninja.dm b/code/datums/antagonists/ninja.dm
deleted file mode 100644
index e8a1c140ea..0000000000
--- a/code/datums/antagonists/ninja.dm
+++ /dev/null
@@ -1,155 +0,0 @@
-/datum/antagonist/ninja
- name = "Ninja"
- antagpanel_category = "Ninja"
- job_rank = ROLE_NINJA
- var/helping_station = FALSE
- var/give_objectives = TRUE
- var/give_equipment = TRUE
-
-
-/datum/antagonist/ninja/apply_innate_effects(mob/living/mob_override)
- var/mob/living/M = mob_override || owner.current
- update_ninja_icons_added(M)
-
-/datum/antagonist/ninja/remove_innate_effects(mob/living/mob_override)
- var/mob/living/M = mob_override || owner.current
- update_ninja_icons_removed(M)
-
-/datum/antagonist/ninja/proc/equip_space_ninja(mob/living/carbon/human/H = owner.current)
- return H.equipOutfit(/datum/outfit/ninja)
-
-/datum/antagonist/ninja/proc/addMemories()
- antag_memory += "I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!
"
- antag_memory += "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!
"
- antag_memory += "Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.
"
-
-/datum/antagonist/ninja/proc/addObjectives(quantity = 6)
- var/list/possible_targets = list()
- for(var/datum/mind/M in SSticker.minds)
- if(M.current && M.current.stat != DEAD)
- if(ishuman(M.current))
- if(M.special_role)
- possible_targets[M] = 0 //bad-guy
- else if(M.assigned_role in GLOB.command_positions)
- possible_targets[M] = 1 //good-guy
-
- var/list/possible_objectives = list(1,2,3,4)
-
- while(objectives.len < quantity)
- switch(pick_n_take(possible_objectives))
- if(1) //research
- var/datum/objective/download/O = new /datum/objective/download()
- O.owner = owner
- O.gen_amount_goal()
- objectives += O
-
- if(2) //steal
- var/datum/objective/steal/special/O = new /datum/objective/steal/special()
- O.owner = owner
- objectives += O
-
- if(3) //protect/kill
- if(!possible_targets.len) continue
- var/index = rand(1,possible_targets.len)
- var/datum/mind/M = possible_targets[index]
- var/is_bad_guy = possible_targets[M]
- possible_targets.Cut(index,index+1)
-
- if(is_bad_guy ^ helping_station) //kill (good-ninja + bad-guy or bad-ninja + good-guy)
- var/datum/objective/assassinate/O = new /datum/objective/assassinate()
- O.owner = owner
- O.target = M
- O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]."
- objectives += O
- else //protect
- var/datum/objective/protect/O = new /datum/objective/protect()
- O.owner = owner
- O.target = M
- O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm."
- objectives += O
- if(4) //debrain/capture
- if(!possible_targets.len) continue
- var/selected = rand(1,possible_targets.len)
- var/datum/mind/M = possible_targets[selected]
- var/is_bad_guy = possible_targets[M]
- possible_targets.Cut(selected,selected+1)
-
- if(is_bad_guy ^ helping_station) //debrain (good-ninja + bad-guy or bad-ninja + good-guy)
- var/datum/objective/debrain/O = new /datum/objective/debrain()
- O.owner = owner
- O.target = M
- O.explanation_text = "Steal the brain of [M.current.real_name]."
- objectives += O
- else //capture
- var/datum/objective/capture/O = new /datum/objective/capture()
- O.owner = owner
- O.gen_amount_goal()
- objectives += O
- else
- break
- var/datum/objective/O = new /datum/objective/survive()
- O.owner = owner
- owner.objectives |= objectives
-
-
-/proc/remove_ninja(mob/living/L)
- if(!L || !L.mind)
- return FALSE
- var/datum/antagonist/datum = L.mind.has_antag_datum(/datum/antagonist/ninja)
- datum.on_removal()
- return TRUE
-
-/proc/is_ninja(mob/living/M)
- return M && M.mind && M.mind.has_antag_datum(/datum/antagonist/ninja)
-
-
-/datum/antagonist/ninja/greet()
- SEND_SOUND(owner.current, sound('sound/effects/ninja_greeting.ogg'))
- to_chat(owner.current, "I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!")
- to_chat(owner.current, "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!")
- to_chat(owner.current, "Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.")
- return
-
-/datum/antagonist/ninja/on_gain()
- if(give_objectives)
- addObjectives()
- addMemories()
- if(give_equipment)
- equip_space_ninja(owner.current)
- . = ..()
-
-/datum/antagonist/ninja/admin_add(datum/mind/new_owner,mob/admin)
- var/adj
- switch(input("What kind of ninja?", "Ninja") as null|anything in list("Random","Syndicate","Nanotrasen","No objectives"))
- if("Random")
- helping_station = pick(TRUE,FALSE)
- adj = ""
- if("Syndicate")
- helping_station = FALSE
- adj = "syndie"
- if("Nanotrasen")
- helping_station = TRUE
- adj = "friendly"
- if("No objectives")
- give_objectives = FALSE
- adj = "objectiveless"
- else
- return
- new_owner.assigned_role = ROLE_NINJA
- new_owner.special_role = ROLE_NINJA
- new_owner.add_antag_datum(src)
- message_admins("[key_name_admin(admin)] has [adj] ninja'ed [new_owner.current].")
- log_admin("[key_name(admin)] has [adj] ninja'ed [new_owner.current].")
-
-/datum/antagonist/ninja/antag_listing_name()
- return ..() + "(Ninja)"
-
-/datum/antagonist/ninja/proc/update_ninja_icons_added(var/mob/living/carbon/human/ninja)
- var/datum/atom_hud/antag/ninjahud = GLOB.huds[ANTAG_HUD_NINJA]
- ninjahud.join_hud(ninja)
- set_antag_hud(ninja, "ninja")
-
-/datum/antagonist/ninja/proc/update_ninja_icons_removed(var/mob/living/carbon/human/ninja)
- var/datum/atom_hud/antag/ninjahud = GLOB.huds[ANTAG_HUD_NINJA]
- ninjahud.leave_hud(ninja)
- set_antag_hud(ninja, null)
\ No newline at end of file
diff --git a/code/datums/antagonists/nukeop.dm b/code/datums/antagonists/nukeop.dm
deleted file mode 100644
index 1ec2e77f64..0000000000
--- a/code/datums/antagonists/nukeop.dm
+++ /dev/null
@@ -1,379 +0,0 @@
-#define NUKE_RESULT_FLUKE 0
-#define NUKE_RESULT_NUKE_WIN 1
-#define NUKE_RESULT_CREW_WIN 2
-#define NUKE_RESULT_CREW_WIN_SYNDIES_DEAD 3
-#define NUKE_RESULT_DISK_LOST 4
-#define NUKE_RESULT_DISK_STOLEN 5
-#define NUKE_RESULT_NOSURVIVORS 6
-#define NUKE_RESULT_WRONG_STATION 7
-#define NUKE_RESULT_WRONG_STATION_DEAD 8
-
-/datum/antagonist/nukeop
- name = "Nuclear Operative"
- roundend_category = "syndicate operatives" //just in case
- antagpanel_category = "NukeOp"
- job_rank = ROLE_OPERATIVE
- var/datum/team/nuclear/nuke_team
- var/always_new_team = FALSE //If not assigned a team by default ops will try to join existing ones, set this to TRUE to always create new team.
- var/send_to_spawnpoint = TRUE //Should the user be moved to default spawnpoint.
- var/nukeop_outfit = /datum/outfit/syndicate
-
-/datum/antagonist/nukeop/proc/update_synd_icons_added(mob/living/M)
- var/datum/atom_hud/antag/opshud = GLOB.huds[ANTAG_HUD_OPS]
- opshud.join_hud(M)
- set_antag_hud(M, "synd")
-
-/datum/antagonist/nukeop/proc/update_synd_icons_removed(mob/living/M)
- var/datum/atom_hud/antag/opshud = GLOB.huds[ANTAG_HUD_OPS]
- opshud.leave_hud(M)
- set_antag_hud(M, null)
-
-/datum/antagonist/nukeop/apply_innate_effects(mob/living/mob_override)
- var/mob/living/M = mob_override || owner.current
- update_synd_icons_added(M)
-
-/datum/antagonist/nukeop/remove_innate_effects(mob/living/mob_override)
- var/mob/living/M = mob_override || owner.current
- update_synd_icons_removed(M)
-
-/datum/antagonist/nukeop/proc/equip_op()
- if(!ishuman(owner.current))
- return
- var/mob/living/carbon/human/H = owner.current
-
- H.set_species(/datum/species/human) //Plasamen burn up otherwise, and lizards are vulnerable to asimov AIs
-
- H.equipOutfit(nukeop_outfit)
- return TRUE
-
-/datum/antagonist/nukeop/greet()
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0)
- to_chat(owner, "You are a [nuke_team ? nuke_team.syndicate_name : "syndicate"] agent!")
- owner.announce_objectives()
- return
-
-/datum/antagonist/nukeop/on_gain()
- give_alias()
- forge_objectives()
- . = ..()
- equip_op()
- memorize_code()
- if(send_to_spawnpoint)
- move_to_spawnpoint()
-
-/datum/antagonist/nukeop/get_team()
- return nuke_team
-
-/datum/antagonist/nukeop/proc/assign_nuke()
- if(nuke_team && !nuke_team.tracked_nuke)
- nuke_team.memorized_code = random_nukecode()
- var/obj/machinery/nuclearbomb/syndicate/nuke = locate() in GLOB.nuke_list
- if(nuke)
- nuke_team.tracked_nuke = nuke
- if(nuke.r_code == "ADMIN")
- nuke.r_code = nuke_team.memorized_code
- else //Already set by admins/something else?
- nuke_team.memorized_code = nuke.r_code
- else
- stack_trace("Syndicate nuke not found during nuke team creation.")
- nuke_team.memorized_code = null
-
-/datum/antagonist/nukeop/proc/give_alias()
- if(nuke_team && nuke_team.syndicate_name)
- var/number = 1
- number = nuke_team.members.Find(owner)
- owner.current.real_name = "[nuke_team.syndicate_name] Operative #[number]"
-
-/datum/antagonist/nukeop/proc/memorize_code()
- if(nuke_team && nuke_team.tracked_nuke && nuke_team.memorized_code)
- antag_memory += "[nuke_team.tracked_nuke] Code: [nuke_team.memorized_code]
"
- to_chat(owner, "The nuclear authorization code is: [nuke_team.memorized_code]")
- else
- to_chat(owner, "Unfortunately the syndicate was unable to provide you with nuclear authorization code.")
-
-/datum/antagonist/nukeop/proc/forge_objectives()
- if(nuke_team)
- owner.objectives |= nuke_team.objectives
-
-/datum/antagonist/nukeop/proc/move_to_spawnpoint()
- var/team_number = 1
- if(nuke_team)
- team_number = nuke_team.members.Find(owner)
- owner.current.forceMove(GLOB.nukeop_start[((team_number - 1) % GLOB.nukeop_start.len) + 1])
-
-/datum/antagonist/nukeop/leader/move_to_spawnpoint()
- owner.current.forceMove(pick(GLOB.nukeop_leader_start))
-
-/datum/antagonist/nukeop/create_team(datum/team/nuclear/new_team)
- if(!new_team)
- if(!always_new_team)
- for(var/datum/antagonist/nukeop/N in GLOB.antagonists)
- if(!N.owner)
- continue
- if(N.nuke_team)
- nuke_team = N.nuke_team
- return
- nuke_team = new /datum/team/nuclear
- nuke_team.update_objectives()
- assign_nuke() //This is bit ugly
- return
- if(!istype(new_team))
- stack_trace("Wrong team type passed to [type] initialization.")
- nuke_team = new_team
-
-/datum/antagonist/nukeop/admin_add(datum/mind/new_owner,mob/admin)
- new_owner.assigned_role = ROLE_SYNDICATE
- new_owner.add_antag_datum(src)
- message_admins("[key_name_admin(admin)] has nuke op'ed [new_owner.current].")
- log_admin("[key_name(admin)] has nuke op'ed [new_owner.current].")
-
-/datum/antagonist/nukeop/get_admin_commands()
- . = ..()
- .["Send to base"] = CALLBACK(src,.proc/admin_send_to_base)
- .["Tell code"] = CALLBACK(src,.proc/admin_tell_code)
-
-/datum/antagonist/nukeop/proc/admin_send_to_base(mob/admin)
- owner.current.forceMove(pick(GLOB.nukeop_start))
-
-/datum/antagonist/nukeop/proc/admin_tell_code(mob/admin)
- var/code
- for (var/obj/machinery/nuclearbomb/bombue in GLOB.machines)
- if (length(bombue.r_code) <= 5 && bombue.r_code != initial(bombue.r_code))
- code = bombue.r_code
- break
- if (code)
- antag_memory += "Syndicate Nuclear Bomb Code: [code]
"
- to_chat(owner.current, "The nuclear authorization code is: [code]")
- else
- to_chat(admin, "No valid nuke found!")
-
-/datum/antagonist/nukeop/leader
- name = "Nuclear Operative Leader"
- nukeop_outfit = /datum/outfit/syndicate/leader
- always_new_team = TRUE
- var/title
-
-/datum/antagonist/nukeop/leader/memorize_code()
- ..()
- if(nuke_team && nuke_team.memorized_code)
- var/obj/item/paper/P = new
- P.info = "The nuclear authorization code is: [nuke_team.memorized_code]"
- P.name = "nuclear bomb code"
- var/mob/living/carbon/human/H = owner.current
- if(!istype(H))
- P.forceMove(get_turf(H))
- else
- H.put_in_hands(P, TRUE)
- H.update_icons()
-
-/datum/antagonist/nukeop/leader/give_alias()
- title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")
- if(nuke_team && nuke_team.syndicate_name)
- owner.current.real_name = "[nuke_team.syndicate_name] [title]"
- else
- owner.current.real_name = "Syndicate [title]"
-
-/datum/antagonist/nukeop/leader/greet()
- owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ops.ogg',100,0)
- to_chat(owner, "You are the Syndicate [title] for this mission. You are responsible for the distribution of telecrystals and your ID is the only one who can open the launch bay doors.")
- to_chat(owner, "If you feel you are not up to this task, give your ID to another operative.")
- to_chat(owner, "In your hand you will find a special item capable of triggering a greater challenge for your team. Examine it carefully and consult with your fellow operatives before activating it.")
- owner.announce_objectives()
- addtimer(CALLBACK(src, .proc/nuketeam_name_assign), 1)
-
-
-/datum/antagonist/nukeop/leader/proc/nuketeam_name_assign()
- if(!nuke_team)
- return
- nuke_team.rename_team(ask_name())
-
-/datum/team/nuclear/proc/rename_team(new_name)
- syndicate_name = new_name
- name = "[syndicate_name] Team"
- for(var/I in members)
- var/datum/mind/synd_mind = I
- var/mob/living/carbon/human/H = synd_mind.current
- if(!istype(H))
- continue
- var/chosen_name = H.dna.species.random_name(H.gender,0,syndicate_name)
- H.fully_replace_character_name(H.real_name,chosen_name)
-
-/datum/antagonist/nukeop/leader/proc/ask_name()
- var/randomname = pick(GLOB.last_names)
- var/newname = stripped_input(owner.current,"You are the nuke operative [title]. Please choose a last name for your family.", "Name change",randomname)
- if (!newname)
- newname = randomname
- else
- newname = reject_bad_name(newname)
- if(!newname)
- newname = randomname
-
- return capitalize(newname)
-
-/datum/antagonist/nukeop/lone
- name = "Lone Operative"
- always_new_team = TRUE
- send_to_spawnpoint = FALSE //Handled by event
- nukeop_outfit = /datum/outfit/syndicate/full
-
-/datum/antagonist/nukeop/lone/assign_nuke()
- if(nuke_team && !nuke_team.tracked_nuke)
- nuke_team.memorized_code = random_nukecode()
- var/obj/machinery/nuclearbomb/selfdestruct/nuke = locate() in GLOB.nuke_list
- if(nuke)
- nuke_team.tracked_nuke = nuke
- if(nuke.r_code == "ADMIN")
- nuke.r_code = nuke_team.memorized_code
- else //Already set by admins/something else?
- nuke_team.memorized_code = nuke.r_code
- else
- stack_trace("Station self destruct ot found during lone op team creation.")
- nuke_team.memorized_code = null
-
-/datum/antagonist/nukeop/reinforcement
- send_to_spawnpoint = FALSE
- nukeop_outfit = /datum/outfit/syndicate/no_crystals
-
-/datum/team/nuclear
- var/syndicate_name
- var/obj/machinery/nuclearbomb/tracked_nuke
- var/core_objective = /datum/objective/nuclear
- var/memorized_code
-
-/datum/team/nuclear/New()
- ..()
- syndicate_name = syndicate_name()
-
-/datum/team/nuclear/proc/update_objectives()
- if(core_objective)
- var/datum/objective/O = new core_objective
- O.team = src
- objectives += O
-
-/datum/team/nuclear/proc/disk_rescued()
- for(var/obj/item/disk/nuclear/D in GLOB.poi_list)
- if(!D.onCentCom())
- return FALSE
- return TRUE
-
-/datum/team/nuclear/proc/operatives_dead()
- for(var/I in members)
- var/datum/mind/operative_mind = I
- if(ishuman(operative_mind.current) && (operative_mind.current.stat != DEAD))
- return FALSE
- return TRUE
-
-/datum/team/nuclear/proc/syndies_escaped()
- var/obj/docking_port/mobile/S = SSshuttle.getShuttle("syndicate")
- return S && (is_centcom_level(S.z) || is_transit_level(S.z))
-
-/datum/team/nuclear/proc/get_result()
- var/evacuation = SSshuttle.emergency.mode == SHUTTLE_ENDGAME
- var/disk_rescued = disk_rescued()
- var/syndies_didnt_escape = !syndies_escaped()
- var/station_was_nuked = SSticker.mode.station_was_nuked
- var/nuke_off_station = SSticker.mode.nuke_off_station
-
- if(nuke_off_station == NUKE_SYNDICATE_BASE)
- return NUKE_RESULT_FLUKE
- else if(!disk_rescued && station_was_nuked && !syndies_didnt_escape)
- return NUKE_RESULT_NUKE_WIN
- else if (!disk_rescued && station_was_nuked && syndies_didnt_escape)
- return NUKE_RESULT_NOSURVIVORS
- else if (!disk_rescued && !station_was_nuked && nuke_off_station && !syndies_didnt_escape)
- return NUKE_RESULT_WRONG_STATION
- else if (!disk_rescued && !station_was_nuked && nuke_off_station && syndies_didnt_escape)
- return NUKE_RESULT_WRONG_STATION_DEAD
- else if ((disk_rescued || evacuation) && operatives_dead())
- return NUKE_RESULT_CREW_WIN_SYNDIES_DEAD
- else if (disk_rescued)
- return NUKE_RESULT_CREW_WIN
- else if (!disk_rescued && operatives_dead())
- return NUKE_RESULT_DISK_LOST
- else if (!disk_rescued && evacuation)
- return NUKE_RESULT_DISK_STOLEN
- else
- return //Undefined result
-
-/datum/team/nuclear/roundend_report()
- var/list/parts = list()
- parts += ""
-
- switch(get_result())
- if(NUKE_RESULT_FLUKE)
- parts += "Humiliating Syndicate Defeat"
- parts += "The crew of [station_name()] gave [syndicate_name] operatives back their bomb! The syndicate base was destroyed! Next time, don't lose the nuke!"
- if(NUKE_RESULT_NUKE_WIN)
- parts += "Syndicate Major Victory!"
- parts += "[syndicate_name] operatives have destroyed [station_name()]!"
- if(NUKE_RESULT_NOSURVIVORS)
- parts += "Total Annihilation"
- parts += "[syndicate_name] operatives destroyed [station_name()] but did not leave the area in time and got caught in the explosion. Next time, don't lose the disk!"
- if(NUKE_RESULT_WRONG_STATION)
- parts += "Crew Minor Victory"
- parts += "[syndicate_name] operatives secured the authentication disk but blew up something that wasn't [station_name()]. Next time, don't do that!"
- if(NUKE_RESULT_WRONG_STATION_DEAD)
- parts += "[syndicate_name] operatives have earned Darwin Award!"
- parts += "[syndicate_name] operatives blew up something that wasn't [station_name()] and got caught in the explosion. Next time, don't do that!"
- if(NUKE_RESULT_CREW_WIN_SYNDIES_DEAD)
- parts += "Crew Major Victory!"
- parts += "The Research Staff has saved the disk and killed the [syndicate_name] Operatives"
- if(NUKE_RESULT_CREW_WIN)
- parts += "Crew Major Victory"
- parts += "The Research Staff has saved the disk and stopped the [syndicate_name] Operatives!"
- if(NUKE_RESULT_DISK_LOST)
- parts += "Neutral Victory!"
- parts += "The Research Staff failed to secure the authentication disk but did manage to kill most of the [syndicate_name] Operatives!"
- if(NUKE_RESULT_DISK_STOLEN)
- parts += "Syndicate Minor Victory!"
- parts += "[syndicate_name] operatives survived the assault but did not achieve the destruction of [station_name()]. Next time, don't lose the disk!"
- else
- parts += "Neutral Victory"
- parts += "Mission aborted!"
-
- var/text = "
"
- var/purchases = ""
- var/TC_uses = 0
- for(var/I in members)
- var/datum/mind/syndicate = I
- var/datum/uplink_purchase_log/H = GLOB.uplink_purchase_logs_by_key[syndicate.key]
- if(H)
- TC_uses += H.total_spent
- purchases += H.generate_render(show_key = FALSE)
- text += printplayerlist(members)
- text += "
"
- text += "(Syndicates used [TC_uses] TC) [purchases]"
- if(TC_uses == 0 && SSticker.mode.station_was_nuked && !operatives_dead())
- text += "[icon2html('icons/badass.dmi', world, "badass")]"
-
- parts += text
-
- return "[parts.Join("
")]
"
-
-/datum/team/nuclear/antag_listing_name()
- if(syndicate_name)
- return "[syndicate_name] Syndicates"
- else
- return "Syndicates"
-
-/datum/team/nuclear/antag_listing_entry()
- var/disk_report = "Nuclear Disk(s)
"
- disk_report += ""
- for(var/obj/item/disk/nuclear/N in GLOB.poi_list)
- disk_report += "| [N.name], "
- var/atom/disk_loc = N.loc
- while(!isturf(disk_loc))
- if(ismob(disk_loc))
- var/mob/M = disk_loc
- disk_report += "carried by [M.real_name] "
- if(isobj(disk_loc))
- var/obj/O = disk_loc
- disk_report += "in \a [O.name] "
- disk_loc = disk_loc.loc
- disk_report += "in [disk_loc.loc] at ([disk_loc.x], [disk_loc.y], [disk_loc.z]) | FLW |
"
- disk_report += "
"
- var/common_part = ..()
- return common_part + disk_report
-
-/datum/team/nuclear/is_gamemode_hero()
- return SSticker.mode.name == "nuclear emergency"
\ No newline at end of file
diff --git a/code/datums/antagonists/pirate.dm b/code/datums/antagonists/pirate.dm
deleted file mode 100644
index cdd871ff35..0000000000
--- a/code/datums/antagonists/pirate.dm
+++ /dev/null
@@ -1,132 +0,0 @@
-/datum/antagonist/pirate
- name = "Space Pirate"
- job_rank = ROLE_TRAITOR
- roundend_category = "space pirates"
- antagpanel_category = "Pirate"
- var/datum/team/pirate/crew
-
-/datum/antagonist/pirate/greet()
- to_chat(owner, "You are a Space Pirate!")
- to_chat(owner, "The station refused to pay for your protection, protect the ship, siphon the credits from the station and raid it for even more loot.")
- owner.announce_objectives()
-
-/datum/antagonist/pirate/get_team()
- return crew
-
-/datum/antagonist/pirate/create_team(datum/team/pirate/new_team)
- if(!new_team)
- for(var/datum/antagonist/pirate/P in GLOB.antagonists)
- if(!P.owner)
- continue
- if(P.crew)
- crew = P.crew
- return
- if(!new_team)
- crew = new /datum/team/pirate
- crew.forge_objectives()
- return
- if(!istype(new_team))
- stack_trace("Wrong team type passed to [type] initialization.")
- crew = new_team
-
-/datum/antagonist/pirate/on_gain()
- if(crew)
- owner.objectives |= crew.objectives
- . = ..()
-
-/datum/antagonist/pirate/on_removal()
- if(crew)
- owner.objectives -= crew.objectives
- . = ..()
-
-/datum/team/pirate
- name = "Pirate crew"
-
-/datum/team/pirate/proc/forge_objectives()
- var/datum/objective/loot/getbooty = new()
- getbooty.team = src
- getbooty.storage_area = locate(/area/shuttle/pirate/vault) in GLOB.sortedAreas
- getbooty.update_initial_value()
- getbooty.update_explanation_text()
- objectives += getbooty
- for(var/datum/mind/M in members)
- M.objectives |= objectives
-
-
-GLOBAL_LIST_INIT(pirate_loot_cache, typecacheof(list(
- /obj/structure/reagent_dispensers/beerkeg,
- /mob/living/simple_animal/parrot,
- /obj/item/stack/sheet/mineral/gold,
- /obj/item/stack/sheet/mineral/diamond,
- /obj/item/stack/spacecash,
- /obj/item/melee/sabre,)))
-
-/datum/objective/loot
- var/area/storage_area //Place where we we will look for the loot.
- explanation_text = "Acquire valuable loot and store it in designated area."
- var/target_value = 50000
- var/initial_value = 0 //Things in the vault at spawn time do not count
-
-/datum/objective/loot/update_explanation_text()
- if(storage_area)
- explanation_text = "Acquire loot and store [target_value] of credits worth in [storage_area.name]."
-
-/datum/objective/loot/proc/loot_listing()
- //Lists notable loot.
- if(!storage_area)
- return "Nothing"
- var/list/loot_table = list()
- for(var/atom/movable/AM in storage_area.GetAllContents())
- if(is_type_in_typecache(AM,GLOB.pirate_loot_cache))
- var/lootname = AM.name
- var/count = 1
- if(istype(AM,/obj/item/stack)) //Ugh.
- var/obj/item/stack/S = AM
- lootname = S.singular_name
- count = S.amount
- if(!loot_table[lootname])
- loot_table[lootname] = count
- else
- loot_table[lootname] += count
- var/list/loot_texts = list()
- for(var/key in loot_table)
- var/amount = loot_table[key]
- loot_texts += "[amount] [key][amount > 1 ? "s":""]"
- return loot_texts.Join(", ")
-
-/datum/objective/loot/proc/get_loot_value()
- if(!storage_area)
- return 0
- var/value = 0
- for(var/turf/T in storage_area.contents)
- value += export_item_and_contents(T,TRUE, TRUE, dry_run = TRUE)
- return value - initial_value
-
-/datum/objective/loot/proc/update_initial_value()
- initial_value = get_loot_value()
-
-/datum/objective/loot/check_completion()
- return ..() || get_loot_value() >= target_value
-
-/datum/team/pirate/roundend_report()
- var/list/parts = list()
-
- parts += ""
-
- var/all_dead = TRUE
- for(var/datum/mind/M in members)
- if(considered_alive(M))
- all_dead = FALSE
- parts += printplayerlist(members)
-
- parts += "Loot stolen: "
- var/datum/objective/loot/L = locate() in objectives
- parts += L.loot_listing()
- parts += "Total loot value : [L.get_loot_value()]/[L.target_value] credits"
-
- if(L.check_completion() && !all_dead)
- parts += "The pirate crew was successful!"
- else
- parts += "The pirate crew has failed."
-
- return "[parts.Join("
")]
"
\ No newline at end of file
diff --git a/code/datums/antagonists/revolution.dm b/code/datums/antagonists/revolution.dm
deleted file mode 100644
index 5ac3bfe2aa..0000000000
--- a/code/datums/antagonists/revolution.dm
+++ /dev/null
@@ -1,368 +0,0 @@
-//How often to check for promotion possibility
-#define HEAD_UPDATE_PERIOD 300
-
-/datum/antagonist/rev
- name = "Revolutionary"
- roundend_category = "revolutionaries" // if by some miracle revolutionaries without revolution happen
- antagpanel_category = "Revolution"
- job_rank = ROLE_REV
- var/hud_type = "rev"
- var/datum/team/revolution/rev_team
-
-/datum/antagonist/rev/can_be_owned(datum/mind/new_owner)
- . = ..()
- if(.)
- if(new_owner.assigned_role in GLOB.command_positions)
- return FALSE
- if(new_owner.unconvertable)
- return FALSE
- if(new_owner.current && new_owner.current.isloyal())
- return FALSE
-
-/datum/antagonist/rev/apply_innate_effects(mob/living/mob_override)
- var/mob/living/M = mob_override || owner.current
- update_rev_icons_added(M)
-
-/datum/antagonist/rev/remove_innate_effects(mob/living/mob_override)
- var/mob/living/M = mob_override || owner.current
- update_rev_icons_removed(M)
-
-/datum/antagonist/rev/proc/equip_rev()
- return
-
-/datum/antagonist/rev/on_gain()
- . = ..()
- create_objectives()
- equip_rev()
- owner.current.log_message("Has been converted to the revolution!", INDIVIDUAL_ATTACK_LOG)
-
-/datum/antagonist/rev/on_removal()
- remove_objectives()
- . = ..()
-
-/datum/antagonist/rev/greet()
- to_chat(owner, "You are now a revolutionary! Help your cause. Do not harm your fellow freedom fighters. You can identify your comrades by the red \"R\" icons, and your leaders by the blue \"R\" icons. Help them kill the heads to win the revolution!")
- owner.announce_objectives()
-
-/datum/antagonist/rev/create_team(datum/team/revolution/new_team)
- if(!new_team)
- //For now only one revolution at a time
- for(var/datum/antagonist/rev/head/H in GLOB.antagonists)
- if(!H.owner)
- continue
- if(H.rev_team)
- rev_team = H.rev_team
- return
- rev_team = new /datum/team/revolution
- rev_team.update_objectives()
- rev_team.update_heads()
- return
- if(!istype(new_team))
- stack_trace("Wrong team type passed to [type] initialization.")
- rev_team = new_team
-
-/datum/antagonist/rev/get_team()
- return rev_team
-
-/datum/antagonist/rev/proc/create_objectives()
- owner.objectives |= rev_team.objectives
-
-/datum/antagonist/rev/proc/remove_objectives()
- owner.objectives -= rev_team.objectives
-
-//Bump up to head_rev
-/datum/antagonist/rev/proc/promote()
- var/old_team = rev_team
- var/datum/mind/old_owner = owner
- silent = TRUE
- owner.remove_antag_datum(/datum/antagonist/rev)
- var/datum/antagonist/rev/head/new_revhead = new()
- new_revhead.silent = TRUE
- old_owner.add_antag_datum(new_revhead,old_team)
- new_revhead.silent = FALSE
- to_chat(old_owner, "You have proved your devotion to revolution! You are a head revolutionary now!")
-
-/datum/antagonist/rev/get_admin_commands()
- . = ..()
- .["Promote"] = CALLBACK(src,.proc/admin_promote)
-
-/datum/antagonist/rev/proc/admin_promote(mob/admin)
- var/datum/mind/O = owner
- promote()
- message_admins("[key_name_admin(admin)] has head-rev'ed [O].")
- log_admin("[key_name(admin)] has head-rev'ed [O].")
-
-/datum/antagonist/rev/head/admin_add(datum/mind/new_owner,mob/admin)
- give_flash = TRUE
- give_hud = TRUE
- remove_clumsy = TRUE
- new_owner.add_antag_datum(src)
- message_admins("[key_name_admin(admin)] has head-rev'ed [new_owner.current].")
- log_admin("[key_name(admin)] has head-rev'ed [new_owner.current].")
- to_chat(new_owner.current, "You are a member of the revolutionaries' leadership now!")
-
-/datum/antagonist/rev/head/get_admin_commands()
- . = ..()
- . -= "Promote"
- .["Take flash"] = CALLBACK(src,.proc/admin_take_flash)
- .["Give flash"] = CALLBACK(src,.proc/admin_give_flash)
- .["Repair flash"] = CALLBACK(src,.proc/admin_repair_flash)
- .["Demote"] = CALLBACK(src,.proc/admin_demote)
-
-/datum/antagonist/rev/head/proc/admin_take_flash(mob/admin)
- var/list/L = owner.current.get_contents()
- var/obj/item/device/assembly/flash/flash = locate() in L
- if (!flash)
- to_chat(admin, "Deleting flash failed!")
- return
- qdel(flash)
-
-/datum/antagonist/rev/head/proc/admin_give_flash(mob/admin)
- //This is probably overkill but making these impact state annoys me
- var/old_give_flash = give_flash
- var/old_give_hud = give_hud
- var/old_remove_clumsy = remove_clumsy
- give_flash = TRUE
- give_hud = FALSE
- remove_clumsy = FALSE
- equip_rev()
- give_flash = old_give_flash
- give_hud = old_give_hud
- remove_clumsy = old_remove_clumsy
-
-/datum/antagonist/rev/head/proc/admin_repair_flash(mob/admin)
- var/list/L = owner.current.get_contents()
- var/obj/item/device/assembly/flash/flash = locate() in L
- if (!flash)
- to_chat(admin, "Repairing flash failed!")
- else
- flash.crit_fail = 0
- flash.update_icon()
-
-/datum/antagonist/rev/head/proc/admin_demote(datum/mind/target,mob/user)
- message_admins("[key_name_admin(user)] has demoted [owner.current] from head revolutionary.")
- log_admin("[key_name(user)] has demoted [owner.current] from head revolutionary.")
- demote()
-
-/datum/antagonist/rev/head
- name = "Head Revolutionary"
- hud_type = "rev_head"
- var/remove_clumsy = FALSE
- var/give_flash = FALSE
- var/give_hud = TRUE
-
-/datum/antagonist/rev/head/antag_listing_name()
- return ..() + "(Leader)"
-
-/datum/antagonist/rev/proc/update_rev_icons_added(mob/living/M)
- var/datum/atom_hud/antag/revhud = GLOB.huds[ANTAG_HUD_REV]
- revhud.join_hud(M)
- set_antag_hud(M,hud_type)
-
-/datum/antagonist/rev/proc/update_rev_icons_removed(mob/living/M)
- var/datum/atom_hud/antag/revhud = GLOB.huds[ANTAG_HUD_REV]
- revhud.leave_hud(M)
- set_antag_hud(M, null)
-
-/datum/antagonist/rev/proc/can_be_converted(mob/living/candidate)
- if(!candidate.mind)
- return FALSE
- if(!can_be_owned(candidate.mind))
- return FALSE
- var/mob/living/carbon/C = candidate //Check to see if the potential rev is implanted
- if(!istype(C)) //Can't convert simple animals
- return FALSE
- return TRUE
-
-/datum/antagonist/rev/proc/add_revolutionary(datum/mind/rev_mind,stun = TRUE)
- if(!can_be_converted(rev_mind.current))
- return FALSE
- if(stun)
- if(iscarbon(rev_mind.current))
- var/mob/living/carbon/carbon_mob = rev_mind.current
- carbon_mob.silent = max(carbon_mob.silent, 5)
- carbon_mob.flash_act(1, 1)
- rev_mind.current.Stun(100)
- rev_mind.add_antag_datum(/datum/antagonist/rev,rev_team)
- rev_mind.special_role = ROLE_REV
- return TRUE
-
-/datum/antagonist/rev/head/proc/demote()
- var/datum/mind/old_owner = owner
- var/old_team = rev_team
- silent = TRUE
- owner.remove_antag_datum(/datum/antagonist/rev/head)
- var/datum/antagonist/rev/new_rev = new /datum/antagonist/rev()
- new_rev.silent = TRUE
- old_owner.add_antag_datum(new_rev,old_team)
- new_rev.silent = FALSE
- to_chat(old_owner, "Revolution has been disappointed of your leader traits! You are a regular revolutionary now!")
-
-/datum/antagonist/rev/farewell()
- if(ishuman(owner.current))
- owner.current.visible_message("[owner.current] looks like they just remembered their real allegiance!", null, null, null, owner.current)
- to_chat(owner, "You are no longer a brainwashed revolutionary! Your memory is hazy from the time you were a rebel...the only thing you remember is the name of the one who brainwashed you...")
- else if(issilicon(owner.current))
- owner.current.visible_message("The frame beeps contentedly, purging the hostile memory engram from the MMI before initalizing it.", null, null, null, owner.current)
- to_chat(owner, "The frame's firmware detects and deletes your neural reprogramming! You remember nothing but the name of the one who flashed you.")
-
-/datum/antagonist/rev/proc/remove_revolutionary(borged, deconverter)
- log_attack("[owner.current] (Key: [key_name(owner.current)]) has been deconverted from the revolution by [deconverter] (Key: [key_name(deconverter)])!")
- if(borged)
- message_admins("[ADMIN_LOOKUPFLW(owner.current)] has been borged while being a [name]")
- owner.special_role = null
- if(iscarbon(owner.current))
- var/mob/living/carbon/C = owner.current
- C.Unconscious(100)
- owner.remove_antag_datum(type)
-
-/datum/antagonist/rev/head/remove_revolutionary(borged,deconverter)
- if(!borged)
- return
- . = ..()
-
-/datum/antagonist/rev/head/equip_rev()
- var/mob/living/carbon/human/H = owner.current
- if(!istype(H))
- return
-
- if(remove_clumsy && owner.assigned_role == "Clown")
- to_chat(owner, "Your training has allowed you to overcome your clownish nature, allowing you to wield weapons without harming yourself.")
- H.dna.remove_mutation(CLOWNMUT)
-
- if(give_flash)
- var/obj/item/device/assembly/flash/T = new(H)
- var/list/slots = list (
- "backpack" = slot_in_backpack,
- "left pocket" = slot_l_store,
- "right pocket" = slot_r_store
- )
- var/where = H.equip_in_one_of_slots(T, slots)
- if (!where)
- to_chat(H, "The Syndicate were unfortunately unable to get you a flash.")
- else
- to_chat(H, "The flash in your [where] will help you to persuade the crew to join your cause.")
-
- if(give_hud)
- var/obj/item/organ/cyberimp/eyes/hud/security/syndicate/S = new(H)
- S.Insert(H, special = FALSE, drop_if_replaced = FALSE)
- to_chat(H, "Your eyes have been implanted with a cybernetic security HUD which will help you keep track of who is mindshield-implanted, and therefore unable to be recruited.")
-
-/datum/team/revolution
- name = "Revolution"
- var/max_headrevs = 3
-
-/datum/team/revolution/proc/update_objectives(initial = FALSE)
- var/untracked_heads = SSjob.get_all_heads()
- for(var/datum/objective/mutiny/O in objectives)
- untracked_heads -= O.target
- for(var/datum/mind/M in untracked_heads)
- var/datum/objective/mutiny/new_target = new()
- new_target.team = src
- new_target.target = M
- new_target.update_explanation_text()
- objectives += new_target
- for(var/datum/mind/M in members)
- M.objectives |= objectives
-
- addtimer(CALLBACK(src,.proc/update_objectives),HEAD_UPDATE_PERIOD,TIMER_UNIQUE)
-
-/datum/team/revolution/proc/head_revolutionaries()
- . = list()
- for(var/datum/mind/M in members)
- if(M.has_antag_datum(/datum/antagonist/rev/head))
- . += M
-
-/datum/team/revolution/proc/update_heads()
- if(SSticker.HasRoundStarted())
- var/list/datum/mind/head_revolutionaries = head_revolutionaries()
- var/list/datum/mind/heads = SSjob.get_all_heads()
- var/list/sec = SSjob.get_all_sec()
-
- if(head_revolutionaries.len < max_headrevs && head_revolutionaries.len < round(heads.len - ((8 - sec.len) / 3)))
- var/list/datum/mind/non_heads = members - head_revolutionaries
- var/list/datum/mind/promotable = list()
- for(var/datum/mind/khrushchev in non_heads)
- if(khrushchev.current && !khrushchev.current.incapacitated() && !khrushchev.current.restrained() && khrushchev.current.client && khrushchev.current.stat != DEAD)
- if(ROLE_REV in khrushchev.current.client.prefs.be_special)
- promotable += khrushchev
- if(promotable.len)
- var/datum/mind/new_leader = pick(promotable)
- var/datum/antagonist/rev/rev = new_leader.has_antag_datum(/datum/antagonist/rev)
- rev.promote()
-
- addtimer(CALLBACK(src,.proc/update_heads),HEAD_UPDATE_PERIOD,TIMER_UNIQUE)
-
-
-/datum/team/revolution/roundend_report()
- if(!members.len)
- return
-
- var/list/result = list()
-
- result += ""
-
- var/num_revs = 0
- var/num_survivors = 0
- for(var/mob/living/carbon/survivor in GLOB.alive_mob_list)
- if(survivor.ckey)
- num_survivors++
- if(survivor.mind)
- if(is_revolutionary(survivor))
- num_revs++
- if(num_survivors)
- result += "Command's Approval Rating:
[100 - round((num_revs/num_survivors)*100, 0.1)]%"
-
-
- var/list/targets = list()
- var/list/datum/mind/headrevs = get_antagonists(/datum/antagonist/rev/head)
- var/list/datum/mind/revs = get_antagonists(/datum/antagonist/rev,TRUE)
- if(headrevs.len)
- var/list/headrev_part = list()
- headrev_part += ""
- headrev_part += printplayerlist(headrevs,TRUE)
- result += headrev_part.Join("
")
-
- if(revs.len)
- var/list/rev_part = list()
- rev_part += ""
- rev_part += printplayerlist(revs,TRUE)
- result += rev_part.Join("
")
-
- var/list/heads = SSjob.get_all_heads()
- if(heads.len)
- var/head_text = ""
- head_text += "
"
- for(var/datum/mind/head in heads)
- var/target = (head in targets)
- head_text += "- "
- if(target)
- head_text += "Target"
- head_text += "[printplayer(head, 1)]
"
- head_text += "
"
- result += head_text
-
- result += "
"
-
- return result.Join()
-
-/datum/team/revolution/antag_listing_entry()
- var/common_part = ..()
- var/heads_report = "Heads of Staff
"
- heads_report += ""
- for(var/datum/mind/N in SSjob.get_living_heads())
- var/mob/M = N.current
- if(M)
- heads_report += "| [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""] | "
- heads_report += "PM | "
- heads_report += "FLW | "
- var/turf/mob_loc = get_turf(M)
- heads_report += "[mob_loc.loc] |
"
- else
- heads_report += "| [N.name]([N.key])Head body destroyed! | "
- heads_report += "PM |
"
- heads_report += "
"
- return common_part + heads_report
-
-/datum/team/revolution/is_gamemode_hero()
- return SSticker.mode.name == "revolution"
\ No newline at end of file
diff --git a/code/datums/antagonists/wizard.dm b/code/datums/antagonists/wizard.dm
deleted file mode 100644
index 8aba74f70a..0000000000
--- a/code/datums/antagonists/wizard.dm
+++ /dev/null
@@ -1,339 +0,0 @@
-#define APPRENTICE_DESTRUCTION "destruction"
-#define APPRENTICE_BLUESPACE "bluespace"
-#define APPRENTICE_ROBELESS "robeless"
-#define APPRENTICE_HEALING "healing"
-
-/datum/antagonist/wizard
- name = "Space Wizard"
- roundend_category = "wizards/witches"
- antagpanel_category = "Wizard"
- job_rank = ROLE_WIZARD
- var/give_objectives = TRUE
- var/strip = TRUE //strip before equipping
- var/allow_rename = TRUE
- var/hud_version = "wizard"
- var/datum/team/wizard/wiz_team //Only created if wizard summons apprentices
- var/move_to_lair = TRUE
- var/outfit_type = /datum/outfit/wizard
- var/wiz_age = WIZARD_AGE_MIN /* Wizards by nature cannot be too young. */
-
-/datum/antagonist/wizard/on_gain()
- register()
- if(give_objectives)
- create_objectives()
- equip_wizard()
- if(move_to_lair)
- send_to_lair()
- . = ..()
- if(allow_rename)
- rename_wizard()
-
-/datum/antagonist/wizard/proc/register()
- SSticker.mode.wizards |= owner
-
-/datum/antagonist/wizard/proc/unregister()
- SSticker.mode.wizards -= src
-
-/datum/antagonist/wizard/create_team(datum/team/wizard/new_team)
- if(!new_team)
- return
- if(!istype(new_team))
- stack_trace("Wrong team type passed to [type] initialization.")
- wiz_team = new_team
-
-/datum/antagonist/wizard/get_team()
- return wiz_team
-
-/datum/team/wizard
- name = "wizard team"
- var/datum/antagonist/wizard/master_wizard
-
-/datum/antagonist/wizard/proc/create_wiz_team()
- wiz_team = new(owner)
- wiz_team.name = "[owner.current.real_name] team"
- wiz_team.master_wizard = src
- update_wiz_icons_added(owner.current)
-
-/datum/antagonist/wizard/proc/send_to_lair()
- if(!owner || !owner.current)
- return
- if(!GLOB.wizardstart.len)
- SSjob.SendToLateJoin(owner.current)
- to_chat(owner, "HOT INSERTION, GO GO GO")
- owner.current.forceMove(pick(GLOB.wizardstart))
-
-/datum/antagonist/wizard/proc/create_objectives()
- switch(rand(1,100))
- if(1 to 30)
- var/datum/objective/assassinate/kill_objective = new
- kill_objective.owner = owner
- kill_objective.find_target()
- objectives += kill_objective
-
- if (!(locate(/datum/objective/escape) in owner.objectives))
- var/datum/objective/escape/escape_objective = new
- escape_objective.owner = owner
- objectives += escape_objective
-
- if(31 to 60)
- var/datum/objective/steal/steal_objective = new
- steal_objective.owner = owner
- steal_objective.find_target()
- objectives += steal_objective
-
- if (!(locate(/datum/objective/escape) in owner.objectives))
- var/datum/objective/escape/escape_objective = new
- escape_objective.owner = owner
- objectives += escape_objective
-
- if(61 to 85)
- var/datum/objective/assassinate/kill_objective = new
- kill_objective.owner = owner
- kill_objective.find_target()
- objectives += kill_objective
-
- var/datum/objective/steal/steal_objective = new
- steal_objective.owner = owner
- steal_objective.find_target()
- objectives += steal_objective
-
- if (!(locate(/datum/objective/survive) in owner.objectives))
- var/datum/objective/survive/survive_objective = new
- survive_objective.owner = owner
- objectives += survive_objective
-
- else
- if (!(locate(/datum/objective/hijack) in owner.objectives))
- var/datum/objective/hijack/hijack_objective = new
- hijack_objective.owner = owner
- objectives += hijack_objective
-
- for(var/datum/objective/O in objectives)
- owner.objectives += O
-
-/datum/antagonist/wizard/on_removal()
- unregister()
- for(var/objective in objectives)
- owner.objectives -= objective
- owner.RemoveAllSpells() // TODO keep track which spells are wizard spells which innate stuff
- return ..()
-
-/datum/antagonist/wizard/proc/equip_wizard()
- if(!owner)
- return
- var/mob/living/carbon/human/H = owner.current
- if(!istype(H))
- return
- if(strip)
- H.delete_equipment()
- //Wizards are human by default. Use the mirror if you want something else.
- H.set_species(/datum/species/human)
- if(H.age < wiz_age)
- H.age = wiz_age
- H.equipOutfit(outfit_type)
-
-/datum/antagonist/wizard/greet()
- to_chat(owner, "You are the Space Wizard!")
- to_chat(owner, "The Space Wizards Federation has given you the following tasks:")
- owner.announce_objectives()
- to_chat(owner, "You will find a list of available spells in your spell book. Choose your magic arsenal carefully.")
- to_chat(owner, "The spellbook is bound to you, and others cannot use it.")
- to_chat(owner, "In your pockets you will find a teleport scroll. Use it as needed.")
- to_chat(owner,"Remember: do not forget to prepare your spells.")
-
-/datum/antagonist/wizard/farewell()
- to_chat(owner, "You have been brainwashed! You are no longer a wizard!")
-
-/datum/antagonist/wizard/proc/rename_wizard()
- set waitfor = FALSE
-
- var/wizard_name_first = pick(GLOB.wizard_first)
- var/wizard_name_second = pick(GLOB.wizard_second)
- var/randomname = "[wizard_name_first] [wizard_name_second]"
- var/mob/living/wiz_mob = owner.current
- var/newname = copytext(sanitize(input(wiz_mob, "You are the [name]. Would you like to change your name to something else?", "Name change", randomname) as null|text),1,MAX_NAME_LEN)
-
- if (!newname)
- newname = randomname
-
- wiz_mob.fully_replace_character_name(wiz_mob.real_name, newname)
-
-/datum/antagonist/wizard/apply_innate_effects(mob/living/mob_override)
- var/mob/living/M = mob_override || owner.current
- update_wiz_icons_added(M, wiz_team ? TRUE : FALSE) //Don't bother showing the icon if you're solo wizard
- M.faction |= ROLE_WIZARD
-
-/datum/antagonist/wizard/remove_innate_effects(mob/living/mob_override)
- var/mob/living/M = mob_override || owner.current
- update_wiz_icons_removed(M)
- M.faction -= ROLE_WIZARD
-
-
-/datum/antagonist/wizard/get_admin_commands()
- . = ..()
- .["Send to Lair"] = CALLBACK(src,.proc/admin_send_to_lair)
-
-/datum/antagonist/wizard/proc/admin_send_to_lair(mob/admin)
- owner.current.forceMove(pick(GLOB.wizardstart))
-
-/datum/antagonist/wizard/apprentice
- name = "Wizard Apprentice"
- hud_version = "apprentice"
- var/datum/mind/master
- var/school = APPRENTICE_DESTRUCTION
- outfit_type = /datum/outfit/wizard/apprentice
- wiz_age = APPRENTICE_AGE_MIN
-
-/datum/antagonist/wizard/apprentice/greet()
- to_chat(owner, "You are [master.current.real_name]'s apprentice! You are bound by magic contract to follow their orders and help them in accomplishing their goals.")
- owner.announce_objectives()
-
-/datum/antagonist/wizard/apprentice/register()
- SSticker.mode.apprentices |= owner
-
-/datum/antagonist/wizard/apprentice/unregister()
- SSticker.mode.apprentices -= owner
-
-/datum/antagonist/wizard/apprentice/equip_wizard()
- . = ..()
- if(!owner)
- return
- var/mob/living/carbon/human/H = owner.current
- if(!istype(H))
- return
- switch(school)
- if(APPRENTICE_DESTRUCTION)
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball(null))
- to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned powerful, destructive spells. You are able to cast magic missile and fireball.")
- if(APPRENTICE_BLUESPACE)
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null))
- to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned reality bending mobility spells. You are able to cast teleport and ethereal jaunt.")
- if(APPRENTICE_HEALING)
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/charge(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/forcewall(null))
- H.put_in_hands(new /obj/item/gun/magic/staff/healing(H))
- to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned livesaving survival spells. You are able to cast charge and forcewall.")
- if(APPRENTICE_ROBELESS)
- owner.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/knock(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/mind_transfer(null))
- to_chat(owner, "Your service has not gone unrewarded, however. Studying under [master.current.real_name], you have learned stealthy, robeless spells. You are able to cast knock and mindswap.")
-
-/datum/antagonist/wizard/apprentice/create_objectives()
- var/datum/objective/protect/new_objective = new /datum/objective/protect
- new_objective.owner = owner
- new_objective.target = master
- new_objective.explanation_text = "Protect [master.current.real_name], the wizard."
- owner.objectives += new_objective
- objectives += new_objective
-
-//Random event wizard
-/datum/antagonist/wizard/apprentice/imposter
- name = "Wizard Imposter"
- allow_rename = FALSE
- move_to_lair = FALSE
-
-/datum/antagonist/wizard/apprentice/imposter/greet()
- to_chat(owner, "You are an imposter! Trick and confuse the crew to misdirect malice from your handsome original!")
- owner.announce_objectives()
-
-/datum/antagonist/wizard/apprentice/imposter/equip_wizard()
- var/mob/living/carbon/human/master_mob = master.current
- var/mob/living/carbon/human/H = owner.current
- if(!istype(master_mob) || !istype(H))
- return
- if(master_mob.ears)
- H.equip_to_slot_or_del(new master_mob.ears.type, slot_ears)
- if(master_mob.w_uniform)
- H.equip_to_slot_or_del(new master_mob.w_uniform.type, slot_w_uniform)
- if(master_mob.shoes)
- H.equip_to_slot_or_del(new master_mob.shoes.type, slot_shoes)
- if(master_mob.wear_suit)
- H.equip_to_slot_or_del(new master_mob.wear_suit.type, slot_wear_suit)
- if(master_mob.head)
- H.equip_to_slot_or_del(new master_mob.head.type, slot_head)
- if(master_mob.back)
- H.equip_to_slot_or_del(new master_mob.back.type, slot_back)
-
- //Operation: Fuck off and scare people
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/area_teleport/teleport(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/turf_teleport/blink(null))
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt(null))
-
-/datum/antagonist/wizard/proc/update_wiz_icons_added(mob/living/wiz,join = TRUE)
- var/datum/atom_hud/antag/wizhud = GLOB.huds[ANTAG_HUD_WIZ]
- wizhud.join_hud(wiz)
- set_antag_hud(wiz, hud_version)
-
-/datum/antagonist/wizard/proc/update_wiz_icons_removed(mob/living/wiz)
- var/datum/atom_hud/antag/wizhud = GLOB.huds[ANTAG_HUD_WIZ]
- wizhud.leave_hud(wiz)
- set_antag_hud(wiz, null)
-
-
-/datum/antagonist/wizard/academy
- name = "Academy Teacher"
- outfit_type = /datum/outfit/wizard/academy
-
-/datum/antagonist/wizard/academy/equip_wizard()
- . = ..()
-
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/ethereal_jaunt)
- owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/projectile/magic_missile)
- owner.AddSpell(new /obj/effect/proc_holder/spell/aimed/fireball)
-
- var/mob/living/M = owner.current
- if(!istype(M))
- return
-
- var/obj/item/implant/exile/Implant = new/obj/item/implant/exile(M)
- Implant.implant(M)
-
-/datum/antagonist/wizard/academy/create_objectives()
- var/datum/objective/new_objective = new("Protect Wizard Academy from the intruders")
- new_objective.owner = owner
- owner.objectives += new_objective
- objectives += new_objective
-
-//Solo wizard report
-/datum/antagonist/wizard/roundend_report()
- var/list/parts = list()
-
- parts += printplayer(owner)
-
- var/count = 1
- var/wizardwin = 1
- for(var/datum/objective/objective in objectives)
- if(objective.check_completion())
- parts += "Objective #[count]: [objective.explanation_text] Success!"
- else
- parts += "Objective #[count]: [objective.explanation_text] Fail."
- wizardwin = 0
- count++
-
- if(wizardwin)
- parts += "The wizard was successful!"
- else
- parts += "The wizard has failed!"
-
- if(owner.spell_list.len>0)
- parts += "[owner.name] used the following spells: "
- var/list/spell_names = list()
- for(var/obj/effect/proc_holder/spell/S in owner.spell_list)
- spell_names += S.name
- parts += spell_names.Join(", ")
-
- return parts.Join("
")
-
-//Wizard with apprentices report
-/datum/team/wizard/roundend_report()
- var/list/parts = list()
-
- parts += ""
- parts += master_wizard.roundend_report()
- parts += " "
- parts += ""
- parts += printplayerlist(members - master_wizard.owner)
-
- return "[parts.Join("
")]
"
\ No newline at end of file
diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index d525b52ca5..9561515840 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -305,6 +305,88 @@
else
return
+/datum/browser/modal/preflikepicker
+ var/settings = list()
+ var/icon/preview_icon = null
+
+/datum/browser/modal/preflikepicker/New(User,Message,Title,Button1="Ok",Button2,Button3,StealFocus = 1, Timeout = FALSE,list/settings,inputtype="checkbox", width = 400, height, slidecolor)
+ if (!User)
+ return
+ src.settings = settings
+
+ ..(User, ckey("[User]-[Message]-[Title]-[world.time]-[rand(1,10000)]"), Title, width, height, src, StealFocus, Timeout)
+ set_content(ShowChoices(User))
+
+/datum/browser/modal/preflikepicker/proc/ShowChoices(mob/user)
+ var/dat = ""
+
+ for (var/name in settings["mainsettings"])
+ var/setting = settings["mainsettings"][name]
+ if (setting["type"] == "datum")
+ dat += "[setting["desc"]]: [setting["value"]]
"
+ else
+ dat += "[setting["desc"]]: [setting["value"]]
"
+
+ if (preview_icon)
+ dat += ""
+
+ dat += ""
+
+ dat += " | "
+
+ dat += ""
+
+ dat += "
Ok "
+
+ dat += ""
+
+ return dat
+
+/datum/browser/modal/preflikepicker/Topic(href,href_list)
+ if (href_list["close"] || !user || !user.client)
+ opentime = 0
+ return
+ if (href_list["task"] == "input")
+ var/setting = href_list["setting"]
+ switch (href_list["type"])
+ if ("datum")
+ settings["mainsettings"][setting]["value"] = pick_closest_path(null, make_types_fancy(typesof(text2path(href_list["path"]))))
+ if ("string")
+ settings["mainsettings"][setting]["value"] = stripped_input(user, "Enter new value for [settings["mainsettings"][setting]["desc"]]", "Enter new value for [settings["mainsettings"][setting]["desc"]]")
+ if ("number")
+ settings["mainsettings"][setting]["value"] = input(user, "Enter new value for [settings["mainsettings"][setting]["desc"]]", "Enter new value for [settings["mainsettings"][setting]["desc"]]") as num
+ if ("boolean")
+ settings["mainsettings"][setting]["value"] = input(user, "[settings["mainsettings"][setting]["desc"]]?") in list("Yes","No")
+ if ("ckey")
+ settings["mainsettings"][setting]["value"] = input(user, "[settings["mainsettings"][setting]["desc"]]?") in list("none") + GLOB.directory
+ if (href_list["button"])
+ var/button = text2num(href_list["button"])
+ if (button <= 3 && button >= 1)
+ selectedbutton = button
+ if (selectedbutton != 1)
+ set_content(ShowChoices(user))
+ open()
+ return
+ for (var/item in href_list)
+ switch(item)
+ if ("close", "button", "src")
+ continue
+ opentime = 0
+ close()
+
+/proc/presentpreflikepicker(var/mob/User,Message, Title, Button1="Ok", Button2, Button3, StealFocus = 1,Timeout = 6000,list/settings, width, height, slidecolor)
+ if (!istype(User))
+ if (istype(User, /client/))
+ var/client/C = User
+ User = C.mob
+ else
+ return
+ var/datum/browser/modal/preflikepicker/A = new(User, Message, Title, Button1, Button2, Button3, StealFocus,Timeout, settings, width, height, slidecolor)
+ A.open()
+ A.wait()
+ if (A.selectedbutton)
+ return list("button" = A.selectedbutton, "settings" = A.settings)
+
// This will allow you to show an icon in the browse window
// This is added to mob so that it can be used without a reference to the browser object
// There is probably a better place for this...
diff --git a/code/datums/votablemap.dm b/code/datums/votablemap.dm
deleted file mode 100644
index c1c0c7d818..0000000000
--- a/code/datums/votablemap.dm
+++ /dev/null
@@ -1,10 +0,0 @@
-/datum/votablemap
- var/name = ""
- var/friendlyname = ""
- var/minusers = 0
- var/maxusers = 0
- var/voteweight = 1
-
-/datum/votablemap/New(name)
- src.name = name
- src.friendlyname = name
\ No newline at end of file
diff --git a/code/game/gamemodes/antag_spawner_cit.dm b/code/game/gamemodes/antag_spawner_cit.dm
deleted file mode 100644
index 4cdc096072..0000000000
--- a/code/game/gamemodes/antag_spawner_cit.dm
+++ /dev/null
@@ -1,57 +0,0 @@
-////////////Syndicate Cortical Borer
-obj/item/antag_spawner/syndi_borer
- name = "syndicate brain-slug container"
- desc = "Releases a modified cortical borer to assist the user."
- icon = 'icons/obj/device.dmi' //Temporary? Doesn't really look like a container for xenofauna... but IDK what else could work.
- icon_state = "locator"
- var/polling = FALSE
-
-obj/item/antag_spawner/syndi_borer/spawn_antag(client/C, turf/T, mob/owner)
- var/mob/living/simple_animal/borer/syndi_borer/B = new /mob/living/simple_animal/borer/syndi_borer(T)
-
- B.key = C.key
- if (owner)
- B.owner = owner
- B.faction = B.faction | owner.faction.Copy()
-
- B.mind.assigned_role = B.name
- B.mind.special_role = B.name
- var/datum/objective/syndi_borer/new_objective
- new_objective = new /datum/objective/syndi_borer
- new_objective.owner = B.mind
- new_objective.target = owner.mind
- new_objective.explanation_text = "You are a modified cortical borer. You obey [owner.real_name] and must assist them in completing their objectives."
- B.mind.objectives += new_objective
-
- to_chat(B, "You are awake at last! Seek out whoever released you and aid them as best you can!")
- if(new_objective)
- to_chat(B, "Objective #[1]: [new_objective.explanation_text]")
-
-/obj/item/antag_spawner/syndi_borer/proc/check_usability(mob/user)
- if(used)
- to_chat(user, "[src] appears to be empty!")
- return 0
- if(polling == TRUE)
- to_chat(user, "[src] is busy activating!")
- return 0
- return 1
-
-/obj/item/antag_spawner/syndi_borer/attack_self(mob/user)
- if(!(check_usability(user)))
- return
- polling = TRUE
- var/list/borer_candidates = pollCandidatesForMob("Do you want to play as a syndicate cortical borer?", ROLE_BORER, null, ROLE_BORER, 150, src)
- if(borer_candidates.len)
- polling = FALSE
- if(!(check_usability(user)))
- return
- used = 1
- var/mob/dead/observer/theghost = pick(borer_candidates)
- spawn_antag(theghost.client, get_turf(src), user)
- var/datum/effect_system/spark_spread/S = new /datum/effect_system/spark_spread
- S.set_up(4, 1, src)
- S.start()
- qdel(src)
- else
- polling = FALSE
- to_chat(user, "Unable to connect to release specimen. Please wait and try again later or use the container on your uplink to get your points refunded.")
\ No newline at end of file
diff --git a/code/game/gamemodes/cit_objectives.dm b/code/game/gamemodes/cit_objectives.dm
deleted file mode 100644
index fbcfc675e3..0000000000
--- a/code/game/gamemodes/cit_objectives.dm
+++ /dev/null
@@ -1,106 +0,0 @@
-#define MIN_LATE_TARGET_TIME 600 //lower bound of re-rolled timer, 1 min
-#define MAX_LATE_TARGET_TIME 6000 //upper bound of re-rolled timer, 10 min
-#define LATE_TARGET_HIT_CHANCE 70 //How often would the find_target succeed, otherwise it re-rolls later and tries again.
-//Hit chance is here to avoid people checking github and then hovering around new arrivals within the max minute range every round.
-
-/datum/objective/assassinate/late
- martyr_compatible = FALSE
-
-
-/datum/objective/assassinate/late/find_target()
- var/list/possible_targets = list()
- for(var/mob/M in GLOB.latejoiners)
- var/datum/mind/possible_target = M.mind
- if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && is_unique_objective(possible_target))
- possible_targets += possible_target
- if(possible_targets.len > 0 && prob(LATE_TARGET_HIT_CHANCE))
- target = pick(possible_targets)
- martyr_compatible = TRUE //Might never matter, but I guess if an admin gives another random objective, this should now be compatible
- update_explanation_text()
-
- message_admins("[target] has been selected as the assassination target of [owner].")
- log_game("[target] has been selected as the assassination target of [owner].")
-
- to_chat(owner, "You hear a crackling noise in your ears, as a one-way syndicate message plays:")
- to_chat(owner, "You target has been located. To succeed, find and eliminate [target], the [!target_role_type ? target.assigned_role : target.special_role].")
- return target
- else
- update_explanation_text()
- addtimer(CALLBACK(src, .proc/find_target),rand(MIN_LATE_TARGET_TIME, MAX_LATE_TARGET_TIME))
- return null
-
-/datum/objective/assassinate/late/find_target_by_role(role, role_type=0, invert=0)
- var/list/possible_targets = list()
- for(var/mob/M in GLOB.latejoiners)
- var/datum/mind/possible_target = M.mind
- if((possible_target != owner) && ishuman(possible_target.current))
- var/is_role = 0
- if(role_type)
- if(possible_target.special_role == role)
- is_role++
- else
- if(possible_target.assigned_role == role)
- is_role++
-
- if(invert)
- if(is_role)
- continue
- possible_targets += possible_target
- //break
- else if(is_role)
- possible_targets += possible_target
- //break
- if(possible_targets && prob(LATE_TARGET_HIT_CHANCE))
- target = pick(possible_targets)
- update_explanation_text()
-
- message_admins("[target] has been selected as the assassination target of [owner].")
- log_game("[target] has been selected as the assassination target of [owner].")
-
- to_chat(owner, "You hear a crackling noise in your ears, as a one-way syndicate message plays:")
- to_chat(owner, "You target has been located. To succeed, find and eliminate [target], the [!target_role_type ? target.assigned_role : target.special_role].")
- else
- update_explanation_text()
- addtimer(CALLBACK(src, .proc/find_target_by_role, role, role_type, invert),rand(MIN_LATE_TARGET_TIME, MAX_LATE_TARGET_TIME))
-
-
-
-/datum/objective/assassinate/late/check_completion()
- if(target && target.current) //If target WAS assigned
- if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
- return TRUE
- return FALSE
- else //If no target was ever given
- if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current))
- return FALSE
- if(!is_special_character(owner.current))
- return FALSE
- return TRUE
-
-/datum/objective/assassinate/late/update_explanation_text()
- //..()
- if(target && target.current)
- explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
- else
- explanation_text = "Stay alive until your target arrives on the station, you will be notified when the target has been identified."
-
-
-
-//BORER STUFF
-//Because borers didn't use to have objectives
-/datum/objective/normal_borer //Default objective, should technically never be used unmodified but CAN work unmodified.
- explanation_text = "You must escape with at least one borer with host on the shuttle."
- target_amount = 1
- martyr_compatible = 0
-
-/datum/objective/normal_borer/check_completion()
- var/total_borer_hosts = 0
- for(var/mob/living/carbon/C in GLOB.mob_list)
- var/mob/living/simple_animal/borer/D = C.has_brain_worms()
- var/turf/location = get_turf(C)
- if(is_centcom_level(location.z) && D && D.stat != DEAD)
- total_borer_hosts++
- if(target_amount <= total_borer_hosts)
- return TRUE
- else
- return FALSE
diff --git a/code/game/gamemodes/cult/blood_magic.dm b/code/game/gamemodes/cult/blood_magic.dm
deleted file mode 100644
index dd66edcfb1..0000000000
--- a/code/game/gamemodes/cult/blood_magic.dm
+++ /dev/null
@@ -1,769 +0,0 @@
-/datum/action/innate/cult/blood_magic //Blood magic handles the creation of blood spells (formerly talismans)
- name = "Prepare Blood Magic"
- button_icon_state = "carve"
- desc = "Prepare blood magic by carving runes into your flesh. This rite is most effective with an empowering rune"
- var/list/spells = list()
- var/channeling = FALSE
-
-/datum/action/innate/cult/blood_magic/Grant()
- ..()
- button.screen_loc = "6:-29,4:-2"
- button.moved = "6:-29,4:-2"
- button.locked = TRUE
-
-/datum/action/innate/cult/blood_magic/Remove()
- for(var/X in spells)
- qdel(X)
- ..()
-
-/datum/action/innate/cult/blood_magic/IsAvailable()
- if(!iscultist(owner))
- return FALSE
- return ..()
-
-/datum/action/innate/cult/blood_magic/proc/Positioning()
- for(var/datum/action/innate/cult/blood_spell/B in spells)
- var/pos = -29+spells.Find(B)*31
- B.button.screen_loc = "6:[pos],4:-2"
- B.button.moved = B.button.screen_loc
- B.button.locked = TRUE
-
-/datum/action/innate/cult/blood_magic/Activate()
- var/rune = FALSE
- var/limit = RUNELESS_MAX_BLOODCHARGE
- for(var/obj/effect/rune/empower/R in range(1, owner))
- rune = TRUE
- break
- if(rune)
- limit = MAX_BLOODCHARGE
- if(spells.len >= limit)
- if(rune)
- to_chat(owner, "Your body has reached its limit, you cannot store more than [MAX_BLOODCHARGE] spells at once. Pick a spell to nullify.")
- else
- to_chat(owner, "Your body has reached its limit, you cannot have more than [RUNELESS_MAX_BLOODCHARGE] spells at once without an empowering rune! Pick a spell to nullify.")
- var/nullify_spell = input(owner, "Choose a spell to remove.", "Current Spells") as null|anything in spells
- if(nullify_spell)
- qdel(nullify_spell)
- return
- var/entered_spell_name
- var/datum/action/innate/cult/blood_spell/BS
- var/list/possible_spells = list()
- for(var/I in subtypesof(/datum/action/innate/cult/blood_spell))
- var/datum/action/innate/cult/blood_spell/J = I
- var/cult_name = initial(J.name)
- possible_spells[cult_name] = J
- possible_spells += "(REMOVE SPELL)"
- entered_spell_name = input(owner, "Pick a blood spell to prepare...", "Spell Choices") as null|anything in possible_spells
- if(entered_spell_name == "(REMOVE SPELL)")
- var/nullify_spell = input(owner, "Choose a spell to remove.", "Current Spells") as null|anything in spells
- if(nullify_spell)
- qdel(nullify_spell)
- return
- BS = possible_spells[entered_spell_name]
- if(QDELETED(src) || owner.incapacitated() || !BS)
- return
- to_chat(owner,"You begin to carve unnatural symbols into your flesh!")
- SEND_SOUND(owner, sound('sound/weapons/slice.ogg',0,1,10))
- if(!channeling)
- channeling = TRUE
- else
- to_chat(owner, "You are already invoking blood magic!")
- return
- if(do_after(owner, 100 - rune*65, target = owner))
- if(ishuman(owner))
- var/mob/living/carbon/human/H = owner
- H.bleed(30 - rune*25)
- var/datum/action/innate/cult/blood_spell/new_spell = new BS(owner)
- new_spell.Grant(owner, src)
- spells += new_spell
- Positioning()
- to_chat(owner, "Your wounds glows with power, you have prepared a [new_spell.name] invocation!")
- channeling = FALSE
-
-/datum/action/innate/cult/blood_spell //The next generation of talismans
- name = "Blood Magic"
- button_icon_state = "telerune"
- desc = "Fear the Old Blood."
- var/charges = 1
- var/magic_path = null
- var/obj/item/melee/blood_magic/hand_magic
- var/datum/action/innate/cult/blood_magic/all_magic
- var/base_desc //To allow for updating tooltips
- var/invocation
- var/health_cost = 0
-
-/datum/action/innate/cult/blood_spell/Grant(mob/living/owner, datum/action/innate/cult/blood_magic/BM)
- if(health_cost)
- desc += "
Deals [health_cost] damage to your arm per use."
- base_desc = desc
- desc += "
Has [charges] use\s remaining."
- all_magic = BM
- ..()
-
-/datum/action/innate/cult/blood_spell/Remove()
- if(all_magic)
- all_magic.spells -= src
- if(hand_magic)
- qdel(hand_magic)
- hand_magic = null
- ..()
-
-/datum/action/innate/cult/blood_spell/IsAvailable()
- if(!iscultist(owner) || owner.incapacitated() || !charges)
- return FALSE
- return ..()
-
-/datum/action/innate/cult/blood_spell/Activate()
- if(magic_path) //If this spell flows from the hand
- if(!hand_magic)
- hand_magic = new magic_path(owner, src)
- if(!owner.put_in_hands(hand_magic))
- qdel(hand_magic)
- hand_magic = null
- to_chat(owner, "You have no empty hand for invoking blood magic!")
- return
- to_chat(owner, "Your old wounds glow again as you invoke the [name].")
- return
- if(hand_magic)
- qdel(hand_magic)
- hand_magic = null
- to_chat(owner, "You snuff out the spell with your hand, saving its power for another time.")
-
-
-//Cult Blood Spells
-/datum/action/innate/cult/blood_spell/stun
- name = "Stun"
- desc = "A potent spell that will stun and mute victims upon contact."
- button_icon_state = "hand"
- magic_path = "/obj/item/melee/blood_magic/stun"
- health_cost = 10
-
-/datum/action/innate/cult/blood_spell/teleport
- name = "Teleport"
- desc = "A useful spell that teleport cultists to a chosen destination on contact."
- button_icon_state = "tele"
- magic_path = "/obj/item/melee/blood_magic/teleport"
- health_cost = 7
-
-/datum/action/innate/cult/blood_spell/emp
- name = "Electromagnetic Pulse"
- desc = "A large spell that immediately disables all electronics in the area."
- button_icon_state = "emp"
- health_cost = 10
- invocation = "Ta'gh fara'qha fel d'amar det!"
-
-/datum/action/innate/cult/blood_spell/emp/Activate()
- owner.visible_message("[owner]'s hand flashes a bright blue!", \
- "You speak the cursed words, emitting an EMP blast from your hand.")
- empulse(owner, 3, 6)
- owner.whisper(invocation, language = /datum/language/common)
- charges--
- if(charges<=0)
- qdel(src)
-
-/datum/action/innate/cult/blood_spell/shackles
- name = "Shadow Shackles"
- desc = "A stealthy spell that will handcuff and temporarily silence your victim."
- button_icon_state = "cuff"
- charges = 4
- magic_path = "/obj/item/melee/blood_magic/shackles"
-
-/datum/action/innate/cult/blood_spell/construction
- name = "Twisted Construction"
- desc = "A sinister spell used to convert:
Plasteel into runed metal
25 metal into a construct shell
Cyborgs directly into constructs
Cyborg shells into construct shells
Airlocks into runed airlocks (harm intent)"
- button_icon_state = "transmute"
- magic_path = "/obj/item/melee/blood_magic/construction"
-
-/datum/action/innate/cult/blood_spell/equipment
- name = "Summon Equipment"
- desc = "A crucial spell that enables you to summon either a ritual dagger or combat gear including armored robes, the nar'sien bola, and an eldritch longsword."
- button_icon_state = "equip"
- magic_path = "/obj/item/melee/blood_magic/armor"
-
-/datum/action/innate/cult/blood_spell/equipment/Activate()
- var/choice = alert(owner,"Choose your equipment type",,"Combat Equipment","Ritual Dagger","Cancel")
- if(choice == "Ritual Dagger")
- var/turf/T = get_turf(owner)
- owner.visible_message("[owner]'s hand glows red for a moment.", \
- "Red light begins to shimmer and take form within your hand!")
- var/obj/O = new /obj/item/melee/cultblade/dagger(T)
- if(owner.put_in_hands(O))
- to_chat(owner, "A ritual dagger appears in your hand!")
- else
- owner.visible_message("A ritual dagger appears at [owner]'s feet!", \
- "A ritual dagger materializes at your feet.")
- SEND_SOUND(owner, sound('sound/effects/magic.ogg',0,1,25))
- charges--
- desc = base_desc
- desc += "
Has [charges] use\s remaining."
- if(charges<=0)
- qdel(src)
- else if(choice == "Combat Equipment")
- ..()
-
-/datum/action/innate/cult/blood_spell/horror
- name = "Hallucinations"
- desc = "A ranged yet stealthy spell that will break the mind of the victim with nightmarish hallucinations."
- button_icon_state = "horror"
- var/obj/effect/proc_holder/horror/PH
- charges = 4
-
-/datum/action/innate/cult/blood_spell/horror/New()
- PH = new()
- PH.attached_action = src
- ..()
-
-/datum/action/innate/cult/blood_spell/horror/Destroy()
- var/obj/effect/proc_holder/horror/destroy = PH
- . = ..()
- if(destroy && !QDELETED(destroy))
- QDEL_NULL(destroy)
-
-/datum/action/innate/cult/blood_spell/horror/Activate()
- PH.toggle(owner) //the important bit
- return TRUE
-
-/obj/effect/proc_holder/horror
- active = FALSE
- ranged_mousepointer = 'icons/effects/cult_target.dmi'
- var/datum/action/innate/cult/blood_spell/attached_action
-
-/obj/effect/proc_holder/horror/Destroy()
- var/datum/action/innate/cult/blood_spell/AA = attached_action
- . = ..()
- if(AA && !QDELETED(AA))
- QDEL_NULL(AA)
-
-/obj/effect/proc_holder/horror/proc/toggle(mob/user)
- if(active)
- remove_ranged_ability("You dispel the magic...")
- else
- add_ranged_ability(user, "You prepare to horrify a target...")
-
-/obj/effect/proc_holder/horror/InterceptClickOn(mob/living/caller, params, atom/target)
- if(..())
- return
- if(ranged_ability_user.incapacitated() || !iscultist(caller))
- remove_ranged_ability()
- return
- var/turf/T = get_turf(ranged_ability_user)
- if(!isturf(T))
- return FALSE
- if(target in view(7, get_turf(ranged_ability_user)))
- if(!ishuman(target) || iscultist(target))
- return
- var/mob/living/carbon/human/H = target
- H.hallucination = max(H.hallucination, 240)
- SEND_SOUND(ranged_ability_user, sound('sound/effects/ghost.ogg',0,1,50))
- var/image/C = image('icons/effects/cult_effects.dmi',H,"bloodsparkles", ABOVE_MOB_LAYER)
- add_alt_appearance(/datum/atom_hud/alternate_appearance/basic/cult, "cult_apoc", C, FALSE)
- addtimer(CALLBACK(H,/atom/.proc/remove_alt_appearance,"cult_apoc",TRUE), 2400, TIMER_OVERRIDE|TIMER_UNIQUE)
- to_chat(ranged_ability_user,"[H] has been cursed with living nightmares!")
- attached_action.charges--
- attached_action.desc = attached_action.base_desc
- attached_action.desc += "
Has [attached_action.charges] use\s remaining."
- attached_action.UpdateButtonIcon()
- if(attached_action.charges <= 0)
- remove_mousepointer(ranged_ability_user.client)
- remove_ranged_ability("You have exhausted the spell's power!")
- qdel(src)
-
-/datum/action/innate/cult/blood_spell/veiling
- name = "Conceal Presence"
- desc = "A multi-function spell that alternates between hiding and revealing nearby cult runes, structures, turf, and airlocks."
- invocation = "Kla'atu barada nikt'o!"
- button_icon_state = "gone"
- charges = 10
- var/revealing = FALSE //if it reveals or not
-
-/datum/action/innate/cult/blood_spell/veiling/Activate()
- if(!revealing)
- owner.visible_message("Thin grey dust falls from [owner]'s hand!", \
- "You invoke the veiling spell, hiding nearby runes.")
- charges--
- SEND_SOUND(owner, sound('sound/magic/smoke.ogg',0,1,25))
- owner.whisper(invocation, language = /datum/language/common)
- for(var/obj/effect/rune/R in range(5,owner))
- R.conceal()
- for(var/obj/structure/destructible/cult/S in range(5,owner))
- S.conceal()
- for(var/turf/open/floor/engine/cult/T in range(5,owner))
- T.realappearance.alpha = 0
- for(var/obj/machinery/door/airlock/cult/AL in range(5, owner))
- AL.conceal()
- revealing = TRUE
- name = "Reveal Runes"
- button_icon_state = "back"
- else
- owner.visible_message("A flash of light shines from [owner]'s hand!", \
- "You invoke the counterspell, revealing nearby runes.")
- charges--
- owner.whisper(invocation, language = /datum/language/common)
- SEND_SOUND(owner, sound('sound/magic/enter_blood.ogg',0,1,25))
- for(var/obj/effect/rune/R in range(7,owner)) //More range in case you weren't standing in exactly the same spot
- R.reveal()
- for(var/obj/structure/destructible/cult/S in range(6,owner))
- S.reveal()
- for(var/turf/open/floor/engine/cult/T in range(6,owner))
- T.realappearance.alpha = initial(T.realappearance.alpha)
- for(var/obj/machinery/door/airlock/cult/AL in range(6, owner))
- AL.reveal()
- revealing = FALSE
- name = "Conceal Runes"
- button_icon_state = "gone"
- if(charges<= 0)
- qdel(src)
- desc = base_desc
- desc += "
Has [charges] use\s remaining."
- UpdateButtonIcon()
-
-/datum/action/innate/cult/blood_spell/manipulation
- name = "Blood Rites"
- desc = "A complex spell that allows you to gather blood and use it for healing or other powerful spells."
- invocation = "Fel'th Dol Ab'orod!"
- button_icon_state = "manip"
- charges = 5
- magic_path = "/obj/item/melee/blood_magic/manipulator"
-
-
-// The "magic hand" items
-/obj/item/melee/blood_magic
- name = "\improper magical aura"
- desc = "Sinister looking aura that distorts the flow of reality around it."
- icon = 'icons/obj/items_and_weapons.dmi'
- icon_state = "disintegrate"
- item_state = null
- flags_1 = ABSTRACT_1 | NODROP_1 | DROPDEL_1
- w_class = WEIGHT_CLASS_HUGE
- throwforce = 0
- throw_range = 0
- throw_speed = 0
- var/invocation
- var/uses = 1
- var/health_cost = 0 //The amount of health taken from the user when invoking the spell
- var/datum/action/innate/cult/blood_spell/source
-
-/obj/item/melee/blood_magic/New(loc, spell)
- source = spell
- uses = source.charges
- health_cost = source.health_cost
- ..()
-
-/obj/item/melee/blood_magic/Destroy()
- if(!QDELETED(source))
- if(uses <= 0)
- source.hand_magic = null
- qdel(source)
- source = null
- else
- source.hand_magic = null
- source.charges = uses
- source.desc = source.base_desc
- source.desc += "
Has [uses] use\s remaining."
- source.UpdateButtonIcon()
- ..()
-
-/obj/item/melee/blood_magic/attack_self(mob/living/user)
- afterattack(user, user, TRUE)
-
-/obj/item/melee/blood_magic/attack(mob/living/M, mob/living/carbon/user)
- if(!iscarbon(user) || !iscultist(user))
- uses = 0
- qdel(src)
- return
- add_logs(user, M, "used a cult spell on", source.name, "")
- M.lastattacker = user.real_name
- M.lastattackerckey = user.ckey
-
-/obj/item/melee/blood_magic/afterattack(atom/target, mob/living/carbon/user, proximity)
- if(invocation)
- user.whisper(invocation, language = /datum/language/common)
- if(health_cost)
- if(user.active_hand_index == 1)
- user.apply_damage(health_cost, BRUTE, "l_arm")
- else
- user.apply_damage(health_cost, BRUTE, "r_arm")
- if(uses <= 0)
- qdel(src)
- else if(source)
- source.desc = source.base_desc
- source.desc += "
Has [uses] use\s remaining."
- source.UpdateButtonIcon()
-
-//Stun
-/obj/item/melee/blood_magic/stun
- color = "#ff0000" // red
- invocation = "Fuu ma'jin!"
-
-/obj/item/melee/blood_magic/stun/afterattack(atom/target, mob/living/carbon/user, proximity)
- if(!isliving(target) || !proximity)
- return
- var/mob/living/L = target
- if(iscultist(target))
- return
- if(iscultist(user))
- user.visible_message("[user] holds up their hand, which explodes in a flash of red light!", \
- "You stun [L] with the spell!")
- var/obj/item/nullrod/N = locate() in L
- if(N)
- target.visible_message("[L]'s holy weapon absorbs the light!", \
- "Your holy weapon absorbs the blinding light!")
- else
- L.Knockdown(180)
- L.flash_act(1,1)
- if(issilicon(target))
- var/mob/living/silicon/S = L
- S.emp_act(EMP_HEAVY)
- else if(iscarbon(target))
- var/mob/living/carbon/C = L
- C.silent += 6
- C.stuttering += 15
- C.cultslurring += 15
- C.Jitter(15)
- if(is_servant_of_ratvar(L))
- L.adjustBruteLoss(15)
- uses--
- ..()
-
-//Teleportation
-/obj/item/melee/blood_magic/teleport
- color = RUNE_COLOR_TELEPORT
- desc = "A potent spell that teleport cultists on contact."
- invocation = "Sas'so c'arta forbici!"
-
-/obj/item/melee/blood_magic/teleport/afterattack(atom/target, mob/living/carbon/user, proximity)
- if(!iscultist(target) || !proximity)
- to_chat(user, "You can only teleport adjacent cultists with this spell!")
- return
- if(iscultist(user))
- var/list/potential_runes = list()
- var/list/teleportnames = list()
- for(var/R in GLOB.teleport_runes)
- var/obj/effect/rune/teleport/T = R
- potential_runes[avoid_assoc_duplicate_keys(T.listkey, teleportnames)] = T
-
- if(!potential_runes.len)
- to_chat(user, "There are no valid runes to teleport to!")
- log_game("Teleport talisman failed - no other teleport runes")
- return
-
- var/turf/T = get_turf(src)
- if(is_away_level(T.z))
- to_chat(user, "You are not in the right dimension!")
- log_game("Teleport spell failed - user in away mission")
- return
-
- var/input_rune_key = input(user, "Choose a rune to teleport to.", "Rune to Teleport to") as null|anything in potential_runes //we know what key they picked
- var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to?
- if(QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !actual_selected_rune || !proximity)
- return
- var/turf/dest = get_turf(actual_selected_rune)
- if(is_blocked_turf(dest, TRUE))
- to_chat(user, "The target rune is blocked. Attempting to teleport to it would be massively unwise.")
- return
- uses--
- user.visible_message("Dust flows from [user]'s hand, and [user.p_they()] disappear[user.p_s()] with a sharp crack!", \
- "You speak the words of the talisman and find yourself somewhere else!", "You hear a sharp crack.")
- var/mob/living/L = target
- L.forceMove(dest)
- dest.visible_message("There is a boom of outrushing air as something appears above the rune!", null, "You hear a boom.")
- ..()
-
-//Shackles
-/obj/item/melee/blood_magic/shackles
- name = "Shadow Shackles"
- desc = "Allows you to bind a victim and temporarily silence them."
- invocation = "In'totum Lig'abis!"
- color = "#000000" // black
-
-/obj/item/melee/blood_magic/shackles/afterattack(atom/target, mob/living/carbon/user, proximity)
- if(iscultist(user) && iscarbon(target) && proximity)
- var/mob/living/carbon/C = target
- if(C.get_num_arms() >= 2 || C.get_arm_ignore())
- CuffAttack(C, user)
- else
- user.visible_message("This victim doesn't have enough arms to complete the restraint!")
- return
- ..()
-
-/obj/item/melee/blood_magic/shackles/proc/CuffAttack(mob/living/carbon/C, mob/living/user)
- if(!C.handcuffed)
- playsound(loc, 'sound/weapons/cablecuff.ogg', 30, 1, -2)
- C.visible_message("[user] begins restraining [C] with dark magic!", \
- "[user] begins shaping a dark magic around your wrists!")
- if(do_mob(user, C, 30))
- if(!C.handcuffed)
- C.handcuffed = new /obj/item/restraints/handcuffs/energy/cult/used(C)
- C.update_handcuffed()
- C.silent += 5
- to_chat(user, "You shackle [C].")
- add_logs(user, C, "shackled")
- uses--
- else
- to_chat(user, "[C] is already bound.")
- else
- to_chat(user, "You fail to shackle [C].")
- else
- to_chat(user, "[C] is already bound.")
-
-
-/obj/item/restraints/handcuffs/energy/cult //For the shackling spell
- name = "shadow shackles"
- desc = "Shackles that bind the wrists with sinister magic."
- trashtype = /obj/item/restraints/handcuffs/energy/used
- flags_1 = DROPDEL_1
-
-/obj/item/restraints/handcuffs/energy/cult/used/dropped(mob/user)
- user.visible_message("[user]'s shackles shatter in a discharge of dark magic!", \
- "Your [src] shatters in a discharge of dark magic!")
- . = ..()
-
-
-//Construction: Creates a construct shell out of 25 metal sheets, or converts plasteel into runed metal
-/obj/item/melee/blood_magic/construction
- name = "Twisted Construction"
- desc = "Corrupts metal and plasteel into more sinister forms."
- invocation = "Ethra p'ni dedol!"
- color = "#000000" // black
-
-/obj/item/melee/blood_magic/construction/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
- if(proximity_flag && iscultist(user))
- var/turf/T = get_turf(target)
- if(istype(target, /obj/item/stack/sheet/metal))
- var/obj/item/stack/sheet/candidate = target
- if(candidate.use(50))
- uses--
- to_chat(user, "A dark cloud eminates from your hand and swirls around the metal, twisting it into a construct shell!")
- new /obj/structure/constructshell(T)
- SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
- else
- to_chat(user, "You need 50 metal to produce a construct shell!")
- else if(istype(target, /obj/item/stack/sheet/plasteel))
- var/obj/item/stack/sheet/plasteel/candidate = target
- var/quantity = min(candidate.amount, uses)
- uses -= quantity
- new /obj/item/stack/sheet/runed_metal(T,quantity)
- candidate.use(quantity)
- to_chat(user, "A dark cloud eminates from you hand and swirls around the plasteel, transforming it into runed metal!")
- SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
- else if(istype(target,/mob/living/silicon/robot))
- var/mob/living/silicon/robot/candidate = target
- if(candidate.mmi)
- user.visible_message("A dark cloud eminates from [user]'s hand and swirls around [candidate]!")
- playsound(T, 'sound/machines/airlock_alien_prying.ogg', 80, 1)
- var/prev_color = candidate.color
- candidate.color = "black"
- if(do_after(user, 90, target = candidate))
- candidate.emp_act(EMP_HEAVY)
- var/construct_class = alert(user, "Please choose which type of construct you wish to create.",,"Juggernaut","Wraith","Artificer")
- user.visible_message("The dark cloud receedes from what was formerly [candidate], revealing a\n [construct_class]!")
- switch(construct_class)
- if("Juggernaut")
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/armored, candidate, user, 0, T)
- if("Wraith")
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/wraith, candidate, user, 0, T)
- if("Artificer")
- makeNewConstruct(/mob/living/simple_animal/hostile/construct/builder, candidate, user, 0, T)
- SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
- uses--
- candidate.mmi = null
- qdel(candidate)
- else
- candidate.color = prev_color
- else
- uses--
- to_chat(user, "A dark cloud eminates from you hand and swirls around [candidate] - twisting it into a construct shell!")
- new /obj/structure/constructshell(T)
- SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
- else if(istype(target,/obj/machinery/door/airlock))
- target.narsie_act()
- uses--
- user.visible_message("Black ribbons suddenly eminate from [user]'s hand and cling to the airlock - twisting and corrupting it!")
- SEND_SOUND(user, sound('sound/effects/magic.ogg',0,1,25))
- else
- to_chat(user, "The spell will not work on [target]!")
- ..()
-
-//Armor: Gives the target a basic cultist combat loadout
-/obj/item/melee/blood_magic/armor
- name = "Sinister Armaments"
- desc = "A spell that will equip the target with cultist equipment if there is a slot to equip it to."
- color = "#33cc33" // green
-
-/obj/item/melee/blood_magic/armor/afterattack(atom/target, mob/living/carbon/user, proximity)
- if(iscarbon(target) && proximity)
- uses--
- var/mob/living/carbon/C = target
- C.visible_message("Otherworldly armor suddenly appears on [C]!")
- C.equip_to_slot_or_del(new /obj/item/clothing/under/color/black,slot_w_uniform)
- C.equip_to_slot_or_del(new /obj/item/clothing/head/culthood/alt(user), slot_head)
- C.equip_to_slot_or_del(new /obj/item/clothing/suit/cultrobes/alt(user), slot_wear_suit)
- C.equip_to_slot_or_del(new /obj/item/clothing/shoes/cult/alt(user), slot_shoes)
- C.equip_to_slot_or_del(new /obj/item/storage/backpack/cultpack(user), slot_back)
- if(C == user)
- qdel(src) //Clears the hands
- C.put_in_hands(new /obj/item/melee/cultblade(user))
- C.put_in_hands(new /obj/item/restraints/legcuffs/bola/cult(user))
- ..()
-
-/obj/item/melee/blood_magic/manipulator
- name = "Blood Rite"
- desc = "A spell that will absorb blood from anything you touch.
Touching cultists and constructs can heal them.
Clicking the hand will potentially let you focus the spell into something stronger."
- color = "#7D1717"
-
-/obj/item/melee/blood_magic/manipulator/afterattack(atom/target, mob/living/carbon/human/user, proximity)
- if(proximity)
- if(ishuman(target))
- var/mob/living/carbon/human/H = target
- if(NOBLOOD in H.dna.species.species_traits)
- to_chat(user,"Blood rites do not work on species with no blood!")
- return
- if(iscultist(H))
- if(H.stat == DEAD)
- to_chat(user,"Only a revive rune can bring back the dead!")
- return
- if(H.blood_volume < BLOOD_VOLUME_SAFE)
- var/restore_blood = BLOOD_VOLUME_SAFE - H.blood_volume
- if(uses*2 < restore_blood)
- H.blood_volume += uses*2
- to_chat(user,"You use the last of your blood rites to restore what blood you could!")
- uses = 0
- return ..()
- else
- H.blood_volume = BLOOD_VOLUME_SAFE
- uses -= round(restore_blood/2)
- to_chat(user,"Your blood rites have restored [H == user ? "your" : "their"] blood to safe levels!")
- var/overall_damage = H.getBruteLoss() + H.getFireLoss() + H.getToxLoss() + H.getOxyLoss()
- if(overall_damage == 0)
- to_chat(user,"That cultist doesn't require healing!")
- else
- var/ratio = uses/overall_damage
- if(H == user)
- to_chat(user,"Your blood healing is far less efficient when used on yourself!")
- ratio *= 0.35 // Healing is half as effective if you can't perform a full heal
- uses -= round(overall_damage) // Healing is 65% more "expensive" even if you can still perform the full heal
- if(ratio>1)
- ratio = 1
- uses -= round(overall_damage)
- H.visible_message("[H] is fully healed by [H==user ? "their":"[H]'s"]'s blood magic!")
- else
- H.visible_message("[H] is partially healed by [H==user ? "their":"[H]'s"] blood magic.")
- uses = 0
- ratio *= -1
- H.adjustOxyLoss((overall_damage*ratio) * (H.getOxyLoss() / overall_damage), 0)
- H.adjustToxLoss((overall_damage*ratio) * (H.getToxLoss() / overall_damage), 0)
- H.adjustFireLoss((overall_damage*ratio) * (H.getFireLoss() / overall_damage), 0)
- H.adjustBruteLoss((overall_damage*ratio) * (H.getBruteLoss() / overall_damage), 0)
- H.updatehealth()
- playsound(get_turf(H), 'sound/magic/staff_healing.ogg', 25)
- new /obj/effect/temp_visual/cult/sparks(get_turf(H))
- user.Beam(H,icon_state="sendbeam",time=15)
- else
- if(H.stat == DEAD)
- to_chat(user,"Their blood has stopped flowing, you'll have to find another way to extract it.")
- return
- if(H.cultslurring)
- to_chat(user,"Their blood has been tainted by an even stronger form of blood magic, it's no use to us like this!")
- return
- if(H.blood_volume > BLOOD_VOLUME_SAFE)
- H.blood_volume -= 100
- uses += 50
- user.Beam(H,icon_state="drainbeam",time=10)
- playsound(get_turf(H), 'sound/magic/enter_blood.ogg', 50)
- H.visible_message("[user] has drained some of [H]'s blood!")
- to_chat(user,"Your blood rite gains 50 charges from draining [H]'s blood.")
- new /obj/effect/temp_visual/cult/sparks(get_turf(H))
- else
- to_chat(user,"They're missing too much blood - you cannot drain them further!")
- return
- if(isconstruct(target))
- var/mob/living/simple_animal/M = target
- var/missing = M.maxHealth - M.health
- if(missing)
- if(uses > missing)
- M.adjustHealth(-missing)
- M.visible_message("[M] is fully-healed by [user]'s blood magic!")
- uses -= missing
- else
- M.adjustHealth(-uses)
- M.visible_message("[M] is healed by [user]'sblood magic!")
- uses = 0
- playsound(get_turf(M), 'sound/magic/staff_healing.ogg', 25)
- user.Beam(M,icon_state="sendbeam",time=10)
- if(istype(target, /obj/effect/decal/cleanable/blood))
- blood_draw(target, user)
- ..()
-
-/obj/item/melee/blood_magic/manipulator/proc/blood_draw(atom/target, mob/living/carbon/human/user)
- var/temp = 0
- var/turf/T = get_turf(target)
- if(T)
- for(var/obj/effect/decal/cleanable/blood/B in view(T, 2))
- if(B.blood_state == "blood")
- if(B.bloodiness == 100) //Bonus for "pristine" bloodpools, also to prevent cheese with footprint spam
- temp += 30
- else
- temp += max((B.bloodiness**2)/800,1)
- new /obj/effect/temp_visual/cult/turf/floor(get_turf(B))
- qdel(B)
- for(var/obj/effect/decal/cleanable/trail_holder/TH in view(T, 2))
- qdel(TH)
- var/obj/item/clothing/shoes/shoecheck = user.shoes
- if(shoecheck && shoecheck.bloody_shoes["blood"])
- temp += shoecheck.bloody_shoes["blood"]/20
- shoecheck.bloody_shoes["blood"] = 0
- if(temp)
- user.Beam(T,icon_state="drainbeam",time=15)
- new /obj/effect/temp_visual/cult/sparks(get_turf(user))
- playsound(T, 'sound/magic/enter_blood.ogg', 50)
- to_chat(user, "Your blood rite has gained [round(temp)] charge\s from blood sources around you!")
- uses += round(temp)
-
-/obj/item/melee/blood_magic/manipulator/attack_self(mob/living/user)
- if(iscultist(user))
- var/list/options = list("Blood Spear (200)", "Blood Bolt Barrage (400)", "Blood Beam (600)")
- var/choice = input(user, "Choose a greater blood rite...", "Greater Blood Rites") as null|anything in options
- if(!choice)
- to_chat(user, "You decide against conducting a greater blood rite.")
- return
- switch(choice)
- if("Blood Spear (200)")
- if(uses < 200)
- to_chat(user, "You need 200 charges to perform this rite.")
- else
- uses -= 200
- var/turf/T = get_turf(user)
- qdel(src)
- var/datum/action/innate/cult/spear/S = new(user)
- var/obj/item/twohanded/cult_spear/rite = new(T)
- S.Grant(user, rite)
- rite.spear_act = S
- if(user.put_in_hands(rite))
- to_chat(user, "A [rite.name] appears in your hand!")
- else
- user.visible_message("A [rite.name] appears at [user]'s feet!", \
- "A [rite.name] materializes at your feet.")
- if("Blood Bolt Barrage (400)")
- if(uses < 400)
- to_chat(user, "You need 400 charges to perform this rite.")
- else
- var/obj/rite = new /obj/item/gun/ballistic/shotgun/boltaction/enchanted/arcane_barrage/blood()
- uses -= 400
- qdel(src)
- if(user.put_in_hands(rite))
- to_chat(user, "Your hands glow with power!")
- else
- to_chat(user, "You need a free hand for this rite!")
- qdel(rite)
- if("Blood Beam (600)")
- if(uses < 600)
- to_chat(user, "You need 600 charges to perform this rite.")
- else
- var/obj/rite = new /obj/item/blood_beam()
- uses -= 600
- qdel(src)
- if(user.put_in_hands(rite))
- to_chat(user, "Your hands glow with POWER OVERWHELMING!!!")
- else
- to_chat(user, "You need a free hand for this rite!")
- qdel(rite)
diff --git a/code/citadel/dogborgstuff.dm b/code/game/objects/items/devices/dogborg_sleeper.dm
similarity index 56%
rename from code/citadel/dogborgstuff.dm
rename to code/game/objects/items/devices/dogborg_sleeper.dm
index 55eb6fe356..217786f142 100644
--- a/code/citadel/dogborgstuff.dm
+++ b/code/game/objects/items/devices/dogborg_sleeper.dm
@@ -1,306 +1,4 @@
-/obj/item/dogborg/jaws/big
- name = "combat jaws"
- icon = 'icons/mob/dogborg.dmi'
- icon_state = "jaws"
- desc = "The jaws of the law."
- flags_1 = CONDUCT_1
- force = 12
- throwforce = 0
- hitsound = 'sound/weapons/bite.ogg'
- attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
- w_class = 3
- sharpness = IS_SHARP
-
-/obj/item/dogborg/jaws/small
- name = "puppy jaws"
- icon = 'icons/mob/dogborg.dmi'
- icon_state = "smalljaws"
- desc = "The jaws of a small dog."
- flags_1 = CONDUCT_1
- force = 6
- throwforce = 0
- hitsound = 'sound/weapons/bite.ogg'
- attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
- w_class = 3
- sharpness = IS_SHARP
-
-/obj/item/dogborg/jaws/attack(atom/A, mob/living/silicon/robot/user)
- ..()
- user.do_attack_animation(A, ATTACK_EFFECT_BITE)
-
-/obj/item/dogborg/jaws/small/attack_self(mob/user)
- var/mob/living/silicon/robot.R = user
- if(R.emagged)
- name = "combat jaws"
- icon = 'icons/mob/dogborg.dmi'
- icon_state = "jaws"
- desc = "The jaws of the law."
- flags_1 = CONDUCT_1
- force = 12
- throwforce = 0
- hitsound = 'sound/weapons/bite.ogg'
- attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
- w_class = 3
- sharpness = IS_SHARP
- else
- name = "puppy jaws"
- icon = 'icons/mob/dogborg.dmi'
- icon_state = "smalljaws"
- desc = "The jaws of a small dog."
- flags_1 = CONDUCT_1
- force = 5
- throwforce = 0
- hitsound = 'sound/weapons/bite.ogg'
- attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
- w_class = 3
- sharpness = IS_SHARP
- update_icon()
-
-
-//Cuffs
-
-/obj/item/restraints/handcuffs/cable/zipties/cyborg/dog/attack(mob/living/carbon/C, mob/user)
- if(!C.handcuffed)
- playsound(loc, 'sound/weapons/cablecuff.ogg', 60, 1, -2)
- C.visible_message("[user] is trying to put zipties on [C]!", \
- "[user] is trying to put zipties on [C]!")
- if(do_mob(user, C, 60))
- if(!C.handcuffed)
- C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C)
- C.update_inv_handcuffed(0)
- to_chat(user,"You handcuff [C].")
- playsound(loc, pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg'), 50, 0)
- add_logs(user, C, "handcuffed")
- else
- to_chat(user,"You fail to handcuff [C]!")
-
-
-//Boop
-
-/obj/item/device/analyzer/nose
- name = "boop module"
- icon = 'icons/mob/dogborg.dmi'
- icon_state = "nose"
- desc = "The BOOP module"
- flags_1 = CONDUCT_1
- force = 0
- throwforce = 0
- attack_verb = list("nuzzled", "nosed", "booped")
- w_class = 1
-
-/obj/item/device/analyzer/nose/attack_self(mob/user)
- user.visible_message("[user] sniffs around the air.", "You sniff the air for gas traces.")
-
- var/turf/location = user.loc
- if(!istype(location))
- return
-
- var/datum/gas_mixture/environment = location.return_air()
-
- var/pressure = environment.return_pressure()
- var/total_moles = environment.total_moles()
-
- to_chat(user, "Results:")
- if(abs(pressure - ONE_ATMOSPHERE) < 10)
- to_chat(user, "Pressure: [round(pressure,0.1)] kPa")
- else
- to_chat(user, "Pressure: [round(pressure,0.1)] kPa")
- if(total_moles)
- var/list/env_gases = environment.gases
-
- environment.assert_gases(arglist(GLOB.hardcoded_gases))
- var/o2_concentration = env_gases[/datum/gas/oxygen][MOLES]/total_moles
- var/n2_concentration = env_gases[/datum/gas/nitrogen][MOLES]/total_moles
- var/co2_concentration = env_gases[/datum/gas/carbon_dioxide][MOLES]/total_moles
- var/plasma_concentration = env_gases[/datum/gas/plasma][MOLES]/total_moles
- environment.garbage_collect()
-
- if(abs(n2_concentration - N2STANDARD) < 20)
- to_chat(user, "Nitrogen: [round(n2_concentration*100, 0.01)] %")
- else
- to_chat(user, "Nitrogen: [round(n2_concentration*100, 0.01)] %")
-
- if(abs(o2_concentration - O2STANDARD) < 2)
- to_chat(user, "Oxygen: [round(o2_concentration*100, 0.01)] %")
- else
- to_chat(user, "Oxygen: [round(o2_concentration*100, 0.01)] %")
-
- if(co2_concentration > 0.01)
- to_chat(user, "CO2: [round(co2_concentration*100, 0.01)] %")
- else
- to_chat(user, "CO2: [round(co2_concentration*100, 0.01)] %")
-
- if(plasma_concentration > 0.005)
- to_chat(user, "Plasma: [round(plasma_concentration*100, 0.01)] %")
- else
- to_chat(user, "Plasma: [round(plasma_concentration*100, 0.01)] %")
-
-
- for(var/id in env_gases)
- if(id in GLOB.hardcoded_gases)
- continue
- var/gas_concentration = env_gases[id][MOLES]/total_moles
- to_chat(user, "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_concentration*100, 0.01)] %")
- to_chat(user, "Temperature: [round(environment.temperature-T0C)] °C")
-
-/obj/item/device/analyzer/nose/AltClick(mob/user) //Barometer output for measuring when the next storm happens
- . = ..()
-
-//Delivery
-
-/obj/item/storage/bag/borgdelivery
- name = "fetching storage"
- desc = "Fetch the thing!"
- icon = 'icons/mob/dogborg.dmi'
- icon_state = "dbag"
- //Can hold one big item at a time. Drops contents on unequip.(see inventory.dm)
- w_class = 5
- max_w_class = 2
- max_combined_w_class = 2
- storage_slots = 1
- collection_mode = 0
- can_hold = list() // any
- cant_hold = list(/obj/item/disk/nuclear)
-
-
-//Tongue stuff
-
-/obj/item/soap/tongue
- name = "synthetic tongue"
- desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
- icon = 'icons/mob/dogborg.dmi'
- icon_state = "synthtongue"
- hitsound = 'sound/effects/attackblob.ogg'
- cleanspeed = 80
-
-/obj/item/soap/tongue/scrubpup
- cleanspeed = 25 //slightly faster than a mop.
-
-/obj/item/soap/tongue/New()
- ..()
- flags_1 |= NOBLUDGEON_1 //No more attack messages
-
-/obj/item/trash/rkibble
- name = "robo kibble"
- desc = "A novelty bowl of assorted mech fabricator byproducts. Mockingly feed this to the sec-dog to help it recharge."
- icon = 'icons/mob/dogborg.dmi'
- icon_state= "kibble"
-
-/obj/item/soap/tongue/attack_self(mob/user)
- var/mob/living/silicon/robot.R = user
- if(R.emagged)
- name = "hacked tongue of doom"
- desc = "Your tongue has been upgraded successfully. Congratulations."
- icon = 'icons/mob/dogborg.dmi'
- icon_state = "syndietongue"
- cleanspeed = 10 //(nerf'd)tator soap stat
- else
- name = "synthetic tongue"
- desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
- icon = 'icons/mob/dogborg.dmi'
- icon_state = "synthtongue"
- cleanspeed = initial(cleanspeed)
- update_icon()
-
-/obj/item/soap/tongue/afterattack(atom/target, mob/user, proximity)
- var/mob/living/silicon/robot.R = user
- if(!proximity || !check_allowed_items(target))
- return
- if(R.client && (target in R.client.screen))
- to_chat(R, "You need to take that [target.name] off before cleaning it!")
- else if(is_cleanable(target))
- R.visible_message("[R] begins to lick off \the [target.name].", "You begin to lick off \the [target.name]...")
- if(do_after(R, src.cleanspeed, target = target))
- if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
- return //If they moved away, you can't eat them.
- to_chat(R, "You finish licking off \the [target.name].")
- qdel(target)
- R.cell.give(50)
- else if(isobj(target)) //hoo boy. danger zone man
- if(istype(target,/obj/item/trash))
- R.visible_message("[R] nibbles away at \the [target.name].", "You begin to nibble away at \the [target.name]...")
- if(do_after(R, src.cleanspeed, target = target))
- if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
- return //If they moved away, you can't eat them.
- to_chat(R, "You finish off \the [target.name].")
- qdel(target)
- R.cell.give(250)
- return
- if(istype(target,/obj/item/stock_parts/cell))
- R.visible_message("[R] begins cramming \the [target.name] down its throat.", "You begin cramming \the [target.name] down your throat...")
- if(do_after(R, 50, target = target))
- if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
- return //If they moved away, you can't eat them.
- to_chat(R, "You finish off \the [target.name].")
- var/obj/item/stock_parts/cell.C = target
- R.cell.charge = R.cell.charge + (C.charge / 3) //Instant full cell upgrades op idgaf
- qdel(target)
- return
- var/obj/item/I = target //HAHA FUCK IT, NOT LIKE WE ALREADY HAVE A SHITTON OF WAYS TO REMOVE SHIT
- if(!I.anchored && R.emagged)
- R.visible_message("[R] begins chewing up \the [target.name]. Looks like it's trying to loophole around its diet restriction!", "You begin chewing up \the [target.name]...")
- if(do_after(R, 100, target = I)) //Nerf dat time yo
- if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. Even emags don't make you magically eat things at range.
- return //If they moved away, you can't eat them.
- visible_message("[R] chews up \the [target.name] and cleans off the debris!")
- to_chat(R, "You finish off \the [target.name].")
- qdel(I)
- R.cell.give(500)
- return
- R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...")
- if(do_after(R, src.cleanspeed, target = target))
- if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
- return //If they moved away, you can't clean them.
- to_chat(R,"You clean \the [target.name].")
- var/obj/effect/decal/cleanable/C = locate() in target
- qdel(C)
- SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
- else if(ishuman(target))
- if(R.emagged)
- var/mob/living/L = target
- if(R.cell.charge <= 666)
- return
- L.Stun(4) // normal stunbaton is force 7 gimme a break good sir!
- L.Knockdown(80)
- L.apply_effect(STUTTER, 4)
- L.visible_message("[R] has shocked [L] with its tongue!", \
- "[R] has shocked you with its tongue! You can feel the betrayal.")
- playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
- R.cell.use(666)
- else
- R.visible_message("\the [R] affectionally licks \the [target]'s face!", "You affectionally lick \the [target]'s face!")
- playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
- return
- else if(istype(target, /obj/structure/window))
- R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...")
- if(do_after(R, src.cleanspeed, target = target))
- if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
- return //If they moved away, you can't clean them.
- to_chat(R, "You clean \the [target.name].")
- target.color = initial(target.color)
- else
- R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...")
- if(do_after(R, src.cleanspeed, target = target))
- if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
- return //If they moved away, you can't clean them.
- to_chat(R, "You clean \the [target.name].")
- var/obj/effect/decal/cleanable/C = locate() in target
- qdel(C)
- SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
- return
-
-
-
-//Defibs
-
-/obj/item/twohanded/shockpaddles/cyborg/hound
- name = "defibrillator paws"
- desc = "MediHound specific shock paws."
- icon = 'icons/mob/dogborg.dmi'
- icon_state = "defibpaddles0"
- item_state = "defibpaddles0"
-
-//Sleeper
+// Dogborg Sleeper units
/obj/item/device/dogborg/sleeper
name = "hound sleeper"
@@ -363,7 +61,7 @@
return
if(!(target.client && target.client.prefs && target.client.prefs.toggles && (target.client.prefs.toggles & MEDIHOUND_SLEEPER)))
to_chat(user, "This person is incompatible with our equipment.")
- return
+ return
if(target.buckled)
to_chat(user, "The user is buckled and can not be put into your [src.name].")
return
@@ -608,6 +306,12 @@
playsound(get_turf(hound),"death_pred",50,0,-6,0,channel=CHANNEL_PRED,ignore_walls = FALSE)
T.stop_sound_channel(CHANNEL_PRED)
T.playsound_local("death_prey",60)
+ for(var/belly in T.vore_organs)
+ var/obj/belly/B = belly
+ for(var/atom/movable/thing in B)
+ thing.forceMove(src)
+ if(ismob(thing))
+ to_chat(thing, "As [T] melts away around you, you find yourself in [hound]'s [name]")
for(var/obj/item/W in T)
if(!T.dropItemToGround(W))
qdel(W)
@@ -793,101 +497,4 @@
user.visible_message("[hound.name]'s garbage processor groans lightly as [trashman] slips inside.", "Your garbage compactor groans lightly as [trashman] slips inside.")
playsound(hound, 'sound/effects/bin_close.ogg', 80, 1)
return
- return
-
-
-// Pounce stuff for K-9
-
-/obj/item/dogborg/pounce
- name = "pounce"
- icon = 'icons/mob/dogborg.dmi'
- icon_state = "pounce"
- desc = "Leap at your target to momentarily stun them."
- force = 0
- throwforce = 0
-
-/obj/item/dogborg/pounce/New()
- ..()
- flags_1 |= NOBLUDGEON_1
-
-/mob/living/silicon/robot
- var/leaping = 0
- var/pounce_cooldown = 0
- var/pounce_cooldown_time = 50 //Nearly doubled, u happy?
- var/pounce_spoolup = 3
- var/leap_at
- var/disabler
- var/laser
- var/sleeper_g
- var/sleeper_r
-
-#define MAX_K9_LEAP_DIST 4 //because something's definitely borked the pounce functioning from a distance.
-
-/obj/item/dogborg/pounce/afterattack(atom/A, mob/user)
- var/mob/living/silicon/robot/R = user
- if(R && !R.pounce_cooldown)
- R.pounce_cooldown = !R.pounce_cooldown
- to_chat(R, "Your targeting systems lock on to [A]...")
- addtimer(CALLBACK(R, /mob/living/silicon/robot.proc/leap_at, A), R.pounce_spoolup)
- spawn(R.pounce_cooldown_time)
- R.pounce_cooldown = !R.pounce_cooldown
- else if(R && R.pounce_cooldown)
- to_chat(R, "Your leg actuators are still recharging!")
-
-/mob/living/silicon/robot/proc/leap_at(atom/A)
- if(leaping || stat || buckled || lying)
- return
-
- if(!has_gravity(src) || !has_gravity(A))
- to_chat(src,"It is unsafe to leap without gravity!")
- //It's also extremely buggy visually, so it's balance+bugfix
- return
-
- if(cell.charge <= 500)
- to_chat(src,"Insufficent reserves for jump actuators!")
- return
-
- else
- leaping = 1
- weather_immunities += "lava"
- pixel_y = 10
- update_icons()
- throw_at(A, MAX_K9_LEAP_DIST, 1, spin=0, diagonals_first = 1)
- cell.use(500) //Doubled the energy consumption
- weather_immunities -= "lava"
-
-/mob/living/silicon/robot/throw_impact(atom/A)
-
- if(!leaping)
- return ..()
-
- if(A)
- if(isliving(A))
- var/mob/living/L = A
- var/blocked = 0
- if(ishuman(A))
- var/mob/living/carbon/human/H = A
- if(H.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK))
- blocked = 1
- if(!blocked)
- L.visible_message("[src] pounces on [L]!", "[src] pounces on you!")
- L.Knockdown(45)
- playsound(src, 'sound/weapons/Egloves.ogg', 50, 1)
- sleep(2)//Runtime prevention (infinite bump() calls on hulks)
- step_towards(src,L)
- else
- Knockdown(45, 1, 1)
-
- pounce_cooldown = !pounce_cooldown
- spawn(pounce_cooldown_time) //3s by default
- pounce_cooldown = !pounce_cooldown
- else if(A.density && !A.CanPass(src))
- visible_message("[src] smashes into [A]!", "You smash into [A]!")
- playsound(src, 'sound/items/trayhit1.ogg', 50, 1)
- Knockdown(45, 1, 1)
-
- if(leaping)
- leaping = 0
- pixel_y = initial(pixel_y)
- update_icons()
- update_canmove()
+ return
\ No newline at end of file
diff --git a/code/game/skincmd.dm b/code/game/skincmd.dm
deleted file mode 100644
index ad2f97f55a..0000000000
--- a/code/game/skincmd.dm
+++ /dev/null
@@ -1,13 +0,0 @@
-/mob/var/skincmds = list()
-/obj/proc/SkinCmd(mob/user as mob, var/data as text)
-
-/proc/SkinCmdRegister(mob/user, name as text, obj/O)
- user.skincmds[name] = O
-
-/mob/verb/skincmd(data as text)
- set hidden = 1
-
- var/ref = copytext(data, 1, findtext(data, ";"))
- if (src.skincmds[ref] != null)
- var/obj/a = src.skincmds[ref]
- a.SkinCmd(src, copytext(data, findtext(data, ";") + 1))
\ No newline at end of file
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index f38bfdd84d..85811f693c 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -100,7 +100,7 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/smite
))
GLOBAL_PROTECT(admin_verbs_spawn)
-GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/spawn_cargo, /client/proc/respawn_character))
+GLOBAL_LIST_INIT(admin_verbs_spawn, list(/datum/admins/proc/spawn_atom, /datum/admins/proc/spawn_cargo, /datum/admins/proc/spawn_objasmob, /client/proc/respawn_character))
GLOBAL_PROTECT(admin_verbs_server)
GLOBAL_LIST_INIT(admin_verbs_server, world.AVerbsServer())
/world/proc/AVerbsServer()
diff --git a/code/modules/admin/verbs/spawnobjasmob.dm b/code/modules/admin/verbs/spawnobjasmob.dm
new file mode 100644
index 0000000000..f51f776d6f
--- /dev/null
+++ b/code/modules/admin/verbs/spawnobjasmob.dm
@@ -0,0 +1,70 @@
+/datum/admins/proc/spawn_objasmob(object as text)
+ set category = "Debug"
+ set desc = "(obj path) Spawn object-mob"
+ set name = "Spawn object-mob"
+
+ if(!check_rights(R_SPAWN))
+ return
+
+ var/chosen = pick_closest_path(object, make_types_fancy(subtypesof(/obj)))
+
+ if (!chosen)
+ return
+
+ var/mob/living/simple_animal/hostile/mimic/copy/basemob = /mob/living/simple_animal/hostile/mimic/copy
+
+ var/obj/chosen_obj = text2path(chosen)
+
+ var/list/settings = list(
+ "mainsettings" = list(
+ "name" = list("desc" = "Name", "type" = "string", "value" = "Bob"),
+ "maxhealth" = list("desc" = "Max. health", "type" = "number", "value" = 100),
+ "access" = list("desc" = "Access ID", "type" = "datum", "path" = "/obj/item/card/id", "value" = "Default"),
+ "objtype" = list("desc" = "Base obj type", "type" = "datum", "path" = "/obj", "value" = "[chosen]"),
+ "googlyeyes" = list("desc" = "Googly eyes", "type" = "boolean", "value" = "No"),
+ "disableai" = list("desc" = "Disable AI", "type" = "boolean", "value" = "Yes"),
+ "idledamage" = list("desc" = "Damaged while idle", "type" = "boolean", "value" = "No"),
+ "dropitem" = list("desc" = "Drop obj on death", "type" = "boolean", "value" = "Yes"),
+ "mobtype" = list("desc" = "Base mob type", "type" = "datum", "path" = "/mob/living/simple_animal/hostile/mimic/copy", "value" = "/mob/living/simple_animal/hostile/mimic/copy"),
+ "ckey" = list("desc" = "ckey", "type" = "ckey", "value" = "none"),
+ )
+ )
+
+ var/list/prefreturn = presentpreflikepicker(usr,"Customize mob", "Customize mob", Button1="Ok", width = 450, StealFocus = 1,Timeout = 0, settings=settings)
+ if (prefreturn["button"] == 1)
+ settings = prefreturn["settings"]
+ var/mainsettings = settings["mainsettings"]
+ chosen_obj = text2path(mainsettings["objtype"]["value"])
+
+ basemob = text2path(mainsettings["mobtype"]["value"])
+ if (!ispath(basemob, /mob/living/simple_animal/hostile/mimic/copy) || !ispath(chosen_obj, /obj))
+ to_chat(usr, "Mob or object path invalid")
+
+ basemob = new basemob(get_turf(usr), new chosen_obj(get_turf(usr)), usr, mainsettings["dropitem"]["value"] == "Yes" ? FALSE : TRUE, (mainsettings["googlyeyes"]["value"] == "Yes" ? FALSE : TRUE))
+
+ if (mainsettings["disableai"]["value"] == "Yes")
+ basemob.toggle_ai(AI_OFF)
+
+ if (mainsettings["idledamage"]["value"] == "No")
+ basemob.idledamage = FALSE
+
+ if (mainsettings["access"])
+ var/newaccess = text2path(mainsettings["access"]["value"])
+ if (ispath(newaccess))
+ basemob.access_card = new newaccess
+
+ if (mainsettings["maxhealth"]["value"])
+ if (!isnum(mainsettings["maxhealth"]["value"]))
+ mainsettings["maxhealth"]["value"] = text2num(mainsettings["maxhealth"]["value"])
+ if (mainsettings["maxhealth"]["value"] > 0)
+ basemob.maxHealth = basemob.maxHealth = mainsettings["maxhealth"]["value"]
+
+ if (mainsettings["name"]["value"])
+ basemob.name = basemob.real_name = html_decode(mainsettings["name"]["value"])
+
+ if (mainsettings["ckey"]["value"] != "none")
+ basemob.ckey = mainsettings["ckey"]["value"]
+
+
+ log_admin("[key_name(usr)] spawned a sentient object-mob [basemob] from [chosen_obj] at ([usr.x],[usr.y],[usr.z])")
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn object-mob") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/atmospherics/machinery/other/zvent.dm b/code/modules/atmospherics/machinery/other/zvent.dm
deleted file mode 100644
index d12c6196ec..0000000000
--- a/code/modules/atmospherics/machinery/other/zvent.dm
+++ /dev/null
@@ -1,36 +0,0 @@
-/obj/machinery/zvent
- name = "interfloor air transfer system"
-
- icon = 'icons/obj/atmospherics/components/unary_devices.dmi'
- icon_state = "vent_map"
- density = FALSE
- anchored=1
- desc = "This may be needed some day."
-
- var/on = FALSE
- var/volume_rate = 800
-
-/obj/machinery/zvent/New()
- ..()
- SSair.atmos_machinery += src
-
-/obj/machinery/zvent/Destroy()
- SSair.atmos_machinery -= src
- return ..()
-
-/obj/machinery/zvent/process_atmos()
-
- //all this object does, is make its turf share air with the ones above and below it, if they have a vent too.
- if(isturf(loc)) //if we're not on a valid turf, forget it
- for (var/new_z in list(-1,1)) //change this list if a fancier system of z-levels gets implemented
- var/turf/open/zturf_conn = locate(x,y,z+new_z)
- if (istype(zturf_conn))
- var/obj/machinery/zvent/zvent_conn= locate(/obj/machinery/zvent) in zturf_conn
- if (istype(zvent_conn))
- //both floors have simulated turfs, share()
- var/turf/open/myturf = loc
- var/datum/gas_mixture/conn_air = zturf_conn.air //TODO: pop culture reference
- var/datum/gas_mixture/my_air = myturf.air
- if (istype(conn_air) && istype(my_air))
- my_air.share(conn_air)
- air_update_turf()
diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm
index 06af2abb9d..c565847c18 100644
--- a/code/modules/client/preferences.dm
+++ b/code/modules/client/preferences.dm
@@ -324,6 +324,9 @@ GLOBAL_LIST_EMPTY(preferences_datums)
dat += "Ghost pda: [(chat_toggles & CHAT_GHOSTPDA) ? "All Messages" : "Nearest Creatures"]
"
dat += "Pull requests: [(chat_toggles & CHAT_PULLR) ? "Yes" : "No"]
"
dat += "Midround Antagonist: [(toggles & MIDROUND_ANTAG) ? "Yes" : "No"]
"
+ //VORE SOUNDS
+ dat += "Hear Vore Sounds: [(toggles & EATING_NOISES) ? "Yes" : "No"]
"
+ dat += "Hear Vore Digestion Sounds: [(toggles & DIGESTION_NOISES) ? "Yes" : "No"]
"
if(CONFIG_GET(flag/allow_metadata))
dat += "OOC Notes: Edit
"
@@ -1765,6 +1768,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
user.client.playtitlemusic()
else
user.stop_sound_channel(CHANNEL_LOBBYMUSIC)
+ // VORE SOUND TOGGLES
+ if("toggleeatingnoise")
+ toggles ^= EATING_NOISES
+
+ if("toggledigestionnoise")
+ toggles ^= DIGESTION_NOISES
if("ghost_ears")
chat_toggles ^= CHAT_GHOSTEARS
diff --git a/code/modules/client/preferences_vr.dm b/code/modules/client/preferences_vr.dm
index 0f9b6935d3..d787e7e9a8 100644
--- a/code/modules/client/preferences_vr.dm
+++ b/code/modules/client/preferences_vr.dm
@@ -5,4 +5,7 @@
/datum/preferences/proc/set_biological_gender(var/gender)
biological_gender = gender
- identifying_gender = gender
\ No newline at end of file
+ identifying_gender = gender
+
+
+/obj/item/clothing/var/hides_bulges = FALSE // OwO wats this?
diff --git a/code/modules/client/verbs/sethotkeys.dm b/code/modules/client/verbs/sethotkeys.dm
deleted file mode 100644
index ee14787011..0000000000
--- a/code/modules/client/verbs/sethotkeys.dm
+++ /dev/null
@@ -1,25 +0,0 @@
-/client/verb/sethotkeys(from_pref = 0 as num)
- set name = "Set Hotkeys"
- set hidden = TRUE
- set waitfor = FALSE
- set desc = "Used to set mob-specific hotkeys or load hoykey mode from preferences"
-
- var/hotkey_default = "default"
- var/hotkey_macro = "hotkeys"
- var/current_setting
-
- var/list/default_macros = list("default", "robot-default")
-
- if(from_pref)
- current_setting = (prefs.hotkeys ? hotkey_macro : hotkey_default)
- else
- current_setting = winget(src, "mainwindow", "macro")
-
- if(mob)
- hotkey_macro = mob.macro_hotkeys
- hotkey_default = mob.macro_default
-
- if(current_setting in default_macros)
- winset(src, null, "mainwindow.macro=[hotkey_default] input.focus=true input.background-color=#d3b5b5")
- else
- winset(src, null, "mainwindow.macro=[hotkey_macro] mapwindow.map.focus=true input.background-color=#e0e0e0")
diff --git a/code/modules/events/solar_flare.dm b/code/modules/events/solar_flare.dm
deleted file mode 100644
index 5f64570c7d..0000000000
--- a/code/modules/events/solar_flare.dm
+++ /dev/null
@@ -1,17 +0,0 @@
-/datum/round_event_control/solar_flare
- name = "Solar Flare"
- typepath = /datum/round_event/solar_flare
- max_occurrences = 1
-
-/datum/round_event/solar_flare
-
-/datum/round_event/solar_flare/setup()
- startWhen = 3
- endWhen = startWhen + 1
- announceWhen = 1
-
-/datum/round_event/solar_flare/announce()
- priority_announce("Incoming solar flare detected near the station. Expect power outages in all exposed areas for a short duration.", "Anomaly Alert", 'sound/effects/alert.ogg')
-
-/datum/round_event/solar_flare/start()
- SSweather.run_weather("solar flare",1)
diff --git a/code/modules/holodeck/computer_funcs.dm b/code/modules/holodeck/computer_funcs.dm
deleted file mode 100644
index 65741eafea..0000000000
--- a/code/modules/holodeck/computer_funcs.dm
+++ /dev/null
@@ -1,111 +0,0 @@
-/obj/machinery/computer/holodeck/attack_hand(var/mob/user as mob)
- user.set_machine(src)
-
- var/dat = "Current Loaded Programs
"
- dat += "Power Off
"
- for(var/area/A in program_cache)
- dat += "[A.name]
"
- if(emagged && emag_programs.len)
- dat += "SUPERVISOR ACCESS - SAFETY PROTOCOLS DISABLED - CAUTION: EMITTER ANOMALY
"
- for(var/area/A in emag_programs)
- dat += "[A.name]
"
-
- var/datum/browser/popup = new(user, "computer", name, 400, 500)
- popup.set_content(dat)
- popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
- popup.open()
- return
-
-/obj/machinery/computer/holodeck/attack_ai(var/mob/user as mob)
- var/dat = "Current Loaded Programs
"
-
- dat += "Power Off
"
- for(var/area/A in program_cache)
- dat += "[A.name]
"
-
- if(emag_programs.len)
- dat += "
"
- if(emagged)
- dat += "Safety protocol: Offline Engage
"
- for(var/area/A in emag_programs)
- dat += "[A.name]
"
- else
- dat += "Safety protocol: Online Disengage
"
-
- var/datum/browser/popup = new(user, "computer", name, 400, 500)
- popup.set_content(dat)
- popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
- popup.open()
-
-
-/obj/machinery/computer/holodeck/proc/load_program(var/area/A, var/force = 0, var/delay = 0)
- if(stat)
- A = offline_program
- force = 1
- delay = 0
- if(program == A)
- return
- if(world.time < (last_change + 25 + (damaged?500:0)) && !force)
- if(delay)
- sleep(25)
- else
- if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve
- return
- if(get_dist(usr,src) <= 3)
- to_chat(usr, "ERROR. Recalibrating projection apparatus.")
- return
-
- last_change = world.time
- active = (A != offline_program)
- use_power = active ? ACTIVE_POWER_USE : IDLE_POWER_USE
-
- for(var/obj/effect/holodeck_effect/HE in effects)
- HE.deactivate(src)
-
- for(var/item in spawned)
- derez(item, forced=force)
-
- program = A
- // note nerfing does not yet work on guns, should
- // should also remove/limit/filter reagents?
- // this is an exercise left to others I'm afraid. -Sayu
- spawned = A.copy_contents_to(linked, 1, nerf_weapons = !emagged)
- for(var/obj/machinery/M in spawned)
- M.flags_1 |= NODECONSTRUCT_1
- for(var/obj/structure/S in spawned)
- S.flags_1 |= NODECONSTRUCT_1
- effects = list()
-
- spawn(30)
- var/list/added = list()
- for(var/obj/effect/holodeck_effect/HE in spawned)
- effects += HE
- spawned -= HE
- var/atom/x = HE.activate(src)
- if(istype(x) || islist(x))
- spawned += x // holocarp are not forever
- added += x
- for(var/obj/machinery/M in added)
- M.flags_1 |= NODECONSTRUCT_1
- for(var/obj/structure/S in added)
- S.flags_1 |= NODECONSTRUCT_1
-
-/obj/machinery/computer/holodeck/proc/derez(var/obj/obj, var/silent = 1, var/forced = 0)
- // Emagging a machine creates an anomaly in the derez systems.
- if(obj && src.emagged && !src.stat && !forced)
- if((ismob(obj) || istype(obj.loc,/mob)) && prob(50))
- spawn(50) .(obj,silent) // may last a disturbingly long time
- return
- spawned.Remove(obj)
-
- if(!obj)
- return
- var/turf/T = get_turf(obj)
- for(var/atom/movable/AM in obj.contents) // these should be derezed if they were generated
- AM.loc = T
- if(ismob(AM))
- silent = FALSE // otherwise make sure they are dropped
-
- if(!silent)
- visible_message("The [obj.name] fades away!")
- qdel(obj)
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index 82706b46ee..d090b9f0f7 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -252,10 +252,6 @@
if(91.01 to INFINITY)
msg += "[t_He] [t_is] a shitfaced, slobbering wreck.\n"
- for (var/I in src.vore_organs)
- var/datum/belly/B = vore_organs[I]
- msg += B.get_examine_msg()
-
msg += ""
if(!appears_dead)
@@ -329,7 +325,7 @@
if(print_flavor_text() && get_visible_name() != "Unknown")//Are we sure we know who this is? Don't show flavor text unless we can recognize them. Prevents certain metagaming with impersonation.
msg += "[print_flavor_text()]\n"
-
+
msg += "*---------*"
to_chat(user, msg)
diff --git a/code/modules/mob/living/carbon/human/examine_vr.dm b/code/modules/mob/living/carbon/human/examine_vr.dm
index 8578db809e..6ef1b687c2 100644
--- a/code/modules/mob/living/carbon/human/examine_vr.dm
+++ b/code/modules/mob/living/carbon/human/examine_vr.dm
@@ -42,13 +42,4 @@
message = "[t_His] stomach is firmly packed with digesting slop. [t_He] must have eaten at least a few times worth their body weight! It looks hard for them to stand, and [t_his] gut jiggles when they move.\n"
if(4075 to 10000) // Four or more people.
message = "[t_He] [t_is] so absolutely stuffed that you aren't sure how it's possible to move. [t_He] can't seem to swell any bigger. The surface of [t_his] belly looks sorely strained!\n"
- return message
-
-/mob/living/carbon/human/proc/examine_bellies()
- var/message = ""
-
- for (var/I in src.vore_organs)
- var/datum/belly/B = vore_organs[I]
- message += B.get_examine_msg()
-
return message
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 1321c499f4..2061924951 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -32,6 +32,7 @@
/mob/living/carbon/human/Destroy()
QDEL_NULL(physiology)
+ QDEL_NULL_LIST(vore_organs) // CITADEL EDIT belly stuff
return ..()
/mob/living/carbon/human/OpenCraftingMenu()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 030501066e..bf9a4492d6 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -64,6 +64,10 @@
/mob/living/carbon/human/calculate_affecting_pressure(pressure)
if((wear_suit && (wear_suit.flags_1 & STOPSPRESSUREDMAGE_1)) && (head && (head.flags_1 & STOPSPRESSUREDMAGE_1)))
return ONE_ATMOSPHERE
+ if(istype(loc, /obj/belly))
+ return ONE_ATMOSPHERE
+ if(istype(loc, /obj/item/device/dogborg/sleeper))
+ return ONE_ATMOSPHERE
else
return pressure
@@ -138,6 +142,8 @@
return FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
if(ismob(loc))
return FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
+ if(istype(loc, /obj/belly))
+ return FIRE_IMMUNITY_SUIT_MAX_TEMP_PROTECT
//END EDIT
if(wear_suit)
if(wear_suit.max_heat_protection_temperature >= FIRE_SUIT_MAX_TEMP_PROTECT)
@@ -246,10 +252,12 @@
/mob/living/carbon/human/proc/get_cold_protection(temperature)
if(has_trait(TRAIT_RESISTCOLD))
return TRUE
-
+
//CITADEL EDIT Mandatory for vore code.
if(istype(loc, /obj/item/device/dogborg/sleeper))
return 1 //freezing to death in sleepers ruins fun.
+ if(istype(loc, /obj/belly))
+ return 1
if(ismob(loc))
return 1 //because lazy and being inside somemone insulates you from space
//END EDIT
diff --git a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
index fba69e4e8b..3317bb2cda 100644
--- a/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/furrypeople.dm
@@ -351,3 +351,10 @@
H.update_body()
else
return
+
+//misc
+/mob/living/carbon/human/dummy
+ no_vore = TRUE
+
+/mob/living/carbon/human/vore
+ devourable = TRUE
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm
index bf10084758..e5c82f0ead 100644
--- a/code/modules/mob/living/carbon/life.dm
+++ b/code/modules/mob/living/carbon/life.dm
@@ -52,6 +52,8 @@
return
if(ismob(loc))
return
+ if(istype(loc, /obj/belly))
+ return
var/datum/gas_mixture/environment
if(loc)
diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm
index 8043f055bb..0c63ad2ab4 100644
--- a/code/modules/mob/living/life.dm
+++ b/code/modules/mob/living/life.dm
@@ -54,9 +54,6 @@
handle_fire()
- // Citadel Vore code for belly processes
- handle_internal_contents()
-
//stuff in the stomach
handle_stomach()
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm
index 898a2ad734..1af22a8960 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/dragon_vore.dm
@@ -1,26 +1,27 @@
/mob/living/simple_animal/hostile/megafauna/dragon
vore_active = TRUE
+ no_vore = FALSE
/mob/living/simple_animal/hostile/megafauna/dragon/Initialize()
// Create and register 'stomachs'
- var/datum/belly/megafauna/dragon/maw/maw = new(src)
- var/datum/belly/megafauna/dragon/gullet/gullet = new(src)
- var/datum/belly/megafauna/dragon/gut/gut = new(src)
- for(var/datum/belly/X in list(maw, gullet, gut))
- vore_organs[X.name] = X
+ var/obj/belly/megafauna/dragon/maw/maw = new(src)
+ var/obj/belly/megafauna/dragon/gullet/gullet = new(src)
+ var/obj/belly/megafauna/dragon/gut/gut = new(src)
+// for(var/obj/belly/X in list(maw, gullet, gut))
+// vore_organs[X.name] = X
// Connect 'stomachs' together
maw.transferlocation = gullet
gullet.transferlocation = gut
- vore_selected = maw.name // NPC eats into maw
+ vore_selected = maw // NPC eats into maw
return ..()
-/datum/belly/megafauna/dragon
+/obj/belly/megafauna/dragon
human_prey_swallow_time = 50 // maybe enough to switch targets if distracted
nonhuman_prey_swallow_time = 50
-/datum/belly/megafauna/dragon/maw
+/obj/belly/megafauna/dragon/maw
name = "maw"
- inside_flavor = "The maw of the dreaded Ash drake closes around you, engulfing you into a swelteringly hot, disgusting enviroment. The acidic saliva tingles over your form while that tongue pushes you further back...towards the dark gullet beyond."
+ desc = "The maw of the dreaded Ash drake closes around you, engulfing you into a swelteringly hot, disgusting enviroment. The acidic saliva tingles over your form while that tongue pushes you further back...towards the dark gullet beyond."
vore_verb = "scoop"
vore_sound = 'sound/vore/pred/taurswallow.ogg'
swallow_time = 20
@@ -30,9 +31,9 @@
autotransferchance = 66
autotransferwait = 200
-/datum/belly/megafauna/dragon/gullet
+/obj/belly/megafauna/dragon/gullet
name = "gullet"
- inside_flavor = "A ripple of muscle and arching of the tongue pushes you down like any other food. No choice in the matter, you're simply consumed. The dark ambiance of the outside world is replaced with working, wet flesh. Your only light being what you brought with you."
+ desc = "A ripple of muscle and arching of the tongue pushes you down like any other food. No choice in the matter, you're simply consumed. The dark ambiance of the outside world is replaced with working, wet flesh. Your only light being what you brought with you."
swallow_time = 60 // costs extra time to eat directly to here
escapechance = 5
// From above, will transfer into gut
@@ -40,10 +41,10 @@
autotransferchance = 50
autotransferwait = 200
-/datum/belly/megafauna/dragon/gut
+/obj/belly/megafauna/dragon/gut
name = "stomach"
vore_capacity = 5 //I doubt this many people will actually last in the gut, but...
- inside_flavor = "With a rush of burning ichor greeting you, you're introduced to the Drake's stomach. Wrinkled walls greedily grind against you, acidic slimes working into your body as you become fuel and nutriton for a superior predator. All that's left is your body's willingness to resist your destiny."
+ desc = "With a rush of burning ichor greeting you, you're introduced to the Drake's stomach. Wrinkled walls greedily grind against you, acidic slimes working into your body as you become fuel and nutriton for a superior predator. All that's left is your body's willingness to resist your destiny."
digest_mode = DM_DRAGON
digest_burn = 5
swallow_time = 100 // costs extra time to eat directly to here
diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm
index 670d571d4d..7259a730e5 100644
--- a/code/modules/mob/living/simple_animal/hostile/mimic.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm
@@ -101,15 +101,19 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
var/destroy_objects = 0
var/knockdown_people = 0
var/static/mutable_appearance/googly_eyes = mutable_appearance('icons/mob/mob.dmi', "googly_eyes")
+ var/overlay_googly_eyes = TRUE
+ var/idledamage = TRUE
gold_core_spawnable = NO_SPAWN
-/mob/living/simple_animal/hostile/mimic/copy/Initialize(mapload, obj/copy, mob/living/creator, destroy_original = 0)
+/mob/living/simple_animal/hostile/mimic/copy/Initialize(mapload, obj/copy, mob/living/creator, destroy_original = 0, no_googlies = FALSE)
. = ..()
+ if (no_googlies)
+ overlay_googly_eyes = FALSE
CopyObject(copy, creator, destroy_original)
/mob/living/simple_animal/hostile/mimic/copy/Life()
..()
- if(!target && !ckey) //Objects eventually revert to normal if no one is around to terrorize
+ if(idledamage && !target && !ckey) //Objects eventually revert to normal if no one is around to terrorize
adjustBruteLoss(1)
for(var/mob/living/M in contents) //a fix for animated statues from the flesh to stone spell
death()
@@ -143,7 +147,8 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca
icon_state = O.icon_state
icon_living = icon_state
copy_overlays(O)
- add_overlay(googly_eyes)
+ if (overlay_googly_eyes)
+ add_overlay(googly_eyes)
if(isstructure(O) || ismachinery(O))
health = (anchored * 50) + 50
destroy_objects = 1
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 09eb099ae7..61e7153434 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -103,7 +103,8 @@
stack_trace("Simple animal being instantiated in nullspace")
if(vore_active)
init_belly()
- verbs |= /mob/living/proc/animal_nom
+ if(!IsAdvancedToolUser())
+ verbs |= /mob/living/simple_animal/proc/animal_nom
/mob/living/simple_animal/Destroy()
GLOB.simple_animals[AIStatus] -= src
diff --git a/code/modules/mob/living/simple_animal/simple_animal_vr.dm b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
index 2eca841c17..72459cc74d 100644
--- a/code/modules/mob/living/simple_animal/simple_animal_vr.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal_vr.dm
@@ -7,18 +7,18 @@
var/vore_default_mode = DM_DIGEST // Default bellymode (DM_DIGEST, DM_HOLD, DM_ABSORB)
var/vore_digest_chance = 25 // Chance to switch to digest mode if resisted
var/vore_escape_chance = 25 // Chance of resisting out of mob
+ var/vore_absorb_chance = 0 // chance of absorbtion by mob
var/vore_stomach_name // The name for the first belly if not "stomach"
var/vore_stomach_flavor // The flavortext for the first belly if not the default
var/vore_fullness = 0 // How "full" the belly is (controls icons)
+ var/list/living_mobs = list()
// Release belly contents beforey being gc'd!
/mob/living/simple_animal/Destroy()
- for(var/I in vore_organs)
- var/datum/belly/B = vore_organs[I]
- B.release_all_contents() // When your stomach is empty
+ release_vore_contents()
prey_excludes.Cut()
. = ..()
@@ -34,10 +34,10 @@
vore_fullness = new_fullness
-
+/*
/mob/living/simple_animal/proc/swallow_check()
for(var/I in vore_organs)
- var/datum/belly/B = vore_organs[I]
+ var/obj/belly/B = vore_organs[I]
if(vore_active)
update_fullness()
if(!vore_fullness)
@@ -48,16 +48,14 @@
/mob/living/simple_animal/proc/swallow_mob()
for(var/I in vore_organs)
- var/datum/belly/B = vore_organs[I]
- for(var/mob/living/M in B.internal_contents)
- B.transfer_contents(M, B.transferlocation)
-
+ var/obj/belly/B = vore_organs[I]
+ for(var/mob/living/M in B.contents)
+ B.transfer_contents(M, transferlocation)
+*/
/mob/living/simple_animal/death()
- for(var/I in vore_organs)
- var/datum/belly/B = vore_organs[I]
- B.release_all_contents() // When your stomach is empty
- ..() // then you have my permission to die.
+ release_vore_contents()
+ . = ..()
// Simple animals have only one belly. This creates it (if it isn't already set up)
/mob/living/simple_animal/proc/init_belly()
@@ -66,18 +64,19 @@
if(no_vore) //If it can't vore, let's not give it a stomach.
return
- var/datum/belly/B = new /datum/belly(src)
- B.immutable = TRUE
+ var/obj/belly/B = new /obj/belly(src)
+ vore_selected = B
+ B.immutable = 1
B.name = vore_stomach_name ? vore_stomach_name : "stomach"
- B.inside_flavor = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]."
+ B.desc = vore_stomach_flavor ? vore_stomach_flavor : "Your surroundings are warm, soft, and slimy. Makes sense, considering you're inside \the [name]."
B.digest_mode = vore_default_mode
B.escapable = vore_escape_chance > 0
B.escapechance = vore_escape_chance
B.digestchance = vore_digest_chance
+ B.absorbchance = vore_absorb_chance
B.human_prey_swallow_time = swallowTime
B.nonhuman_prey_swallow_time = swallowTime
B.vore_verb = "swallow"
- // TODO - Customizable per mob
B.emote_lists[DM_HOLD] = list( // We need more that aren't repetitive. I suck at endo. -Ace
"The insides knead at you gently for a moment.",
"The guts glorp wetly around you as some air shifts.",
@@ -98,5 +97,21 @@
"The juices pooling beneath you sizzle against your sore skin.",
"The churning walls slowly pulverize you into meaty nutrients.",
"The stomach glorps and gurgles as it tries to work you into slop.")
- src.vore_organs[B.name] = B
- src.vore_selected = B.name
+/* B.emote_lists[DM_ITEMWEAK] = list(
+ "The burning acids eat away at your form.",
+ "The muscular stomach flesh grinds harshly against you.",
+ "The caustic air stings your chest when you try to breathe.",
+ "The slimy guts squeeze inward to help the digestive juices soften you up.",
+ "The onslaught against your body doesn't seem to be letting up; you're food now.",
+ "The predator's body ripples and crushes against you as digestive enzymes pull you apart.",
+ "The juices pooling beneath you sizzle against your sore skin.",
+ "The churning walls slowly pulverize you into meaty nutrients.",
+ "The stomach glorps and gurgles as it tries to work you into slop.")*/
+
+//Grab = Nomf
+/*
+/mob/living/simple_animal/UnarmedAttack(var/atom/A, var/proximity)
+ . = ..()
+
+ if(a_intent == I_GRAB && isliving(A) && !has_hands)
+ animal_nom(A)*/
\ No newline at end of file
diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm
index a4d234ded7..39a0bba701 100644
--- a/code/modules/mob/say_vr.dm
+++ b/code/modules/mob/say_vr.dm
@@ -98,7 +98,7 @@ proc/get_top_level_mob(var/mob/S)
return FALSE
user.log_message(message, INDIVIDUAL_EMOTE_LOG)
- message = "[user] " + message
+ message = "[user] " + "[message]"
for(var/mob/M in GLOB.dead_mob_list)
if(!M.client || isnewplayer(M))
diff --git a/code/modules/power/tesla/coil.dm b/code/modules/power/tesla/coil.dm
index 85fc5b234b..49eb7535d8 100644
--- a/code/modules/power/tesla/coil.dm
+++ b/code/modules/power/tesla/coil.dm
@@ -25,7 +25,7 @@
/obj/machinery/power/tesla_coil/Initialize()
. = ..()
- wires = new /datum/wires/tesla_coil(src)
+// wires = new /datum/wires/tesla_coil(src) //CITADEL EDIT, Kevinz you cheaty fuccboi.
linked_techweb = SSresearch.science_tech
/obj/machinery/power/tesla_coil/RefreshParts()
@@ -79,8 +79,6 @@
/obj/machinery/power/tesla_coil/tesla_act(var/power)
if(anchored && !panel_open)
obj_flags |= BEING_SHOCKED
- //don't lose arc power when it's not connected to anything
- //please place tesla coils all around the station to maximize effectiveness
var/power_produced = powernet ? power / power_loss : power
add_avail(power_produced*input_power_multiplier)
flick("coilhit", src)
diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm
index 019508778b..2fc41e1638 100644
--- a/code/modules/research/techweb/all_nodes.dm
+++ b/code/modules/research/techweb/all_nodes.dm
@@ -129,7 +129,7 @@
display_name = "Basic Bluespace Theory"
description = "Basic studies into the mysterious alternate dimension known as bluespace."
prereq_ids = list("base")
- design_ids = list("beacon", "xenobioconsole")
+ design_ids = list("beacon") //CIT CHANGE removed xenobioconsole from here.
research_cost = 2500
export_price = 5000
@@ -148,7 +148,7 @@
display_name = "Applied Bluespace Research"
description = "Using bluespace to make things faster and better."
prereq_ids = list("bluespace_basic", "engineering")
- design_ids = list("bs_rped","minerbag_holding", "telesci_gps", "bluespacebeaker", "bluespacesyringe", "bluespacebodybag", "phasic_scanning", "roastingstick")
+ design_ids = list("bs_rped","minerbag_holding", "telesci_gps", "bluespacebeaker", "bluespacesyringe", "bluespacebodybag", "phasic_scanning", "roastingstick", "xenobioconsole") //CIT CHANGE added xenobioconsole here
research_cost = 5000
export_price = 5000
diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm
index 47d35108a1..862991c4b8 100644
--- a/code/modules/unit_tests/_unit_tests.dm
+++ b/code/modules/unit_tests/_unit_tests.dm
@@ -1,7 +1,8 @@
//include unit test files in this module in this ifdef
-
+// CITADEL EDIT add vore_tests.dm
#ifdef UNIT_TESTS
#include "unit_test.dm"
#include "reagent_recipe_collisions.dm"
#include "reagent_id_typos.dm"
+//#include "vore_tests.dm"
#endif
diff --git a/code/modules/unit_tests/vore_tests.dm b/code/modules/unit_tests/vore_tests.dm
new file mode 100644
index 0000000000..6549aa9ce7
--- /dev/null
+++ b/code/modules/unit_tests/vore_tests.dm
@@ -0,0 +1,218 @@
+/datum/unit_test
+ var/static/default_mobloc = null
+
+/datum/unit_test/proc/create_test_mob(var/turf/mobloc = null, var/mobtype = /mob/living/carbon/human, var/with_mind = FALSE)
+ if(isnull(mobloc))
+ if(!default_mobloc)
+ for(var/turf/simulated/floor/tiled/T in world)
+ var/pressure = T.zone.air.return_pressure()
+ if(90 < pressure && pressure < 120) // Find a turf between 90 and 120
+ default_mobloc = T
+ break
+ mobloc = default_mobloc
+ if(!mobloc)
+ Fail("Unable to find a location to create test mob")
+ return FALSE
+
+ var/mob/living/carbon/human/H = new mobtype(mobloc)
+
+ if(with_mind)
+ H.mind_initialize("TestKey[rand(0,10000)]")
+
+ return H
+
+/datum/unit_test/space_suffocation
+ name = "MOB: human mob suffocates in space"
+
+ var/startOxyloss
+ var/endOxyloss
+ var/mob/living/carbon/human/H
+ async = 1
+
+/datum/unit_test/space_suffocation/Run()
+ var/turf/open/space/T = locate()
+
+ H = new(T)
+ startOxyloss = H.getOxyLoss()
+
+ return 1
+
+/datum/unit_test/space_suffocation/check_result()
+ if(H.life_tick < 10)
+ return 0
+
+ endOxyloss = H.getOxyLoss()
+
+ if(!startOxyloss < endOxyloss)
+ Fail("Human mob is not taking oxygen damage in space. (Before: [startOxyloss]; after: [endOxyloss])")
+
+ qdel(H)
+ return 1
+
+/datum/unit_test/belly_nonsuffocation
+ name = "MOB: human mob does not suffocate in a belly"
+ var/startLifeTick
+ var/startOxyloss
+ var/endOxyloss
+ var/mob/living/carbon/human/pred
+ var/mob/living/carbon/human/prey
+
+/datum/unit_test/belly_nonsuffocation/Run()
+ pred = create_test_mob()
+ if(!istype(pred))
+ return FALSE
+ prey = create_test_mob(pred.loc)
+ if(!istype(prey))
+ return FALSE
+
+ return TRUE
+
+/datum/unit_test/belly_nonsuffocation/check_result()
+ // Unfortuantely we need to wait for the pred's belly to initialize. (Currently after a spawn())
+ if(!pred.vore_organs || !pred.vore_organs.len)
+ return FALSE
+
+ // Now that pred belly exists, we can eat the prey.
+ if(!pred.vore_selected)
+ Fail("[pred] has no vore_selected.")
+ return TRUE
+
+ // Attempt to eat the prey
+ if(prey.loc != pred.vore_selected)
+ pred.vore_selected.nom_mob(prey)
+
+ if(prey.loc != pred.vore_selected)
+ Fail("[pred.vore_selected].nom_mob([prey]) did not put prey inside [pred]")
+ return TRUE
+
+ // Okay, we succeeded in eating them, now lets wait a bit
+ startLifeTick = pred.life_tick
+ startOxyloss = prey.getOxyLoss()
+ return FALSE
+
+ if(pred.life_tick < (startLifeTick + 10))
+ return FALSE // Wait for them to breathe a few times
+
+ // Alright lets check it!
+ endOxyloss = prey.getOxyLoss()
+ if(startOxyloss < endOxyloss)
+ Fail("Prey takes oxygen damage in a pred's belly! (Before: [startOxyloss]; after: [endOxyloss])")
+ qdel(prey)
+ qdel(pred)
+ return TRUE
+////////////////////////////////////////////////////////////////
+/datum/unit_test/belly_spacesafe
+ name = "MOB: human mob protected from space in a belly"
+ var/startLifeTick
+ var/startOxyloss
+ var/startBruteloss
+ var/endOxyloss
+ var/endBruteloss
+ var/mob/living/carbon/human/pred
+ var/mob/living/carbon/human/prey
+
+/datum/unit_test/belly_spacesafe/Run()
+ pred = create_test_mob()
+ if(!istype(pred))
+ return FALSE
+ prey = create_test_mob(pred.loc)
+ if(!istype(prey))
+ return FALSE
+
+ return TRUE
+
+/datum/unit_test/belly_spacesafe/check_result()
+ // Unfortuantely we need to wait for the pred's belly to initialize. (Currently after a spawn())
+ if(!pred.vore_organs || !pred.vore_organs.len)
+ return FALSE
+
+ // Now that pred belly exists, we can eat the prey.
+ if(!pred.vore_selected)
+ Fail("[pred] has no vore_selected.")
+ return TRUE
+
+ // Attempt to eat the prey
+ if(prey.loc != pred.vore_selected)
+ pred.vore_selected.nom_mob(prey)
+
+ if(prey.loc != pred.vore_selected)
+ Fail("[pred.vore_selected].nom_mob([prey]) did not put prey inside [pred]")
+ return TRUE
+ else
+ var/turf/T = locate(/turf/open/space)
+ if(!T)
+ Fail("could not find a space turf for testing")
+ return TRUE
+ else
+ pred.forceMove(T)
+
+ // Okay, we succeeded in eating them, now lets wait a bit
+ startLifeTick = pred.life_tick
+ startOxyloss = prey.getOxyLoss()
+ startBruteloss = prey.getBruteloss()
+ return FALSE
+
+ if(pred.life_tick < (startLifeTick + 10))
+ return FALSE // Wait for them to breathe a few times
+
+ // Alright lets check it!
+ endOxyloss = prey.getOxyLoss()
+ endBruteloss = prey.getBruteLoss()
+ if(startBruteloss < endBruteloss)
+ Fail("Prey takes brute damage in space! (Before: [startBruteloss]; after: [endBruteloss])")
+ qdel(prey)
+ qdel(pred)
+ return TRUE
+////////////////////////////////////////////////////////////////
+/datum/unit_test/belly_damage
+ name = "MOB: human mob takes damage from digestion"
+ var/startLifeTick
+ var/startBruteBurn
+ var/endBruteBurn
+ var/mob/living/carbon/human/pred
+ var/mob/living/carbon/human/prey
+
+/datum/unit_test/belly_damage/Run()
+ pred = create_test_mob()
+ if(!istype(pred))
+ return FALSE
+ prey = create_test_mob(pred.loc)
+ if(!istype(prey))
+ return FALSE
+
+ return TRUE
+
+/datum/unit_test/belly_damage/check_result()
+ // Unfortuantely we need to wait for the pred's belly to initialize. (Currently after a spawn())
+ if(!pred.vore_organs || !pred.vore_organs.len)
+ return FALSE
+
+ // Now that pred belly exists, we can eat the prey.
+ if(!pred.vore_selected)
+ Fail("[pred] has no vore_selected.")
+ return TRUE
+
+ // Attempt to eat the prey
+ if(prey.loc != pred.vore_selected)
+ pred.vore_selected.nom_mob(prey)
+
+ if(prey.loc != pred.vore_selected)
+ Fail("[pred.vore_selected].nom_mob([prey]) did not put prey inside [pred]")
+ return TRUE
+
+ // Okay, we succeeded in eating them, now lets wait a bit
+ pred.vore_selected.digest_mode = DM_DIGEST
+ startLifeTick = pred.life_tick
+ startBruteBurn = prey.getBruteLoss() + prey.getFireLoss()
+ return FALSE
+
+ if(pred.life_tick < (startLifeTick + 10))
+ return FALSE // Wait a few ticks for damage to happen
+
+ // Alright lets check it!
+ endBruteBurn = prey.getBruteLoss() + prey.getFireLoss()
+ if(startBruteBurn >= endBruteBurn)
+ Fail("Prey doesn't take damage in digesting belly! (Before: [startBruteBurn]; after: [endBruteBurn])")
+ qdel(prey)
+ qdel(pred)
+ return TRUE
diff --git a/code/modules/vore/eating/belly_vr.dm b/code/modules/vore/eating/belly_vr.dm
deleted file mode 100644
index d175f51e02..0000000000
--- a/code/modules/vore/eating/belly_vr.dm
+++ /dev/null
@@ -1,467 +0,0 @@
-//
-// The belly object is what holds onto a mob while they're inside a predator.
-// It takes care of altering the pred's decription, digesting the prey, relaying struggles etc.
-//
-
-// If you change what variables are on this, then you need to update the copy() proc.
-
-//
-// Parent type of all the various "belly" varieties.
-//
-/datum/belly
- var/name // Name of this location
- var/inside_flavor // Flavor text description of inside sight/sound/smells/feels.
- var/vore_sound = 'sound/vore/pred/swallow_01.ogg' // Sound when ingesting someone
- var/vore_verb = "ingest" // Verb for eating with this in messages
- var/human_prey_swallow_time = 10 SECONDS // Time in deciseconds to swallow /mob/living/carbon/human
- var/nonhuman_prey_swallow_time = 5 SECONDS // Time in deciseconds to swallow anything else
- var/emoteTime = 30 SECONDS // How long between stomach emotes at prey
- var/digest_brute = 0 // Brute damage per tick in digestion mode
- var/digest_burn = 1 // Burn damage per tick in digestion mode
- var/digest_tickrate = 9 // Modulus this of air controller tick number to iterate gurgles on
- var/immutable = FALSE // Prevents this belly from being deleted
- var/escapable = FALSE // Belly can be resisted out of at any time
- var/escapetime = 60 SECONDS // Deciseconds, how long to escape this belly
- var/digestchance = 0 // % Chance of stomach beginning to digest if prey struggles
-// var/silenced = FALSE // Will the heartbeat/fleshy internal loop play?
- var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles.
-
- var/datum/belly/transferlocation = null // Location that the prey is released if they struggle and get dropped off.
- var/transferchance = 0 // % Chance of prey being transferred to transfer location when resisting
- var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location
- var/autotransferwait = 10 // Time between trying to transfer.
- var/can_taste = FALSE // If this belly prints the flavor of prey when it eats someone.
-
- var/tmp/digest_mode = DM_HOLD // Whether or not to digest. Default to not digest.
- var/tmp/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_NOISY) // Possible digest modes
- var/tmp/mob/living/owner // The mob whose belly this is.
- var/tmp/list/internal_contents = list() // People/Things you've eaten into this belly!
- var/tmp/is_full // Flag for if digested remeans are present. (for disposal messages)
- var/tmp/emotePend = FALSE // If there's already a spawned thing counting for the next emote
- var/swallow_time = 10 SECONDS // for mob transfering automation
- var/vore_capacity = 1 // The capacity (in people) this person can hold
-
- // Don't forget to watch your commas at the end of each line if you change these.
- var/list/struggle_messages_outside = list(
- "%pred's %belly wobbles with a squirming meal.",
- "%pred's %belly jostles with movement.",
- "%pred's %belly briefly swells outward as someone pushes from inside.",
- "%pred's %belly fidgets with a trapped victim.",
- "%pred's %belly jiggles with motion from inside.",
- "%pred's %belly sloshes around.",
- "%pred's %belly gushes softly.",
- "%pred's %belly lets out a wet squelch.")
-
- var/list/struggle_messages_inside = list(
- "Your useless squirming only causes %pred's slimy %belly to squelch over your body.",
- "Your struggles only cause %pred's %belly to gush softly around you.",
- "Your movement only causes %pred's %belly to slosh around you.",
- "Your motion causes %pred's %belly to jiggle.",
- "You fidget around inside of %pred's %belly.",
- "You shove against the walls of %pred's %belly, making it briefly swell outward.",
- "You jostle %pred's %belly with movement.",
- "You squirm inside of %pred's %belly, making it wobble around.")
-
- var/list/digest_messages_owner = list(
- "You feel %prey's body succumb to your digestive system, which breaks it apart into soft slurry.",
- "You hear a lewd glorp as your %belly muscles grind %prey into a warm pulp.",
- "Your %belly lets out a rumble as it melts %prey into sludge.",
- "You feel a soft gurgle as %prey's body loses form in your %belly. They're nothing but a soft mass of churning slop now.",
- "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your thighs.",
- "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your rump.",
- "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your belly.",
- "Your %belly groans as %prey falls apart into a thick soup. You can feel their remains soon flowing deeper into your body to be absorbed.",
- "Your %belly kneads on every fiber of %prey, softening them down into mush to fuel your next hunt.",
- "Your %belly churns %prey down into a hot slush. You can feel the nutrients coursing through your digestive track with a series of long, wet glorps.")
-
- var/list/digest_messages_prey = list(
- "Your body succumbs to %pred's digestive system, which breaks you apart into soft slurry.",
- "%pred's %belly lets out a lewd glorp as their muscles grind you into a warm pulp.",
- "%pred's %belly lets out a rumble as it melts you into sludge.",
- "%pred feels a soft gurgle as your body loses form in their %belly. You're nothing but a soft mass of churning slop now.",
- "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's thighs.",
- "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's rump.",
- "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's belly.",
- "%pred's %belly groans as you fall apart into a thick soup. Your remains soon flow deeper into %pred's body to be absorbed.",
- "%pred's %belly kneads on every fiber of your body, softening you down into mush to fuel their next hunt.",
- "%pred's %belly churns you down into a hot slush. Your nutrient-rich remains course through their digestive track with a series of long, wet glorps.")
-
- var/list/examine_messages = list(
- "They have something solid in their %belly!",
- "It looks like they have something in their %belly!")
-
- //Mostly for being overridden on precreated bellies on mobs. Could be VV'd into
- //a carbon's belly if someone really wanted. No UI for carbons to adjust this.
- //List has indexes that are the digestion mode strings, and keys that are lists of strings.
- var/list/emote_lists = list()
-
-// Constructor that sets the owning mob
-/datum/belly/New(var/mob/living/owning_mob)
- owner = owning_mob
-
-// Toggle digestion on/off and notify user of the new setting.
-// If multiple digestion modes are avaliable (i.e. unbirth) then user should be prompted.
-/datum/belly/proc/toggle_digestion()
- return
-
-// Checks if any mobs are present inside the belly
-// return True if the belly is empty.
-/datum/belly/proc/is_empty()
- return internal_contents.len == 0
-
-// Release all contents of this belly into the owning mob's location.
-// If that location is another mob, contents are transferred into whichever of its bellies the owning mob is in.
-// Returns the number of mobs so released.
-/datum/belly/proc/release_all_contents()
- if (internal_contents.len == 0)
- return 0
- for (var/atom/movable/M in internal_contents)
- M.forceMove(owner.loc) // Move the belly contents into the same location as belly's owner.
- for(var/mob/living/W in M)
- W.stop_sound_channel(CHANNEL_PREYLOOP)
- internal_contents.Remove(M) // Remove from the belly contents
-
- var/datum/belly/B = check_belly(owner) // This makes sure that the mob behaves properly if released into another mob
- if(B)
- B.internal_contents.Add(M)
-
- owner.visible_message("[owner] expels everything from their [lowertext(name)]!")
- return TRUE
-
-// Release a specific atom from the contents of this belly into the owning mob's location.
-// If that location is another mob, the atom is transferred into whichever of its bellies the owning mob is in.
-// Returns the number of atoms so released.
-/datum/belly/proc/release_specific_contents(var/atom/movable/M)
- if (!(M in internal_contents))
- return FALSE // They weren't in this belly anyway
-
- M.forceMove(owner.loc) // Move the belly contents into the same location as belly's owner.
- for(var/mob/living/W in M)
- W.stop_sound_channel(CHANNEL_PREYLOOP)
- src.internal_contents.Remove(M) // Remove from the belly contents
-
- var/datum/belly/B = check_belly(owner)
- if(B)
- B.internal_contents.Add(M)
-
- owner.visible_message("[owner] expels [M] from their [lowertext(name)]!")
-// owner.regenerate_icons()
- return TRUE
-
-// Actually perform the mechanics of devouring the tasty prey.
-// The purpose of this method is to avoid duplicate code, and ensure that all necessary
-// steps are taken.
-/datum/belly/proc/nom_mob(var/mob/prey, var/mob/user)
- var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
-
- prey.forceMove(owner)
- internal_contents.Add(prey)
- prey.playsound_local(get_turf(prey),preyloop,40,0, channel = CHANNEL_PREYLOOP)
-
- // Handle prey messages
- if(inside_flavor)
- to_chat(prey, "[src.inside_flavor]")
- if(isliving(prey))
- var/mob/living/M = prey
- if(can_taste && M.get_taste_message(0))
- to_chat(owner, "[M] tastes of [M.get_taste_message(0)].")
-
- // Setup the autotransfer checks if needed
- if(transferlocation && autotransferchance > 0)
- addtimer(CALLBACK(src, /datum/belly/.proc/check_autotransfer, prey), autotransferwait)
-
-/datum/belly/proc/check_autotransfer(var/mob/prey)
- // Some sanity checks
- if(transferlocation && (autotransferchance > 0) && (prey in internal_contents))
- if(prob(autotransferchance))
- // Double check transferlocation isn't insane
- if(verify_transferlocation())
- transfer_contents(prey, transferlocation)
- else
- // Didn't transfer, so wait before retrying
- addtimer(CALLBACK(src, /datum/belly/.proc/check_autotransfer, prey), autotransferwait)
-
-/datum/belly/proc/verify_transferlocation()
- for(var/I in owner.vore_organs)
- var/datum/belly/B = owner.vore_organs[I]
- if(B == transferlocation)
- return TRUE
-
- for(var/I in owner.vore_organs)
- var/datum/belly/B = owner.vore_organs[I]
- if(B.name == transferlocation.name)
- transferlocation = B
- return TRUE
- return FALSE
-
-// Get the line that should show up in Examine message if the owner of this belly
-// is examined. By making this a proc, we not only take advantage of polymorphism,
-// but can easily make the message vary based on how many people are inside, etc.
-// Returns a string which shoul be appended to the Examine output.
-/datum/belly/proc/get_examine_msg()
- if(internal_contents.len && examine_messages.len)
- var/formatted_message
- var/raw_message = pick(examine_messages)
-
- formatted_message = replacetext(raw_message,"%belly",lowertext(name))
- formatted_message = replacetext(formatted_message,"%pred",owner)
- formatted_message = replacetext(formatted_message,"%prey",english_list(internal_contents))
-
- return("[formatted_message]
")
-
-// The next function gets the messages set on the belly, in human-readable format.
-// This is useful in customization boxes and such. The delimiter right now is \n\n so
-// in message boxes, this looks nice and is easily delimited.
-/datum/belly/proc/get_messages(var/type, var/delim = "\n\n")
- ASSERT(type == "smo" || type == "smi" || type == "dmo" || type == "dmp" || type == "em")
- var/list/raw_messages
-
- switch(type)
- if("smo")
- raw_messages = struggle_messages_outside
- if("smi")
- raw_messages = struggle_messages_inside
- if("dmo")
- raw_messages = digest_messages_owner
- if("dmp")
- raw_messages = digest_messages_prey
- if("em")
- raw_messages = examine_messages
-
- var/messages = list2text(raw_messages,delim)
- return messages
-
-// The next function sets the messages on the belly, from human-readable var
-// replacement strings and linebreaks as delimiters (two \n\n by default).
-// They also sanitize the messages.
-/datum/belly/proc/set_messages(var/raw_text, var/type, var/delim = "\n\n")
- ASSERT(type == "smo" || type == "smi" || type == "dmo" || type == "dmp" || type == "em")
-
- var/list/raw_list = text2list(html_encode(raw_text),delim)
- if(raw_list.len > 10)
- raw_list.Cut(11)
-
- for(var/i = 1, i <= raw_list.len, i++)
- if(length(raw_list[i]) > 160 || length(raw_list[i]) < 10) //160 is fudged value due to htmlencoding increasing the size
- raw_list.Cut(i,i)
- else
- raw_list[i] = readd_quotes(raw_list[i])
- //Also fix % sign for var replacement
- raw_list[i] = replacetext(raw_list[i],"%","%")
-
- ASSERT(raw_list.len <= 10) //Sanity
-
- switch(type)
- if("smo")
- struggle_messages_outside = raw_list
- if("smi")
- struggle_messages_inside = raw_list
- if("dmo")
- digest_messages_owner = raw_list
- if("dmp")
- digest_messages_prey = raw_list
- if("em")
- examine_messages = raw_list
-
- return
-
-// Handle the death of a mob via digestion.
-// Called from the process_Life() methods of bellies that digest prey.
-// Default implementation calls M.death() and removes from internal contents.
-// Indigestable items are removed, and M is deleted.
-/datum/belly/proc/digestion_death(var/mob/living/M)
- is_full = TRUE
- internal_contents.Remove(M)
- M.stop_sound_channel(CHANNEL_PREYLOOP)
- // If digested prey is also a pred... anyone inside their bellies gets moved up.
- if(is_vore_predator(M))
- for(var/bellytype in M.vore_organs)
- var/datum/belly/belly = M.vore_organs[bellytype]
- for (var/obj/thing in belly.internal_contents)
- thing.loc = owner
- internal_contents.Add(thing)
- for (var/mob/subprey in belly.internal_contents)
- subprey.loc = owner
- internal_contents.Add(subprey)
- to_chat(subprey, "As [M] melts away around you, you find yourself in [owner]'s [name]")
-
- //Drop all items into the belly
- for(var/obj/item/W in M)
- if(!M.dropItemToGround(W))
- qdel(W)
-
- message_admins("[key_name(owner)] digested [key_name(M)].")
- log_attack("[key_name(owner)] digested [key_name(M)].")
-
- // Delete the digested mob
- qdel(M)
-
-//Handle a mob struggling
-// Called from /mob/living/carbon/relaymove()
-/datum/belly/proc/relay_resist(var/mob/living/R)
- if (!(R in internal_contents))
- return // User is not in this belly, or struggle too soon.
-
- R.setClickCooldown(50)
- var/sound/prey_struggle = sound(get_sfx("prey_struggle"))
-
- if(owner.stat) //If owner is stat (dead, KO) we can actually escape
- to_chat(R, "You attempt to climb out of \the [name]. (This will take around [escapetime/10] seconds.)")
- to_chat(owner, "Someone is attempting to climb out of your [name]!")
-
- if(do_after(R, escapetime, owner))
- if((owner.stat || escapable) && (R in internal_contents)) //Can still escape?
- release_specific_contents(R)
- return
- else if(!(R in internal_contents)) //Aren't even in the belly. Quietly fail.
- return
- else //Belly became inescapable or mob revived
- to_chat(R, "Your attempt to escape [name] has failed!")
- to_chat(owner, "The attempt to escape from your [name] has failed!")
- return
- return
- var/struggle_outer_message = pick(struggle_messages_outside)
- var/struggle_user_message = pick(struggle_messages_inside)
-
- struggle_outer_message = replacetext(struggle_outer_message,"%pred",owner)
- struggle_outer_message = replacetext(struggle_outer_message,"%prey",R)
- struggle_outer_message = replacetext(struggle_outer_message,"%belly",lowertext(name))
-
- struggle_user_message = replacetext(struggle_user_message,"%pred",owner)
- struggle_user_message = replacetext(struggle_user_message,"%prey",R)
- struggle_user_message = replacetext(struggle_user_message,"%belly",lowertext(name))
-
- struggle_outer_message = "" + struggle_outer_message + ""
- struggle_user_message = "" + struggle_user_message + ""
-
- R.visible_message( "[struggle_outer_message]", "[struggle_user_message]")
- playsound(get_turf(owner),"struggle_sound",35,0,-6,1,channel=151,ignore_walls = FALSE)
- R.stop_sound_channel(151)
- R.playsound_local(get_turf(R),prey_struggle,45,0)
-
- if(escapable && R.a_intent != "help") //If the stomach has escapable enabled and the person is actually trying to kick out
- to_chat(R, "You attempt to climb out of \the [name].")
- to_chat(owner, "Someone is attempting to climb out of your [name]!")
- if(prob(escapechance)) //Let's have it check to see if the prey escapes first.
- if(do_after(R, escapetime))
- if((escapable) && (R in internal_contents)) //Does the owner still have escapable enabled?
- release_specific_contents(R)
- to_chat(R, "You climb out of \the [name].")
- to_chat(owner, "[R] climbs out of your [name]!")
- for(var/mob/M in viewers(4, owner))
- M.visible_message("[R] climbs out of [owner]'s [name]!", 2)
- return
- else if(!(R in internal_contents)) //Aren't even in the belly. Quietly fail.
- return
- else //Belly became inescapable.
- to_chat(R, "Your attempt to escape [name] has failed!")
- to_chat(owner, "The attempt to escape from your [name] has failed!/span>")
- return
-
- else if(prob(transferchance) && istype(transferlocation)) //Next, let's have it see if they end up getting into an even bigger mess then when they started.
- var/location_ok = verify_transferlocation()
-
- if(!location_ok)
- to_chat(owner, "Something went wrong with your belly transfer settings.")
- transferlocation = null
- return
-
- to_chat(R, "Your attempt to escape [name] has failed and your struggles only results in you sliding into [owner]'s [transferlocation]!")
- to_chat(owner, "Someone slid into your [transferlocation] due to their struggling inside your [name]!")
- transfer_contents(R, transferlocation)
- return
-
- else if(prob(digestchance)) //Finally, let's see if it should run the digest chance.)
- to_chat(R, "In response to your struggling, \the [name] begins to get more active...")
- to_chat(owner, "You feel your [name] beginning to become active!")
- digest_mode = DM_DIGEST
- return
- else //Nothing interesting happened.
- to_chat(R, "But make no progress in escaping [owner]'s [name].")
- to_chat(owner, "But appears to be unable to make any progress in escaping your [name].")
- return
-
-//Transfers contents from one belly to another
-/datum/belly/proc/transfer_contents(var/atom/movable/content, var/datum/belly/target, silent = 0)
- if(!(content in internal_contents))
- return
- internal_contents.Remove(content)
- // Re-use nom_mob
- target.nom_mob(content, target.owner)
- if(!silent)
- playsound(get_turf(owner),"[target].vore_sound",35,0,-6,1,ignore_walls = FALSE)
-/*
-//Handles creation of temporary 'vore chest' upon digestion
-/datum/belly/proc/slimy_mass(var/obj/item/content, var/mob/living/M)
- if(!content in internal_contents)
- return
- internal_contents += new /obj/structure/closet/crate/vore(src)
- internal_contents.Remove(content)
- M.transferItemToLoc(content, /obj/structure/closet/crate/vore)
- if(!M.transferItemToLoc(W))
- qdel(W)
-
-/datum/belly/proc/regurgitate_items(var/obj/structure/closet/crate/vore/C)
- */
-
-// Belly copies and then returns the copy
-// Needs to be updated for any var changes
-/datum/belly/proc/copy(mob/new_owner)
- var/datum/belly/dupe = new /datum/belly(new_owner)
-
- //// Non-object variables
- dupe.name = name
- dupe.inside_flavor = inside_flavor
- dupe.vore_sound = vore_sound
- dupe.vore_verb = vore_verb
- dupe.human_prey_swallow_time = human_prey_swallow_time
- dupe.nonhuman_prey_swallow_time = nonhuman_prey_swallow_time
- dupe.emoteTime = emoteTime
- dupe.digest_brute = digest_brute
- dupe.digest_burn = digest_burn
- dupe.digest_tickrate = digest_tickrate
- dupe.immutable = immutable
- dupe.can_taste = can_taste
- dupe.escapable = escapable
- dupe.escapetime = escapetime
- dupe.digestchance = digestchance
- dupe.escapechance = escapechance
- dupe.transferchance = transferchance
- dupe.transferlocation = transferlocation
- dupe.autotransferchance = autotransferchance
- dupe.autotransferwait = autotransferwait
-
- //// Object-holding variables
- //struggle_messages_outside - strings
- dupe.struggle_messages_outside.Cut()
- for(var/I in struggle_messages_outside)
- dupe.struggle_messages_outside += I
-
- //struggle_messages_inside - strings
- dupe.struggle_messages_inside.Cut()
- for(var/I in struggle_messages_inside)
- dupe.struggle_messages_inside += I
-
- //digest_messages_owner - strings
- dupe.digest_messages_owner.Cut()
- for(var/I in digest_messages_owner)
- dupe.digest_messages_owner += I
-
- //digest_messages_prey - strings
- dupe.digest_messages_prey.Cut()
- for(var/I in digest_messages_prey)
- dupe.digest_messages_prey += I
-
- //examine_messages - strings
- dupe.examine_messages.Cut()
- for(var/I in examine_messages)
- dupe.examine_messages += I
-
- //emote_lists - index: digest mode, key: list of strings
- dupe.emote_lists.Cut()
- for(var/K in emote_lists)
- dupe.emote_lists[K] = list()
- for(var/I in emote_lists[K])
- dupe.emote_lists[K] += I
-
- return dupe
diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm
deleted file mode 100644
index 3d00f9e0fe..0000000000
--- a/code/modules/vore/eating/bellymodes_vr.dm
+++ /dev/null
@@ -1,143 +0,0 @@
-// Process the predator's effects upon the contents of its belly (i.e digestion/transformation etc)
-// Called from /mob/living/Life() proc.
-/datum/belly/proc/process_Life()
- var/sound/prey_gurgle = sound(get_sfx("digest_prey"))
- var/sound/prey_digest = sound(get_sfx("death_prey"))
-
-/////////////////////////// Auto-Emotes ///////////////////////////
- if((digest_mode in emote_lists) && !emotePend)
- emotePend = TRUE
-
- spawn(emoteTime)
- var/list/EL = emote_lists[digest_mode]
- for(var/mob/living/M in internal_contents)
- M << "[pick(EL)]"
- src.emotePend = FALSE
-
-///////////////////////////// DM_HOLD /////////////////////////////
- if(digest_mode == DM_HOLD)
- return //Pretty boring, huh
-
-//////////////////////////// DM_DIGEST ////////////////////////////
- if(digest_mode == DM_DIGEST)
- for (var/mob/living/M in internal_contents)
- if(prob(25))
- M.stop_sound_channel(CHANNEL_PRED)
- playsound(get_turf(owner),"digest_pred",50,0,-6,0,channel=CHANNEL_PRED,ignore_walls = FALSE)
- M.stop_sound_channel(CHANNEL_PRED)
- M.playsound_local(get_turf(M), null, 45, S = prey_gurgle)
-
- //Pref protection!
- if (!M.digestable)
- continue
-
- //Person just died in guts!
- if(M.stat == DEAD)
- var/digest_alert_owner = pick(digest_messages_owner)
- var/digest_alert_prey = pick(digest_messages_prey)
-
- //Replace placeholder vars
- digest_alert_owner = replacetext(digest_alert_owner,"%pred",owner)
- digest_alert_owner = replacetext(digest_alert_owner,"%prey",M)
- digest_alert_owner = replacetext(digest_alert_owner,"%belly",lowertext(name))
-
- digest_alert_prey = replacetext(digest_alert_prey,"%pred",owner)
- digest_alert_prey = replacetext(digest_alert_prey,"%prey",M)
- digest_alert_prey = replacetext(digest_alert_prey,"%belly",lowertext(name))
-
- //Send messages
- to_chat(owner, "[digest_alert_owner]")
- to_chat(M, "[digest_alert_prey]")
- M.visible_message("You watch as [owner]'s form loses its additions.")
-
- owner.nutrition += 400 // so eating dead mobs gives you *something*.
- M.stop_sound_channel(CHANNEL_PRED)
- playsound(get_turf(owner),"death_pred",45,0,-6,0,channel=CHANNEL_PRED,ignore_walls = FALSE)
- M.stop_sound_channel(CHANNEL_PRED)
- M.playsound_local(get_turf(M), null, 45, S = prey_digest)
- digestion_death(M)
- owner.update_icons()
- continue
-
-
- // Deal digestion damage (and feed the pred)
- if(!(M.status_flags & GODMODE))
- M.adjustFireLoss(digest_burn)
- owner.nutrition += 1
- return
-
-///////////////////////////// DM_HEAL /////////////////////////////
- if(digest_mode == DM_HEAL)
- for (var/mob/living/M in internal_contents)
- if(prob(25))
- M.stop_sound_channel(CHANNEL_PRED)
- playsound(get_turf(owner),"digest_pred",35,0,-6,0,channel=CHANNEL_PRED,ignore_walls = FALSE)
- M.stop_sound_channel(CHANNEL_PRED)
- M.playsound_local(get_turf(M), null, 45, S = prey_gurgle)
-
- if(M.stat != DEAD)
- if(owner.nutrition >= NUTRITION_LEVEL_STARVING && (M.health < M.maxHealth))
- M.adjustBruteLoss(-1)
- M.adjustFireLoss(-1)
- owner.nutrition -= 10
- return
-
-////////////////////////// DM_NOISY /////////////////////////////////
-//for when you just want people to squelch around
- if(digest_mode == DM_NOISY)
- for (var/mob/living/M in internal_contents)
- if(prob(35))
- M.stop_sound_channel(CHANNEL_PRED)
- playsound(get_turf(owner),"digest_pred",35,0,-6,0,channel=CHANNEL_PRED,ignore_walls = FALSE)
- M.stop_sound_channel(CHANNEL_PRED)
- M.playsound_local(get_turf(M), null, 45, S = prey_gurgle)
-
-
-//////////////////////////DM_DRAGON /////////////////////////////////////
-//because dragons need snowflake guts
- if(digest_mode == DM_DRAGON)
- for (var/mob/living/M in internal_contents)
- if(prob(25))
- M.stop_sound_channel(CHANNEL_PRED)
- playsound(get_turf(owner),"digest_pred",50,0,-6,0,channel=CHANNEL_PRED,ignore_walls = FALSE)
- M.stop_sound_channel(CHANNEL_PRED)
- M.playsound_local(get_turf(M), null, 45, S = prey_gurgle)
-
- //No digestion protection for megafauna.
-
- //Person just died in guts!
- if(M.stat == DEAD)
- var/digest_alert_owner = pick(digest_messages_owner)
- var/digest_alert_prey = pick(digest_messages_prey)
-
- //Replace placeholder vars
- digest_alert_owner = replacetext(digest_alert_owner,"%pred",owner)
- digest_alert_owner = replacetext(digest_alert_owner,"%prey",M)
- digest_alert_owner = replacetext(digest_alert_owner,"%belly",lowertext(name))
-
- digest_alert_prey = replacetext(digest_alert_prey,"%pred",owner)
- digest_alert_prey = replacetext(digest_alert_prey,"%prey",M)
- digest_alert_prey = replacetext(digest_alert_prey,"%belly",lowertext(name))
-
- //Send messages
- to_chat(owner, "[digest_alert_owner]")
- to_chat(M, "[digest_alert_prey]")
- M.visible_message("You watch as [owner]'s guts loudly rumble as it finishes off a meal.")
-
- M.stop_sound_channel(CHANNEL_PRED)
- playsound(get_turf(owner),"death_pred",45,0,-6,0,channel=CHANNEL_PRED)
- M.stop_sound_channel(CHANNEL_PRED)
- M.playsound_local(get_turf(M), null, 45, S = prey_digest)
- M.spill_organs(FALSE,TRUE,TRUE)
- M << sound(null, repeat = 0, wait = 0, volume = 80, channel = CHANNEL_PREYLOOP)
- digestion_death(M)
- owner.update_icons()
- continue
-
-
- // Deal digestion damage (and feed the pred)
- if(!(M.status_flags & GODMODE))
- M.adjustFireLoss(digest_burn)
- M.adjustToxLoss(4) // something something plasma based acids
- M.adjustCloneLoss(3) // eventually this'll kill you if you're healing everything else, you nerds.
- return
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-5722.yml b/html/changelogs/AutoChangeLog-pr-5722.yml
new file mode 100644
index 0000000000..e3f570caa2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5722.yml
@@ -0,0 +1,6 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - rscadd: "Hypospray mk IIs are being deployed to stations, these should provide an easier time for medical staff! They come with both inject and spray modes! Spray mode acts like a patch for applying meds"
+ - soundadd: "Hyposprays are fancy, you'll know when they're being used."
+ - server: "Due to fucky-ness, you'll need to unload, then reload the hypos at least once. just how it be."
diff --git a/html/changelogs/AutoChangeLog-pr-5787.yml b/html/changelogs/AutoChangeLog-pr-5787.yml
new file mode 100644
index 0000000000..6b44ee591e
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5787.yml
@@ -0,0 +1,6 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - rscadd: "Tesla Engines are now standard on all but Omega."
+ - bugfix: "fixed a pipe in Meta station that wasn't connected properly."
+ - bugfix: "fixed an exploit related to Tesla wires."
diff --git a/html/changelogs/AutoChangeLog-pr-5789.yml b/html/changelogs/AutoChangeLog-pr-5789.yml
new file mode 100644
index 0000000000..aef3f8ad01
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5789.yml
@@ -0,0 +1,12 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - rscadd: "Added release sound effects for choosing. If having a non-belly, belly."
+ - rscadd: "Added a 'silent' modifier to bellies."
+ - rscadd: "Added a vore subsystem to handle belly processing, should be less clunky"
+ - balance: "rebalanced heal mode and dragon digestion."
+ - soundadd: "added client preference based sound toggles to both eating/release/struggle and digestion noises seperately."
+ - refactor: "vore prefs save to JSON now instead of .sav. much easier really.
+refractor: dragon vore is working, though with this game who knows."
+ - server: "your prefs should automatically transfer, but it's likely you'll lose pre-loaded bellies, BACK UP EVERYTHING. (you should be doing this anyway too)"
+ - server: "Creating new characters will import the previous' bellies. but once you click 'save' they'll make the new JSON file will all the info. This is per slot, so if you change your character, you'll have to change belly stuff."
diff --git a/html/changelogs/AutoChangeLog-pr-5803.yml b/html/changelogs/AutoChangeLog-pr-5803.yml
new file mode 100644
index 0000000000..39ecfb7c9d
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5803.yml
@@ -0,0 +1,6 @@
+author: "Denton"
+delete-after: True
+changes:
+ - bugfix: "Pubbystation: Added a missing APC to the cargo sorting room, a light fixture to the RnD security checkpoint and removed an overlooked firelock east of the bridge."
+ - rscadd: "Pubbystation: Added a spare RPD to the Atmospherics department. Replaced Engineering's outdated meson goggles with modern engineering scanners. Added a GPS device to the secure storage crate."
+ - tweak: "Moved Pubbystation's drone shell dispenser from the experimentation lab to Robotics maint."
diff --git a/html/changelogs/AutoChangeLog-pr-5806.yml b/html/changelogs/AutoChangeLog-pr-5806.yml
new file mode 100644
index 0000000000..c21932b1cb
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5806.yml
@@ -0,0 +1,4 @@
+author: "Jittai / ChuckTheSheep"
+delete-after: True
+changes:
+ - tweak: "Adjusted the space parallax's contrast to be less vibrant."
diff --git a/html/changelogs/AutoChangeLog-pr-5825.yml b/html/changelogs/AutoChangeLog-pr-5825.yml
new file mode 100644
index 0000000000..d16ba7b816
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5825.yml
@@ -0,0 +1,4 @@
+author: "Naksu"
+delete-after: True
+changes:
+ - admin: "Admins can now easily spawn mobs that look like objects. Googly eyes optional!"
diff --git a/html/changelogs/AutoChangeLog-pr-5828.yml b/html/changelogs/AutoChangeLog-pr-5828.yml
new file mode 100644
index 0000000000..121f22e488
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-5828.yml
@@ -0,0 +1,8 @@
+author: "Poojawa"
+delete-after: True
+changes:
+ - rscdel: "Removed old things in .dms we weren't using anymore"
+ - tweak: "subtle messages are now italic'd, so there's better context on whispering"
+ - tweak: "broke apart the cit_gun.dm file, they're decently spaced out now"
+ - tweak: "dogborg_sleeper is now standalone from dogborg_equipment because too lazy to debug why it was breaking backpacks."
+ - tweak: "does that thing I've been meaning to do with Xenobio. additional tools have been provided."
diff --git a/icons/effects/parallax.dmi b/icons/effects/parallax.dmi
index a518b2d2fc..181b76007d 100755
Binary files a/icons/effects/parallax.dmi and b/icons/effects/parallax.dmi differ
diff --git a/icons/obj/citadel/hypospray.dmi b/icons/obj/citadel/hypospray.dmi
new file mode 100644
index 0000000000..f5e89227c7
Binary files /dev/null and b/icons/obj/citadel/hypospray.dmi differ
diff --git a/icons/obj/citadel/vial.dmi b/icons/obj/citadel/vial.dmi
new file mode 100644
index 0000000000..23bceb93b9
Binary files /dev/null and b/icons/obj/citadel/vial.dmi differ
diff --git a/code/citadel/icons/areas.dmi b/modular_citadel/code/game/area/areas.dmi
similarity index 100%
rename from code/citadel/icons/areas.dmi
rename to modular_citadel/code/game/area/areas.dmi
diff --git a/code/citadel/cit_areas.dm b/modular_citadel/code/game/area/cit_areas.dm
similarity index 70%
rename from code/citadel/cit_areas.dm
rename to modular_citadel/code/game/area/cit_areas.dm
index 42879b7408..ae36ed6df5 100644
--- a/code/citadel/cit_areas.dm
+++ b/modular_citadel/code/game/area/cit_areas.dm
@@ -1,6 +1,6 @@
/area/maintenance/bar
name = "Maintenance Bar"
- icon = 'code/citadel/icons/areas.dmi'
+ icon = 'modular_citadel/code/game/area/areas.dmi'
icon_state = "maintbar"
/area/maintenance/bar/cafe
@@ -14,5 +14,5 @@
/area/crew_quarters/cryopod
name = "Cryogenics"
- icon = 'code/citadel/icons/areas.dmi'
+ icon = 'modular_citadel/code/game/area/areas.dmi'
icon_state = "cryo"
\ No newline at end of file
diff --git a/code/citadel/cit_displaycases.dm b/modular_citadel/code/game/machinery/displaycases.dm
similarity index 100%
rename from code/citadel/cit_displaycases.dm
rename to modular_citadel/code/game/machinery/displaycases.dm
diff --git a/code/citadel/plasmacases.dm b/modular_citadel/code/game/machinery/plasmacases.dm
similarity index 100%
rename from code/citadel/plasmacases.dm
rename to modular_citadel/code/game/machinery/plasmacases.dm
diff --git a/modular_citadel/code/game/machinery/vending.dm b/modular_citadel/code/game/machinery/vending.dm
index 130c93d854..6905efd88d 100644
--- a/modular_citadel/code/game/machinery/vending.dm
+++ b/modular_citadel/code/game/machinery/vending.dm
@@ -1,3 +1,106 @@
/obj/machinery/vending/security
contraband = list(/obj/item/clothing/glasses/sunglasses = 2, /obj/item/storage/fancy/donut_box = 2, /obj/item/device/ssword_kit = 1)
- premium = list(/obj/item/coin/antagtoken = 1, /obj/item/device/ssword_kit = 1)
\ No newline at end of file
+ premium = list(/obj/item/coin/antagtoken = 1, /obj/item/device/ssword_kit = 1)
+
+#define STANDARD_CHARGE 1
+#define CONTRABAND_CHARGE 2
+#define COIN_CHARGE 3
+
+/obj/machinery/vending/kink
+ name = "KinkMate"
+ desc = "A vending machine for all your unmentionable desires."
+ icon = 'icons/obj/citvending.dmi'
+ icon_state = "kink"
+ product_slogans = "Kinky!;Sexy!;Check me out, big boy!"
+ vend_reply = "Have fun, you shameless pervert!"
+ products = list(
+ /obj/item/clothing/under/maid = 5,
+ /obj/item/clothing/under/stripper_pink = 5,
+ /obj/item/clothing/under/stripper_green = 5,
+ /obj/item/dildo/custom = 5
+ )
+ contraband = list(/obj/item/restraints/handcuffs/fake/kinky = 5,
+ /obj/item/clothing/neck/petcollar = 5,
+ /obj/item/clothing/under/mankini = 1,
+ /obj/item/dildo/flared/huge = 1
+ )
+ premium = list(/obj/item/device/electropack/shockcollar = 1)
+ refill_canister = /obj/item/vending_refill/kink
+/*
+/obj/machinery/vending/nazivend
+ name = "Nazivend"
+ desc = "A vending machine containing Nazi German supplies. A label reads: \"Remember the gorrilions lost.\""
+ icon = 'icons/obj/citvending.dmi'
+ icon_state = "nazi"
+ vend_reply = "SIEG HEIL!"
+ product_slogans = "Das Vierte Reich wird zuruckkehren!;ENTFERNEN JUDEN!;Billiger als die Juden jemals geben!;Rader auf dem adminbus geht rund und rund.;Warten Sie, warum wir wieder hassen Juden?- *BZZT*"
+ products = list(
+ /obj/item/clothing/head/stalhelm = 20,
+ /obj/item/clothing/head/panzer = 20,
+ /obj/item/clothing/suit/soldiercoat = 20,
+ // /obj/item/clothing/under/soldieruniform = 20,
+ /obj/item/clothing/shoes/jackboots = 20
+ )
+ contraband = list(
+ /obj/item/clothing/head/naziofficer = 10,
+ // /obj/item/clothing/suit/officercoat = 10,
+ // /obj/item/clothing/under/officeruniform = 10,
+ /obj/item/clothing/suit/space/hardsuit/nazi = 3,
+ /obj/item/gun/energy/plasma/MP40k = 4
+ )
+ premium = list()
+
+ refill_canister = /obj/item/vending_refill/nazi
+*/
+/obj/machinery/vending/sovietvend
+ name = "KomradeVendtink"
+ desc = "Rodina-mat' zovyot!"
+ icon = 'icons/obj/citvending.dmi'
+ icon_state = "soviet"
+ vend_reply = "The fascist and capitalist svin'ya shall fall, komrade!"
+ product_slogans = "Quality worth waiting in line for!; Get Hammer and Sickled!; Sosvietsky soyuz above all!; With capitalist pigsky, you would have paid a fortunetink! ; Craftink in Motherland herself!"
+ products = list(
+ /obj/item/clothing/under/soviet = 20,
+ /obj/item/clothing/head/ushanka = 20,
+ /obj/item/clothing/shoes/jackboots = 20,
+ /obj/item/clothing/head/squatter_hat = 20,
+ /obj/item/clothing/under/squatter_outfit = 20,
+ /obj/item/clothing/under/russobluecamooutfit = 20,
+ /obj/item/clothing/head/russobluecamohat = 20
+ )
+ contraband = list(
+ /obj/item/clothing/under/syndicate/tacticool = 4,
+ /obj/item/clothing/mask/balaclava = 4,
+ /obj/item/clothing/suit/russofurcoat = 4,
+ /obj/item/clothing/head/russofurhat = 4,
+ /obj/item/clothing/suit/space/hardsuit/soviet = 3,
+ /obj/item/gun/energy/laser/LaserAK = 4
+ )
+ premium = list()
+
+ refill_canister = /obj/item/vending_refill/soviet
+
+
+#undef STANDARD_CHARGE
+#undef CONTRABAND_CHARGE
+#undef COIN_CHARGE
+
+
+/obj/item/vending_refill/kink
+ machine_name = "KinkMate"
+ icon = 'modular_citadel/icons/vending_restock.dmi'
+ icon_state = "refill_kink"
+ charges = list(8, 5, 0)// of 20 standard, 12 contraband, 0 premium
+ init_charges = list(8, 5, 0)
+
+/obj/item/vending_refill/nazi
+ machine_name = "nazivend"
+ icon_state = "refill_nazi"
+ charges = list(33, 13, 0)
+ init_charges = list(33, 13, 0)
+
+/obj/item/vending_refill/soviet
+ machine_name = "sovietvend"
+ icon_state = "refill_soviet"
+ charges = list(47, 7, 0)
+ init_charges = list(47, 7, 0)
diff --git a/code/citadel/cit_spawners.dm b/modular_citadel/code/game/objects/effects/spawner/spawners.dm
similarity index 100%
rename from code/citadel/cit_spawners.dm
rename to modular_citadel/code/game/objects/effects/spawner/spawners.dm
diff --git a/code/citadel/cit_genemods.dm b/modular_citadel/code/game/objects/items/devices/genemods.dm
similarity index 100%
rename from code/citadel/cit_genemods.dm
rename to modular_citadel/code/game/objects/items/devices/genemods.dm
diff --git a/code/citadel/cit_crewobjectives.dm b/modular_citadel/code/modules/antagonists/cit_crewobjectives.dm
similarity index 100%
rename from code/citadel/cit_crewobjectives.dm
rename to modular_citadel/code/modules/antagonists/cit_crewobjectives.dm
diff --git a/code/citadel/cit_miscreants.dm b/modular_citadel/code/modules/antagonists/cit_miscreants.dm
similarity index 100%
rename from code/citadel/cit_miscreants.dm
rename to modular_citadel/code/modules/antagonists/cit_miscreants.dm
diff --git a/code/citadel/crew_objectives/cit_crewobjectives_cargo.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm
similarity index 100%
rename from code/citadel/crew_objectives/cit_crewobjectives_cargo.dm
rename to modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_cargo.dm
diff --git a/code/citadel/crew_objectives/cit_crewobjectives_civilian.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm
similarity index 100%
rename from code/citadel/crew_objectives/cit_crewobjectives_civilian.dm
rename to modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_civilian.dm
diff --git a/code/citadel/crew_objectives/cit_crewobjectives_command.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm
similarity index 100%
rename from code/citadel/crew_objectives/cit_crewobjectives_command.dm
rename to modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_command.dm
diff --git a/code/citadel/crew_objectives/cit_crewobjectives_engineering.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm
similarity index 100%
rename from code/citadel/crew_objectives/cit_crewobjectives_engineering.dm
rename to modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_engineering.dm
diff --git a/code/citadel/crew_objectives/cit_crewobjectives_medical.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm
similarity index 100%
rename from code/citadel/crew_objectives/cit_crewobjectives_medical.dm
rename to modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_medical.dm
diff --git a/code/citadel/crew_objectives/cit_crewobjectives_science.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm
similarity index 100%
rename from code/citadel/crew_objectives/cit_crewobjectives_science.dm
rename to modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_science.dm
diff --git a/code/citadel/crew_objectives/cit_crewobjectives_security.dm b/modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm
similarity index 100%
rename from code/citadel/crew_objectives/cit_crewobjectives_security.dm
rename to modular_citadel/code/modules/antagonists/crew_objectives/cit_crewobjectives_security.dm
diff --git a/code/citadel/cit_arousal.dm b/modular_citadel/code/modules/arousal/arousal.dm
similarity index 99%
rename from code/citadel/cit_arousal.dm
rename to modular_citadel/code/modules/arousal/arousal.dm
index 077824fe9e..584acc6eb6 100644
--- a/code/citadel/cit_arousal.dm
+++ b/modular_citadel/code/modules/arousal/arousal.dm
@@ -142,7 +142,7 @@
/obj/screen/arousal
name = "arousal"
icon_state = "arousal0"
- icon = 'code/citadel/icons/hud.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/hud.dmi'
screen_loc = ui_arousal
/obj/screen/arousal/Click()
diff --git a/code/citadel/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm
similarity index 96%
rename from code/citadel/organs/breasts.dm
rename to modular_citadel/code/modules/arousal/organs/breasts.dm
index 901c546212..ea44c6d671 100644
--- a/code/citadel/organs/breasts.dm
+++ b/modular_citadel/code/modules/arousal/organs/breasts.dm
@@ -2,7 +2,7 @@
name = "breasts"
desc = "Female milk producing organs."
icon_state = "breasts"
- icon = 'code/citadel/icons/breasts.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/breasts.dmi'
zone = "chest"
slot = "breasts"
w_class = 3
diff --git a/code/citadel/organs/eggsack.dm b/modular_citadel/code/modules/arousal/organs/eggsack.dm
similarity index 87%
rename from code/citadel/organs/eggsack.dm
rename to modular_citadel/code/modules/arousal/organs/eggsack.dm
index 1486310d61..27104cd36a 100644
--- a/code/citadel/organs/eggsack.dm
+++ b/modular_citadel/code/modules/arousal/organs/eggsack.dm
@@ -2,7 +2,7 @@
name = "Egg sack"
desc = "An egg producing reproductive organ."
icon_state = "egg_sack"
- icon = 'code/citadel/icons/ovipositor.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/ovipositor.dmi'
zone = "groin"
slot = "testicles"
color = null //don't use the /genital color since it already is colored
diff --git a/code/citadel/organs/genitals.dm b/modular_citadel/code/modules/arousal/organs/genitals.dm
similarity index 100%
rename from code/citadel/organs/genitals.dm
rename to modular_citadel/code/modules/arousal/organs/genitals.dm
diff --git a/code/citadel/organs/genitals_sprite_accessories.dm b/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm
similarity index 83%
rename from code/citadel/organs/genitals_sprite_accessories.dm
rename to modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm
index 710bab787c..7c02b1c3a5 100644
--- a/code/citadel/organs/genitals_sprite_accessories.dm
+++ b/modular_citadel/code/modules/arousal/organs/genitals_sprite_accessories.dm
@@ -4,7 +4,7 @@
//DICKS,COCKS,PENISES,WHATEVER YOU WANT TO CALL THEM
/datum/sprite_accessory/penis
- icon = 'code/citadel/icons/penis_onmob.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/penis_onmob.dmi'
icon_state = null
name = "penis" //the preview name of the accessory
gender_specific = 0 //Might be needed somewhere down the list.
@@ -35,21 +35,21 @@
// Taur cocks go here //
////////////////////////
/datum/sprite_accessory/penis/taur_flared
- icon = 'code/citadel/icons/taur_penis_onmob.dmi' //Needed larger width
+ icon = 'modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi' //Needed larger width
icon_state = "flared"
name = "Taur, Flared"
center = TRUE //Center the image 'cause 2-tile wide.
dimension_x = 64
/datum/sprite_accessory/penis/taur_knotted
- icon = 'code/citadel/icons/taur_penis_onmob.dmi' //Needed larger width
+ icon = 'modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi' //Needed larger width
icon_state = "knotted"
name = "Taur, Knotted"
center = TRUE //Center the image 'cause 2-tile wide.
dimension_x = 64
/datum/sprite_accessory/penis/taur_tapered
- icon = 'code/citadel/icons/taur_penis_onmob.dmi' //Needed larger width
+ icon = 'modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi' //Needed larger width
icon_state = "tapered"
name = "Taur, Tapered"
center = TRUE //Center the image 'cause 2-tile wide.
@@ -60,7 +60,7 @@
//Vaginas
/datum/sprite_accessory/vagina
- icon = 'code/citadel/icons/vagina_onmob.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/vagina_onmob.dmi'
icon_state = null
name = "vagina"
gender_specific = 0
@@ -90,7 +90,7 @@
//BREASTS BE HERE
/datum/sprite_accessory/breasts
- icon = 'code/citadel/icons/breasts_onmob.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/breasts_onmob.dmi'
icon_state = null
name = "breasts"
gender_specific = 0
@@ -104,7 +104,7 @@
//OVIPOSITORS BE HERE
/datum/sprite_accessory/ovipositor
- icon = 'code/citadel/icons/penis_onmob.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/penis_onmob.dmi'
icon_state = null
name = "Ovipositor" //the preview name of the accessory
gender_specific = 0 //Might be needed somewhere down the list.
diff --git a/code/citadel/organs/ovipositor.dm b/modular_citadel/code/modules/arousal/organs/ovipositor.dm
similarity index 88%
rename from code/citadel/organs/ovipositor.dm
rename to modular_citadel/code/modules/arousal/organs/ovipositor.dm
index 3d684ee387..76bf60d93c 100644
--- a/code/citadel/organs/ovipositor.dm
+++ b/modular_citadel/code/modules/arousal/organs/ovipositor.dm
@@ -2,7 +2,7 @@
name = "Ovipositor"
desc = "An egg laying reproductive organ."
icon_state = "ovi_knotted_2"
- icon = 'code/citadel/icons/ovipositor.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/ovipositor.dmi'
zone = "groin"
slot = "penis"
w_class = 3
diff --git a/code/citadel/organs/penis.dm b/modular_citadel/code/modules/arousal/organs/penis.dm
similarity index 97%
rename from code/citadel/organs/penis.dm
rename to modular_citadel/code/modules/arousal/organs/penis.dm
index 509ed72ef4..ae58aabf51 100644
--- a/code/citadel/organs/penis.dm
+++ b/modular_citadel/code/modules/arousal/organs/penis.dm
@@ -2,7 +2,7 @@
name = "penis"
desc = "A male reproductive organ."
icon_state = "penis"
- icon = 'code/citadel/icons/penis.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/penis.dmi'
zone = "groin"
slot = "penis"
w_class = 3
diff --git a/code/citadel/organs/testicles.dm b/modular_citadel/code/modules/arousal/organs/testicles.dm
similarity index 96%
rename from code/citadel/organs/testicles.dm
rename to modular_citadel/code/modules/arousal/organs/testicles.dm
index bb3ade6048..815d8034e7 100644
--- a/code/citadel/organs/testicles.dm
+++ b/modular_citadel/code/modules/arousal/organs/testicles.dm
@@ -2,7 +2,7 @@
name = "testicles"
desc = "A male reproductive organ."
icon_state = "testicles"
- icon = 'code/citadel/icons/penis.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/penis.dmi'
zone = "groin"
slot = "testicles"
w_class = 3
diff --git a/code/citadel/organs/vagina.dm b/modular_citadel/code/modules/arousal/organs/vagina.dm
similarity index 97%
rename from code/citadel/organs/vagina.dm
rename to modular_citadel/code/modules/arousal/organs/vagina.dm
index 1f19dc7e64..4d9eedb1cf 100644
--- a/code/citadel/organs/vagina.dm
+++ b/modular_citadel/code/modules/arousal/organs/vagina.dm
@@ -1,7 +1,7 @@
/obj/item/organ/genital/vagina
name = "vagina"
desc = "A female reproductive organ."
- icon = 'code/citadel/icons/vagina.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/vagina.dmi'
icon_state = "vagina"
zone = "groin"
slot = "vagina"
diff --git a/code/citadel/organs/womb.dm b/modular_citadel/code/modules/arousal/organs/womb.dm
similarity index 94%
rename from code/citadel/organs/womb.dm
rename to modular_citadel/code/modules/arousal/organs/womb.dm
index 433f005623..c59d74e629 100644
--- a/code/citadel/organs/womb.dm
+++ b/modular_citadel/code/modules/arousal/organs/womb.dm
@@ -1,7 +1,7 @@
/obj/item/organ/genital/womb
name = "womb"
desc = "A female reproductive organ."
- icon = 'code/citadel/icons/vagina.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/vagina.dmi'
icon_state = "womb"
zone = "groin"
slot = "womb"
diff --git a/code/citadel/toys/dildos.dm b/modular_citadel/code/modules/arousal/toys/dildos.dm
similarity index 98%
rename from code/citadel/toys/dildos.dm
rename to modular_citadel/code/modules/arousal/toys/dildos.dm
index d216ed86ba..45f4f5a64a 100644
--- a/code/citadel/toys/dildos.dm
+++ b/modular_citadel/code/modules/arousal/toys/dildos.dm
@@ -4,7 +4,7 @@
obj/item/dildo
name = "dildo"
desc = "Floppy!"
- icon = 'code/citadel/icons/dildo.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/dildo.dmi'
damtype = BRUTE
force = 0
throwforce = 0
diff --git a/modular_citadel/code/modules/client/preferences_toggles.dm b/modular_citadel/code/modules/client/preferences_toggles.dm
new file mode 100644
index 0000000000..4b92a1e9c3
--- /dev/null
+++ b/modular_citadel/code/modules/client/preferences_toggles.dm
@@ -0,0 +1,22 @@
+TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggleeatingnoise)()
+ set name = "Toggle Eating Noises"
+ set category = "Preferences"
+ set desc = "Hear Eating noises"
+ usr.client.prefs.toggles ^= EATING_NOISES
+ usr.client.prefs.save_preferences()
+ usr.stop_sound_channel(CHANNEL_PRED)
+ to_chat(usr, "You will [(usr.client.prefs.toggles & EATING_NOISES) ? "now" : "no longer"] hear eating noises.")
+/datum/verbs/menu/Settings/Sound/toggleeatingnoise/Get_checked(client/C)
+ return !(C.prefs.toggles & EATING_NOISES)
+
+
+TOGGLE_CHECKBOX(/datum/verbs/menu/Settings/Sound, toggledigestionnoise)()
+ set name = "Toggle Digestion Noises"
+ set category = "Preferences"
+ set desc = "Hear digestive noises"
+ usr.client.prefs.toggles ^= DIGESTION_NOISES
+ usr.client.prefs.save_preferences()
+ usr.stop_sound_channel(CHANNEL_DIGEST)
+ to_chat(usr, "You will [(usr.client.prefs.toggles & DIGESTION_NOISES) ? "now" : "no longer"] hear digestion noises.")
+/datum/verbs/menu/Settings/Sound/toggledigestionnoise/Get_checked(client/C)
+ return !(C.prefs.toggles & DIGESTION_NOISES)
diff --git a/modular_citadel/code/modules/clothing/suits/suits.dm b/modular_citadel/code/modules/clothing/suits/suits.dm
new file mode 100644
index 0000000000..776da896bd
--- /dev/null
+++ b/modular_citadel/code/modules/clothing/suits/suits.dm
@@ -0,0 +1,13 @@
+/*/////////////////////////////////////////////////////////////////////////////////
+/////// ///////
+/////// Cit's exclusive suits, armor, etc. go here ///////
+/////// ///////
+*//////////////////////////////////////////////////////////////////////////////////
+
+
+/obj/item/clothing/suit/armor/hos/trenchcoat/cloak
+ name = "armored trenchcloak"
+ desc = "A trenchcoat enchanced with a special lightweight kevlar. This one appears to be designed to be draped over one's shoulders rather than worn normally.."
+ alternate_worn_icon = 'icons/mob/citadel/suit.dmi'
+ icon_state = "hostrench"
+ item_state = "hostrench"
\ No newline at end of file
diff --git a/modular_citadel/code/modules/clothing/under.dm b/modular_citadel/code/modules/clothing/under.dm
deleted file mode 100644
index bf77704122..0000000000
--- a/modular_citadel/code/modules/clothing/under.dm
+++ /dev/null
@@ -1,7 +0,0 @@
-/obj/item/clothing/under/syndicate/cosmetic
- name = "tactitool turtleneck"
- desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
- icon_state = "tactifool"
- item_state = "bl_suit"
- item_color = "tactifool"
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
\ No newline at end of file
diff --git a/modular_citadel/code/modules/clothing/under/syndicate.dm b/modular_citadel/code/modules/clothing/under/syndicate.dm
deleted file mode 100644
index 5364d4a0fb..0000000000
--- a/modular_citadel/code/modules/clothing/under/syndicate.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-/obj/item/clothing/under/syndicate/tacticool
- has_sensor = TRUE
diff --git a/modular_citadel/code/modules/clothing/under/turtlenecks.dm b/modular_citadel/code/modules/clothing/under/turtlenecks.dm
index 47432d87f7..2f40a08dc3 100644
--- a/modular_citadel/code/modules/clothing/under/turtlenecks.dm
+++ b/modular_citadel/code/modules/clothing/under/turtlenecks.dm
@@ -19,4 +19,59 @@
/obj/structure/closet/secure_closet/CMO/PopulateContents() //This is placed here because it's a very specific addition for a very specific niche
..()
- new /obj/item/clothing/under/rank/chief_medical_officer/turtleneck(src)
\ No newline at end of file
+ new /obj/item/clothing/under/rank/chief_medical_officer/turtleneck(src)
+
+/obj/item/clothing/under/syndicate/cosmetic
+ name = "tactitool turtleneck"
+ desc = "Just looking at it makes you want to buy an SKS, go into the woods, and -operate-."
+ icon_state = "tactifool"
+ item_state = "bl_suit"
+ item_color = "tactifool"
+ has_sensor = TRUE
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0)
+
+/obj/item/clothing/under/syndicate/tacticool
+ has_sensor = TRUE
+
+// Sweaters are good enough for this category too.
+
+/obj/item/clothing/under/bb_sweater
+ name = "cream sweater"
+ desc = "Why trade style for comfort? Now you can go commando down south and still be cozy up north."
+ icon_state = "bb_turtle"
+ item_state = "w_suit"
+ item_color = "bb_turtle"
+ body_parts_covered = CHEST|ARMS
+ can_adjust = 1
+ icon = 'icons/obj/clothing/turtlenecks.dmi'
+ icon_override = 'icons/mob/citadel/uniforms.dmi'
+
+/obj/item/clothing/under/bb_sweater/black
+ name = "black sweater"
+ icon_state = "bb_turtleblk"
+ item_state = "bl_suit"
+ item_color = "bb_turtleblk"
+
+/obj/item/clothing/under/bb_sweater/purple
+ name = "purple sweater"
+ icon_state = "bb_turtlepur"
+ item_state = "p_suit"
+ item_color = "bb_turtlepur"
+
+/obj/item/clothing/under/bb_sweater/green
+ name = "green sweater"
+ icon_state = "bb_turtlegrn"
+ item_state = "g_suit"
+ item_color = "bb_turtlegrn"
+
+/obj/item/clothing/under/bb_sweater/red
+ name = "red sweater"
+ icon_state = "bb_turtlered"
+ item_state = "r_suit"
+ item_color = "bb_turtlered"
+
+/obj/item/clothing/under/bb_sweater/blue
+ name = "blue sweater"
+ icon_state = "bb_turtleblu"
+ item_state = "b_suit"
+ item_color = "bb_turtleblu"
diff --git a/code/citadel/cit_clothes.dm b/modular_citadel/code/modules/clothing/under/under.dm
similarity index 72%
rename from code/citadel/cit_clothes.dm
rename to modular_citadel/code/modules/clothing/under/under.dm
index dd83c6b769..042273ac6a 100644
--- a/code/citadel/cit_clothes.dm
+++ b/modular_citadel/code/modules/clothing/under/under.dm
@@ -21,11 +21,4 @@
icon_state = "hosskirt"
icon_override = 'icons/mob/citadel/uniforms.dmi'
item_state = "gy_suit"
- item_color = "hosskirt"
-
-/obj/item/clothing/suit/armor/hos/trenchcoat/cloak
- name = "armored trenchcloak"
- desc = "A trenchcoat enchanced with a special lightweight kevlar. This one appears to be designed to be draped over one's shoulders rather than worn normally.."
- alternate_worn_icon = 'icons/mob/citadel/suit.dmi'
- icon_state = "hostrench"
- item_state = "hostrench"
\ No newline at end of file
+ item_color = "hosskirt"
\ No newline at end of file
diff --git a/code/citadel/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm
similarity index 100%
rename from code/citadel/custom_loadout/custom_items.dm
rename to modular_citadel/code/modules/custom_loadout/custom_items.dm
diff --git a/code/citadel/custom_loadout/load_to_mob.dm b/modular_citadel/code/modules/custom_loadout/load_to_mob.dm
similarity index 100%
rename from code/citadel/custom_loadout/load_to_mob.dm
rename to modular_citadel/code/modules/custom_loadout/load_to_mob.dm
diff --git a/code/citadel/custom_loadout/read_from_file.dm b/modular_citadel/code/modules/custom_loadout/read_from_file.dm
similarity index 100%
rename from code/citadel/custom_loadout/read_from_file.dm
rename to modular_citadel/code/modules/custom_loadout/read_from_file.dm
diff --git a/code/citadel/cit_emotes.dm b/modular_citadel/code/modules/mob/cit_emotes.dm
similarity index 100%
rename from code/citadel/cit_emotes.dm
rename to modular_citadel/code/modules/mob/cit_emotes.dm
diff --git a/code/citadel/dogborgs.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm
similarity index 100%
rename from code/citadel/dogborgs.dm
rename to modular_citadel/code/modules/mob/living/silicon/robot/dogborg archive.dm
diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm
new file mode 100644
index 0000000000..dceaf9d1c5
--- /dev/null
+++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm
@@ -0,0 +1,401 @@
+/*
+DOG BORG EQUIPMENT HERE
+SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm !
+*/
+
+/obj/item/dogborg/jaws/big
+ name = "combat jaws"
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state = "jaws"
+ desc = "The jaws of the law."
+ flags_1 = CONDUCT_1
+ force = 12
+ throwforce = 0
+ hitsound = 'sound/weapons/bite.ogg'
+ attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
+ w_class = 3
+ sharpness = IS_SHARP
+
+/obj/item/dogborg/jaws/small
+ name = "puppy jaws"
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state = "smalljaws"
+ desc = "The jaws of a small dog."
+ flags_1 = CONDUCT_1
+ force = 6
+ throwforce = 0
+ hitsound = 'sound/weapons/bite.ogg'
+ attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
+ w_class = 3
+ sharpness = IS_SHARP
+
+/obj/item/dogborg/jaws/attack(atom/A, mob/living/silicon/robot/user)
+ ..()
+ user.do_attack_animation(A, ATTACK_EFFECT_BITE)
+
+/obj/item/dogborg/jaws/small/attack_self(mob/user)
+ var/mob/living/silicon/robot.R = user
+ if(R.emagged)
+ name = "combat jaws"
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state = "jaws"
+ desc = "The jaws of the law."
+ flags_1 = CONDUCT_1
+ force = 12
+ throwforce = 0
+ hitsound = 'sound/weapons/bite.ogg'
+ attack_verb = list("chomped", "bit", "ripped", "mauled", "enforced")
+ w_class = 3
+ sharpness = IS_SHARP
+ else
+ name = "puppy jaws"
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state = "smalljaws"
+ desc = "The jaws of a small dog."
+ flags_1 = CONDUCT_1
+ force = 5
+ throwforce = 0
+ hitsound = 'sound/weapons/bite.ogg'
+ attack_verb = list("nibbled", "bit", "gnawed", "chomped", "nommed")
+ w_class = 3
+ sharpness = IS_SHARP
+ update_icon()
+
+
+//Cuffs
+
+/obj/item/restraints/handcuffs/cable/zipties/cyborg/dog/attack(mob/living/carbon/C, mob/user)
+ if(!C.handcuffed)
+ playsound(loc, 'sound/weapons/cablecuff.ogg', 60, 1, -2)
+ C.visible_message("[user] is trying to put zipties on [C]!", \
+ "[user] is trying to put zipties on [C]!")
+ if(do_mob(user, C, 60))
+ if(!C.handcuffed)
+ C.handcuffed = new /obj/item/restraints/handcuffs/cable/zipties/used(C)
+ C.update_inv_handcuffed(0)
+ to_chat(user,"You handcuff [C].")
+ playsound(loc, pick('sound/voice/bgod.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/bsecureday.ogg', 'sound/voice/bradio.ogg', 'sound/voice/binsult.ogg', 'sound/voice/bcreep.ogg'), 50, 0)
+ add_logs(user, C, "handcuffed")
+ else
+ to_chat(user,"You fail to handcuff [C]!")
+
+
+//Boop
+
+/obj/item/device/analyzer/nose
+ name = "boop module"
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state = "nose"
+ desc = "The BOOP module"
+ flags_1 = CONDUCT_1
+ force = 0
+ throwforce = 0
+ attack_verb = list("nuzzled", "nosed", "booped")
+ w_class = 1
+
+/obj/item/device/analyzer/nose/attack_self(mob/user)
+ user.visible_message("[user] sniffs around the air.", "You sniff the air for gas traces.")
+
+ var/turf/location = user.loc
+ if(!istype(location))
+ return
+
+ var/datum/gas_mixture/environment = location.return_air()
+
+ var/pressure = environment.return_pressure()
+ var/total_moles = environment.total_moles()
+
+ to_chat(user, "Results:")
+ if(abs(pressure - ONE_ATMOSPHERE) < 10)
+ to_chat(user, "Pressure: [round(pressure,0.1)] kPa")
+ else
+ to_chat(user, "Pressure: [round(pressure,0.1)] kPa")
+ if(total_moles)
+ var/list/env_gases = environment.gases
+
+ environment.assert_gases(arglist(GLOB.hardcoded_gases))
+ var/o2_concentration = env_gases[/datum/gas/oxygen][MOLES]/total_moles
+ var/n2_concentration = env_gases[/datum/gas/nitrogen][MOLES]/total_moles
+ var/co2_concentration = env_gases[/datum/gas/carbon_dioxide][MOLES]/total_moles
+ var/plasma_concentration = env_gases[/datum/gas/plasma][MOLES]/total_moles
+ environment.garbage_collect()
+
+ if(abs(n2_concentration - N2STANDARD) < 20)
+ to_chat(user, "Nitrogen: [round(n2_concentration*100, 0.01)] %")
+ else
+ to_chat(user, "Nitrogen: [round(n2_concentration*100, 0.01)] %")
+
+ if(abs(o2_concentration - O2STANDARD) < 2)
+ to_chat(user, "Oxygen: [round(o2_concentration*100, 0.01)] %")
+ else
+ to_chat(user, "Oxygen: [round(o2_concentration*100, 0.01)] %")
+
+ if(co2_concentration > 0.01)
+ to_chat(user, "CO2: [round(co2_concentration*100, 0.01)] %")
+ else
+ to_chat(user, "CO2: [round(co2_concentration*100, 0.01)] %")
+
+ if(plasma_concentration > 0.005)
+ to_chat(user, "Plasma: [round(plasma_concentration*100, 0.01)] %")
+ else
+ to_chat(user, "Plasma: [round(plasma_concentration*100, 0.01)] %")
+
+
+ for(var/id in env_gases)
+ if(id in GLOB.hardcoded_gases)
+ continue
+ var/gas_concentration = env_gases[id][MOLES]/total_moles
+ to_chat(user, "[env_gases[id][GAS_META][META_GAS_NAME]]: [round(gas_concentration*100, 0.01)] %")
+ to_chat(user, "Temperature: [round(environment.temperature-T0C)] °C")
+
+/obj/item/device/analyzer/nose/AltClick(mob/user) //Barometer output for measuring when the next storm happens
+ . = ..()
+
+//Delivery
+
+/obj/item/storage/bag/borgdelivery
+ name = "fetching storage"
+ desc = "Fetch the thing!"
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state = "dbag"
+ //Can hold one big item at a time. Drops contents on unequip.(see inventory.dm)
+ w_class = 5
+ max_w_class = 2
+ max_combined_w_class = 2
+ storage_slots = 1
+ collection_mode = 0
+ can_hold = list() // any
+ cant_hold = list(/obj/item/disk/nuclear)
+
+
+//Tongue stuff
+
+/obj/item/soap/tongue
+ name = "synthetic tongue"
+ desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state = "synthtongue"
+ hitsound = 'sound/effects/attackblob.ogg'
+ cleanspeed = 80
+
+/obj/item/soap/tongue/scrubpup
+ cleanspeed = 25 //slightly faster than a mop.
+
+/obj/item/soap/tongue/New()
+ ..()
+ flags_1 |= NOBLUDGEON_1 //No more attack messages
+
+/obj/item/trash/rkibble
+ name = "robo kibble"
+ desc = "A novelty bowl of assorted mech fabricator byproducts. Mockingly feed this to the sec-dog to help it recharge."
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state= "kibble"
+
+/obj/item/soap/tongue/attack_self(mob/user)
+ var/mob/living/silicon/robot.R = user
+ if(R.emagged)
+ name = "hacked tongue of doom"
+ desc = "Your tongue has been upgraded successfully. Congratulations."
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state = "syndietongue"
+ cleanspeed = 10 //(nerf'd)tator soap stat
+ else
+ name = "synthetic tongue"
+ desc = "Useful for slurping mess off the floor before affectionally licking the crew members in the face."
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state = "synthtongue"
+ cleanspeed = initial(cleanspeed)
+ update_icon()
+
+/obj/item/soap/tongue/afterattack(atom/target, mob/user, proximity)
+ var/mob/living/silicon/robot.R = user
+ if(!proximity || !check_allowed_items(target))
+ return
+ if(R.client && (target in R.client.screen))
+ to_chat(R, "You need to take that [target.name] off before cleaning it!")
+ else if(is_cleanable(target))
+ R.visible_message("[R] begins to lick off \the [target.name].", "You begin to lick off \the [target.name]...")
+ if(do_after(R, src.cleanspeed, target = target))
+ if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
+ return //If they moved away, you can't eat them.
+ to_chat(R, "You finish licking off \the [target.name].")
+ qdel(target)
+ R.cell.give(50)
+ else if(isobj(target)) //hoo boy. danger zone man
+ if(istype(target,/obj/item/trash))
+ R.visible_message("[R] nibbles away at \the [target.name].", "You begin to nibble away at \the [target.name]...")
+ if(do_after(R, src.cleanspeed, target = target))
+ if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
+ return //If they moved away, you can't eat them.
+ to_chat(R, "You finish off \the [target.name].")
+ qdel(target)
+ R.cell.give(250)
+ return
+ if(istype(target,/obj/item/stock_parts/cell))
+ R.visible_message("[R] begins cramming \the [target.name] down its throat.", "You begin cramming \the [target.name] down your throat...")
+ if(do_after(R, 50, target = target))
+ if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
+ return //If they moved away, you can't eat them.
+ to_chat(R, "You finish off \the [target.name].")
+ var/obj/item/stock_parts/cell.C = target
+ R.cell.charge = R.cell.charge + (C.charge / 3) //Instant full cell upgrades op idgaf
+ qdel(target)
+ return
+ var/obj/item/I = target //HAHA FUCK IT, NOT LIKE WE ALREADY HAVE A SHITTON OF WAYS TO REMOVE SHIT
+ if(!I.anchored && R.emagged)
+ R.visible_message("[R] begins chewing up \the [target.name]. Looks like it's trying to loophole around its diet restriction!", "You begin chewing up \the [target.name]...")
+ if(do_after(R, 100, target = I)) //Nerf dat time yo
+ if(!in_range(src, target)) //Proximity is probably old news by now, do a new check. Even emags don't make you magically eat things at range.
+ return //If they moved away, you can't eat them.
+ visible_message("[R] chews up \the [target.name] and cleans off the debris!")
+ to_chat(R, "You finish off \the [target.name].")
+ qdel(I)
+ R.cell.give(500)
+ return
+ R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...")
+ if(do_after(R, src.cleanspeed, target = target))
+ if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
+ return //If they moved away, you can't clean them.
+ to_chat(R,"You clean \the [target.name].")
+ var/obj/effect/decal/cleanable/C = locate() in target
+ qdel(C)
+ SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
+ else if(ishuman(target))
+ if(R.emagged)
+ var/mob/living/L = target
+ if(R.cell.charge <= 666)
+ return
+ L.Stun(4) // normal stunbaton is force 7 gimme a break good sir!
+ L.Knockdown(80)
+ L.apply_effect(STUTTER, 4)
+ L.visible_message("[R] has shocked [L] with its tongue!", \
+ "[R] has shocked you with its tongue! You can feel the betrayal.")
+ playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
+ R.cell.use(666)
+ else
+ R.visible_message("\the [R] affectionally licks \the [target]'s face!", "You affectionally lick \the [target]'s face!")
+ playsound(src.loc, 'sound/effects/attackblob.ogg', 50, 1)
+ return
+ else if(istype(target, /obj/structure/window))
+ R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...")
+ if(do_after(R, src.cleanspeed, target = target))
+ if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
+ return //If they moved away, you can't clean them.
+ to_chat(R, "You clean \the [target.name].")
+ target.color = initial(target.color)
+ else
+ R.visible_message("[R] begins to lick \the [target.name] clean...", "You begin to lick \the [target.name] clean...")
+ if(do_after(R, src.cleanspeed, target = target))
+ if(!in_range(src, target)) //Proximity is probably old news by now, do a new check.
+ return //If they moved away, you can't clean them.
+ to_chat(R, "You clean \the [target.name].")
+ var/obj/effect/decal/cleanable/C = locate() in target
+ qdel(C)
+ SendSignal(COMSIG_COMPONENT_CLEAN_ACT, CLEAN_STRENGTH_BLOOD)
+ return
+
+
+//Defibs
+
+/obj/item/twohanded/shockpaddles/cyborg/hound
+ name = "Paws of Life"
+ desc = "MediHound specific shock paws."
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state = "defibpaddles0"
+ item_state = "defibpaddles0"
+
+// Pounce stuff for K-9
+
+/obj/item/dogborg/pounce
+ name = "pounce"
+ icon = 'icons/mob/dogborg.dmi'
+ icon_state = "pounce"
+ desc = "Leap at your target to momentarily stun them."
+ force = 0
+ throwforce = 0
+
+/obj/item/dogborg/pounce/New()
+ ..()
+ flags_1 |= NOBLUDGEON_1
+
+/mob/living/silicon/robot
+ var/leaping = 0
+ var/pounce_cooldown = 0
+ var/pounce_cooldown_time = 50 //Nearly doubled, u happy?
+ var/pounce_spoolup = 3
+ var/leap_at
+ var/disabler
+ var/laser
+ var/sleeper_g
+ var/sleeper_r
+
+#define MAX_K9_LEAP_DIST 4 //because something's definitely borked the pounce functioning from a distance.
+
+/obj/item/dogborg/pounce/afterattack(atom/A, mob/user)
+ var/mob/living/silicon/robot/R = user
+ if(R && !R.pounce_cooldown)
+ R.pounce_cooldown = !R.pounce_cooldown
+ to_chat(R, "Your targeting systems lock on to [A]...")
+ addtimer(CALLBACK(R, /mob/living/silicon/robot.proc/leap_at, A), R.pounce_spoolup)
+ spawn(R.pounce_cooldown_time)
+ R.pounce_cooldown = !R.pounce_cooldown
+ else if(R && R.pounce_cooldown)
+ to_chat(R, "Your leg actuators are still recharging!")
+
+/mob/living/silicon/robot/proc/leap_at(atom/A)
+ if(leaping || stat || buckled || lying)
+ return
+
+ if(!has_gravity(src) || !has_gravity(A))
+ to_chat(src,"It is unsafe to leap without gravity!")
+ //It's also extremely buggy visually, so it's balance+bugfix
+ return
+
+ if(cell.charge <= 500)
+ to_chat(src,"Insufficent reserves for jump actuators!")
+ return
+
+ else
+ leaping = 1
+ weather_immunities += "lava"
+ pixel_y = 10
+ update_icons()
+ throw_at(A, MAX_K9_LEAP_DIST, 1, spin=0, diagonals_first = 1)
+ cell.use(500) //Doubled the energy consumption
+ weather_immunities -= "lava"
+
+/mob/living/silicon/robot/throw_impact(atom/A)
+
+ if(!leaping)
+ return ..()
+
+ if(A)
+ if(isliving(A))
+ var/mob/living/L = A
+ var/blocked = 0
+ if(ishuman(A))
+ var/mob/living/carbon/human/H = A
+ if(H.check_shields(0, "the [name]", src, attack_type = LEAP_ATTACK))
+ blocked = 1
+ if(!blocked)
+ L.visible_message("[src] pounces on [L]!", "[src] pounces on you!")
+ L.Knockdown(45)
+ playsound(src, 'sound/weapons/Egloves.ogg', 50, 1)
+ sleep(2)//Runtime prevention (infinite bump() calls on hulks)
+ step_towards(src,L)
+ else
+ Knockdown(45, 1, 1)
+
+ pounce_cooldown = !pounce_cooldown
+ spawn(pounce_cooldown_time) //3s by default
+ pounce_cooldown = !pounce_cooldown
+ else if(A.density && !A.CanPass(src))
+ visible_message("[src] smashes into [A]!", "You smash into [A]!")
+ playsound(src, 'sound/items/trayhit1.ogg', 50, 1)
+ Knockdown(45, 1, 1)
+
+ if(leaping)
+ leaping = 0
+ pixel_y = initial(pixel_y)
+ update_icons()
+ update_canmove()
diff --git a/code/citadel/pokemon.dm b/modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm
similarity index 100%
rename from code/citadel/pokemon.dm
rename to modular_citadel/code/modules/mob/living/simple_animal/pokemon.dm
diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/flechette.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/flechette.dm
new file mode 100644
index 0000000000..28dfeb89d6
--- /dev/null
+++ b/modular_citadel/code/modules/projectiles/guns/ballistic/flechette.dm
@@ -0,0 +1,117 @@
+//////Flechette Launcher//////
+
+///projectiles///
+
+/obj/item/projectile/bullet/cflechetteap //shreds armor
+ name = "flechette (armor piercing)"
+ damage = 8
+ armour_penetration = 80
+
+/obj/item/projectile/bullet/cflechettes //shreds flesh and forces bleeding
+ name = "flechette (serrated)"
+ damage = 15
+ dismemberment = 10
+ armour_penetration = -80
+
+/obj/item/projectile/bullet/cflechettes/on_hit(atom/target, blocked = FALSE)
+ if((blocked != 100) && iscarbon(target))
+ var/mob/living/carbon/C = target
+ C.bleed(10)
+ return ..()
+
+///ammo casings (CASELESS AMMO CASINGS WOOOOOOOO)///
+
+/obj/item/ammo_casing/caseless/flechetteap
+ name = "flechette (armor piercing)"
+ desc = "A flechette made with a tungsten alloy."
+ projectile_type = /obj/item/projectile/bullet/cflechetteap
+ caliber = "flechette"
+ throwforce = 1
+ throw_speed = 3
+
+/obj/item/ammo_casing/caseless/flechettes
+ name = "flechette (serrated)"
+ desc = "A serrated flechette made of a special alloy intended to deform drastically upon penetration of human flesh."
+ projectile_type = /obj/item/projectile/bullet/cflechettes
+ caliber = "flechette"
+ throwforce = 2
+ throw_speed = 3
+ embedding = list("embedded_pain_multiplier" = 0, "embed_chance" = 40, "embedded_fall_chance" = 10)
+
+///magazine///
+
+/obj/item/ammo_box/magazine/flechette
+ name = "flechette magazine (armor piercing)"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "flechettemag"
+ ammo_type = /obj/item/ammo_casing/caseless/flechetteap
+ caliber = "flechette"
+ max_ammo = 40
+ multiple_sprites = 2
+
+/obj/item/ammo_box/magazine/flechette/s
+ name = "flechette magazine (serrated)"
+ ammo_type = /obj/item/ammo_casing/caseless/flechettes
+
+///the gun itself///
+
+/obj/item/gun/ballistic/automatic/flechette
+ name = "\improper CX Flechette Launcher"
+ desc = "A flechette launching machine pistol with an unconventional bullpup frame."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "flechettegun"
+ item_state = "gun"
+ w_class = WEIGHT_CLASS_NORMAL
+ slot_flags = 0
+ /obj/item/device/firing_pin/implant/pindicate
+ mag_type = /obj/item/ammo_box/magazine/flechette/
+ fire_sound = 'sound/weapons/gunshot_smg.ogg'
+ can_suppress = 0
+ burst_size = 5
+ fire_delay = 1
+ casing_ejector = 0
+ spread = 10
+ recoil = 0.05
+
+/obj/item/gun/ballistic/automatic/flechette/update_icon()
+ ..()
+ if(magazine)
+ cut_overlays()
+ add_overlay("flechettegun-magazine")
+ else
+ cut_overlays()
+ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
+
+///unique variant///
+
+/obj/item/projectile/bullet/cflechetteshredder
+ name = "flechette (shredder)"
+ damage = 5
+ dismemberment = 40
+
+/obj/item/ammo_casing/caseless/flechetteshredder
+ name = "flechette (shredder)"
+ desc = "A serrated flechette made of a special alloy that forms a monofilament edge."
+ projectile_type = /obj/item/projectile/bullet/cflechettes
+
+/obj/item/ammo_box/magazine/flechette/shredder
+ name = "flechette magazine (shredder)"
+ icon_state = "shreddermag"
+ ammo_type = /obj/item/ammo_casing/caseless/flechetteshredder
+
+/obj/item/gun/ballistic/automatic/flechette/shredder
+ name = "\improper CX Shredder"
+ desc = "A flechette launching machine pistol made of ultra-light CFRP optimized for firing serrated monofillament flechettes."
+ w_class = WEIGHT_CLASS_SMALL
+ mag_type = /obj/item/ammo_box/magazine/flechette/shredder
+ spread = 15
+ recoil = 0.1
+
+/obj/item/gun/ballistic/automatic/flechette/shredder/update_icon()
+ ..()
+ if(magazine)
+ cut_overlays()
+ add_overlay("shreddergun-magazine")
+ else
+ cut_overlays()
+ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/handguns.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/handguns.dm
new file mode 100644
index 0000000000..487d5111fc
--- /dev/null
+++ b/modular_citadel/code/modules/projectiles/guns/ballistic/handguns.dm
@@ -0,0 +1,424 @@
+////////////Anti Tank Pistol////////////
+
+/obj/item/gun/ballistic/automatic/pistol/antitank
+ name = "Anti Tank Pistol"
+ desc = "A massively impractical and silly monstrosity of a pistol that fires .50 calliber rounds. The recoil is likely to dislocate your wrist."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "atp"
+ item_state = "pistol"
+ recoil = 4
+ mag_type = /obj/item/ammo_box/magazine/sniper_rounds
+ fire_delay = 50
+ burst_size = 1
+ can_suppress = 0
+ w_class = WEIGHT_CLASS_NORMAL
+ actions_types = list()
+ fire_sound = 'sound/weapons/blastcannon.ogg'
+ spread = 20 //damn thing has no rifling.
+
+/obj/item/gun/ballistic/automatic/pistol/antitank/update_icon()
+ ..()
+ if(magazine)
+ cut_overlays()
+ add_overlay("atp-mag")
+ else
+ cut_overlays()
+ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
+
+/obj/item/gun/ballistic/automatic/pistol/antitank/syndicate
+ name = "Syndicate Anti Tank Pistol"
+ desc = "A massively impractical and silly monstrosity of a pistol that fires .50 calliber rounds. The recoil is likely to dislocate a variety of joints without proper bracing."
+ pin = /obj/item/device/firing_pin/implant/pindicate
+
+/* made redundant by reskinnable stetchkins
+//////Stealth Pistol//////
+
+/obj/item/gun/ballistic/automatic/pistol/stealth
+ name = "stealth pistol"
+ desc = "A unique bullpup pistol with a compact frame. Has an integrated surpressor."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "stealthpistol"
+ w_class = WEIGHT_CLASS_SMALL
+ mag_type = /obj/item/ammo_box/magazine/m10mm
+ can_suppress = 0
+ fire_sound = 'sound/weapons/gunshot_silenced.ogg'
+ suppressed = 1
+ burst_size = 1
+
+/obj/item/gun/ballistic/automatic/pistol/stealth/update_icon()
+ ..()
+ if(magazine)
+ cut_overlays()
+ add_overlay("stealthpistol-magazine")
+ else
+ cut_overlays()
+ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
+
+*/
+
+///foam stealth pistol///
+
+/obj/item/gun/ballistic/automatic/toy/pistol/stealth
+ name = "foam force stealth pistol"
+ desc = "A small, easily concealable toy bullpup handgun. Ages 8 and up."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "foamsp"
+ w_class = WEIGHT_CLASS_SMALL
+ mag_type = /obj/item/ammo_box/magazine/toy/pistol
+ can_suppress = FALSE
+ fire_sound = 'sound/weapons/gunshot_silenced.ogg'
+ suppressed = TRUE
+ burst_size = 1
+ fire_delay = 0
+ spread = 20
+ actions_types = list()
+
+/obj/item/gun/ballistic/automatic/toy/pistol/stealth/update_icon()
+ ..()
+ if(magazine)
+ cut_overlays()
+ add_overlay("foamsp-magazine")
+ else
+ cut_overlays()
+ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
+
+//////10mm soporific bullets//////
+
+obj/item/projectile/bullet/c10mm/soporific
+ name ="10mm soporific bullet"
+ armour_penetration = 0
+ nodamage = TRUE
+ dismemberment = 0
+ knockdown = 0
+
+/obj/item/projectile/bullet/c10mm/soporific/on_hit(atom/target, blocked = FALSE)
+ if((blocked != 100) && isliving(target))
+ var/mob/living/L = target
+ L.blur_eyes(6)
+ if(L.getStaminaLoss() >= 60)
+ L.Sleeping(300)
+ else
+ L.adjustStaminaLoss(25)
+ return 1
+
+/obj/item/ammo_casing/c10mm/soporific
+ name = ".10mm soporific bullet casing"
+ desc = "A 10mm soporific bullet casing."
+ projectile_type = /obj/item/projectile/bullet/c10mm/soporific
+
+/obj/item/ammo_box/magazine/m10mm/soporific
+ name = "pistol magazine (10mm soporific)"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "9x19pS"
+ desc = "A gun magazine. Loaded with rounds which inject the target with a variety of illegal substances to induce sleep in the target."
+ ammo_type = /obj/item/ammo_casing/c10mm/soporific
+
+/obj/item/ammo_box/c10mm/soporific
+ name = "ammo box (10mm soporific)"
+ ammo_type = /obj/item/ammo_casing/c10mm/soporific
+ max_ammo = 24
+
+//////modular pistol////// (reskinnable stetchkins)
+
+/obj/item/gun/ballistic/automatic/pistol/modular
+ name = "modular pistol"
+ desc = "A small, easily concealable 10mm handgun. Has a threaded barrel for suppressors."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "cde"
+ can_unsuppress = TRUE
+ obj_flags = UNIQUE_RENAME
+ unique_reskin = list("Default" = "cde",
+ "NT-99" = "n99",
+ "Stealth" = "stealthpistol",
+ "HKVP-78" = "vp78",
+ "Luger" = "p08b",
+ "Mk.58" = "secguncomp",
+ "PX4 Storm" = "px4"
+ )
+
+/obj/item/gun/ballistic/automatic/pistol/modular/update_icon()
+ ..()
+ if(current_skin)
+ icon_state = "[unique_reskin[current_skin]][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]"
+ else
+ icon_state = "[initial(icon_state)][chambered ? "" : "-e"][suppressed ? "-suppressed" : ""]"
+ if(magazine && suppressed)
+ cut_overlays()
+ add_overlay("[unique_reskin[current_skin]]-magazine-sup") //Yes, this means the default iconstate can't have a magazine overlay
+ else if (magazine)
+ cut_overlays()
+ add_overlay("[unique_reskin[current_skin]]-magazine")
+ else
+ cut_overlays()
+
+/////////RAYGUN MEMES/////////
+
+/obj/item/projectile/beam/lasertag/ray //the projectile, compatible with regular laser tag armor
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "ray"
+ name = "ray bolt"
+ eyeblur = 0
+
+/obj/item/ammo_casing/energy/laser/raytag
+ projectile_type = /obj/item/projectile/beam/lasertag/ray
+ select_name = "raytag"
+ fire_sound = 'sound/weapons/raygun.ogg'
+
+/obj/item/gun/energy/laser/practice/raygun
+ name = "toy ray gun"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "raygun"
+ desc = "A toy laser with a classic, retro feel and look. Compatible with existing laser tag systems."
+ ammo_type = list(/obj/item/ammo_casing/energy/laser/raytag)
+ selfcharge = TRUE
+
+/*/////////////////////////////////////////////////////////////////////////////////////////////
+ The Recolourable Gun
+*//////////////////////////////////////////////////////////////////////////////////////////////
+
+/obj/item/gun/ballistic/automatic/pistol/p37
+ name = "\improper CX Mk.37P"
+ desc = "A modern reimagining of an old legendary gun, the Mk.37 is a handgun with a toggle-locking mechanism manufactured by CX Armories. \
+ This model is coated with a special polychromic material. \
+ Has a small warning on the receiver that boldly states 'WARNING: WILL DETONATE UPON UNAUTHORIZED USE'. \
+ Uses 9mm bullets loaded into proprietary magazines."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "p37"
+ w_class = WEIGHT_CLASS_NORMAL
+ spawnwithmagazine = FALSE
+ mag_type = /obj/item/ammo_box/magazine/m9mm/p37
+ can_suppress = FALSE
+ pin = /obj/item/device/firing_pin/dna/dredd //goes boom if whoever isn't DNA locked to it tries to use it
+ actions_types = list(/datum/action/item_action/pick_color)
+
+ var/frame_color = "#808080" //RGB
+ var/receiver_color = "#808080"
+ var/body_color = "#0098FF"
+ var/barrel_color = "#808080"
+ var/tip_color = "#808080"
+ var/arm_color = "#808080"
+ var/grip_color = "#00FFCB" //Does not actually colour the grip, just the lights surrounding it
+ var/energy_color = "#00FFCB"
+
+///Defining all the colourable bits and displaying them///
+
+/obj/item/gun/ballistic/automatic/pistol/p37/update_icon()
+ var/mutable_appearance/frame_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_frame")
+ var/mutable_appearance/receiver_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_receiver")
+ var/mutable_appearance/body_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_body")
+ var/mutable_appearance/barrel_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_barrel")
+ var/mutable_appearance/tip_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_tip")
+ var/mutable_appearance/grip_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_grip")
+ var/mutable_appearance/energy_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_light")
+ var/mutable_appearance/arm_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_arm")
+ var/mutable_appearance/arm_overlay_e = mutable_appearance('icons/obj/guns/cit_guns.dmi', "p37_arm-e")
+
+ if(frame_color)
+ frame_overlay.color = frame_color
+ if(receiver_color)
+ receiver_overlay.color = receiver_color
+ if(body_color)
+ body_overlay.color = body_color
+ if(barrel_color)
+ barrel_overlay.color = barrel_color
+ if(tip_color)
+ tip_overlay.color = tip_color
+ if(grip_color)
+ grip_overlay.color = grip_color
+ if(energy_color)
+ energy_overlay.color = energy_color
+ if(arm_color)
+ arm_overlay.color = arm_color
+ if(arm_color)
+ arm_overlay_e.color = arm_color
+
+ cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
+
+ add_overlay(frame_overlay)
+ add_overlay(receiver_overlay)
+ add_overlay(body_overlay)
+ add_overlay(barrel_overlay)
+ add_overlay(tip_overlay)
+ add_overlay(grip_overlay)
+ add_overlay(energy_overlay)
+
+ if(magazine) //does not need a cut_overlays proc call here because it's already called further up
+ add_overlay("p37_mag")
+
+ if(chambered)
+ cut_overlay(arm_overlay_e)
+ add_overlay(arm_overlay)
+ else
+ cut_overlay(arm_overlay)
+ add_overlay(arm_overlay_e)
+
+///letting you actually recolor things///
+
+/obj/item/gun/ballistic/automatic/pistol/p37/ui_action_click(mob/user, var/datum/action/A)
+ if(istype(A, /datum/action/item_action/pick_color))
+
+ var/choice = input(user,"Mk.37P polychrome options", "Gun Recolor") in list("Frame Color","Receiver Color","Body Color",
+ "Barrel Color", "Barrel Tip Color", "Grip Light Color",
+ "Light Color", "Arm Color", "*CANCEL*")
+
+ switch(choice)
+
+ if("Frame Color")
+ var/frame_color_input = input(usr,"","Choose Frame Color",frame_color) as color|null
+ if(frame_color_input)
+ frame_color = sanitize_hexcolor(frame_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+
+ if("Receiver Color")
+ var/receiver_color_input = input(usr,"","Choose Receiver Color",receiver_color) as color|null
+ if(receiver_color_input)
+ receiver_color = sanitize_hexcolor(receiver_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+
+ if("Body Color")
+ var/body_color_input = input(usr,"","Choose Body Color",body_color) as color|null
+ if(body_color_input)
+ body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+
+ if("Barrel Color")
+ var/barrel_color_input = input(usr,"","Choose Barrel Color",barrel_color) as color|null
+ if(barrel_color_input)
+ barrel_color = sanitize_hexcolor(barrel_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+
+ if("Barrel Tip Color")
+ var/tip_color_input = input(usr,"","Choose Barrel Tip Color",tip_color) as color|null
+ if(tip_color_input)
+ tip_color = sanitize_hexcolor(tip_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+
+ if("Grip Light Color")
+ var/grip_color_input = input(usr,"","Choose Grip Light Color",grip_color) as color|null
+ if(grip_color_input)
+ grip_color = sanitize_hexcolor(grip_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+
+ if("Light Color")
+ var/energy_color_input = input(usr,"","Choose Light Color",energy_color) as color|null
+ if(energy_color_input)
+ energy_color = sanitize_hexcolor(energy_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+
+ if("Arm Color")
+ var/arm_color_input = input(usr,"","Choose Arm Color",arm_color) as color|null
+ if(arm_color_input)
+ arm_color = sanitize_hexcolor(arm_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+ A.UpdateButtonIcon()
+
+ else
+ ..()
+
+///boolets///
+
+/obj/item/projectile/bullet/c9mm/frangible
+ name = "9mm frangible bullet"
+ damage = 15
+ stamina = 0
+ speed = 1.0
+ range = 20
+ armour_penetration = -25
+
+/obj/item/projectile/bullet/c9mm/rubber
+ name = "9mm rubber bullet"
+ damage = 5
+ stamina = 30
+ speed = 1.2
+ range = 14
+ knockdown = 0
+
+/obj/item/ammo_casing/c9mm/frangible
+ name = "9mm frangible bullet casing"
+ desc = "A 9mm frangible bullet casing."
+ projectile_type = /obj/item/projectile/bullet/c9mm/frangible
+
+/obj/item/ammo_casing/c9mm/rubber
+ name = "9mm rubber bullet casing"
+ desc = "A 9mm rubber bullet casing."
+ projectile_type = /obj/item/projectile/bullet/c9mm/rubber
+
+/obj/item/ammo_box/magazine/m9mm/p37
+ name = "\improper P37 magazine (9mm frangible)"
+ desc = "A gun magazine. Loaded with plastic composite rounds which fragment upon impact to minimize collateral damage."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "11mm" //topkek
+ ammo_type = /obj/item/ammo_casing/c9mm/frangible
+ caliber = "9mm"
+ max_ammo = 11
+ multiple_sprites = 1
+
+/obj/item/ammo_box/magazine/m9mm/p37/fmj
+ name = "\improper P37 magazine (9mm)"
+ ammo_type = /obj/item/ammo_casing/c9mm
+ desc = "A gun magazine. Loaded with conventional full metal jacket rounds."
+
+/obj/item/ammo_box/magazine/m9mm/p37/rubber
+ name = "\improper P37 magazine (9mm Non-Lethal Rubbershot)"
+ ammo_type = /obj/item/ammo_casing/c9mm/rubber
+ desc = "A gun magazine. Loaded with less-than-lethal rubber bullets."
+
+/obj/item/ammo_box/c9mm/frangible
+ name = "ammo box (9mm frangible)"
+ ammo_type = /obj/item/ammo_casing/c9mm/frangible
+
+/obj/item/ammo_box/c9mm/rubber
+ name = "ammo box (9mm non-lethal rubbershot)"
+ ammo_type = /obj/item/ammo_casing/c9mm/rubber
+
+/datum/design/c9mmfrag
+ name = "Box of 9mm Frangible Bullets"
+ id = "9mm_frag"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 25000)
+ build_path = /obj/item/ammo_box/c9mm/frangible
+ category = list("hacked", "Security")
+
+/datum/design/c9mmrubber
+ name = "Box of 9mm Rubber Bullets"
+ id = "9mm_rubber"
+ build_type = AUTOLATHE
+ materials = list(MAT_METAL = 30000)
+ build_path = /obj/item/ammo_box/c9mm/rubber
+ category = list("initial", "Security")
+
+
+///Security Variant///
+
+/obj/item/gun/ballistic/automatic/pistol/p37/sec
+ name = "\improper CX Mk.37S"
+ desc = "A modern reimagining of an old legendary gun, the Mk.37 is a handgun with a toggle-locking mechanism manufactured by CX Armories. Uses 9mm bullets loaded into proprietary magazines."
+ spawnwithmagazine = FALSE
+ pin = /obj/item/device/firing_pin/implant/mindshield
+ actions_types = list() //so you can't recolor it
+
+ frame_color = "#808080" //RGB
+ receiver_color = "#808080"
+ body_color = "#282828"
+ barrel_color = "#808080"
+ tip_color = "#808080"
+ arm_color = "#800000"
+ grip_color = "#FFFF00" //Does not actually colour the grip, just the lights surrounding it
+ energy_color = "#FFFF00"
+
+///Foam Variant because WE NEED MEMES///
+
+/obj/item/gun/ballistic/automatic/pistol/p37/foam
+ name = "\improper Foam Force Mk.37F"
+ desc = "A licensed foam-firing reproduction of a handgun with a toggle-locking mechanism manufactured by CX Armories. This model is coated with a special polychromic material. Uses standard foam pistol magazines."
+ icon_state = "p37_foam"
+ pin = /obj/item/device/firing_pin
+ spawnwithmagazine = TRUE
+ obj_flags = 0
+ casing_ejector = FALSE
+ mag_type = /obj/item/ammo_box/magazine/toy/pistol
+ can_suppress = FALSE
+ actions_types = list(/datum/action/item_action/pick_color)
+
+/obj/item/ammo_box/magazine/toy/pistol //forcing this might be a bad idea, but it'll fix the foam gun infinite material exploit
+ materials = list(MAT_METAL = 200)
diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon.dm
new file mode 100644
index 0000000000..cd4ec113de
--- /dev/null
+++ b/modular_citadel/code/modules/projectiles/guns/ballistic/magweapon.dm
@@ -0,0 +1,466 @@
+///////XCOM X9 AR///////
+
+/obj/item/gun/ballistic/automatic/x9 //will be adminspawn only so ERT or something can use them
+ name = "\improper X9 Assault Rifle"
+ desc = "A rather old design of a cheap, reliable assault rifle made for combat against unknown enemies. Uses 5.56mm ammo."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "x9"
+ item_state = "arg"
+ slot_flags = 0
+ mag_type = /obj/item/ammo_box/magazine/m556 //Uses the m90gl's magazine, just like the NT-ARG
+ fire_sound = 'sound/weapons/gunshot_smg.ogg'
+ can_suppress = 0
+ burst_size = 6 //in line with XCOMEU stats. This can fire 5 bursts from a full magazine.
+ fire_delay = 1
+ spread = 30 //should be 40 for XCOM memes, but since its adminspawn only, might as well make it useable
+ recoil = 1
+
+///toy memes///
+
+/obj/item/ammo_box/magazine/toy/x9
+ name = "foam force X9 magazine"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "toy9magazine"
+ max_ammo = 30
+ multiple_sprites = 2
+ materials = list(MAT_METAL = 200)
+
+/obj/item/gun/ballistic/automatic/x9/toy
+ name = "\improper Foam Force X9"
+ desc = "An old but reliable assault rifle made for combat against unknown enemies. Appears to be hastily converted. Ages 8 and up."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "toy9"
+ can_suppress = 0
+ obj_flags = 0
+ mag_type = /obj/item/ammo_box/magazine/toy/x9
+ casing_ejector = 0
+ spread = 90 //MAXIMUM XCOM MEMES (actually that'd be 180 spread)
+ w_class = WEIGHT_CLASS_BULKY
+ weapon_weight = WEAPON_HEAVY
+
+////////XCOM2 Magpistol/////////
+
+//////projectiles//////
+
+/obj/item/projectile/bullet/mags
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "magjectile"
+ damage = 15
+ armour_penetration = 10
+ light_range = 2
+ speed = 0.6
+ range = 25
+ light_color = LIGHT_COLOR_RED
+
+/obj/item/projectile/bullet/nlmags //non-lethal boolets
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "magjectile-nl"
+ damage = 0
+ knockdown = 0
+ stamina = 25
+ armour_penetration = -10
+ light_range = 2
+ speed = 0.7
+ range = 25
+ light_color = LIGHT_COLOR_BLUE
+
+
+/////actual ammo/////
+
+/obj/item/ammo_casing/caseless/amags
+ desc = "A ferromagnetic slug intended to be launched out of a compatible weapon."
+ caliber = "mags"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "mag-casing-live"
+ projectile_type = /obj/item/projectile/bullet/mags
+
+/obj/item/ammo_casing/caseless/anlmags
+ desc = "A specialized ferromagnetic slug designed with a less-than-lethal payload."
+ caliber = "mags"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "mag-casing-live"
+ projectile_type = /obj/item/projectile/bullet/nlmags
+
+//////magazines/////
+
+/obj/item/ammo_box/magazine/mmag/small
+ name = "magpistol magazine (non-lethal disabler)"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "nlmagmag"
+ ammo_type = /obj/item/ammo_casing/caseless/anlmags
+ caliber = "mags"
+ max_ammo = 15
+ multiple_sprites = 2
+
+/obj/item/ammo_box/magazine/mmag/small/lethal
+ name = "magpistol magazine (lethal)"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "smallmagmag"
+ ammo_type = /obj/item/ammo_casing/caseless/amags
+
+//////the gun itself//////
+
+/obj/item/gun/ballistic/automatic/pistol/mag
+ name = "magpistol"
+ desc = "A handgun utilizing maglev technologies to propel a ferromagnetic slug to extreme velocities."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "magpistol"
+ force = 10
+ fire_sound = 'sound/weapons/magpistol.ogg'
+ mag_type = /obj/item/ammo_box/magazine/mmag/small
+ can_suppress = 0
+ casing_ejector = 0
+ fire_delay = 2
+ recoil = 0.2
+
+/obj/item/gun/ballistic/automatic/pistol/mag/update_icon()
+ ..()
+ if(magazine)
+ cut_overlays()
+ add_overlay("magpistol-magazine")
+ else
+ cut_overlays()
+ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
+
+///research memes///
+
+/obj/item/gun/ballistic/automatic/pistol/mag/nopin
+ pin = null
+ spawnwithmagazine = FALSE
+
+/datum/design/magpistol
+ name = "Magpistol"
+ desc = "A weapon which fires ferromagnetic slugs."
+ id = "magpisol"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 7500, MAT_GLASS = 1000, MAT_URANIUM = 1000, MAT_TITANIUM = 5000, MAT_SILVER = 2000)
+ build_path = /obj/item/gun/ballistic/automatic/pistol/mag/nopin
+ category = list("Weapons")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/mag_magpistol
+ name = "Magpistol Magazine"
+ desc = "A 14 round magazine for the Magpistol."
+ id = "mag_magpistol"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 4000, MAT_SILVER = 500)
+ build_path = /obj/item/ammo_box/magazine/mmag/small/lethal
+ category = list("Ammo")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/mag_magpistol/nl
+ name = "Magpistol Magazine (Non-Lethal)"
+ desc = "A 14 round non-lethal magazine for the Magpistol."
+ id = "mag_magpistol_nl"
+ materials = list(MAT_METAL = 3000, MAT_SILVER = 250, MAT_TITANIUM = 250)
+ build_path = /obj/item/ammo_box/magazine/mmag/small
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+//////toy memes/////
+
+/obj/item/projectile/bullet/reusable/foam_dart/mag
+ name = "magfoam dart"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "magjectile-toy"
+ ammo_type = /obj/item/ammo_casing/caseless/foam_dart/mag
+ light_range = 2
+ light_color = LIGHT_COLOR_YELLOW
+
+/obj/item/ammo_casing/caseless/foam_dart/mag
+ name = "magfoam dart"
+ desc = "A foam dart with fun light-up projectiles powered by magnets!"
+ projectile_type = /obj/item/projectile/bullet/reusable/foam_dart/mag
+
+/obj/item/ammo_box/magazine/internal/shot/toy/mag
+ ammo_type = /obj/item/ammo_casing/caseless/foam_dart/mag
+ max_ammo = 14
+
+/obj/item/gun/ballistic/shotgun/toy/mag
+ name = "foam force magpistol"
+ desc = "A fancy toy sold alongside light-up foam force darts. Ages 8 and up."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "toymag"
+ item_state = "gun"
+ mag_type = /obj/item/ammo_box/magazine/internal/shot/toy/mag
+ fire_sound = 'sound/weapons/magpistol.ogg'
+ slot_flags = SLOT_BELT
+ w_class = WEIGHT_CLASS_SMALL
+
+/obj/item/ammo_box/foambox/mag
+ name = "ammo box (Magnetic Foam Darts)"
+ icon = 'icons/obj/guns/toy.dmi'
+ icon_state = "foambox"
+ ammo_type = /obj/item/ammo_casing/caseless/foam_dart/mag
+ max_ammo = 42
+
+//////Magrifle//////
+
+///projectiles///
+
+/obj/item/projectile/bullet/magrifle
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "magjectile-large"
+ damage = 20
+ armour_penetration = 25
+ light_range = 3
+ speed = 0.7
+ range = 35
+ light_color = LIGHT_COLOR_RED
+
+/obj/item/projectile/bullet/nlmagrifle //non-lethal boolets
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "magjectile-large-nl"
+ damage = 0
+ knockdown = 0
+ stamina = 25
+ armour_penetration = -10
+ light_range = 3
+ speed = 0.65
+ range = 35
+ light_color = LIGHT_COLOR_BLUE
+
+///ammo casings///
+
+/obj/item/ammo_casing/caseless/amagm
+ desc = "A large ferromagnetic slug intended to be launched out of a compatible weapon."
+ caliber = "magm"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "mag-casing-live"
+ projectile_type = /obj/item/projectile/bullet/magrifle
+
+/obj/item/ammo_casing/caseless/anlmagm
+ desc = "A large, specialized ferromagnetic slug designed with a less-than-lethal payload."
+ caliber = "magm"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "mag-casing-live"
+ projectile_type = /obj/item/projectile/bullet/nlmagrifle
+
+///magazines///
+
+/obj/item/ammo_box/magazine/mmag/
+ name = "magrifle magazine (non-lethal disabler)"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "mediummagmag"
+ ammo_type = /obj/item/ammo_casing/caseless/anlmagm
+ caliber = "magm"
+ max_ammo = 24
+ multiple_sprites = 2
+
+/obj/item/ammo_box/magazine/mmag/lethal
+ name = "magrifle magazine (lethal)"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "mediummagmag"
+ ammo_type = /obj/item/ammo_casing/caseless/amagm
+ max_ammo = 24
+
+///the gun itself///
+
+/obj/item/gun/ballistic/automatic/magrifle
+ name = "\improper Magnetic Rifle"
+ desc = "A simple upscalling of the technologies used in the magpistol, the magrifle is capable of firing slightly larger slugs in bursts. Compatible with the magpistol's slugs."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "magrifle"
+ item_state = "arg"
+ slot_flags = 0
+ mag_type = /obj/item/ammo_box/magazine/mmag
+ fire_sound = 'sound/weapons/magrifle.ogg'
+ can_suppress = 0
+ burst_size = 3
+ fire_delay = 2
+ spread = 5
+ recoil = 0.15
+ casing_ejector = 0
+
+///research///
+
+/obj/item/gun/ballistic/automatic/magrifle/nopin
+ pin = null
+ spawnwithmagazine = FALSE
+
+/datum/design/magrifle
+ name = "Magrifle"
+ desc = "An upscaled Magpistol in rifle form."
+ id = "magrifle"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 10000, MAT_GLASS = 2000, MAT_URANIUM = 2000, MAT_TITANIUM = 10000, MAT_SILVER = 4000, MAT_GOLD = 2000)
+ build_path = /obj/item/gun/ballistic/automatic/magrifle/nopin
+ category = list("Weapons")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/mag_magrifle
+ name = "Magrifle Magazine (Lethal)"
+ desc = "A 24-round magazine for the Magrifle."
+ id = "mag_magrifle"
+ build_type = PROTOLATHE
+ materials = list(MAT_METAL = 8000, MAT_SILVER = 1000)
+ build_path = /obj/item/ammo_box/magazine/mmag/lethal
+ category = list("Ammo")
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+/datum/design/mag_magrifle/nl
+ name = "Magrifle Magazine (Non-Lethal)"
+ desc = "A 24- round non-lethal magazine for the Magrifle."
+ id = "mag_magrifle_nl"
+ materials = list(MAT_METAL = 6000, MAT_SILVER = 500, MAT_TITANIUM = 500)
+ build_path = /obj/item/ammo_box/magazine/mmag
+ departmental_flags = DEPARTMENTAL_FLAG_SECURITY
+
+///foamagrifle///
+
+/obj/item/ammo_box/magazine/toy/foamag
+ name = "foam force magrifle magazine"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "foamagmag"
+ max_ammo = 24
+ multiple_sprites = 2
+ ammo_type = /obj/item/ammo_casing/caseless/foam_dart/mag
+ materials = list(MAT_METAL = 200)
+
+/obj/item/gun/ballistic/automatic/magrifle/toy
+ name = "foamag rifle"
+ desc = "A foam launching magnetic rifle. Ages 8 and up."
+ icon_state = "foamagrifle"
+ obj_flags = 0
+ mag_type = /obj/item/ammo_box/magazine/toy/foamag
+ casing_ejector = FALSE
+ spread = 60
+ w_class = WEIGHT_CLASS_BULKY
+ weapon_weight = WEAPON_HEAVY
+
+/*
+// TECHWEBS IMPLEMENTATION
+*/
+
+/datum/techweb_node/magnetic_weapons
+ id = "magnetic_weapons"
+ display_name = "Magnetic Weapons"
+ description = "Weapons using magnetic technology"
+ prereq_ids = list("weaponry", "adv_weaponry", "emp_adv")
+ design_ids = list("magrifle", "magpisol", "mag_magrifle", "mag_magrifle_nl", "mag_magpistol", "mag_magpistol_nl")
+ research_cost = 2500
+ export_price = 5000
+
+
+//////Hyper-Burst Rifle//////
+
+///projectiles///
+
+/obj/item/projectile/bullet/mags/hyper
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "magjectile"
+ damage = 10
+ armour_penetration = 10
+ stamina = 10
+ forcedodge = TRUE
+ range = 6
+ light_range = 1
+ light_color = LIGHT_COLOR_RED
+
+/obj/item/projectile/bullet/mags/hyper/inferno
+ icon_state = "magjectile-large"
+ stamina = 0
+ forcedodge = FALSE
+ range = 25
+ light_range = 4
+
+/obj/item/projectile/bullet/mags/hyper/inferno/on_hit(atom/target, blocked = FALSE)
+ ..()
+ explosion(target, -1, 1, 2, 4, 5)
+ return 1
+
+///ammo casings///
+
+/obj/item/ammo_casing/caseless/ahyper
+ desc = "A large block of speciallized ferromagnetic material designed to be fired out of the experimental Hyper-Burst Rifle."
+ caliber = "hypermag"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "hyper-casing-live"
+ projectile_type = /obj/item/projectile/bullet/mags/hyper
+ pellets = 12
+ variance = 40
+
+/obj/item/ammo_casing/caseless/ahyper/inferno
+ projectile_type = /obj/item/projectile/bullet/mags/hyper/inferno
+ pellets = 1
+ variance = 0
+
+///magazines///
+
+/obj/item/ammo_box/magazine/mhyper
+ name = "hyper-burst rifle magazine"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "hypermag-4"
+ ammo_type = /obj/item/ammo_casing/caseless/ahyper
+ caliber = "hypermag"
+ desc = "A magazine for the Hyper-Burst Rifle. Loaded with a special slug that fragments into 12 smaller shards which can absolutely puncture anything, but has rather short effective range."
+ max_ammo = 4
+
+/obj/item/ammo_box/magazine/mhyper/update_icon()
+ ..()
+ icon_state = "hypermag-[ammo_count() ? "4" : "0"]"
+
+/obj/item/ammo_box/magazine/mhyper/inferno
+ name = "hyper-burst rifle magazine (inferno)"
+ ammo_type = /obj/item/ammo_casing/caseless/ahyper/inferno
+ desc = "A magazine for the Hyper-Burst Rifle. Loaded with a special slug that violently reacts with whatever surface it strikes, generating a massive amount of heat and light."
+
+///gun itself///
+
+/obj/item/gun/ballistic/automatic/hyperburst
+ name = "\improper Hyper-Burst Rifle"
+ desc = "An extremely beefed up version of a stolen Nanotrasen weapon prototype, this 'rifle' is more like a cannon, with an extremely large bore barrel capable of generating several smaller magnetic 'barrels' to simultaneously launch multiple projectiles at once."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "hyperburst"
+ item_state = "arg"
+ slot_flags = 0
+ mag_type = /obj/item/ammo_box/magazine/mhyper
+ fire_sound = 'sound/weapons/magburst.ogg'
+ can_suppress = 0
+ burst_size = 1
+ fire_delay = 40
+ recoil = 2
+ casing_ejector = 0
+ weapon_weight = WEAPON_HEAVY
+
+/obj/item/gun/ballistic/automatic/hyperburst/update_icon()
+ ..()
+ icon_state = "hyperburst[magazine ? "-[get_ammo()]" : ""][chambered ? "" : "-e"]"
+
+///toy memes///
+
+/obj/item/projectile/beam/lasertag/mag //the projectile, compatible with regular laser tag armor
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "magjectile-toy"
+ name = "lasertag magbolt"
+ forcedodge = TRUE //for penetration memes
+ range = 5 //so it isn't super annoying
+ light_range = 2
+ light_color = LIGHT_COLOR_YELLOW
+ eyeblur = 0
+
+/obj/item/ammo_casing/energy/laser/magtag
+ projectile_type = /obj/item/projectile/beam/lasertag/mag
+ select_name = "magtag"
+ pellets = 3
+ variance = 30
+ e_cost = 1000
+ fire_sound = 'sound/weapons/magburst.ogg'
+
+/obj/item/gun/energy/laser/practice/hyperburst
+ name = "toy hyper-burst launcher"
+ desc = "A toy laser with a unique beam shaping lens that projects harmless bolts capable of going through objects. Compatible with existing laser tag systems."
+ ammo_type = list(/obj/item/ammo_casing/energy/laser/magtag)
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "toyburst"
+ clumsy_check = FALSE
+ obj_flags = 0
+ fire_delay = 40
+ weapon_weight = WEAPON_HEAVY
+ selfcharge = TRUE
+ charge_delay = 2
+ recoil = 2
+ cell_type = /obj/item/stock_parts/cell/toymagburst
+
+/obj/item/stock_parts/cell/toymagburst
+ name = "toy mag burst rifle power supply"
+ maxcharge = 4000
\ No newline at end of file
diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm
new file mode 100644
index 0000000000..a9824c7d33
--- /dev/null
+++ b/modular_citadel/code/modules/projectiles/guns/ballistic/rifles.dm
@@ -0,0 +1,234 @@
+
+///////XCOM X9 AR///////
+
+/obj/item/gun/ballistic/automatic/x9 //will be adminspawn only so ERT or something can use them
+ name = "\improper X9 Assault Rifle"
+ desc = "A rather old design of a cheap, reliable assault rifle made for combat against unknown enemies. Uses 5.56mm ammo."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "x9"
+ item_state = "arg"
+ slot_flags = 0
+ mag_type = /obj/item/ammo_box/magazine/m556 //Uses the m90gl's magazine, just like the NT-ARG
+ fire_sound = 'sound/weapons/gunshot_smg.ogg'
+ can_suppress = 0
+ burst_size = 6 //in line with XCOMEU stats. This can fire 5 bursts from a full magazine.
+ fire_delay = 1
+ spread = 30 //should be 40 for XCOM memes, but since its adminspawn only, might as well make it useable
+ recoil = 1
+
+///toy memes///
+
+/obj/item/ammo_box/magazine/toy/x9
+ name = "foam force X9 magazine"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "toy9magazine"
+ max_ammo = 30
+ multiple_sprites = 2
+ materials = list(MAT_METAL = 200)
+
+/obj/item/gun/ballistic/automatic/x9/toy
+ name = "\improper Foam Force X9"
+ desc = "An old but reliable assault rifle made for combat against unknown enemies. Appears to be hastily converted. Ages 8 and up."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "toy9"
+ can_suppress = 0
+ obj_flags = 0
+ mag_type = /obj/item/ammo_box/magazine/toy/x9
+ casing_ejector = 0
+ spread = 90 //MAXIMUM XCOM MEMES (actually that'd be 180 spread)
+ w_class = WEIGHT_CLASS_BULKY
+ weapon_weight = WEAPON_HEAVY
+
+
+//////Flechette Launcher//////
+
+///projectiles///
+
+/obj/item/projectile/bullet/cflechetteap //shreds armor
+ name = "flechette (armor piercing)"
+ damage = 8
+ armour_penetration = 80
+
+/obj/item/projectile/bullet/cflechettes //shreds flesh and forces bleeding
+ name = "flechette (serrated)"
+ damage = 15
+ dismemberment = 10
+ armour_penetration = -80
+
+/obj/item/projectile/bullet/cflechettes/on_hit(atom/target, blocked = FALSE)
+ if((blocked != 100) && iscarbon(target))
+ var/mob/living/carbon/C = target
+ C.bleed(10)
+ return ..()
+
+///ammo casings (CASELESS AMMO CASINGS WOOOOOOOO)///
+
+/obj/item/ammo_casing/caseless/flechetteap
+ name = "flechette (armor piercing)"
+ desc = "A flechette made with a tungsten alloy."
+ projectile_type = /obj/item/projectile/bullet/cflechetteap
+ caliber = "flechette"
+ throwforce = 1
+ throw_speed = 3
+
+/obj/item/ammo_casing/caseless/flechettes
+ name = "flechette (serrated)"
+ desc = "A serrated flechette made of a special alloy intended to deform drastically upon penetration of human flesh."
+ projectile_type = /obj/item/projectile/bullet/cflechettes
+ caliber = "flechette"
+ throwforce = 2
+ throw_speed = 3
+ embedding = list("embedded_pain_multiplier" = 0, "embed_chance" = 40, "embedded_fall_chance" = 10)
+
+///magazine///
+
+/obj/item/ammo_box/magazine/flechette
+ name = "flechette magazine (armor piercing)"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "flechettemag"
+ ammo_type = /obj/item/ammo_casing/caseless/flechetteap
+ caliber = "flechette"
+ max_ammo = 40
+ multiple_sprites = 2
+
+/obj/item/ammo_box/magazine/flechette/s
+ name = "flechette magazine (serrated)"
+ ammo_type = /obj/item/ammo_casing/caseless/flechettes
+
+///the gun itself///
+
+/obj/item/gun/ballistic/automatic/flechette
+ name = "\improper CX Flechette Launcher"
+ desc = "A flechette launching machine pistol with an unconventional bullpup frame."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "flechettegun"
+ item_state = "gun"
+ w_class = WEIGHT_CLASS_NORMAL
+ slot_flags = 0
+ /obj/item/device/firing_pin/implant/pindicate
+ mag_type = /obj/item/ammo_box/magazine/flechette/
+ fire_sound = 'sound/weapons/gunshot_smg.ogg'
+ can_suppress = 0
+ burst_size = 5
+ fire_delay = 1
+ casing_ejector = 0
+ spread = 10
+ recoil = 0.05
+
+/obj/item/gun/ballistic/automatic/flechette/update_icon()
+ ..()
+ if(magazine)
+ cut_overlays()
+ add_overlay("flechettegun-magazine")
+ else
+ cut_overlays()
+ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
+
+///unique variant///
+
+/obj/item/projectile/bullet/cflechetteshredder
+ name = "flechette (shredder)"
+ damage = 5
+ dismemberment = 40
+
+/obj/item/ammo_casing/caseless/flechetteshredder
+ name = "flechette (shredder)"
+ desc = "A serrated flechette made of a special alloy that forms a monofilament edge."
+ projectile_type = /obj/item/projectile/bullet/cflechettes
+
+/obj/item/ammo_box/magazine/flechette/shredder
+ name = "flechette magazine (shredder)"
+ icon_state = "shreddermag"
+ ammo_type = /obj/item/ammo_casing/caseless/flechetteshredder
+
+/obj/item/gun/ballistic/automatic/flechette/shredder
+ name = "\improper CX Shredder"
+ desc = "A flechette launching machine pistol made of ultra-light CFRP optimized for firing serrated monofillament flechettes."
+ w_class = WEIGHT_CLASS_SMALL
+ mag_type = /obj/item/ammo_box/magazine/flechette/shredder
+ spread = 15
+ recoil = 0.1
+
+/obj/item/gun/ballistic/automatic/flechette/shredder/update_icon()
+ ..()
+ if(magazine)
+ cut_overlays()
+ add_overlay("shreddergun-magazine")
+ else
+ cut_overlays()
+ icon_state = "[initial(icon_state)][chambered ? "" : "-e"]"
+
+/*/////////////////////////////////////////////////////////////
+//////////////////////// Zero's Meme //////////////////////////
+*//////////////////////////////////////////////////////////////
+/obj/item/ammo_box/magazine/toy/AM4B
+ name = "foam force AM4-B magazine"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "AM4MAG-60"
+ max_ammo = 60
+ multiple_sprites = 0
+ materials = list(MAT_METAL = 200)
+
+/obj/item/gun/ballistic/automatic/AM4B
+ name = "AM4-B"
+ desc = "A Relic from a bygone age. Nobody quite knows why it's here. Has a polychromic coating."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "AM4"
+ item_state = "arg"
+ mag_type = /obj/item/ammo_box/magazine/toy/AM4B
+ can_suppress = 0
+ item_flags = NEEDS_PERMIT
+ casing_ejector = 0
+ spread = 30 //Assault Rifleeeeeee
+ w_class = WEIGHT_CLASS_NORMAL
+ burst_size = 4 //Shh.
+ fire_delay = 1
+ var/body_color = "#3333aa"
+
+/obj/item/gun/ballistic/automatic/AM4B/update_icon()
+ ..()
+ var/mutable_appearance/body_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "AM4-Body")
+ if(body_color)
+ body_overlay.color = body_color
+ cut_overlays() //So that it doesn't keep stacking overlays non-stop on top of each other
+ add_overlay(body_overlay)
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_hands()
+/obj/item/gun/ballistic/automatic/AM4B/AltClick(mob/living/user)
+ if(!in_range(src, user)) //Basic checks to prevent abuse
+ return
+ if(user.incapacitated() || !istype(user))
+ to_chat(user, "You can't do that right now!")
+ return
+ if(alert("Are you sure you want to recolor your gun?", "Confirm Repaint", "Yes", "No") == "Yes")
+ var/body_color_input = input(usr,"","Choose Shroud Color",body_color) as color|null
+ if(body_color_input)
+ body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+/obj/item/gun/ballistic/automatic/AM4B/examine(mob/user)
+ ..()
+ to_chat(user, "Alt-click to recolor it.")
+
+/obj/item/ammo_box/magazine/toy/AM4C
+ name = "foam force AM4-C magazine"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "AM4MAG-32"
+ max_ammo = 32
+ multiple_sprites = 0
+ materials = list(MAT_METAL = 200)
+
+/obj/item/gun/ballistic/automatic/AM4C
+ name = "AM4-C"
+ desc = "A Relic from a bygone age. This one seems newer, yet less effective."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "AM4C"
+ item_state = "arg"
+ mag_type = /obj/item/ammo_box/magazine/toy/AM4C
+ can_suppress = 0
+ item_flags = NEEDS_PERMIT
+ casing_ejector = 0
+ spread = 45 //Assault Rifleeeeeee
+ w_class = WEIGHT_CLASS_NORMAL
+ burst_size = 4 //Shh.
+ fire_delay = 1
diff --git a/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm b/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm
new file mode 100644
index 0000000000..5b42f9686a
--- /dev/null
+++ b/modular_citadel/code/modules/projectiles/guns/ballistic/spinfusor.dm
@@ -0,0 +1,90 @@
+/////////////spinfusor stuff////////////////
+
+/obj/item/projectile/bullet/spinfusor
+ name ="spinfusor disk"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state= "spinner"
+ damage = 30
+ dismemberment = 25
+
+/obj/item/projectile/bullet/spinfusor/on_hit(atom/target, blocked = FALSE) //explosion to emulate the spinfusor's AOE
+ ..()
+ explosion(target, -1, -1, 2, 0, -1)
+ return 1
+
+/obj/item/ammo_casing/caseless/spinfusor
+ name = "spinfusor disk"
+ desc = "A magnetic disk designed specifically for the Stormhammer magnetic cannon. Warning: extremely volatile!"
+ projectile_type = /obj/item/projectile/bullet/spinfusor
+ caliber = "spinfusor"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "disk"
+ throwforce = 15 //still deadly when thrown
+ throw_speed = 3
+
+/obj/item/ammo_casing/caseless/spinfusor/throw_impact(atom/target) //disks detonate when thrown
+ if(!..()) // not caught in mid-air
+ visible_message("[src] detonates!")
+ playsound(src.loc, "sparks", 50, 1)
+ explosion(target, -1, -1, 1, 1, -1)
+ qdel(src)
+ return 1
+
+/obj/item/ammo_box/magazine/internal/spinfusor
+ name = "spinfusor internal magazine"
+ ammo_type = /obj/item/ammo_casing/caseless/spinfusor
+ caliber = "spinfusor"
+ max_ammo = 1
+
+/obj/item/gun/ballistic/automatic/spinfusor
+ name = "Stormhammer Magnetic Cannon"
+ desc = "An innovative weapon utilizing mag-lev technology to spin up a magnetic fusor and launch it at extreme velocities."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "spinfusor"
+ item_state = "spinfusor"
+ mag_type = /obj/item/ammo_box/magazine/internal/spinfusor
+ fire_sound = 'sound/weapons/rocketlaunch.ogg'
+ w_class = WEIGHT_CLASS_BULKY
+ can_suppress = 0
+ burst_size = 1
+ fire_delay = 40
+ select = 0
+ actions_types = list()
+ casing_ejector = 0
+
+/obj/item/gun/ballistic/automatic/spinfusor/attackby(obj/item/A, mob/user, params)
+ var/num_loaded = magazine.attackby(A, user, params, 1)
+ if(num_loaded)
+ to_chat(user, "You load [num_loaded] disk\s into \the [src].")
+ update_icon()
+ chamber_round()
+
+/obj/item/gun/ballistic/automatic/spinfusor/attack_self(mob/living/user)
+ return //caseless rounds are too glitchy to unload properly. Best to make it so that you cannot remove disks from the spinfusor
+
+/obj/item/gun/ballistic/automatic/spinfusor/update_icon()
+ ..()
+ icon_state = "spinfusor[magazine ? "-[get_ammo(1)]" : ""]"
+
+/obj/item/ammo_box/aspinfusor
+ name = "ammo box (spinfusor disks)"
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "spinfusorbox"
+ ammo_type = /obj/item/ammo_casing/caseless/spinfusor
+ max_ammo = 8
+
+/datum/supply_pack/security/armory/spinfusor
+ name = "Stormhammer Spinfusor Crate"
+ cost = 14000
+ contains = list(/obj/item/gun/ballistic/automatic/spinfusor,
+ /obj/item/gun/ballistic/automatic/spinfusor)
+ crate_name = "spinfusor crate"
+
+/datum/supply_pack/security/armory/spinfusorammo
+ name = "Spinfusor Disk Crate"
+ cost = 7000
+ contains = list(/obj/item/ammo_box/aspinfusor,
+ /obj/item/ammo_box/aspinfusor,
+ /obj/item/ammo_box/aspinfusor,
+ /obj/item/ammo_box/aspinfusor)
+ crate_name = "spinfusor disk crate"
\ No newline at end of file
diff --git a/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm b/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm
index e054e65ac5..fb488fcca4 100644
--- a/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm
+++ b/modular_citadel/code/modules/projectiles/guns/energy/energy_gun.dm
@@ -1,7 +1,56 @@
/obj/item/gun/energy/e_gun
+ name = "blaster carbine"
+ desc = "A high powered particle blaster carbine with varitable setting for stunning or lethal applications."
icon = 'modular_citadel/icons/obj/guns/OVERRIDE_energy.dmi'
lefthand_file = 'modular_citadel/icons/mob/inhands/OVERRIDE_guns_lefthand.dmi'
righthand_file = 'modular_citadel/icons/mob/inhands/OVERRIDE_guns_righthand.dmi'
ammo_x_offset = 2
flight_x_offset = 17
- flight_y_offset = 11
\ No newline at end of file
+ flight_y_offset = 11
+
+
+/*/////////////////////////////////////////////////////////////////////////////////////////////
+ The Recolourable Energy Gun
+*//////////////////////////////////////////////////////////////////////////////////////////////
+
+obj/item/gun/energy/e_gun/cx
+ name = "\improper CX Model D Energy Gun"
+ desc = "An overpriced hybrid energy gun with two settings: disable, and kill. Manufactured by CX Armories. Has a polychromic coating."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "cxe"
+ lefthand_file = 'icons/mob/citadel/guns_lefthand.dmi'
+ righthand_file = 'icons/mob/citadel/guns_righthand.dmi'
+ ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser)
+ flight_x_offset = 15
+ flight_y_offset = 10
+ var/body_color = "#252528"
+
+obj/item/gun/energy/e_gun/cx/update_icon()
+ ..()
+ var/mutable_appearance/body_overlay = mutable_appearance('icons/obj/guns/cit_guns.dmi', "cxegun_body")
+ if(body_color)
+ body_overlay.color = body_color
+ add_overlay(body_overlay)
+
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_hands()
+
+obj/item/gun/energy/e_gun/cx/AltClick(mob/living/user)
+ if(!in_range(src, user)) //Basic checks to prevent abuse
+ return
+ if(user.incapacitated() || !istype(user))
+ to_chat(user, "You can't do that right now!")
+ return
+ if(alert("Are you sure you want to repaint your gun?", "Confirm Repaint", "Yes", "No") == "Yes")
+ var/body_color_input = input(usr,"","Choose Body Color",body_color) as color|null
+ if(body_color_input)
+ body_color = sanitize_hexcolor(body_color_input, desired_format=6, include_crunch=1)
+ update_icon()
+
+obj/item/gun/energy/e_gun/cx/worn_overlays(isinhands, icon_file)
+ . = ..()
+ if(isinhands)
+ var/mutable_appearance/body_inhand = mutable_appearance(icon_file, "cxe_body")
+ body_inhand.color = body_color
+ . += body_inhand
diff --git a/modular_citadel/code/modules/projectiles/guns/energy/laser.dm b/modular_citadel/code/modules/projectiles/guns/energy/laser.dm
index 316c976f6a..25ae98e72a 100644
--- a/modular_citadel/code/modules/projectiles/guns/energy/laser.dm
+++ b/modular_citadel/code/modules/projectiles/guns/energy/laser.dm
@@ -1,4 +1,6 @@
/obj/item/gun/energy/laser
+ name = "blaster rifle"
+ desc = "a high energy particle blaster, efficient and deadly."
icon = 'modular_citadel/icons/obj/guns/OVERRIDE_energy.dmi'
ammo_x_offset = 1
shaded_charge = 1
@@ -14,4 +16,31 @@
/obj/item/gun/energy/laser/redtag
lefthand_file = 'icons/mob/inhands/weapons/guns_lefthand.dmi'
- righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
\ No newline at end of file
+ righthand_file = 'icons/mob/inhands/weapons/guns_righthand.dmi'
+
+/obj/item/gun/energy/laser/carbine
+ name = "VGS blaster carbine"
+ desc = "A ruggedized laser carbine featuring much higher capacity and improved handling when compared to a normal blaster carbine."
+ icon = 'icons/obj/guns/cit_guns.dmi'
+ icon_state = "lasernew"
+ item_state = "laser"
+ force = 10
+ throwforce = 10
+ ammo_type = list(/obj/item/ammo_casing/energy/lasergun)
+ cell_type = /obj/item/stock_parts/cell/lascarbine
+
+/obj/item/gun/energy/laser/carbine/nopin
+ pin = null
+
+/obj/item/stock_parts/cell/lascarbine
+ name = "laser carbine power supply"
+ maxcharge = 2500
+
+/datum/design/lasercarbine
+ name = "VGS Blaster Carbine"
+ desc = "Beefed up version of a normal blaster carbine."
+ id = "lasercarbine"
+ build_type = PROTOLATHE
+ materials = list(MAT_GOLD = 2500, MAT_METAL = 5000, MAT_GLASS = 5000)
+ build_path = /obj/item/gun/energy/laser/carbine/nopin
+ category = list("Weapons")
\ No newline at end of file
diff --git a/code/citadel/cit_kegs.dm b/modular_citadel/code/modules/reagents/reagent container/cit_kegs.dm
similarity index 93%
rename from code/citadel/cit_kegs.dm
rename to modular_citadel/code/modules/reagents/reagent container/cit_kegs.dm
index d7e4ac03b9..d40dba8a3f 100644
--- a/code/citadel/cit_kegs.dm
+++ b/modular_citadel/code/modules/reagents/reagent container/cit_kegs.dm
@@ -1,7 +1,7 @@
/obj/structure/reagent_dispensers/keg
name = "keg"
desc = "A keg."
- icon = 'code/citadel/icons/objects.dmi'
+ icon = 'modular_citadel/icons/obj/objects.dmi'
icon_state = "keg"
reagent_id = "water"
diff --git a/modular_citadel/code/modules/reagents/reagent container/hypospraymkii.dm b/modular_citadel/code/modules/reagents/reagent container/hypospraymkii.dm
new file mode 100644
index 0000000000..e89068c95f
--- /dev/null
+++ b/modular_citadel/code/modules/reagents/reagent container/hypospraymkii.dm
@@ -0,0 +1,223 @@
+#define HYPO_SPRAY 0
+#define HYPO_INJECT 1
+
+//A vial-loaded hypospray. Cartridge-based!
+/obj/item/reagent_containers/hypospray/mkii
+ name = "hypospray mk.II"
+ icon = 'modular_citadel/icons/obj/hypospraymkii.dmi'
+ icon_state = "hypo2"
+ var/list/allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/small)
+ desc = "A new development from DeForest Medical, this new hypospray takes 30-unit vials as the drug supply for easy swapping."
+ volume = 0
+ amount_per_transfer_from_this = 5
+ possible_transfer_amounts = list(5,10,15)
+ var/mode = HYPO_INJECT
+ var/obj/item/reagent_containers/glass/bottle/vial/vial
+ var/loaded_vial = /obj/item/reagent_containers/glass/bottle/vial/small
+ var/spawnwithvial = TRUE
+ var/start_vial = null
+
+/obj/item/reagent_containers/hypospray/mkii/CMO
+ name = "hypospray mk.II deluxe"
+ allowed_containers = list(/obj/item/reagent_containers/glass/bottle/vial/small, /obj/item/reagent_containers/glass/bottle/vial/large)
+ icon_state = "cmo2"
+ ignore_flags = 1
+ desc = "The Chief Medical Officer's hypospray is identically functional to the base model, excepting that it can take larger vials in addition to regular sized. It is also able to penetrate harder materials and deliver more reagents per spray."
+ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF
+ loaded_vial = /obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO
+ possible_transfer_amounts = list(5,10,15,30,60) //cmo hypo should be able to dump lots into it
+
+/obj/item/reagent_containers/hypospray/mkii/Initialize()
+ . = ..()
+ if(!spawnwithvial)
+ update_icon()
+ return
+ if (!start_vial)
+ start_vial = new loaded_vial(src)
+ vial = start_vial
+ update_icon()
+
+/obj/item/reagent_containers/hypospray/mkii/update_icon()
+ ..()
+ icon_state = "[initial(icon_state)][vial ? "" : "-e"]"
+ if(ismob(loc))
+ var/mob/M = loc
+ M.update_inv_hands()
+ return
+
+/obj/item/reagent_containers/hypospray/mkii/examine(mob/user)
+ . = ..()
+ to_chat(user, "[src] is set to [mode ? "Inject" : "Spray"] contents on application.")
+
+/obj/item/reagent_containers/hypospray/mkii/proc/unload_hypo(obj/item/I, mob/user)
+ if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
+ var/obj/item/reagent_containers/glass/bottle/vial/V = I
+ reagents.trans_to(V, reagents.total_volume)
+ reagents.maximum_volume = 0
+ V.forceMove(user.loc)
+ user.put_in_hands(V)
+ to_chat(user, "You remove the vial from the [src].")
+ vial = null
+ update_icon()
+ playsound(loc, 'sound/weapons/empty.ogg', 50, 1)
+ else
+ to_chat(user, "This hypo isn't loaded!")
+ return
+
+/obj/item/reagent_containers/hypospray/mkii/attackby(obj/item/I, mob/living/user)
+ if((istype(I, /obj/item/reagent_containers/glass/bottle/vial) && vial != null))
+ to_chat(user, "[src] can not hold more than one vial!")
+ return FALSE
+ if((istype(I, /obj/item/reagent_containers/glass/bottle/vial)))
+ var/obj/item/reagent_containers/glass/bottle/vial/V = I
+ if(!is_type_in_list(V, allowed_containers))
+ to_chat(user, "\The [src] doesn't accept this vial.")
+ return
+ vial = V
+ reagents.maximum_volume = V.volume
+ V.reagents.trans_to(src, V.reagents.total_volume)
+ if(!user.transferItemToLoc(V,src))
+ return
+ user.visible_message("[user] has loads vial into \the [src].","You have loaded [vial] into \the [src].")
+ update_icon()
+ playsound(loc, 'sound/weapons/autoguninsert.ogg', 50, 1)
+ return TRUE
+ else
+ to_chat(user, "This doesn't fit in \the [src].")
+ return FALSE
+ return FALSE
+
+/obj/item/reagent_containers/hypospray/mkii/attack(obj/item/I, mob/user, params)
+ return
+
+/obj/item/reagent_containers/hypospray/mkii/afterattack(atom/target, mob/user, proximity)
+ if(!proximity)
+ return
+
+ if(!ismob(target))
+ return
+
+ var/mob/living/L
+ if(isliving(target))
+ L = target
+ if(!L.can_inject(user, 1))
+ return
+
+ if(!L && !target.is_injectable()) //only checks on non-living mobs, due to how can_inject() handles
+ to_chat(user, "You cannot directly fill [target]!")
+ return
+
+ if(target.reagents.total_volume >= target.reagents.maximum_volume)
+ to_chat(user, "[target] is full.")
+ return
+
+ if(ishuman(L))
+ var/obj/item/bodypart/affecting = L.get_bodypart(check_zone(user.zone_selected))
+ if(!affecting)
+ to_chat(user, "The limb is missing!")
+ return
+ if(affecting.status != BODYPART_ORGANIC)
+ to_chat(user, "Medicine won't work on a robotic limb!")
+ return
+
+ var/contained = reagents.log_list()
+ add_logs(user, L, "attemped to inject", src, addition="which had [contained]")
+//Always log attemped injections for admins
+ if(vial != null)
+ switch(mode)
+ if(HYPO_INJECT)
+ if(L) //living mob
+ if(!L.can_inject(user, TRUE))
+ return
+ if(L != user)
+ L.visible_message("[user] is trying to inject [L] with [src]!", \
+ "[user] is trying to inject [L] with the [src]!")
+ if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1)))
+ return
+ if(!reagents.total_volume)
+ return
+ if(L.reagents.total_volume >= L.reagents.maximum_volume)
+ return
+ L.visible_message("[user] uses the [src] on [L]!", \
+ "[user] uses the [src] on [L]!")
+ else
+ if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1)))
+ return
+ if(!reagents.total_volume)
+ return
+ if(L.reagents.total_volume >= L.reagents.maximum_volume)
+ return
+ log_attack("[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])")
+ L.log_message("applied [src] to themselves ([contained]).", INDIVIDUAL_ATTACK_LOG)
+
+ var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
+ reagents.reaction(L, INJECT, fraction)
+ reagents.trans_to(target, amount_per_transfer_from_this)
+ if(amount_per_transfer_from_this >= 15)
+ playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
+ if(amount_per_transfer_from_this < 15)
+ playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
+ to_chat(user, "You inject [amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [reagents.total_volume] units.")
+
+ if(HYPO_SPRAY)
+ if(L) //living mob
+ if(!L.can_inject(user, TRUE))
+ return
+ if(L != user)
+ L.visible_message("[user] is trying to inject [L] with [src]!", \
+ "[user] is trying to inject [L] with the [src]!")
+ if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1)))
+ return
+ if(!reagents.total_volume)
+ return
+ if(L.reagents.total_volume >= L.reagents.maximum_volume)
+ return
+ L.visible_message("[user] uses the [src] on [L]!", \
+ "[user] uses the [src] on [L]!")
+ else
+ if(!do_mob(user, L, extra_checks=CALLBACK(L, /mob/living/proc/can_inject,user,1)))
+ return
+ if(!reagents.total_volume)
+ return
+ if(L.reagents.total_volume >= L.reagents.maximum_volume)
+ return
+ log_attack("[user.name] ([user.ckey]) applied [src] to [L.name] ([L.ckey]), which had [contained] (INTENT: [uppertext(user.a_intent)]) (MODE: [src.mode])")
+ L.log_message("applied [src] to themselves ([contained]).", INDIVIDUAL_ATTACK_LOG)
+ var/fraction = min(amount_per_transfer_from_this/reagents.total_volume, 1)
+ reagents.reaction(L, PATCH, fraction)
+ reagents.trans_to(target, amount_per_transfer_from_this)
+ if(amount_per_transfer_from_this >= 15)
+ playsound(loc,'sound/items/hypospray_long.ogg',50, 1, -1)
+ if(amount_per_transfer_from_this < 15)
+ playsound(loc, pick('sound/items/hypospray.ogg','sound/items/hypospray2.ogg'), 50, 1, -1)
+ to_chat(user, "You spray [amount_per_transfer_from_this] units of the solution. The hypospray's cartridge now contains [reagents.total_volume] units.")
+ else
+ to_chat(user, "[src] doesn't work here!")
+ return
+
+/obj/item/reagent_containers/hypospray/mkii/AltClick(mob/living/user)
+ if(user)
+ if(user.incapacitated())
+ return
+ else if(!contents)
+ to_chat(user, "This Hypo needs to be loaded first!")
+ return
+ else
+ for(var/obj/item/I in contents)
+ unload_hypo(I,user)
+
+/obj/item/reagent_containers/hypospray/mkii/verb/modes()
+ set name = "Change Application Method"
+ set category = "Object"
+ set src in usr
+ var/mob/M = usr
+ var/choice = alert(M, "Which application mode should this be? Current mode is: [mode ? "Spray" : "Inject"]", "", "Spray", "Cancel", "Inject")
+ switch(choice)
+ if("Cancel")
+ return
+ if("Inject")
+ mode = HYPO_INJECT
+ to_chat(M, "[src] is now set to inject contents on application.")
+ if("Spray")
+ mode = HYPO_SPRAY
+ to_chat(M, "[src] is now set to spray contents on application.")
\ No newline at end of file
diff --git a/modular_citadel/code/modules/reagents/reagent container/hypovial.dm b/modular_citadel/code/modules/reagents/reagent container/hypovial.dm
new file mode 100644
index 0000000000..e3e82e22a7
--- /dev/null
+++ b/modular_citadel/code/modules/reagents/reagent container/hypovial.dm
@@ -0,0 +1,116 @@
+/obj/item/reagent_containers/glass/bottle/vial
+ name = "hypospray vial"
+ desc = "This is a vial suitable for loading into mk II hyposprays."
+ icon = 'modular_citadel/icons/obj/vial.dmi'
+ icon_state = "hypovial"
+ spillable = FALSE
+ var/comes_with = list() //Easy way of doing this.
+ volume = 10
+ obj_flags = UNIQUE_RENAME
+ unique_reskin = list("Hypospray vial" = "hypovial",
+ "Red hypospray vial" = "hypovial-b",
+ "Blue hypospray vial" = "hypovial-d",
+ "Green hypospray vial" = "hypovial-a",
+ "Orange hypospray vial" = "hypovial-k",
+ "Purple hypospray vial" = "hypovial-p",
+ "Black hypospray vial" = "hypovial-t"
+ )
+
+/obj/item/reagent_containers/glass/bottle/vial/Initialize()
+ . = ..()
+ if(!icon_state)
+ icon_state = "hypovial"
+ update_icon()
+ for(var/R in comes_with)
+ reagents.add_reagent(R,comes_with[R])
+
+/obj/item/reagent_containers/glass/bottle/vial/on_reagent_change()
+ update_icon()
+
+/obj/item/reagent_containers/glass/bottle/vial/update_icon()
+ cut_overlays()
+ if(reagents.total_volume)
+ var/mutable_appearance/filling = mutable_appearance('modular_citadel/icons/obj/vial.dmi', "[icon_state]10")
+
+ var/percent = round((reagents.total_volume / volume) * 100)
+ switch(percent)
+ if(0 to 9)
+ filling.icon_state = "[icon_state]10"
+ if(10 to 29)
+ filling.icon_state = "[icon_state]25"
+ if(30 to 49)
+ filling.icon_state = "[icon_state]50"
+ if(50 to 69)
+ filling.icon_state = "[icon_state]75"
+ if(70 to INFINITY)
+ filling.icon_state = "[icon_state]100"
+
+ filling.color = mix_color_from_reagents(reagents.reagent_list)
+ add_overlay(filling)
+
+/obj/item/reagent_containers/glass/bottle/vial/small
+ volume = 30
+
+/obj/item/reagent_containers/glass/bottle/vial/large
+ name = "large hypospray vial"
+ desc = "This is a vial suitable for loading into the Chief Medical Officer's Hypospray mk II."
+ icon_state = "hypoviallarge"
+ volume = 60
+ unique_reskin = list("Large hypospray vial" = "hypoviallarge",
+ "Red hypospray vial" = "hypoviallarge-b",
+ "Blue hypospray vial" = "hypoviallarge-d",
+ "Green hypospray vial" = "hypoviallarge-a",
+ "Orange hypospray vial" = "hypoviallarge-k",
+ "Purple hypospray vial" = "hypoviallarge-p",
+ "Black hypospray vial" = "hypoviallarge-t"
+ )
+
+/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/bicaridine
+ name = "vial (bicaridine)"
+ icon_state = "hypovial-b"
+ comes_with = list("bicaridine" = 30)
+
+/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/antitoxin
+ name = "vial (Anti-Tox)"
+ icon_state = "hypovial-a"
+ comes_with = list("antitoxin" = 30)
+
+/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/kelotane
+ name = "vial (kelotane)"
+ icon_state = "hypovial-k"
+ comes_with = list("kelotane" = 30)
+
+/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/dexalin
+ name = "vial (dexalin)"
+ icon_state = "hypovial-d"
+ comes_with = list("dexalin" = 30)
+
+/obj/item/reagent_containers/glass/bottle/vial/small/preloaded/tricordrazine
+ name = "vial (tricordrazine)"
+ icon_state = "hypovial"
+ comes_with = list("tricordrazine" = 30)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/CMO
+ name = "large vial (CMO Special)"
+ icon_state = "hypoviallarge-cmos"
+ comes_with = list("epinephrine" = 15, "kelotane" = 15, "charcoal" = 15, "bicaridine" = 15)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/bicaridine
+ name = "large vial (bicaridine)"
+ icon_state = "hypoviallarge-b"
+ comes_with = list("bicaridine" = 60)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/antitoxin
+ name = "large vial (Anti-Tox)"
+ icon_state = "hypoviallarge-a"
+ comes_with = list("antitoxin" = 60)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/kelotane
+ name = "large vial (kelotane)"
+ icon_state = "hypoviallarge-k"
+ comes_with = list("kelotane" = 60)
+
+/obj/item/reagent_containers/glass/bottle/vial/large/preloaded/dexalin
+ name = "large vial (dexalin)"
+ icon_state = "hypoviallarge-d"
+ comes_with = list("dexalin" = 60)
diff --git a/code/citadel/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
similarity index 98%
rename from code/citadel/cit_reagents.dm
rename to modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
index df4af10faa..01c5e005a3 100644
--- a/code/citadel/cit_reagents.dm
+++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
@@ -29,7 +29,7 @@
gender = PLURAL
density = 0
layer = ABOVE_NORMAL_TURF_LAYER
- icon = 'code/citadel/icons/effects.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/effects.dmi'
icon_state = "semen1"
random_icon_states = list("semen1", "semen2", "semen3", "semen4")
@@ -59,7 +59,7 @@
gender = PLURAL
density = 0
layer = ABOVE_NORMAL_TURF_LAYER
- icon = 'code/citadel/icons/effects.dmi'
+ icon = 'modular_citadel/icons/obj/genitals/effects.dmi'
icon_state = "fem1"
random_icon_states = list("fem1", "fem2", "fem3", "fem4")
blood_state = null
@@ -260,7 +260,7 @@
/obj/item/reagent_containers/food/drinks/bottle/sake
name = "Traditional Sake"
desc = "Sweet as can be, and burns like foxfire going down."
- icon = 'code/citadel/icons/drinks.dmi'
+ icon = 'modular_citadel/icons/obj/drinks.dmi'
icon_state = "sakebottle"
list_reagents = list("sake" = 100)
diff --git a/modular_citadel/code/modules/vore/eating/belly_dat_vr.dm b/modular_citadel/code/modules/vore/eating/belly_dat_vr.dm
new file mode 100644
index 0000000000..3886eb14cf
--- /dev/null
+++ b/modular_citadel/code/modules/vore/eating/belly_dat_vr.dm
@@ -0,0 +1,162 @@
+// THIS IS NOW MERELY LEGACY, because memes. hopefully it won't be dumb.
+
+//
+// The belly object is what holds onto a mob while they're inside a predator.
+// It takes care of altering the pred's decription, digesting the prey, relaying struggles etc.
+//
+
+// If you change what variables are on this, then you need to update the copy() proc.
+
+//
+// Parent type of all the various "belly" varieties.
+//
+/datum/belly
+ var/name // Name of this location
+ var/inside_flavor // Flavor text description of inside sight/sound/smells/feels.
+ var/vore_sound = 'sound/vore/pred/swallow_01.ogg' // Sound when ingesting someone
+ var/vore_verb = "ingest" // Verb for eating with this in messages
+ var/human_prey_swallow_time = 10 SECONDS // Time in deciseconds to swallow /mob/living/carbon/human
+ var/nonhuman_prey_swallow_time = 5 SECONDS // Time in deciseconds to swallow anything else
+ var/emoteTime = 30 SECONDS // How long between stomach emotes at prey
+ var/digest_brute = 0 // Brute damage per tick in digestion mode
+ var/digest_burn = 1 // Burn damage per tick in digestion mode
+ var/digest_tickrate = 9 // Modulus this of air controller tick number to iterate gurgles on
+ var/immutable = FALSE // Prevents this belly from being deleted
+ var/escapable = FALSE // Belly can be resisted out of at any time
+ var/escapetime = 60 SECONDS // Deciseconds, how long to escape this belly
+ var/digestchance = 0 // % Chance of stomach beginning to digest if prey struggles
+// var/silenced = FALSE // Will the heartbeat/fleshy internal loop play?
+ var/escapechance = 0 // % Chance of prey beginning to escape if prey struggles.
+
+ var/datum/belly/transferlocation = null // Location that the prey is released if they struggle and get dropped off.
+ var/transferchance = 0 // % Chance of prey being transferred to transfer location when resisting
+ var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location
+ var/autotransferwait = 10 // Time between trying to transfer.
+ var/can_taste = FALSE // If this belly prints the flavor of prey when it eats someone.
+
+ var/tmp/digest_mode = DM_HOLD // Whether or not to digest. Default to not digest.
+ var/tmp/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_NOISY) // Possible digest modes
+ var/tmp/mob/living/owner // The mob whose belly this is.
+ var/tmp/list/internal_contents = list() // People/Things you've eaten into this belly!
+ var/tmp/is_full // Flag for if digested remeans are present. (for disposal messages)
+ var/tmp/emotePend = FALSE // If there's already a spawned thing counting for the next emote
+ var/swallow_time = 10 SECONDS // for mob transfering automation
+ var/vore_capacity = 1 // The capacity (in people) this person can hold
+
+ // Don't forget to watch your commas at the end of each line if you change these.
+ var/list/struggle_messages_outside = list(
+ "%pred's %belly wobbles with a squirming meal.",
+ "%pred's %belly jostles with movement.",
+ "%pred's %belly briefly swells outward as someone pushes from inside.",
+ "%pred's %belly fidgets with a trapped victim.",
+ "%pred's %belly jiggles with motion from inside.",
+ "%pred's %belly sloshes around.",
+ "%pred's %belly gushes softly.",
+ "%pred's %belly lets out a wet squelch.")
+
+ var/list/struggle_messages_inside = list(
+ "Your useless squirming only causes %pred's slimy %belly to squelch over your body.",
+ "Your struggles only cause %pred's %belly to gush softly around you.",
+ "Your movement only causes %pred's %belly to slosh around you.",
+ "Your motion causes %pred's %belly to jiggle.",
+ "You fidget around inside of %pred's %belly.",
+ "You shove against the walls of %pred's %belly, making it briefly swell outward.",
+ "You jostle %pred's %belly with movement.",
+ "You squirm inside of %pred's %belly, making it wobble around.")
+
+ var/list/digest_messages_owner = list(
+ "You feel %prey's body succumb to your digestive system, which breaks it apart into soft slurry.",
+ "You hear a lewd glorp as your %belly muscles grind %prey into a warm pulp.",
+ "Your %belly lets out a rumble as it melts %prey into sludge.",
+ "You feel a soft gurgle as %prey's body loses form in your %belly. They're nothing but a soft mass of churning slop now.",
+ "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your thighs.",
+ "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your rump.",
+ "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your belly.",
+ "Your %belly groans as %prey falls apart into a thick soup. You can feel their remains soon flowing deeper into your body to be absorbed.",
+ "Your %belly kneads on every fiber of %prey, softening them down into mush to fuel your next hunt.",
+ "Your %belly churns %prey down into a hot slush. You can feel the nutrients coursing through your digestive track with a series of long, wet glorps.")
+
+ var/list/digest_messages_prey = list(
+ "Your body succumbs to %pred's digestive system, which breaks you apart into soft slurry.",
+ "%pred's %belly lets out a lewd glorp as their muscles grind you into a warm pulp.",
+ "%pred's %belly lets out a rumble as it melts you into sludge.",
+ "%pred feels a soft gurgle as your body loses form in their %belly. You're nothing but a soft mass of churning slop now.",
+ "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's thighs.",
+ "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's rump.",
+ "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's belly.",
+ "%pred's %belly groans as you fall apart into a thick soup. Your remains soon flow deeper into %pred's body to be absorbed.",
+ "%pred's %belly kneads on every fiber of your body, softening you down into mush to fuel their next hunt.",
+ "%pred's %belly churns you down into a hot slush. Your nutrient-rich remains course through their digestive track with a series of long, wet glorps.")
+
+ var/list/examine_messages = list(
+ "They have something solid in their %belly!",
+ "It looks like they have something in their %belly!")
+
+ //Mostly for being overridden on precreated bellies on mobs. Could be VV'd into
+ //a carbon's belly if someone really wanted. No UI for carbons to adjust this.
+ //List has indexes that are the digestion mode strings, and keys that are lists of strings.
+ var/list/emote_lists = list()
+
+//OLD: This only exists for legacy conversion purposes
+//It's called whenever an old datum-style belly is loaded
+/datum/belly/proc/copy(obj/belly/new_belly)
+
+ //// Non-object variables
+ new_belly.name = name
+ new_belly.desc = inside_flavor
+ new_belly.vore_sound = vore_sound
+ new_belly.vore_verb = vore_verb
+ new_belly.human_prey_swallow_time = human_prey_swallow_time
+ new_belly.nonhuman_prey_swallow_time = nonhuman_prey_swallow_time
+ new_belly.emote_time = emoteTime
+ new_belly.digest_brute = digest_brute
+ new_belly.digest_burn = digest_burn
+ new_belly.immutable = immutable
+ new_belly.can_taste = can_taste
+ new_belly.escapable = escapable
+ new_belly.escapetime = escapetime
+ new_belly.digestchance = digestchance
+ new_belly.escapechance = escapechance
+ new_belly.transferchance = transferchance
+ new_belly.transferlocation = transferlocation
+
+ //// Object-holding variables
+ //struggle_messages_outside - strings
+ new_belly.struggle_messages_outside.Cut()
+ for(var/I in struggle_messages_outside)
+ new_belly.struggle_messages_outside += I
+
+ //struggle_messages_inside - strings
+ new_belly.struggle_messages_inside.Cut()
+ for(var/I in struggle_messages_inside)
+ new_belly.struggle_messages_inside += I
+
+ //digest_messages_owner - strings
+ new_belly.digest_messages_owner.Cut()
+ for(var/I in digest_messages_owner)
+ new_belly.digest_messages_owner += I
+
+ //digest_messages_prey - strings
+ new_belly.digest_messages_prey.Cut()
+ for(var/I in digest_messages_prey)
+ new_belly.digest_messages_prey += I
+
+ //examine_messages - strings
+ new_belly.examine_messages.Cut()
+ for(var/I in examine_messages)
+ new_belly.examine_messages += I
+
+ //emote_lists - index: digest mode, key: list of strings
+ new_belly.emote_lists.Cut()
+ for(var/K in emote_lists)
+ new_belly.emote_lists[K] = list()
+ for(var/I in emote_lists[K])
+ new_belly.emote_lists[K] += I
+
+ return new_belly
+
+// // // // // // // // // // // //
+// // // LEGACY USE ONLY!! // // //
+// // // // // // // // // // // //
+// See top of file! //
+// // // // // // // // // // // //
diff --git a/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
new file mode 100644
index 0000000000..14ded0b7cc
--- /dev/null
+++ b/modular_citadel/code/modules/vore/eating/belly_obj_vr.dm
@@ -0,0 +1,655 @@
+//#define VORE_SOUND_FALLOFF 0.05
+
+//
+// Belly system 2.0, now using objects instead of datums because EH at datums.
+// How many times have I rewritten bellies and vore now? -Aro
+//
+
+// If you change what variables are on this, then you need to update the copy() proc.
+
+//
+// Parent type of all the various "belly" varieties.
+//
+/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.
+ var/vore_sound = 'sound/vore/pred/swallow_01.ogg' // Sound when ingesting someone
+ var/vore_verb = "ingest" // Verb for eating with this in messages
+ var/release_sound = 'sound/effects/splat.ogg'
+ var/human_prey_swallow_time = 100 // Time in deciseconds to swallow /mob/living/carbon/human
+ var/nonhuman_prey_swallow_time = 30 // Time in deciseconds to swallow anything else
+ var/emote_time = 60 SECONDS // How long between stomach emotes at prey
+ var/digest_brute = 2 // Brute damage per tick in digestion mode
+ var/digest_burn = 2 // Burn damage per tick in digestion mode
+ var/immutable = FALSE // Prevents this belly from being deleted
+ var/escapable = TRUE // Belly can be resisted out of at any time
+ var/escapetime = 20 SECONDS // Deciseconds, how long to escape this belly
+ var/digestchance = 0 // % Chance of stomach beginning to digest if prey struggles
+ var/absorbchance = 0 // % Chance of stomach beginning to absorb if prey struggles
+ var/escapechance = 100 // % Chance of prey beginning to escape if prey struggles.
+ var/can_taste = FALSE // If this belly prints the flavor of prey when it eats someone.
+ var/bulge_size = 0.25 // The minimum size the prey has to be in order to show up on examine.
+// var/shrink_grow_size = 1 // This horribly named variable determines the minimum/maximum size it will shrink/grow prey to.
+ var/silent = FALSE
+
+ var/transferlocation = null // Location that the prey is released if they struggle and get dropped off.
+ var/transferchance = 0 // % Chance of prey being transferred to transfer location when resisting
+ var/autotransferchance = 0 // % Chance of prey being autotransferred to transfer location
+ var/autotransferwait = 10 // Time between trying to transfer.
+ var/swallow_time = 10 SECONDS // for mob transfering automation
+ var/vore_capacity = 1 // simple animal nom capacity
+
+ //I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere.
+ var/tmp/static/list/digest_modes = list(DM_HOLD,DM_DIGEST,DM_HEAL,DM_NOISY) // Possible digest modes
+
+ var/tmp/mob/living/owner // The mob whose belly this is.
+ var/tmp/digest_mode = DM_HOLD // Current mode the belly is set to from digest_modes (+transform_modes if human)
+ var/tmp/next_process = 0 // Waiting for this SSbellies times_fired to process again.
+ var/tmp/list/items_preserved = list() // Stuff that wont digest so we shouldn't process it again.
+ var/tmp/next_emote = 0 // When we're supposed to print our next emote, as a belly controller tick #
+ var/tmp/recent_sound = FALSE // Prevent audio spam
+
+ // Don't forget to watch your commas at the end of each line if you change these.
+ var/list/struggle_messages_outside = list(
+ "%pred's %belly wobbles with a squirming meal.",
+ "%pred's %belly jostles with movement.",
+ "%pred's %belly briefly swells outward as someone pushes from inside.",
+ "%pred's %belly fidgets with a trapped victim.",
+ "%pred's %belly jiggles with motion from inside.",
+ "%pred's %belly sloshes around.",
+ "%pred's %belly gushes softly.",
+ "%pred's %belly lets out a wet squelch.")
+
+ var/list/struggle_messages_inside = list(
+ "Your useless squirming only causes %pred's slimy %belly to squelch over your body.",
+ "Your struggles only cause %pred's %belly to gush softly around you.",
+ "Your movement only causes %pred's %belly to slosh around you.",
+ "Your motion causes %pred's %belly to jiggle.",
+ "You fidget around inside of %pred's %belly.",
+ "You shove against the walls of %pred's %belly, making it briefly swell outward.",
+ "You jostle %pred's %belly with movement.",
+ "You squirm inside of %pred's %belly, making it wobble around.")
+
+ var/list/digest_messages_owner = list(
+ "You feel %prey's body succumb to your digestive system, which breaks it apart into soft slurry.",
+ "You hear a lewd glorp as your %belly muscles grind %prey into a warm pulp.",
+ "Your %belly lets out a rumble as it melts %prey into sludge.",
+ "You feel a soft gurgle as %prey's body loses form in your %belly. They're nothing but a soft mass of churning slop now.",
+ "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your thighs.",
+ "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your rump.",
+ "Your %belly begins gushing %prey's remains through your system, adding some extra weight to your belly.",
+ "Your %belly groans as %prey falls apart into a thick soup. You can feel their remains soon flowing deeper into your body to be absorbed.",
+ "Your %belly kneads on every fiber of %prey, softening them down into mush to fuel your next hunt.",
+ "Your %belly churns %prey down into a hot slush. You can feel the nutrients coursing through your digestive track with a series of long, wet glorps.")
+
+ var/list/digest_messages_prey = list(
+ "Your body succumbs to %pred's digestive system, which breaks you apart into soft slurry.",
+ "%pred's %belly lets out a lewd glorp as their muscles grind you into a warm pulp.",
+ "%pred's %belly lets out a rumble as it melts you into sludge.",
+ "%pred feels a soft gurgle as your body loses form in their %belly. You're nothing but a soft mass of churning slop now.",
+ "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's thighs.",
+ "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's rump.",
+ "%pred's %belly begins gushing your remains through their system, adding some extra weight to %pred's belly.",
+ "%pred's %belly groans as you fall apart into a thick soup. Your remains soon flow deeper into %pred's body to be absorbed.",
+ "%pred's %belly kneads on every fiber of your body, softening you down into mush to fuel their next hunt.",
+ "%pred's %belly churns you down into a hot slush. Your nutrient-rich remains course through their digestive track with a series of long, wet glorps.")
+
+ var/list/examine_messages = list(
+ "They have something solid in their %belly!",
+ "It looks like they have something in their %belly!")
+
+ //Mostly for being overridden on precreated bellies on mobs. Could be VV'd into
+ //a carbon's belly if someone really wanted. No UI for carbons to adjust this.
+ //List has indexes that are the digestion mode strings, and keys that are lists of strings.
+ var/tmp/list/emote_lists = list()
+
+//For serialization, keep this updated, required for bellies to save correctly.
+/obj/belly/vars_to_save()
+ return ..() + list(
+ "name",
+ "desc",
+ "vore_sound",
+ "vore_verb",
+ "release_sound",
+ "human_prey_swallow_time",
+ "nonhuman_prey_swallow_time",
+ "emote_time",
+ "digest_brute",
+ "digest_burn",
+ "immutable",
+ "can_taste",
+ "escapable",
+ "escapetime",
+ "digestchance",
+ "absorbchance",
+ "escapechance",
+ "transferchance",
+ "transferlocation",
+ "bulge_size",
+ "struggle_messages_outside",
+ "struggle_messages_inside",
+ "digest_messages_owner",
+ "digest_messages_prey",
+ "examine_messages",
+ "emote_lists",
+ "silent"
+ )
+
+ //ommitted list
+ // "shrink_grow_size",
+/obj/belly/New(var/newloc)
+ . = ..(newloc)
+ //If not, we're probably just in a prefs list or something.
+ if(isliving(newloc))
+ owner = loc
+ owner.vore_organs |= src
+ SSbellies.belly_list += src
+
+/obj/belly/Destroy()
+ SSbellies.belly_list -= src
+ if(owner)
+ owner.vore_organs -= src
+ owner = null
+ . = ..()
+
+// Called whenever an atom enters this belly
+/obj/belly/Entered(var/atom/movable/thing,var/atom/OldLoc)
+ if(OldLoc in contents)
+ return //Someone dropping something (or being stripdigested)
+
+ //Generic entered message
+ to_chat(owner,"[thing] slides into your [lowertext(name)].")
+
+ //Sound w/ antispam flag setting
+ if(!silent && !recent_sound)
+ for(var/mob/M in get_hearers_in_view(5, get_turf(owner)))
+ if(M.client && M.client.prefs.toggles & EATING_NOISES)
+ playsound(get_turf(owner),"[src.vore_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
+ recent_sound = TRUE
+
+ //Messages if it's a mob
+ if(isliving(thing))
+ var/mob/living/M = thing
+ if(desc)
+ to_chat(M, "[desc]")
+ var/taste
+ if(can_taste && (taste = M.get_taste_message(FALSE)))
+ to_chat(owner, "[M] tastes of [taste].")
+
+// Release all contents of this belly into the owning mob's location.
+// If that location is another mob, contents are transferred into whichever of its bellies the owning mob is in.
+// Returns the number of mobs so released.
+/obj/belly/proc/release_all_contents(var/include_absorbed = FALSE)
+ var/atom/destination = drop_location()
+ var/count = 0
+ for(var/thing in contents)
+ var/atom/movable/AM = thing
+ if(isliving(AM))
+ var/mob/living/L = AM
+ if(L.absorbed && !include_absorbed)
+ continue
+ L.absorbed = FALSE
+ for(var/mob/living/W in AM)
+ W.stop_sound_channel(CHANNEL_PREYLOOP)
+ AM.forceMove(destination) // Move the belly contents into the same location as belly's owner.
+ count++
+ for(var/mob/M in get_hearers_in_view(5, get_turf(owner)))
+ if(M.client && M.client.prefs.toggles & EATING_NOISES)
+ playsound(get_turf(owner),"[src.release_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
+ items_preserved.Cut()
+ owner.visible_message("[owner] expels everything from their [lowertext(name)]!")
+ owner.update_icons()
+
+ return count
+
+// Release a specific atom from the contents of this belly into the owning mob's location.
+// If that location is another mob, the atom is transferred into whichever of its bellies the owning mob is in.
+// Returns the number of atoms so released.
+/obj/belly/proc/release_specific_contents(var/atom/movable/M)
+ if (!(M in contents))
+ return FALSE // They weren't in this belly anyway
+
+ M.forceMove(drop_location()) // Move the belly contents into the same location as belly's owner.
+ items_preserved -= M
+ for(var/mob/living/P in M)
+ P.stop_sound_channel(CHANNEL_PREYLOOP)
+ if(release_sound)
+ for(var/mob/H in get_hearers_in_view(5, get_turf(owner)))
+ if(H.client && H.client.prefs.toggles & EATING_NOISES)
+ playsound(get_turf(owner),"[src.release_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
+
+ if(istype(M,/mob/living))
+ var/mob/living/ML = M
+ var/mob/living/OW = owner
+ if(ML.absorbed)
+ ML.absorbed = FALSE
+ if(ishuman(M) && ishuman(OW))
+ var/mob/living/carbon/human/Prey = M
+ var/mob/living/carbon/human/Pred = OW
+ var/absorbed_count = 2 //Prey that we were, plus the pred gets a portion
+ for(var/mob/living/P in contents)
+ if(P.absorbed)
+ absorbed_count++
+ Pred.reagents.trans_to(Prey, Pred.reagents.total_volume / absorbed_count)
+
+ owner.visible_message("[owner] expels [M] from their [lowertext(name)]!")
+ owner.update_icons()
+ return TRUE
+
+// Actually perform the mechanics of devouring the tasty prey.
+// The purpose of this method is to avoid duplicate code, and ensure that all necessary
+// steps are taken.
+/obj/belly/proc/nom_mob(var/mob/prey, var/mob/user)
+ var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
+ if(owner.stat == DEAD)
+ return
+ if (prey.buckled)
+ prey.buckled.unbuckle_mob(prey,TRUE)
+
+ prey.forceMove(src)
+ prey.playsound_local(loc,preyloop,70,0, channel = CHANNEL_PREYLOOP)
+ owner.updateVRPanel()
+
+ for(var/mob/living/M in contents)
+ M.updateVRPanel()
+
+ // Setup the autotransfer checks if needed
+ if(transferlocation && autotransferchance > 0)
+ addtimer(CALLBACK(src, /obj/belly/.proc/check_autotransfer, prey), autotransferwait)
+
+/obj/belly/proc/check_autotransfer(var/mob/prey)
+ // Some sanity checks
+ if(transferlocation && (autotransferchance > 0) && (prey in contents))
+ if(prob(autotransferchance))
+ // Double check transferlocation isn't insane
+ if(verify_transferlocation())
+ transfer_contents(prey, transferlocation)
+ else
+ // Didn't transfer, so wait before retrying
+ addtimer(CALLBACK(src, /obj/belly/.proc/check_autotransfer, prey), autotransferwait)
+
+/obj/belly/proc/verify_transferlocation()
+ for(var/I in owner.vore_organs)
+ var/obj/belly/B = owner.vore_organs[I]
+ if(B == transferlocation)
+ return TRUE
+
+ for(var/I in owner.vore_organs)
+ var/obj/belly/B = owner.vore_organs[I]
+ if(B == transferlocation)
+ transferlocation = B
+ return TRUE
+ return FALSE
+
+
+// Get the line that should show up in Examine message if the owner of this belly
+// is examined. By making this a proc, we not only take advantage of polymorphism,
+// but can easily make the message vary based on how many people are inside, etc.
+// Returns a string which shoul be appended to the Examine output.
+/obj/belly/proc/get_examine_msg()
+ if(contents.len && examine_messages.len)
+ var/formatted_message
+ var/raw_message = pick(examine_messages)
+ var/total_bulge = 0
+
+ formatted_message = replacetext(raw_message,"%belly",lowertext(name))
+ formatted_message = replacetext(formatted_message,"%pred",owner)
+ formatted_message = replacetext(formatted_message,"%prey",english_list(contents))
+ for(var/mob/living/P in contents)
+ if(!P.absorbed) //This is required first, in case there's a person absorbed and not absorbed in a stomach.
+ total_bulge += P.mob_size
+ if(total_bulge >= bulge_size && bulge_size != 0)
+ return("[formatted_message]
")
+ else
+ return ""
+
+// The next function gets the messages set on the belly, in human-readable format.
+// This is useful in customization boxes and such. The delimiter right now is \n\n so
+// in message boxes, this looks nice and is easily delimited.
+/obj/belly/proc/get_messages(var/type, var/delim = "\n\n")
+ ASSERT(type == "smo" || type == "smi" || type == "dmo" || type == "dmp" || type == "em")
+ var/list/raw_messages
+
+ switch(type)
+ if("smo")
+ raw_messages = struggle_messages_outside
+ if("smi")
+ raw_messages = struggle_messages_inside
+ if("dmo")
+ raw_messages = digest_messages_owner
+ if("dmp")
+ raw_messages = digest_messages_prey
+ if("em")
+ raw_messages = examine_messages
+
+ var/messages = list2text(raw_messages,delim)
+ return messages
+
+// The next function sets the messages on the belly, from human-readable var
+// replacement strings and linebreaks as delimiters (two \n\n by default).
+// They also sanitize the messages.
+/obj/belly/proc/set_messages(var/raw_text, var/type, var/delim = "\n\n")
+ ASSERT(type == "smo" || type == "smi" || type == "dmo" || type == "dmp" || type == "em")
+
+ var/list/raw_list = text2list(html_encode(raw_text),delim)
+ if(raw_list.len > 10)
+ raw_list.Cut(11)
+ testing("[owner] tried to set [lowertext(name)] with 11+ messages")
+
+ for(var/i = 1, i <= raw_list.len, i++)
+ if(length(raw_list[i]) > 160 || length(raw_list[i]) < 10) //160 is fudged value due to htmlencoding increasing the size
+ raw_list.Cut(i,i)
+ testing("[owner] tried to set [lowertext(name)] with >121 or <10 char message")
+ else
+ raw_list[i] = readd_quotes(raw_list[i])
+ //Also fix % sign for var replacement
+ raw_list[i] = replacetext(raw_list[i],"%","%")
+
+ ASSERT(raw_list.len <= 10) //Sanity
+
+ switch(type)
+ if("smo")
+ struggle_messages_outside = raw_list
+ if("smi")
+ struggle_messages_inside = raw_list
+ if("dmo")
+ digest_messages_owner = raw_list
+ if("dmp")
+ digest_messages_prey = raw_list
+ if("em")
+ examine_messages = raw_list
+
+ return
+
+// Handle the death of a mob via digestion.
+// Called from the process_Life() methods of bellies that digest prey.
+// Default implementation calls M.death() and removes from internal contents.
+// Indigestable items are removed, and M is deleted.
+/obj/belly/proc/digestion_death(var/mob/living/M)
+ //M.death(1) // "Stop it he's already dead..." Basically redundant and the reason behind screaming mouse carcasses.
+ if(M.ckey)
+ message_admins("[key_name(owner)] has digested [key_name(M)] in their [lowertext(name)] ([owner ? "JMP" : "null"])")
+ log_attack("[key_name(owner)] digested [key_name(M)].")
+
+ // If digested prey is also a pred... anyone inside their bellies gets moved up.
+ if(is_vore_predator(M))
+ for(var/belly in M.vore_organs)
+ var/obj/belly/B = belly
+ for(var/thing in B)
+ var/atom/movable/AM = thing
+ AM.forceMove(owner.loc)
+ if(isliving(AM))
+ to_chat(AM,"As [M] melts away around you, you find yourself in [owner]'s [lowertext(name)]")
+
+ //Drop all items into the belly
+ for(var/obj/item/W in M)
+ if(!M.dropItemToGround(W))
+ qdel(W)
+
+/* //Reagent transfer //maybe someday
+ if(ishuman(owner))
+ var/mob/living/carbon/human/Pred = owner
+ if(ishuman(M))
+ var/mob/living/carbon/human/Prey = M
+ Prey.bloodstr.del_reagent("numbenzyme")
+ Prey.bloodstr.trans_to_holder(Pred.bloodstr, Prey.bloodstr.total_volume, 0.5, TRUE) // Copy=TRUE because we're deleted anyway
+ Prey.ingested.trans_to_holder(Pred.bloodstr, Prey.ingested.total_volume, 0.5, TRUE) // Therefore don't bother spending cpu
+ Prey.touching.trans_to_holder(Pred.bloodstr, Prey.touching.total_volume, 0.5, TRUE) // On updating the prey's reagents
+ else if(M.reagents)
+ M.reagents.trans_to_holder(Pred.bloodstr, M.reagents.total_volume, 0.5, TRUE) */
+
+ // Delete the digested mob
+ qdel(M)
+
+// Handle a mob being absorbed
+/obj/belly/proc/absorb_living(var/mob/living/M)
+ M.absorbed = TRUE
+ to_chat(M,"[owner]'s [lowertext(name)] absorbs your body, making you part of them.")
+ to_chat(owner,"Your [lowertext(name)] absorbs [M]'s body, making them part of you.")
+
+// Reagent sharing is neat, but eh. I'll figure it out later
+/* if(ishuman(M) && ishuman(owner))
+ var/mob/living/carbon/human/Prey = M
+ var/mob/living/carbon/human/Pred = owner
+ //Reagent sharing for absorbed with pred - Copy so both pred and prey have these reagents.
+ Prey.bloodstr.trans_to_holder(Pred.bloodstr, Prey.bloodstr.total_volume, copy = TRUE)
+ Prey.ingested.trans_to_holder(Pred.bloodstr, Prey.ingested.total_volume, copy = TRUE)
+ Prey.touching.trans_to_holder(Pred.bloodstr, Prey.touching.total_volume, copy = TRUE)
+ // TODO - Find a way to make the absorbed prey share the effects with the pred.
+ // Currently this is infeasible because reagent containers are designed to have a single my_atom, and we get
+ // problems when A absorbs B, and then C absorbs A, resulting in B holding onto an invalid reagent container.
+*/
+ //This is probably already the case, but for sub-prey, it won't be.
+ if(M.loc != src)
+ M.forceMove(src)
+
+ //Seek out absorbed prey of the prey, absorb them too.
+ //This in particular will recurse oddly because if there is absorbed prey of prey of prey...
+ //it will just move them up one belly. This should never happen though since... when they were
+ //absobred, they should have been absorbed as well!
+ for(var/belly in M.vore_organs)
+ var/obj/belly/B = belly
+ for(var/mob/living/Mm in B)
+ if(Mm.absorbed)
+ absorb_living(Mm)
+
+ //Update owner
+ owner.updateVRPanel()
+
+//Digest a single item
+//Receives a return value from digest_act that's how much nutrition
+//the item should be worth
+/obj/belly/proc/digest_item(var/obj/item/item)
+ var/digested = item.digest_act(src, owner)
+ if(!digested)
+ items_preserved |= item
+ else
+// owner.nutrition += (5 * digested) // haha no.
+ if(iscyborg(owner))
+ var/mob/living/silicon/robot/R = owner
+ R.cell.charge += (50 * digested)
+
+//Determine where items should fall out of us into.
+//Typically just to the owner's location.
+/obj/belly/drop_location()
+ //Should be the case 99.99% of the time
+ if(owner)
+ return owner.loc
+ //Sketchy fallback for safety, put them somewhere safe.
+ else if(ismob(src))
+ testing("[src] (\ref[src]) doesn't have an owner, and dropped someone at a latespawn point!")
+ SSjob.SendToLateJoin(src)
+ // wew lad. let's see if this never gets used, hopefully
+ else
+ qdel(src) //final option, I guess.
+ testing("[src] (\ref[src]) was QDEL'd for not having a drop_location!")
+
+//Handle a mob struggling
+// Called from /mob/living/carbon/relaymove()
+/obj/belly/proc/relay_resist(var/mob/living/R)
+ if (!(R in contents))
+ return // User is not in this belly
+
+ R.setClickCooldown(50)
+
+ if(owner.stat || !owner.client && R.a_intent != INTENT_HELP) //If owner is stat (dead, KO) we can actually escape
+ to_chat(R,"You attempt to climb out of \the [lowertext(name)]. (This will take around 5 seconds.)")
+ to_chat(owner,"Someone is attempting to climb out of your [lowertext(name)]!")
+
+ if(do_after(R, 50, owner))
+ if(owner.stat && (R in contents) && R.a_intent != INTENT_HELP) //Can still escape and want to?
+ release_specific_contents(R)
+ return
+ else if(!(R in contents)) //Aren't even in the belly. Quietly fail.
+ return
+ else //Belly became inescapable or mob revived
+ to_chat(R,"Your attempt to escape [lowertext(name)] has failed!")
+ to_chat(owner,"The attempt to escape from your [lowertext(name)] has failed!")
+ return
+ return
+ var/struggle_outer_message = pick(struggle_messages_outside)
+ var/struggle_user_message = pick(struggle_messages_inside)
+
+ struggle_outer_message = replacetext(struggle_outer_message,"%pred",owner)
+ struggle_outer_message = replacetext(struggle_outer_message,"%prey",R)
+ struggle_outer_message = replacetext(struggle_outer_message,"%belly",lowertext(name))
+
+ struggle_user_message = replacetext(struggle_user_message,"%pred",owner)
+ struggle_user_message = replacetext(struggle_user_message,"%prey",R)
+ struggle_user_message = replacetext(struggle_user_message,"%belly",lowertext(name))
+
+ struggle_outer_message = "" + struggle_outer_message + ""
+ struggle_user_message = "" + struggle_user_message + ""
+
+ for(var/mob/M in get_hearers_in_view(3, get_turf(owner)))
+ M.show_message(struggle_outer_message, 2) // hearable
+ to_chat(R,struggle_user_message)
+
+ if(!silent)
+ for(var/mob/M in get_hearers_in_view(5, get_turf(owner)))
+ if(M.client && M.client.prefs.toggles & EATING_NOISES)
+ playsound(get_turf(owner),"struggle_sound",35,0,-5,1,ignore_walls = FALSE,channel=CHANNEL_PRED)
+ R.stop_sound_channel(CHANNEL_PRED)
+ var/sound/prey_struggle = sound(get_sfx("prey_struggle"))
+ R.playsound_local(get_turf(R),prey_struggle,45,0)
+
+ if(R.a_intent != INTENT_HELP) //If on non help intent
+ to_chat(R,"You start to climb out of \the [lowertext(name)].")
+ to_chat(owner,"Someone is attempting to climb out of your [lowertext(name)]!")
+ if(do_after(R, escapetime, owner))
+ if((owner.stat || !owner.client || escapable) && (R in contents))
+ release_specific_contents(R)
+ to_chat(R,"You climb out of \the [lowertext(name)].")
+ to_chat(owner,"[R] climbs out of your [lowertext(name)]!")
+ for(var/mob/M in hearers(4, owner))
+ M.show_message("[R] climbs out of [owner]'s [lowertext(name)]!", 2)
+ return
+ else if(!istype(loc, /obj/belly)) //Aren't even in the belly. Quietly fail.
+ return
+ else //Belly became inescapable.
+ to_chat(R,"Your attempt to escape [lowertext(name)] has failed!")
+ to_chat(owner,"The attempt to escape from your [lowertext(name)] has failed!")
+ return
+
+ else if(prob(transferchance) && transferlocation) //Next, let's have it see if they end up getting into an even bigger mess then when they started.
+ var/obj/belly/dest_belly
+ for(var/belly in owner.vore_organs)
+ var/obj/belly/B = belly
+ if(B.name == transferlocation)
+ dest_belly = B
+ break
+ if(!dest_belly)
+ to_chat(owner, "Something went wrong with your belly transfer settings. Your [lowertext(name)] has had it's transfer chance and transfer location cleared as a precaution.")
+ transferchance = 0
+ transferlocation = null
+ return
+
+ to_chat(R,"Your attempt to escape [lowertext(name)] has failed and your struggles only results in you sliding into [owner]'s [transferlocation]!")
+ to_chat(owner,"Someone slid into your [transferlocation] due to their struggling inside your [lowertext(name)]!")
+ transfer_contents(R, dest_belly)
+ return
+/*
+ else if(prob(absorbchance) && digest_mode != DM_ABSORB) //After that, let's have it run the absorb chance.
+ to_chat(R,"In response to your struggling, \the [lowertext(name)] begins to cling more tightly...")
+ to_chat(owner,"You feel your [lowertext(name)] start to cling onto its contents...")
+ digest_mode = DM_ABSORB
+ return
+
+ else if(prob(digestchance) && digest_mode != DM_ITEMWEAK && digest_mode != DM_DIGEST) //Finally, let's see if it should run the digest chance.
+ to_chat(R,"In response to your struggling, \the [lowertext(name)] begins to get more active...")
+ to_chat(owner,"You feel your [lowertext(name)] beginning to become active!")
+ digest_mode = DM_ITEMWEAK
+ return
+
+ else if(prob(digestchance) && digest_mode == DM_ITEMWEAK) //Oh god it gets even worse if you fail twice!
+ to_chat(R,"In response to your struggling, \the [lowertext(name)] begins to get even more active!")
+ to_chat(owner,"You feel your [lowertext(name)] beginning to become even more active!")
+ digest_mode = DM_DIGEST
+ return */
+ else if(prob(digestchance)) //Finally, let's see if it should run the digest chance.)
+ to_chat(R, "In response to your struggling, \the [name] begins to get more active...")
+ to_chat(owner, "You feel your [name] beginning to become active!")
+ digest_mode = DM_DIGEST
+ return
+
+ else //Nothing interesting happened.
+ to_chat(R,"You make no progress in escaping [owner]'s [lowertext(name)].")
+ to_chat(owner,"Your prey appears to be unable to make any progress in escaping your [lowertext(name)].")
+ return
+
+//Transfers contents from one belly to another
+/obj/belly/proc/transfer_contents(var/atom/movable/content, var/obj/belly/target, silent = FALSE)
+ if(!(content in src) || !istype(target))
+ return
+ target.nom_mob(content, target.owner)
+ if(!silent)
+ for(var/mob/M in get_hearers_in_view(5, get_turf(owner)))
+ if(M.client && M.client.prefs.toggles & EATING_NOISES)
+ playsound(get_turf(owner),"[src.vore_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
+ owner.updateVRPanel()
+ for(var/mob/living/M in contents)
+ M.updateVRPanel()
+
+// Belly copies and then returns the copy
+// Needs to be updated for any var changes
+/obj/belly/proc/copy(mob/new_owner)
+ var/obj/belly/dupe = new /obj/belly(new_owner)
+
+ //// Non-object variables
+ dupe.name = name
+ dupe.desc = desc
+ dupe.vore_sound = vore_sound
+ dupe.vore_verb = vore_verb
+ dupe.release_sound = release_sound
+ dupe.human_prey_swallow_time = human_prey_swallow_time
+ dupe.nonhuman_prey_swallow_time = nonhuman_prey_swallow_time
+ dupe.emote_time = emote_time
+ dupe.digest_brute = digest_brute
+ dupe.digest_burn = digest_burn
+ dupe.immutable = immutable
+ dupe.can_taste = can_taste
+ dupe.escapable = escapable
+ dupe.escapetime = escapetime
+ dupe.digestchance = digestchance
+ dupe.absorbchance = absorbchance
+ dupe.escapechance = escapechance
+ dupe.transferchance = transferchance
+ dupe.transferlocation = transferlocation
+ dupe.bulge_size = bulge_size
+// dupe.shrink_grow_size = shrink_grow_size
+
+ //// Object-holding variables
+ //struggle_messages_outside - strings
+ dupe.struggle_messages_outside.Cut()
+ for(var/I in struggle_messages_outside)
+ dupe.struggle_messages_outside += I
+
+ //struggle_messages_inside - strings
+ dupe.struggle_messages_inside.Cut()
+ for(var/I in struggle_messages_inside)
+ dupe.struggle_messages_inside += I
+
+ //digest_messages_owner - strings
+ dupe.digest_messages_owner.Cut()
+ for(var/I in digest_messages_owner)
+ dupe.digest_messages_owner += I
+
+ //digest_messages_prey - strings
+ dupe.digest_messages_prey.Cut()
+ for(var/I in digest_messages_prey)
+ dupe.digest_messages_prey += I
+
+ //examine_messages - strings
+ dupe.examine_messages.Cut()
+ for(var/I in examine_messages)
+ dupe.examine_messages += I
+
+ //emote_lists - index: digest mode, key: list of strings
+ dupe.emote_lists.Cut()
+ for(var/K in emote_lists)
+ dupe.emote_lists[K] = list()
+ for(var/I in emote_lists[K])
+ dupe.emote_lists[K] += I
+ dupe.silent = silent
+
+ return dupe
diff --git a/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
new file mode 100644
index 0000000000..3260e2ae99
--- /dev/null
+++ b/modular_citadel/code/modules/vore/eating/bellymodes_vr.dm
@@ -0,0 +1,186 @@
+// Process the predator's effects upon the contents of its belly (i.e digestion/transformation etc)
+/obj/belly/proc/process_belly(var/times_fired,var/wait) //Passed by controller
+ if((times_fired < next_process) || !contents.len)
+ recent_sound = FALSE
+ return SSBELLIES_IGNORED
+
+ if(loc != owner)
+ if(istype(owner))
+ loc = owner
+ else
+ qdel(src)
+ return SSBELLIES_PROCESSED
+
+ next_process = times_fired + (6 SECONDS/wait) //Set up our next process time.
+
+/////////////////////////// Auto-Emotes ///////////////////////////
+ if(contents.len && next_emote <= times_fired)
+ next_emote = times_fired + round(emote_time/wait,1)
+ var/list/EL = emote_lists[digest_mode]
+ for(var/mob/living/M in contents)
+ if(M.digestable || !(digest_mode == DM_DIGEST)) // don't give digesty messages to indigestible people
+ to_chat(M,"[pick(EL)]")
+
+/////////////////////////// Exit Early ////////////////////////////
+ var/list/touchable_items = contents - items_preserved
+ if(!length(touchable_items))
+ return SSBELLIES_PROCESSED
+
+////////////////////////// Sound vars /////////////////////////////
+ var/sound/prey_digest = sound(get_sfx("digest_prey"))
+ var/sound/prey_death = sound(get_sfx("death_prey"))
+
+
+///////////////////////////// DM_HOLD /////////////////////////////
+ if(digest_mode == DM_HOLD)
+ return SSBELLIES_PROCESSED
+
+//////////////////////////// DM_DIGEST ////////////////////////////
+ else if(digest_mode == DM_DIGEST)
+ for (var/mob/living/M in contents)
+ if(prob(25))
+ M.stop_sound_channel(CHANNEL_DIGEST)
+ for(var/mob/H in get_hearers_in_view(5, get_turf(owner)))
+ if(H.client && H.client.prefs.toggles & DIGESTION_NOISES)
+ playsound(get_turf(owner),"digest_pred",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_DIGEST)
+ M.stop_sound_channel(CHANNEL_DIGEST)
+ M.playsound_local(get_turf(M), prey_digest, 45)
+
+ //Pref protection!
+ if (!M.digestable || M.absorbed)
+ continue
+
+ //Person just died in guts!
+ if(M.stat == DEAD)
+ var/digest_alert_owner = pick(digest_messages_owner)
+ var/digest_alert_prey = pick(digest_messages_prey)
+
+ //Replace placeholder vars
+ digest_alert_owner = replacetext(digest_alert_owner,"%pred",owner)
+ digest_alert_owner = replacetext(digest_alert_owner,"%prey",M)
+ digest_alert_owner = replacetext(digest_alert_owner,"%belly",lowertext(name))
+
+ digest_alert_prey = replacetext(digest_alert_prey,"%pred",owner)
+ digest_alert_prey = replacetext(digest_alert_prey,"%prey",M)
+ digest_alert_prey = replacetext(digest_alert_prey,"%belly",lowertext(name))
+
+ //Send messages
+ to_chat(owner, "[digest_alert_owner]")
+ to_chat(M, "[digest_alert_prey]")
+ M.visible_message("You watch as [owner]'s form loses its additions.")
+
+ owner.nutrition += 400 // so eating dead mobs gives you *something*.
+ M.stop_sound_channel(DIGESTION_NOISES)
+ for(var/mob/H in get_hearers_in_view(5, get_turf(owner)))
+ if(H.client && H.client.prefs.toggles & DIGESTION_NOISES)
+ playsound(get_turf(owner),"death_pred",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_DIGEST)
+ M.stop_sound_channel(DIGESTION_NOISES)
+ M.stop_sound_channel(CHANNEL_PREYLOOP)
+ M.playsound_local(get_turf(M), prey_death, 65)
+ digestion_death(M)
+ owner.update_icons()
+ continue
+
+
+ // Deal digestion damage (and feed the pred)
+ if(!(M.status_flags & GODMODE))
+ M.adjustFireLoss(digest_burn)
+ owner.nutrition += 1
+
+ //Contaminate or gurgle items
+ var/obj/item/T = pick(touchable_items)
+ if(istype(T))
+ if(istype(T,/obj/item/reagent_containers/food) || istype(T,/obj/item/organ))
+ digest_item(T)
+
+ owner.updateVRPanel()
+
+///////////////////////////// DM_HEAL /////////////////////////////
+ if(digest_mode == DM_HEAL)
+ for (var/mob/living/M in contents)
+ if(prob(25))
+ M.stop_sound_channel(CHANNEL_DIGEST)
+ for(var/mob/H in get_hearers_in_view(5, get_turf(owner)))
+ if(H.client && H.client.prefs.toggles & DIGESTION_NOISES)
+ playsound(get_turf(owner),"digest_pred",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_DIGEST)
+ M.stop_sound_channel(CHANNEL_DIGEST)
+ M.playsound_local(get_turf(M), prey_digest, 65)
+
+ if(M.stat != DEAD)
+ if(owner.nutrition >= NUTRITION_LEVEL_STARVING && (M.health < M.maxHealth))
+ M.adjustBruteLoss(-3)
+ M.adjustFireLoss(-3)
+ owner.nutrition -= 5
+ return
+
+////////////////////////// DM_NOISY /////////////////////////////////
+//for when you just want people to squelch around
+ if(digest_mode == DM_NOISY)
+ for (var/mob/living/M in contents)
+ if(prob(35))
+ M.stop_sound_channel(CHANNEL_DIGEST)
+ for(var/mob/H in get_hearers_in_view(5, get_turf(owner)))
+ if(H.client && H.client.prefs.toggles & DIGESTION_NOISES)
+ playsound(get_turf(owner),"digest_pred",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_DIGEST)
+ M.stop_sound_channel(CHANNEL_PRED)
+ M.playsound_local(get_turf(M), prey_digest, 65)
+
+
+//////////////////////////DM_DRAGON /////////////////////////////////////
+//because dragons need snowflake guts
+ if(digest_mode == DM_DRAGON)
+ for (var/mob/living/M in contents)
+ if(prob(25))
+ M.stop_sound_channel(CHANNEL_DIGEST)
+ for(var/mob/H in get_hearers_in_view(5, get_turf(owner)))
+ if(H.client && H.client.prefs.toggles & DIGESTION_NOISES)
+ playsound(get_turf(owner),"digest_pred",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_DIGEST)
+ M.stop_sound_channel(CHANNEL_DIGEST)
+ M.playsound_local(get_turf(M), prey_digest, 65)
+
+ //No digestion protection for megafauna.
+
+ //Person just died in guts!
+ if(M.stat == DEAD)
+ var/digest_alert_owner = pick(digest_messages_owner)
+ var/digest_alert_prey = pick(digest_messages_prey)
+
+ //Replace placeholder vars
+ digest_alert_owner = replacetext(digest_alert_owner,"%pred",owner)
+ digest_alert_owner = replacetext(digest_alert_owner,"%prey",M)
+ digest_alert_owner = replacetext(digest_alert_owner,"%belly",lowertext(name))
+
+ digest_alert_prey = replacetext(digest_alert_prey,"%pred",owner)
+ digest_alert_prey = replacetext(digest_alert_prey,"%prey",M)
+ digest_alert_prey = replacetext(digest_alert_prey,"%belly",lowertext(name))
+
+ //Send messages
+ to_chat(owner, "[digest_alert_owner]")
+ to_chat(M, "[digest_alert_prey]")
+ M.visible_message("You watch as [owner]'s guts loudly rumble as it finishes off a meal.")
+
+ M.stop_sound_channel(CHANNEL_DIGEST)
+ for(var/mob/H in get_hearers_in_view(5, get_turf(owner)))
+ if(H.client && H.client.prefs.toggles & DIGESTION_NOISES)
+ playsound(get_turf(owner),"death_pred",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_DIGEST)
+ M.stop_sound_channel(CHANNEL_DIGEST)
+ M.playsound_local(get_turf(M), prey_death, 65)
+ M.spill_organs(FALSE,TRUE,TRUE)
+ M.stop_sound_channel(CHANNEL_PREYLOOP)
+ digestion_death(M)
+ owner.update_icons()
+ continue
+
+
+ // Deal digestion damage (and feed the pred)
+ if(!(M.status_flags & GODMODE))
+ M.adjustFireLoss(digest_burn)
+ M.adjustToxLoss(2) // something something plasma based acids
+ M.adjustCloneLoss(1) // eventually this'll kill you if you're healing everything else, you nerds.
+ //Contaminate or gurgle items
+ var/obj/item/T = pick(touchable_items)
+ if(istype(T))
+ if(istype(T,/obj/item/reagent_containers/food) || istype(T,/obj/item/organ))
+ digest_item(T)
+
+ owner.updateVRPanel()
\ No newline at end of file
diff --git a/modular_citadel/code/modules/vore/eating/digest_act_vr.dm b/modular_citadel/code/modules/vore/eating/digest_act_vr.dm
new file mode 100644
index 0000000000..faa458ad56
--- /dev/null
+++ b/modular_citadel/code/modules/vore/eating/digest_act_vr.dm
@@ -0,0 +1,119 @@
+//Please make sure to:
+//return FALSE: You are not going away, stop asking me to digest.
+//return non-negative integer: Amount of nutrition/charge gained (scaled to nutrition, other end can multiply for charge scale).
+
+// Ye default implementation.
+/obj/item/proc/digest_act(var/atom/movable/item_storage = null)
+ for(var/obj/item/O in contents)
+ if(istype(O,/obj/item/storage/internal)) //Dump contents from dummy pockets.
+ for(var/obj/item/SO in O)
+ if(item_storage)
+ SO.forceMove(item_storage)
+ qdel(O)
+ else if(item_storage)
+ O.forceMove(item_storage)
+
+ qdel(src)
+ return w_class
+
+/////////////
+// Some indigestible stuff
+/////////////
+/obj/item/hand_tele/digest_act(...)
+ return FALSE
+/obj/item/card/id/digest_act(...)
+ return FALSE
+/obj/item/aicard/digest_act(...)
+ return FALSE
+/obj/item/paicard/digest_act(...)
+ return FALSE
+/obj/item/pinpointer/digest_act(...)
+ return FALSE
+/obj/item/disk/nuclear/digest_act(...)
+ return FALSE
+/obj/item/device/perfect_tele_beacon/digest_act(...)
+ return FALSE //Sorta important to not digest your own beacons.
+/obj/item/device/pda/digest_act(...)
+ return FALSE
+/obj/item/gun/digest_act(...)
+ return FALSE
+/obj/item/clothing/shoes/magboots/digest_act(...)
+ return FALSE
+/obj/item/clothing/head/helmet/space/digest_act(...)
+ return FALSE
+/obj/item/clothing/suit/space/digest_act(...)
+ return FALSE
+/obj/item/reagent_containers/hypospray/CMO/digest_act(...)
+ return FALSE
+/obj/item/tank/jetpack/oxygen/captain/digest_act(...)
+ return FALSE
+/obj/item/clothing/accessory/medal/gold/captain/digest_act(...)
+ return FALSE
+/obj/item/clothing/suit/armor/digest_act(...)
+ return FALSE
+/obj/item/documents/digest_act(...)
+ return FALSE
+/obj/item/nuke_core/digest_act(...)
+ return FALSE
+/obj/item/nuke_core_container/digest_act(...)
+ return FALSE
+/obj/item/areaeditor/blueprints/digest_act(...)
+ return FALSE
+/obj/item/documents/syndicate/digest_act(...)
+ return FALSE
+/obj/item/bombcore/digest_act(...)
+ return FALSE
+/obj/item/grenade/digest_act(...)
+ return FALSE
+/obj/item/storage/digest_act(...)
+ return FALSE
+
+/////////////
+// Some special treatment
+/////////////
+/*
+//PDAs need to lose their ID to not take it with them, so we can get a digested ID
+/obj/item/device/pda/digest_act(var/atom/movable/item_storage = null)
+ if(id)
+ id = null
+
+ . = ..()
+*/
+
+/obj/item/reagent_containers/food/digest_act(var/atom/movable/item_storage = null)
+ if(isbelly(item_storage))
+ var/obj/belly/B = item_storage
+ if(ishuman(B.owner))
+ var/mob/living/carbon/human/H = B.owner
+ reagents.trans_to(H, (reagents.total_volume * 0.3), 1, 0)
+ else if(iscyborg(B.owner))
+ var/mob/living/silicon/robot/R = B.owner
+ R.cell.charge += 150
+
+ . = ..()
+
+/*
+/obj/item/holder/digest_act(var/atom/movable/item_storage = null)
+ for(var/mob/living/M in contents)
+ if(item_storage)
+ M.forceMove(item_storage)
+ held_mob = null
+
+ . = ..() */
+
+/obj/item/organ/digest_act(var/atom/movable/item_storage = null)
+ if((. = ..()))
+ . += 70 //Organs give a little more
+
+/obj/item/storage/digest_act(var/atom/movable/item_storage = null)
+ for(var/obj/item/I in contents)
+ I.screen_loc = null
+
+ . = ..()
+
+/////////////
+// Some more complicated stuff
+/////////////
+/obj/item/device/mmi/digital/posibrain/digest_act(var/atom/movable/item_storage = null)
+ //Replace this with a VORE setting so all types of posibrains can/can't be digested on a whim
+ return FALSE
diff --git a/code/modules/vore/eating/living_vr.dm b/modular_citadel/code/modules/vore/eating/living_vr.dm
similarity index 71%
rename from code/modules/vore/eating/living_vr.dm
rename to modular_citadel/code/modules/vore/eating/living_vr.dm
index 16a63c40ac..5b2ad312ab 100644
--- a/code/modules/vore/eating/living_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/living_vr.dm
@@ -1,23 +1,24 @@
///////////////////// Mob Living /////////////////////
/mob/living
var/digestable = TRUE // Can the mob be digested inside a belly?
- var/datum/belly/vore_selected // Default to no vore capability.
+ var/obj/belly/vore_selected // Default to no vore capability.
var/list/vore_organs = list() // List of vore containers inside a mob
var/devourable = FALSE // Can the mob be vored at all?
// var/feeding = FALSE // Are we going to feed someone else?
var/vore_taste = null // What the character tastes like
var/no_vore = FALSE // If the character/mob can vore.
var/openpanel = 0 // Is the vore panel open?
+ var/noisy = FALSE // tummies are rumbly?
+ var/absorbed = FALSE //are we absorbed?
//
// Hook for generic creation of stuff on new creatures
//
/hook/living_new/proc/vore_setup(mob/living/M)
- M.verbs += /mob/living/proc/lick
M.verbs += /mob/living/proc/preyloop_refresh
- if(M.no_vore) //If the mob isn's supposed to have a stomach, let's not give it an insidepanel so it can make one for itself, or a stomach.
- M << "The creature that you are can not eat others."
- return TRUE
+ M.verbs += /mob/living/proc/lick
+ if(M.no_vore) //If the mob isn't supposed to have a stomach, let's not give it an insidepanel so it can make one for itself, or a stomach.
+ return 1
M.verbs += /mob/living/proc/insidePanel
//Tries to load prefs if a client is present otherwise gives freebie stomach
@@ -27,44 +28,36 @@
if(M.client && M.client.prefs_vr)
if(!M.copy_from_prefs_vr())
- M << "ERROR: You seem to have saved vore prefs, but they couldn't be loaded."
- return FALSE
+ to_chat(M,"ERROR: You seem to have saved vore prefs, but they couldn't be loaded.")
+ return 0
if(M.vore_organs && M.vore_organs.len)
M.vore_selected = M.vore_organs[1]
if(!M.vore_organs || !M.vore_organs.len)
if(!M.vore_organs)
M.vore_organs = list()
- var/datum/belly/B = new /datum/belly(M)
+ var/obj/belly/B = new /obj/belly(M)
+ M.vore_selected = B
B.immutable = TRUE
B.name = "Stomach"
- B.inside_flavor = "It appears to be rather warm and wet. Makes sense, considering it's inside \the [M.name]"
- B.can_taste = TRUE
- M.vore_organs[B.name] = B
- M.vore_selected = B.name
-
- //Simple_animal gets emotes. move this to that hook instead?
- if(istype(src,/mob/living/simple_animal))
- B.emote_lists[DM_HOLD] = list(
- "The insides knead at you gently for a moment.",
- "The guts glorp wetly around you as some air shifts.",
- "Your predator takes a deep breath and sighs, shifting you somewhat.",
- "The stomach squeezes you tight for a moment, then relaxes.",
- "During a moment of quiet, breathing becomes the most audible thing.",
- "The warm slickness surrounds and kneads on you.")
-
- B.emote_lists[DM_DIGEST] = list(
- "The caustic acids eat away at your form.",
- "The acrid air burns at your lungs.",
- "Without a thought for you, the stomach grinds inwards painfully.",
- "The guts treat you like food, squeezing to press more acids against you.",
- "The onslaught against your body doesn't seem to be letting up; you're food now.",
- "The insides work on you like they would any other food.")
+ B.desc = "It appears to be rather warm and wet. Makes sense, considering it's inside \the [M.name]."
+ B.can_taste = FALSE
//Return 1 to hook-caller
return 1
+/*
+// Hide vore organs in contents
//
+/datum/proc/view_variables_filter_contents(list/L)
+ return 0
+
+/mob/living/view_variables_filter_contents(list/L)
+ . = ..()
+ var/len_before = L.len
+ L -= vore_organs
+ . += len_before - L.len*/
+
// Handle being clicked, perhaps with something to devour
//
@@ -126,33 +119,37 @@
var/belly = user.vore_selected
return perform_dragon(user, prey, user, belly)
-/mob/living/proc/perform_dragon(var/mob/living/user, var/mob/living/prey, var/mob/living/pred, var/belly, swallow_time = 20)
+/mob/living/proc/perform_dragon(var/mob/living/user, var/mob/living/prey, var/mob/living/pred, var/obj/belly/belly, swallow_time = 20)
//Sanity
- if(!user || !prey || !pred || !belly || !(belly in pred.vore_organs))
+ if(!user || !prey || !pred || !istype(belly) || !(belly in pred.vore_organs))
+ testing("[user] attempted to feed [prey] to [pred], via [lowertext(belly.name)] but it went wrong.")
return
// The belly selected at the time of noms
- var/datum/belly/belly_target = pred.vore_organs[belly]
var/attempt_msg = "ERROR: Vore message couldn't be created. Notify a dev. (at)"
var/success_msg = "ERROR: Vore message couldn't be created. Notify a dev. (sc)"
+/* //Final distance check. Time has passed, menus have come and gone. Can't use do_after adjacent because doesn't behave for held micros
+ var/user_to_pred = get_dist(get_turf(user),get_turf(pred))
+ var/user_to_prey = get_dist(get_turf(user),get_turf(prey)) */
+
// Prepare messages
if(user == pred) //Feeding someone to yourself
- attempt_msg = text("[] starts to [] [] into their []!",pred,lowertext(belly_target.vore_verb),prey,lowertext(belly_target.name))
- success_msg = text("[] manages to [] [] into their []!",pred,lowertext(belly_target.vore_verb),prey,lowertext(belly_target.name))
+ attempt_msg = text("[] starts to [] [] into their []!",pred,lowertext(belly.vore_verb),prey,lowertext(belly.name))
+ success_msg = text("[] manages to [] [] into their []!",pred,lowertext(belly.vore_verb),prey,lowertext(belly.name))
// Announce that we start the attempt!
user.visible_message(attempt_msg)
- if(!do_mob(src, user, swallow_time)) // one second should be good enough, right?
+ if(!do_mob(src, user, swallow_time))
return FALSE // Prey escaped (or user disabled) before timer expired.
// If we got this far, nom successful! Announce it!
user.visible_message(success_msg)
- playsound(get_turf(user), belly_target.vore_sound,75,0,-6,0)
+ playsound(get_turf(user), "[belly.vore_sound]",75,0,-6,0)
// Actually shove prey into the belly.
- belly_target.nom_mob(prey, user)
+ belly.nom_mob(prey, user)
if (pred == user)
message_admins("[key_name(pred)] ate [key_name(prey)].")
log_attack("[key_name(pred)] ate [key_name(prey)]")
@@ -161,43 +158,55 @@
// Master vore proc that actually does vore procedures
//
-/mob/living/proc/perform_the_nom(var/mob/living/user, var/mob/living/prey, var/mob/living/pred, var/belly, swallow_time = 100)
+/mob/living/proc/perform_the_nom(var/mob/living/user, var/mob/living/prey, var/mob/living/pred, var/obj/belly/belly, var/delay)
//Sanity
- if(!user || !prey || !pred || !belly || !(belly in pred.vore_organs))
+ if(!user || !prey || !pred || !istype(belly) || !(belly in pred.vore_organs))
+ testing("[user] attempted to feed [prey] to [pred], via [lowertext(belly.name)] but it went wrong.")
return
if (!prey.devourable)
to_chat(user, "This can't be eaten!")
return
// The belly selected at the time of noms
- var/datum/belly/belly_target = pred.vore_organs[belly]
var/attempt_msg = "ERROR: Vore message couldn't be created. Notify a dev. (at)"
var/success_msg = "ERROR: Vore message couldn't be created. Notify a dev. (sc)"
+/* //Final distance check. Time has passed, menus have come and gone. Can't use do_after adjacent because doesn't behave for held micros
+ var/user_to_pred = get_dist(get_turf(user),get_turf(pred))
+ var/user_to_prey = get_dist(get_turf(user),get_turf(prey)) */
+
// Prepare messages
if(user == pred) //Feeding someone to yourself
- attempt_msg = text("[] is attemping to [] [] into their []!",pred,lowertext(belly_target.vore_verb),prey,lowertext(belly_target.name))
- success_msg = text("[] manages to [] [] into their []!",pred,lowertext(belly_target.vore_verb),prey,lowertext(belly_target.name))
+ attempt_msg = text("[] is attemping to [] [] into their []!",pred,lowertext(belly.vore_verb),prey,lowertext(belly.name))
+ success_msg = text("[] manages to [] [] into their []!",pred,lowertext(belly.vore_verb),prey,lowertext(belly.name))
else //Feeding someone to another person
- attempt_msg = text("[] is attempting to make [] [] [] into their []!",user,pred,lowertext(belly_target.vore_verb),prey,lowertext(belly_target.name))
- success_msg = text("[] manages to make [] [] [] into their []!",user,pred,lowertext(belly_target.vore_verb),prey,lowertext(belly_target.name))
+ attempt_msg = text("[] is attempting to make [] [] [] into their []!",user,pred,lowertext(belly.vore_verb),prey,lowertext(belly.name))
+ success_msg = text("[] manages to make [] [] [] into their []!",user,pred,lowertext(belly.vore_verb),prey,lowertext(belly.name))
// Announce that we start the attempt!
user.visible_message(attempt_msg)
// Now give the prey time to escape... return if they did
+ var/swallow_time = delay || ishuman(prey) ? belly.human_prey_swallow_time : belly.nonhuman_prey_swallow_time
+
if(!do_mob(src, user, swallow_time))
return FALSE // Prey escaped (or user disabled) before timer expired.
// If we got this far, nom successful! Announce it!
user.visible_message(success_msg)
- playsound(get_turf(user), belly_target.vore_sound,75,0,-6,0,ignore_walls = FALSE)
+ for(var/mob/M in get_hearers_in_view(5, get_turf(user)))
+ if(M.client && M.client.prefs.toggles & EATING_NOISES)
+ playsound(get_turf(user),"[belly.vore_sound]",50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
// Actually shove prey into the belly.
- belly_target.nom_mob(prey, user)
+ belly.nom_mob(prey, user)
// user.update_icons()
stop_pulling()
+ // Flavor handling
+ if(belly.can_taste && prey.get_taste_message(FALSE))
+ to_chat(belly.owner, "[prey] tastes of [prey.get_taste_message(FALSE)].")
+
// Inform Admins
var/prey_braindead
var/prey_stat
@@ -250,50 +259,38 @@
return 0
*/
+
+//
+// Release everything in every vore organ
+//
+/mob/living/proc/release_vore_contents(var/include_absorbed = TRUE)
+ for(var/belly in vore_organs)
+ var/obj/belly/B = belly
+ B.release_all_contents(include_absorbed)
+
//
// Custom resist catches for /mob/living
//
/mob/living/proc/vore_process_resist()
//Are we resisting from inside a belly?
- var/datum/belly/B = check_belly(src)
- if(B)
- spawn() B.relay_resist(src)
+ if(isbelly(loc))
+ var/obj/belly/B = loc
+ B.relay_resist(src)
return TRUE //resist() on living does this TRUE thing.
//Other overridden resists go here
-
return FALSE
-//
-// Proc for updating vore organs and digestion/healing/absorbing
-//
-/mob/living/proc/handle_internal_contents()
- if(SSmobs.times_fired%6==1)
- return //The accursed timer
-
- for (var/I in vore_organs)
- var/datum/belly/B = vore_organs[I]
- if(B.internal_contents.len)
- B.process_Life() //AKA 'do bellymodes_vr.dm'
-
- for (var/I in vore_organs)
- var/datum/belly/B = vore_organs[I]
- if(B.internal_contents.len)
- listclearnulls(B.internal_contents)
- for(var/atom/movable/M in B.internal_contents)
- if(M.loc != src)
- B.internal_contents.Remove(M)
-
// internal slimy button in case the loop stops playing but the player wants to hear it
/mob/living/proc/preyloop_refresh()
set name = "Internal loop refresh"
set category = "Vore"
- if(ismob(src.loc))
+ if(istype(src.loc, /obj/belly))
src.stop_sound_channel(CHANNEL_PREYLOOP) // sanity just in case
var/sound/preyloop = sound('sound/vore/prey/loop.ogg', repeat = TRUE)
- src.playsound_local(get_turf(src),preyloop,40,0, channel = CHANNEL_PREYLOOP)
+ src.playsound_local(get_turf(src),preyloop,80,0, channel = CHANNEL_PREYLOOP)
else
to_chat(src, "You aren't inside anything, you clod.")
@@ -309,7 +306,7 @@
var/confirm = alert(src, "You're in a mob. Use this as a trick to get out of hostile animals. If you are in more than one pred, use this more than once.", "Confirmation", "Okay", "Cancel")
if(confirm == "Okay")
for(var/I in pred.vore_organs)
- var/datum/belly/B = pred.vore_organs[I]
+ var/obj/belly/B = pred.vore_organs[I]
B.release_specific_contents(src)
for(var/mob/living/simple_animal/SA in range(10))
@@ -355,9 +352,15 @@
P.digestable = src.digestable
P.devourable = src.devourable
- P.belly_prefs = src.vore_organs
P.vore_taste = src.vore_taste
+ var/list/serialized = list()
+ for(var/belly in src.vore_organs)
+ var/obj/belly/B = belly
+ serialized += list(B.serialize()) //Can't add a list as an object to another list in Byond. Thanks.
+
+ P.belly_prefs = serialized
+
return TRUE
//
@@ -370,16 +373,52 @@
var/datum/vore_preferences/P = client.prefs_vr
- src.digestable = P.digestable
- src.devourable = P.devourable
- src.vore_organs = list()
- src.vore_taste = P.vore_taste
+ digestable = P.digestable
+ devourable = P.devourable
+ vore_taste = P.vore_taste
- for(var/I in P.belly_prefs)
- var/datum/belly/Bp = P.belly_prefs[I]
- src.vore_organs[Bp.name] = Bp.copy(src)
+ vore_organs.Cut()
+ for(var/entry in P.belly_prefs)
+ list_to_object(entry,src)
return TRUE
+
+//
+// Returns examine messages for bellies
+//
+/mob/living/proc/examine_bellies()
+ if(!show_pudge()) //Some clothing or equipment can hide this.
+ return ""
+
+ var/message = ""
+ for (var/belly in vore_organs)
+ var/obj/belly/B = belly
+ message += B.get_examine_msg()
+
+ return message
+
+//
+// Whether or not people can see our belly messages
+//
+/mob/living/proc/show_pudge()
+ return TRUE //Can override if you want.
+
+/mob/living/carbon/human/show_pudge()
+ //A uniform could hide it.
+ if(istype(w_uniform,/obj/item/clothing))
+ var/obj/item/clothing/under = w_uniform
+ if(under.hides_bulges)
+ return FALSE
+
+ //We return as soon as we find one, no need for 'else' really.
+ if(istype(wear_suit,/obj/item/clothing))
+ var/obj/item/clothing/suit = wear_suit
+ if(suit.hides_bulges)
+ return FALSE
+
+
+ return ..()
+
//
// Clearly super important. Obviously.
//
diff --git a/code/modules/vore/eating/simple_animal_vr.dm b/modular_citadel/code/modules/vore/eating/simple_animal_vr.dm
similarity index 94%
rename from code/modules/vore/eating/simple_animal_vr.dm
rename to modular_citadel/code/modules/vore/eating/simple_animal_vr.dm
index 4e7c453371..a93eb2fcf4 100644
--- a/code/modules/vore/eating/simple_animal_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/simple_animal_vr.dm
@@ -31,7 +31,7 @@
//
// Simple nom proc for if you get ckey'd into a simple_animal mob! Avoids grabs.
//
-/mob/living/proc/animal_nom(var/mob/living/T in oview(1))
+/mob/living/simple_animal/proc/animal_nom(var/mob/living/T in oview(1))
set name = "Animal Nom"
set category = "Vore"
set desc = "Since you can't grab, you get a verb!"
diff --git a/code/modules/vore/eating/vore_vr.dm b/modular_citadel/code/modules/vore/eating/vore_vr.dm
similarity index 56%
rename from code/modules/vore/eating/vore_vr.dm
rename to modular_citadel/code/modules/vore/eating/vore_vr.dm
index f6d886e93f..f0ceb97e31 100644
--- a/code/modules/vore/eating/vore_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/vore_vr.dm
@@ -23,6 +23,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
// Overrides/additions to stock defines go here, as well as hooks. Sort them by
// the object they are overriding. So all /mob/living together, etc.
//
+
//
// The datum type bolted onto normal preferences datums for storing Vore stuff
//
@@ -40,21 +41,23 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
//Actual preferences
var/digestable = TRUE
var/devourable = FALSE
+// var/allowmobvore = TRUE
var/list/belly_prefs = list()
- var/vore_taste
+ var/vore_taste = "nothing in particular"
+// var/can_be_drop_prey = FALSE
+// var/can_be_drop_pred = FALSE
//Mechanically required
var/path
var/slot
var/client/client
var/client_ckey
- var/client/parent
/datum/vore_preferences/New(client/C)
if(istype(C))
client = C
client_ckey = C.ckey
- load_vore(C)
+ load_vore()
//
// Check if an object is capable of eating things, based on vore_organs
@@ -68,46 +71,60 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
//
// Belly searching for simplifying other procs
+// Mostly redundant now with belly-objects and isbelly(loc)
//
/proc/check_belly(atom/movable/A)
- if(istype(A.loc,/mob/living))
- var/mob/living/M = A.loc
- for(var/I in M.vore_organs)
- var/datum/belly/B = M.vore_organs[I]
- if(A in B.internal_contents)
- return(B)
-
- return FALSE
+ return isbelly(A.loc)
//
// Save/Load Vore Preferences
//
+/datum/vore_preferences/proc/load_path(ckey,slot,filename="character",ext="json")
+ if(!ckey || !slot) return
+ path = "data/player_saves/[copytext(ckey,1,2)]/[ckey]/vore/[filename][slot].[ext]"
+
+
/datum/vore_preferences/proc/load_vore()
- if(!client || !client_ckey) return FALSE //No client, how can we save?
+ if(!client || !client_ckey)
+ return FALSE //No client, how can we save?
+ if(!client.prefs || !client.prefs.default_slot)
+ return FALSE //Need to know what character to load!
slot = client.prefs.default_slot
- path = client.prefs.path
+ load_path(client_ckey,slot)
if(!path) return FALSE //Path couldn't be set?
if(!fexists(path)) //Never saved before
save_vore() //Make the file first
return TRUE
- var/savefile/S = new /savefile(path)
- if(!S) return FALSE //Savefile object couldn't be created?
+ var/list/json_from_file = json_decode(file2text(path))
+ if(!json_from_file)
+ return FALSE //My concern grows
- S.cd = "/character[slot]"
+ var/version = json_from_file["version"]
+ json_from_file = patch_version(json_from_file,version)
- S["digestable"] >> digestable
- S["devourable"] >> devourable
- S["belly_prefs"] >> belly_prefs
- S["vore_taste"] >> vore_taste
+ digestable = json_from_file["digestable"]
+ devourable = json_from_file["devourable"]
+// allowmobvore = json_from_file["allowmobvore"]
+ vore_taste = json_from_file["vore_taste"]
+// can_be_drop_prey = json_from_file["can_be_drop_prey"]
+// can_be_drop_prey = json_from_file["can_be_drop_pred"]
+ belly_prefs = json_from_file["belly_prefs"]
+ //Quick sanitize
if(isnull(digestable))
digestable = TRUE
if(isnull(devourable))
devourable = FALSE
+/* if(isnull(allowmobvore))
+ allowmobvore = TRUE
+ if(isnull(can_be_drop_prey))
+ allowmobvore = FALSE
+ if(isnull(can_be_drop_pred))
+ allowmobvore = FALSE */
if(isnull(belly_prefs))
belly_prefs = list()
@@ -115,28 +132,37 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
/datum/vore_preferences/proc/save_vore()
if(!path) return FALSE
- if(!slot) return FALSE
- var/savefile/S = new /savefile(path)
- if(!S) return FALSE
- S.cd = "/character[slot]"
- WRITE_FILE(S["digestable"], digestable)
- WRITE_FILE(S["devourable"], devourable)
- WRITE_FILE(S["belly_prefs"], belly_prefs)
- WRITE_FILE(S["vore_taste"], vore_taste)
+ var/version = 1 //For "good times" use in the future
+ var/list/settings_list = list(
+ "version" = version,
+ "digestable" = digestable,
+ "devourable" = devourable,
+ "vore_taste" = vore_taste,
+ "belly_prefs" = belly_prefs,
+ )
+
+ /* commented out list things
+ "allowmobvore" = allowmobvore,
+ "can_be_drop_prey" = can_be_drop_prey,
+ "can_be_drop_pred" = can_be_drop_pred, */
+
+ //List to JSON
+ var/json_to_file = json_encode(settings_list)
+ if(!json_to_file)
+ testing("Saving: [path] failed jsonencode")
+ return FALSE
+
+ //Write it out
+ if(fexists(path))
+ fdel(path) //Byond only supports APPENDING to files, not replacing.
+ text2file(json_to_file,path)
+ if(!fexists(path))
+ testing("Saving: [path] failed file write")
+ return FALSE
return TRUE
-#ifdef TESTING
-//DEBUG
-//Some crude tools for testing savefiles
-//path is the savefile path
-/client/verb/vore_savefile_export(path as text)
- var/savefile/S = new /savefile(path)
- S.ExportText("/",file("[path].txt"))
-//path is the savefile path
-/client/verb/vore_savefile_import(path as text)
- var/savefile/S = new /savefile(path)
- S.ImportText("/",file("[path].txt"))
-
-#endif
\ No newline at end of file
+//Can do conversions here
+/datum/vore_preferences/proc/patch_version(var/list/json_from_file,var/version)
+ return json_from_file
\ No newline at end of file
diff --git a/code/modules/vore/eating/voreitems.dm b/modular_citadel/code/modules/vore/eating/voreitems.dm
similarity index 93%
rename from code/modules/vore/eating/voreitems.dm
rename to modular_citadel/code/modules/vore/eating/voreitems.dm
index 5d157c39fe..741782545a 100644
--- a/code/modules/vore/eating/voreitems.dm
+++ b/modular_citadel/code/modules/vore/eating/voreitems.dm
@@ -16,7 +16,7 @@
/obj/item/projectile/sickshot
name = "sickshot pulse"
icon_state = "e_netting"
- damage = 1
+ damage = 0
damage_type = STAMINA
range = 2
@@ -25,8 +25,7 @@
var/mob/living/carbon/H = target
if(prob(5))
for(var/X in H.vore_organs)
- var/datum/belly/B = H.vore_organs[X]
- B.release_all_contents()
+ H.release_vore_contents()
H.visible_message("[H] contracts strangely, spewing out contents on the floor!", \
"You spew out everything inside you on the floor!")
return
diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm
similarity index 59%
rename from code/modules/vore/eating/vorepanel_vr.dm
rename to modular_citadel/code/modules/vore/eating/vorepanel_vr.dm
index e9bb44765f..7d7a48ed28 100644
--- a/code/modules/vore/eating/vorepanel_vr.dm
+++ b/modular_citadel/code/modules/vore/eating/vorepanel_vr.dm
@@ -14,7 +14,7 @@
var/datum/vore_look/picker_holder = new()
picker_holder.loop = picker_holder
- picker_holder.selected = vore_organs[vore_selected]
+ picker_holder.selected = vore_selected
var/dat = picker_holder.gen_vui(src)
@@ -22,11 +22,23 @@
picker_holder.popup.set_content(dat)
picker_holder.popup.open()
+/mob/living/proc/updateVRPanel() //Panel popup update call from belly events.
+ if(src.openpanel == 1)
+ var/datum/vore_look/picker_holder = new()
+ picker_holder.loop = picker_holder
+ picker_holder.selected = vore_selected
+
+ var/dat = picker_holder.gen_vui(src)
+
+ picker_holder.popup = new(src, "insidePanel","Vore Panel", 400, 600, picker_holder)
+ picker_holder.popup.set_content(dat)
+ picker_holder.popup.open()
+
//
// Callback Handler for the Inside form
//
/datum/vore_look
- var/datum/belly/selected
+ var/obj/belly/selected
var/show_interacts = TRUE
var/datum/browser/popup
var/loop = null; // Magic self-reference to stop the handler from being GC'd before user takes action.
@@ -44,29 +56,38 @@
/datum/vore_look/proc/gen_vui(var/mob/living/user)
var/dat
- if (is_vore_predator(user.loc))
- var/mob/living/eater = user.loc
- var/datum/belly/inside_belly
-
- //This big block here figures out where the prey is
- inside_belly = check_belly(user)
+ var/atom/userloc = user.loc
+ if (isbelly(userloc))
+ var/obj/belly/inside_belly = userloc
+ var/mob/living/eater = inside_belly.owner
+ //Don't display this part if we couldn't find the belly since could be held in hand.
if(inside_belly)
- dat += "You are currently inside [eater]'s [inside_belly]!
"
+ dat += "You are currently [user.absorbed ? "absorbed into " : "inside "] [eater]'s [inside_belly]!
"
- if(inside_belly.inside_flavor)
- dat += "[inside_belly.inside_flavor]
"
+ if(inside_belly.desc)
+ dat += "[inside_belly.desc]
"
- if (inside_belly.internal_contents.len > 1)
+ if (inside_belly.contents.len > 1)
dat += "You can see the following around you:
"
- for (var/atom/movable/O in inside_belly.internal_contents)
+ for (var/atom/movable/O in inside_belly)
if(istype(O,/mob/living))
var/mob/living/M = O
//That's just you
if(M == user)
continue
+
+ //That's an absorbed person you're checking
+ if(M.absorbed)
+ if(user.absorbed)
+ dat += "[O]"
+ continue
+ else
+ continue
+
//Anything else
- dat += "[O]"
+ dat += "[O]"
+
//Zero-width space, for wrapping
dat += ""
else
@@ -75,8 +96,8 @@
dat += "
"
dat += ""
- for(var/K in user.vore_organs) //Fuggin can't iterate over values
- var/datum/belly/B = user.vore_organs[K]
+ for(var/belly in user.vore_organs)
+ var/obj/belly/B = belly
if(B == selected)
dat += "- [B.name]"
else
@@ -90,8 +111,10 @@
spanstyle = "color:red;"
if(DM_HEAL)
spanstyle = "color:green;"
+ if(DM_NOISY)
+ spanstyle = "color:purple;"
- dat += " ([B.internal_contents.len])
"
+ dat += " ([B.contents.len])"
if(user.vore_organs.len < BELLIES_MAX)
dat += "- New+
"
@@ -102,15 +125,27 @@
if(!selected)
dat += "No belly selected. Click one to select it."
else
- if(selected.internal_contents.len > 0)
+ if(selected.contents.len)
dat += "Contents: "
- for(var/O in selected.internal_contents)
+ for(var/O in selected)
+
+ //Mobs can be absorbed, so treat them separately from everything else
+ if(istype(O,/mob/living))
+ var/mob/living/M = O
+
+ //Absorbed gets special color OOoOOOOoooo
+ if(M.absorbed)
+ dat += "[O]"
+ continue
+
+ //Anything else
dat += "[O]"
//Zero-width space, for wrapping
dat += ""
+
//If there's more than one thing, add an [All] button
- if(selected.internal_contents.len > 1)
+ if(selected.contents.len > 1)
dat += "\[All\]"
dat += "
"
@@ -129,14 +164,15 @@
//Inside flavortext
dat += "
Flavor Text:"
- dat += " '[selected.inside_flavor]'"
+ dat += " '[selected.desc]'"
//Belly sound
dat += "
Set Vore Sound"
dat += "Test"
- // //Belly silence
- // dat += "
Belly Silence ([selected.silenced ? "Silenced" : "Noisy"])"
+ //Release sound
+ dat += "
Set Release Sound"
+ dat += "Test"
//Belly messages
dat += "
Belly Messages"
@@ -145,6 +181,10 @@
dat += "
Can Taste:"
dat += " [selected.can_taste ? "Yes" : "No"]"
+ //Minimum size prey must be to show up.
+ dat += "
Required examine size:"
+ dat += " [selected.bulge_size*100]%"
+
//Belly escapability
dat += "
Belly Interactions ([selected.escapable ? "On" : "Off"])"
if(selected.escapable)
@@ -173,15 +213,21 @@
dat += " [selected.digestchance]%"
dat += "
"
+ // Belly Silence
+ dat += "
Belly Silence (for not belly bellies):"
+ dat += " [selected.silent ? "Yes" : "No"]"
+
//Delete button
dat += "
Delete Belly"
+ dat += "Set Flavor"
+ dat += "Toggle Hunger Noises"
+
dat += "
"
//Under the last HR, save and stuff.
dat += "Save Prefs"
dat += "Refresh"
- dat += "Set Flavor"
dat += "
"
switch(user.digestable)
@@ -221,8 +267,8 @@
if(href_list["outsidepick"])
var/atom/movable/tgt = locate(href_list["outsidepick"])
- var/datum/belly/OB = locate(href_list["outsidebelly"])
- if(!(tgt in OB.internal_contents)) //Aren't here anymore, need to update menu.
+ var/obj/belly/OB = locate(href_list["outsidebelly"])
+ if(!(tgt in OB)) //Aren't here anymore, need to update menu.
return TRUE
var/intent = "Examine"
@@ -234,42 +280,49 @@
M.examine(user)
if("Help Out") //Help the inside-mob out
- to_chat(user, "You begin to push [M] to freedom!")
- to_chat(M, "[usr] begins to push you to freedom!")
- M.loc << "Someone is trying to escape from inside you!"
+ if(user.stat || user.absorbed || M.absorbed)
+ to_chat(user,"You can't do that in your state!")
+ return 1
+
+ to_chat(user,"You begin to push [M] to freedom!")
+ to_chat(M,"[usr] begins to push you to freedom!")
+ to_chat(M.loc,"Someone is trying to escape from inside you!")
sleep(50)
if(prob(33))
OB.release_specific_contents(M)
- to_chat(usr, "You manage to help [M] to safety!")
- to_chat(M, "[user] pushes you free!")
- M.loc << "[M] forces free of the confines of your body!"
+ to_chat(usr,"You manage to help [M] to safety!")
+ to_chat(M,"[user] pushes you free!")
+ to_chat(OB.owner,"[M] forces free of the confines of your body!")
else
- to_chat(user, "[M] slips back down inside despite your efforts.")
- to_chat(M, " Even with [user]'s help, you slip back inside again.")
- M.loc << "Your body efficiently shoves [M] back where they belong."
+ to_chat(user,"[M] slips back down inside despite your efforts.")
+ to_chat(M," Even with [user]'s help, you slip back inside again.")
+ to_chat(OB.owner,"Your body efficiently shoves [M] back where they belong.")
+
if("Devour") //Eat the inside mob
+ if(user.absorbed || user.stat)
+ to_chat(user,"You can't do that in your state!")
+ return 1
+
if(!user.vore_selected)
- to_chat(user, "Pick a belly on yourself first!")
- return
+ to_chat(user,"Pick a belly on yourself first!")
+ return 1
- var/datum/belly/TB = user.vore_organs[user.vore_selected]
- to_chat(user, "You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!")
- to_chat(M, "[user] begins to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!")
- M.loc << "Someone inside you is eating someone else!"
+ var/obj/belly/TB = user.vore_selected
+ to_chat(user,"You begin to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!")
+ to_chat(M,"[user] begins to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!")
+ to_chat(OB.owner,"Someone inside you is eating someone else!")
- sleep(TB.nonhuman_prey_swallow_time)
- if((user in OB.internal_contents) && (M in OB.internal_contents))
- to_chat(user, "You manage to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!")
- to_chat(M, "[user] manages to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!")
- M.loc << "Someone inside you has eaten someone else!"
- M.loc = user
+ sleep(TB.nonhuman_prey_swallow_time) //Can't do after, in a stomach, weird things abound.
+ if((user in OB) && (M in OB)) //Make sure they're still here.
+ to_chat(user,"You manage to [lowertext(TB.vore_verb)] [M] into your [lowertext(TB.name)]!")
+ to_chat(M,"[user] manages to [lowertext(TB.vore_verb)] you into their [lowertext(TB.name)]!")
+ to_chat(OB.owner,"Someone inside you has eaten someone else!")
TB.nom_mob(M)
- OB.internal_contents -= M
else if(istype(tgt,/obj/item))
var/obj/item/T = tgt
- if(!(tgt in OB.internal_contents))
+ if(!(tgt in OB.contents))
//Doesn't exist anymore, update.
return TRUE
intent = alert("What do you want to do to that?","Query","Examine","Use Hand")
@@ -301,27 +354,29 @@
return
selected.release_all_contents()
- playsound(get_turf(user),'sound/vore/pred/escape.ogg',50,0,-5,0,ignore_walls = FALSE)
+ for(var/mob/M in get_hearers_in_view(5, get_turf(user)))
+ if(M.client && M.client.prefs.toggles & EATING_NOISES)
+ playsound(get_turf(user),'sound/vore/pred/escape.ogg',50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
to_chat(user.loc,"Everything is released from [user]!")
if("Move all")
if(user.stat)
to_chat(user, "You can't do that in your state!")
- return
+ return FALSE
- var/choice = input("Move all where?","Select Belly") in user.vore_organs + "Cancel - Don't Move"
+ var/obj/belly/choice = input("Move all where?","Select Belly") as null|anything in user.vore_organs
+ if(!choice)
+ return FALSE
- if(choice == "Cancel - Don't Move")
- return
- else
- var/datum/belly/B = user.vore_organs[choice]
- for(var/atom/movable/tgt in selected.internal_contents)
- to_chat(tgt, "You're squished from [user]'s [selected] to their [B]!")
- selected.transfer_contents(tgt, B, 1)
- playsound(get_turf(user),'sound/vore/pred/stomachmove.ogg',50,0,-5,0,ignore_walls = FALSE)
+ for(var/atom/movable/tgt in selected)
+ selected.transfer_contents(tgt, choice, 1)
+ for(var/mob/M in get_hearers_in_view(5, get_turf(user)))
+ if(M.client && M.client.prefs.toggles & EATING_NOISES)
+ playsound(get_turf(user),'sound/vore/pred/stomachmove.ogg',50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
+ to_chat(tgt,"You're squished from [user]'s [lowertext(selected)] to their [lowertext(choice.name)]!")
var/atom/movable/tgt = locate(href_list["insidepick"])
- if(!(tgt in selected.internal_contents)) //Old menu, needs updating because they aren't really there.
+ if(!(tgt in selected)) //Old menu, needs updating because they aren't really there.
return TRUE//Forces update
intent = "Examine"
intent = alert("Examine, Eject, Move? Examine if you want to leave this box.","Query","Examine","Eject","Move")
@@ -335,48 +390,54 @@
return FALSE
selected.release_specific_contents(tgt)
- playsound(get_turf(user),'sound/effects/splat.ogg',50,0,-5,0,ignore_walls = FALSE)
+ for(var/mob/M in get_hearers_in_view(5, get_turf(user)))
+ if(M.client && M.client.prefs.toggles & EATING_NOISES)
+ playsound(get_turf(user),'sound/vore/pred/escape.ogg',50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
user.loc << "[tgt] is released from [user]!"
if("Move")
if(user.stat)
- to_chat(user, "You can't do that in your state!")
- return FALSE
+ to_chat(user,"You can't do that in your state!")
+ return 0
- var/choice = input("Move [tgt] where?","Select Belly") in user.vore_organs + "Cancel - Don't Move"
+ var/obj/belly/choice = input("Move [tgt] where?","Select Belly") as null|anything in user.vore_organs
+ if(!choice || !(tgt in selected))
+ return 0
- if(choice == "Cancel - Don't Move")
- return
- else
- var/datum/belly/B = user.vore_organs[choice]
- if (!(tgt in selected.internal_contents))
- return FALSE
- to_chat(tgt, "You're moved from [user]'s [lowertext(selected.name)] to their [lowertext(B.name)]!")
- playsound(get_turf(user),'sound/vore/pred/stomachmove.ogg',50,0,-5,0,ignore_walls = FALSE)
- selected.transfer_contents(tgt, B)
+ to_chat(tgt,"You're squished from [user]'s [lowertext(selected.name)] to their [lowertext(choice.name)]!")
+ selected.transfer_contents(tgt, choice)
+ for(var/mob/M in get_hearers_in_view(5, get_turf(user)))
+ if(M.client && M.client.prefs.toggles & EATING_NOISES)
+ playsound(get_turf(user),'sound/vore/pred/stomachmove.ogg',50,0,-5,0,ignore_walls = FALSE,channel=CHANNEL_PRED)
if(href_list["newbelly"])
if(user.vore_organs.len >= BELLIES_MAX)
- return TRUE
+ return 0
var/new_name = html_encode(input(usr,"New belly's name:","New Belly") as text|null)
+ var/failure_msg
if(length(new_name) > BELLIES_NAME_MAX || length(new_name) < BELLIES_NAME_MIN)
- to_chat(usr, "Entered belly name is too long.")
- return FALSE
- if(new_name in user.vore_organs)
- to_chat(usr, "No duplicate belly names, please.")
- return FALSE
+ failure_msg = "Entered belly name length invalid (must be longer than [BELLIES_NAME_MIN], no more than than [BELLIES_NAME_MAX])."
+ // else if(whatever) //Next test here.
+ else
+ for(var/belly in user.vore_organs)
+ var/obj/belly/B = belly
+ if(lowertext(new_name) == lowertext(B.name))
+ failure_msg = "No duplicate belly names, please."
+ break
- var/datum/belly/NB = new(user)
+ if(failure_msg) //Something went wrong.
+ alert(user,failure_msg,"Error!")
+ return 0
+
+ var/obj/belly/NB = new(user)
NB.name = new_name
- NB.owner = user //might be the thing we all needed.
- user.vore_organs[new_name] = NB
selected = NB
if(href_list["bellypick"])
selected = locate(href_list["bellypick"])
- user.vore_selected = selected.name
+ user.vore_selected = selected
////
//Please keep these the same order they are on the panel UI for ease of coding
@@ -384,41 +445,40 @@
if(href_list["b_name"])
var/new_name = html_encode(input(usr,"Belly's new name:","New Name") as text|null)
+ var/failure_msg
if(length(new_name) > BELLIES_NAME_MAX || length(new_name) < BELLIES_NAME_MIN)
- to_chat(usr, "Entered belly name length invalid (must be longer than 2, shorter than 12).")
- return FALSE
- if(new_name in user.vore_organs)
- to_chat(usr, "No duplicate belly names, please.")
- return FALSE
+ failure_msg = "Entered belly name length invalid (must be longer than [BELLIES_NAME_MIN], no more than than [BELLIES_NAME_MAX])."
+ // else if(whatever) //Next test here.
+ else
+ for(var/belly in user.vore_organs)
+ var/obj/belly/B = belly
+ if(lowertext(new_name) == lowertext(B.name))
+ failure_msg = "No duplicate belly names, please."
+ break
+
+ if(failure_msg) //Something went wrong.
+ alert(user,failure_msg,"Error!")
+ return 0
- user.vore_organs[new_name] = selected
- user.vore_organs -= selected.name
selected.name = new_name
if(href_list["b_mode"])
var/list/menu_list = selected.digest_modes
- if(selected.digest_modes.len == 1) // Don't do anything
- return 1
- if(selected.digest_modes.len == 2) // Just toggle... there's probably a more elegant way to do this...
- var/index = selected.digest_modes.Find(selected.digest_mode)
- switch(index)
- if(1)
- selected.digest_mode = selected.digest_modes[2]
- if(2)
- selected.digest_mode = selected.digest_modes[1]
- else
- selected.digest_mode = input("Choose Mode (currently [selected.digest_mode])") in menu_list
+ var/new_mode = input("Choose Mode (currently [selected.digest_mode])") as null|anything in menu_list
+ if(!new_mode)
+ return 0
+ selected.digest_mode = new_mode
if(href_list["b_desc"])
- var/new_desc = html_encode(input(usr,"Belly Description (1024 char limit):","New Description",selected.inside_flavor) as message|null)
+ var/new_desc = html_encode(input(usr,"Belly Description ([BELLIES_DESC_MAX] char limit):","New Description",selected.desc) as message|null)
+
if(new_desc)
new_desc = readd_quotes(new_desc)
if(length(new_desc) > BELLIES_DESC_MAX)
- to_chat(usr, "Entered belly desc too long. [BELLIES_DESC_MAX] character limit.")
+ alert("Entered belly desc too long. [BELLIES_DESC_MAX] character limit.","Error")
return FALSE
-
- selected.inside_flavor = new_desc
+ selected.desc = new_desc
else //Returned null
return FALSE
@@ -429,12 +489,11 @@
"Struggle Message (outside)",
"Struggle Message (inside)",
"Examine Message (when full)",
- "Reset All To Default",
- "Cancel - No Changes"
+ "Reset All To Default"
)
alert(user,"Setting abusive or deceptive messages will result in a ban. Consider this your warning. Max 150 characters per message, max 10 messages per topic.","Really, don't.")
- var/choice = input(user,"Select a type to modify. Messages from each topic are pulled at random when needed.","Pick Type") in messages
+ var/choice = input(user,"Select a type to modify. Messages from each topic are pulled at random when needed.","Pick Type") as null|anything in messages
var/help = " Press enter twice to separate messages. '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name."
switch(choice)
@@ -459,7 +518,7 @@
selected.set_messages(new_message,"smi")
if("Examine Message (when full)")
- var/new_message = input(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging'). "+help,"Examine Message (when full)",selected.get_messages("em")) as message
+ var/new_message = input(user,"These are sent to people who examine you when this belly has contents. Write them in 3rd person ('Their %belly is bulging')."+help,"Examine Message (when full)",selected.get_messages("em")) as message
if(new_message)
selected.set_messages(new_message,"em")
@@ -471,40 +530,57 @@
selected.struggle_messages_outside = initial(selected.struggle_messages_outside)
selected.struggle_messages_inside = initial(selected.struggle_messages_inside)
- if("Cancel - No Changes")
- return
-
if(href_list["b_verb"])
var/new_verb = html_encode(input(usr,"New verb when eating (infinitive tense, e.g. nom or swallow):","New Verb") as text|null)
if(length(new_verb) > BELLIES_NAME_MAX || length(new_verb) < BELLIES_NAME_MIN)
- to_chat(usr, "Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).")
- return FALSE
+ alert("Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error")
+ return 0
selected.vore_verb = new_verb
- if(href_list["b_sound"])
- var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") in GLOB.pred_vore_sounds + "Cancel - No Changes"
+ if(href_list["b_release"])
+ var/choice = input(user,"Currently set to [selected.release_sound]","Select Sound") as null|anything in GLOB.release_sound
- if(choice == "Cancel")
+ if(!choice)
+ return
+
+ selected.release_sound = GLOB.release_sound[choice]
+
+ if(href_list["b_releasesoundtest"])
+ var/soundfile = GLOB.release_sound[selected.release_sound]
+ if(soundfile)
+ user << soundfile
+
+ if(href_list["b_sound"])
+ var/choice = input(user,"Currently set to [selected.vore_sound]","Select Sound") as null|anything in GLOB.pred_vore_sounds
+
+ if(!choice)
return
selected.vore_sound = GLOB.pred_vore_sounds[choice]
if(href_list["b_soundtest"])
- user << selected.vore_sound
-/*
- if(href_list["silenced"])
- if(selected.silenced == FALSE)
- selected.silenced = TRUE
- to_chat(usr,"The [selected.name] is now silenced, it will not play the internal loop to prey within it.")
- else if(selected.silenced == TRUE)
- selected.silenced = FALSE
- to_chat(usr,"The [selected.name] will play the internal loop to prey within it.")
-*/
+ var/soundfile = GLOB.pred_vore_sounds[selected.vore_sound]
+ if(soundfile)
+ user << soundfile
+
if(href_list["b_tastes"])
selected.can_taste = !selected.can_taste
+ if(href_list["b_bulge_size"])
+ var/new_bulge = input(user, "Choose the required size prey must be to show up on examine, ranging from 25% to 200% Set this to 0 for no text on examine.", "Set Belly Examine Size.") as num|null
+ if(new_bulge == null)
+ return
+ if(new_bulge == 0) //Disable.
+ selected.bulge_size = 0
+ to_chat(user,"Your stomach will not be seen on examine.")
+ else if (!IsInRange(new_bulge,25,200))
+ selected.bulge_size = 0.25 //Set it to the default.
+ to_chat(user,"Invalid size.")
+ else if(new_bulge)
+ selected.bulge_size = (new_bulge/100)
+
if(href_list["b_escapable"])
if(selected.escapable == FALSE) //Possibly escapable and special interactions.
selected.escapable = TRUE
@@ -515,7 +591,7 @@
show_interacts = FALSE //Force the hiding of the panel
else
to_chat(usr,"Something went wrong. Your stomach will now not have special interactions. Press the button enable them again and tell a dev.") //If they somehow have a varable that's not 0 or 1
- selected.escapable = FALSE
+ selected.escapable = TRUE
show_interacts = FALSE //Force the hiding of the panel
if(href_list["b_escapechance"])
@@ -537,68 +613,73 @@
var/choice = input("Where do you want your [selected.name] to lead if prey resists?","Select Belly") as null|anything in (user.vore_organs + "None - Remove" - selected.name)
if(!choice) //They cancelled, no changes
- return
+ return FALSE
else if(choice == "None - Remove")
selected.transferlocation = null
else
selected.transferlocation = user.vore_organs[choice]
+ if(href_list["b_absorbchance"])
+ var/absorb_chance_input = input(user, "Set belly absorb mode chance on resist (as %)", "Prey Absorb Chance") as num|null
+ if(!isnull(absorb_chance_input))
+ selected.absorbchance = sanitize_integer(absorb_chance_input, 0, 100, initial(selected.absorbchance))
+
if(href_list["b_digestchance"])
var/digest_chance_input = input(user, "Set belly digest mode chance on resist (as %)", "Prey Digest Chance") as num|null
if(!isnull(digest_chance_input))
selected.digestchance = sanitize_integer(digest_chance_input, 0, 100, initial(selected.digestchance))
+ if(href_list["b_silent"])
+ selected.silent = !selected.silent
+
if(href_list["b_del"])
- var/dest_for = FALSE //Check to see if it's the destination of another vore organ.
- for(var/I in user.vore_organs)
- var/datum/belly/B = user.vore_organs[I]
+ var/alert = alert("Are you sure you want to delete your [lowertext(selected.name)]?","Confirmation","Delete","Cancel")
+ if(!alert == "Delete")
+ return FALSE
+
+ var/failure_msg = ""
+
+ var/dest_for //Check to see if it's the destination of another vore organ.
+ for(var/belly in user.vore_organs)
+ var/obj/belly/B = belly
if(B.transferlocation == selected)
dest_for = B.name
+ failure_msg += "This is the destiantion for at least '[dest_for]' belly transfers. Remove it as the destination from any bellies before deleting it. "
break
- if(dest_for)
- alert("This is the destiantion for at least '[dest_for]' belly transfers. Remove it as the destination from any bellies before deleting it.","Error")
- return TRUE
- else if(selected.internal_contents.len)
- alert("Can't delete bellies with contents!","Error")
- return TRUE
- if(selected.internal_contents.len)
- to_chat(usr, "Can't delete bellies with contents!")
- return
- else if(selected.immutable)
- to_chat(usr, "This belly is marked as undeletable.")
- return
- else if(user.vore_organs.len == 1)
- to_chat(usr, "You must have at least one belly.")
- return
- else
- var/alert = alert("Are you sure you want to delete [selected]?","Confirmation","Delete","Cancel")
- if(alert == "Delete" && !selected.internal_contents.len)
- user.vore_organs -= selected.name
- user.vore_organs.Remove(selected)
- selected = user.vore_organs[1]
- user.vore_selected = user.vore_organs[1]
- to_chat(usr,"Note: If you had this organ selected as a transfer location, please remove the transfer location by selecting Cancel - None - Remove on this stomach.")
+ if(selected.contents.len)
+ failure_msg += "You cannot delete bellies with contents! " //These end with spaces, to be nice looking. Make sure you do the same.
+ if(selected.immutable)
+ failure_msg += "This belly is marked as undeletable. "
+ if(user.vore_organs.len == 1)
+ failure_msg += "You must have at least one belly. "
+
+ if(failure_msg)
+ alert(user,failure_msg,"Error!")
+ return FALSE
+
+ qdel(selected)
+ selected = user.vore_organs[1]
+ user.vore_selected = user.vore_organs[1]
if(href_list["saveprefs"])
- if(user.save_vore_prefs())
- to_chat(user, "Belly Preferences saved!")
+ if(!user.save_vore_prefs())
+ to_chat(user, "Belly Preferences not saved!")
else
- to_chat(user, "ERROR: Belly Preferences were not saved!")
+ to_chat(user, "Belly Preferences were saved!")
log_admin("Could not save vore prefs on USER: [user].")
if(href_list["setflavor"])
var/new_flavor = html_encode(input(usr,"What your character tastes like (40ch limit). This text will be printed to the pred after 'X tastes of...' so just put something like 'strawberries and cream':","Character Flavor",user.vore_taste) as text|null)
+ if(!new_flavor)
+ return 0
- if(new_flavor)
- new_flavor = readd_quotes(new_flavor)
- if(length(new_flavor) > FLAVOR_MAX)
- alert("Entered flavor/taste text too long. [FLAVOR_MAX] character limit.","Error")
- return FALSE
- user.vore_taste = new_flavor
- else //Returned null
- return FALSE
+ new_flavor = readd_quotes(new_flavor)
+ if(length(new_flavor) > FLAVOR_MAX)
+ alert("Entered flavor/taste text too long. [FLAVOR_MAX] character limit.","Error!")
+ return 0
+ user.vore_taste = new_flavor
if(href_list["toggledg"])
var/choice = alert(user, "This button is for those who don't like being digested. It can make you undigestable to all mobs. Digesting you is currently: [user.digestable ? "Allowed" : "Prevented"]", "", "Allow Digestion", "Cancel", "Prevent Digestion")
@@ -626,5 +707,15 @@
if(user.client.prefs_vr)
user.client.prefs_vr.devourable = user.devourable
+ if(href_list["togglenoisy"])
+ var/choice = alert(user, "Toggle audible hunger noises. Currently: [user.noisy ? "Enabled" : "Disabled"]", "", "Enable audible hunger", "Cancel", "Disable audible hunger")
+ switch(choice)
+ if("Cancel")
+ return 0
+ if("Enable audible hunger")
+ user.noisy = TRUE
+ if("Disable audible hunger")
+ user.noisy = FALSE
+
//Refresh when interacted with, returning 1 makes vore_look.Topic update
- return TRUE
+ return 1
\ No newline at end of file
diff --git a/code/modules/vore/hook-defs_vr.dm b/modular_citadel/code/modules/vore/hook-defs_vr.dm
similarity index 100%
rename from code/modules/vore/hook-defs_vr.dm
rename to modular_citadel/code/modules/vore/hook-defs_vr.dm
diff --git a/modular_citadel/code/modules/vore/persistence.dm b/modular_citadel/code/modules/vore/persistence.dm
new file mode 100644
index 0000000000..078a3f48ee
--- /dev/null
+++ b/modular_citadel/code/modules/vore/persistence.dm
@@ -0,0 +1,90 @@
+/*
+* Returns a byond list that can be passed to the "deserialize" proc
+* to bring a new instance of this atom to its original state
+*
+* If we want to store this info, we can pass it to `json_encode` or some other
+* interface that suits our fancy, to make it into an easily-handled string
+*/
+/datum/proc/serialize()
+ var/data = list("type" = "[type]")
+ return data
+
+/*
+* This is given the byond list from above, to bring this atom to the state
+* described in the list.
+* This will be called after `New` but before `initialize`, so linking and stuff
+* would probably be handled in `initialize`
+*
+* Also, this should only be called by `list_to_object` in persistence.dm - at least
+* with current plans - that way it can actually initialize the type from the list
+*/
+/datum/proc/deserialize(var/list/data)
+ return
+
+/atom
+ // This var isn't actually used for anything, but is present so that
+ // DM's map reader doesn't forfeit on reading a JSON-serialized map
+ var/map_json_data
+
+// This is so specific atoms can override these, and ignore certain ones
+/atom/proc/vars_to_save()
+ return list("color","dir","icon","icon_state","name","pixel_x","pixel_y")
+
+/atom/proc/map_important_vars()
+ // A list of important things to save in the map editor
+ return list("color","dir","icon","icon_state","layer","name","pixel_x","pixel_y")
+
+/area/map_important_vars()
+ // Keep the area default icons, to keep things nice and legible
+ return list("name")
+
+// No need to save any state of an area by default
+/area/vars_to_save()
+ return list("name")
+
+/atom/serialize()
+ var/list/data = ..()
+ for(var/thing in vars_to_save())
+ if(vars[thing] != initial(vars[thing]))
+ data[thing] = vars[thing]
+ return data
+
+
+/atom/deserialize(var/list/data)
+ for(var/thing in vars_to_save())
+ if(thing in data)
+ vars[thing] = data[thing]
+ ..()
+
+
+/*
+Whoops, forgot to put documentation here.
+What this does, is take a JSON string produced by running
+BYOND's native `json_encode` on a list from `serialize` above, and
+turns that string into a new instance of that object.
+
+You can also easily get an instance of this string by calling "Serialize Marked Datum"
+in the "Debug" tab.
+
+If you're clever, you can do neat things with SDQL and this, though be careful -
+some objects, like humans, are dependent that certain extra things are defined
+in their list
+*/
+/proc/object_to_json(var/atom/movable/thing)
+ return json_encode(thing.serialize())
+
+/proc/json_to_object(var/json_data, var/loc)
+ return list_to_object(json_decode(json_data), loc)
+
+/proc/list_to_object(var/list/data, var/loc)
+ if(!islist(data))
+ throw EXCEPTION("You didn't give me a list, bucko")
+ if(!("type" in data))
+ throw EXCEPTION("No 'type' field in the data")
+ var/path = text2path(data["type"])
+ if(!path)
+ throw EXCEPTION("Path not found: [path]")
+
+ var/atom/movable/thing = new path(loc)
+ thing.deserialize(data)
+ return thing
\ No newline at end of file
diff --git a/code/modules/vore/resizing/grav_pull_vr.dm b/modular_citadel/code/modules/vore/resizing/grav_pull_vr.dm
similarity index 100%
rename from code/modules/vore/resizing/grav_pull_vr.dm
rename to modular_citadel/code/modules/vore/resizing/grav_pull_vr.dm
diff --git a/code/modules/vore/resizing/holder_micro_vr.dm b/modular_citadel/code/modules/vore/resizing/holder_micro_vr.dm
similarity index 100%
rename from code/modules/vore/resizing/holder_micro_vr.dm
rename to modular_citadel/code/modules/vore/resizing/holder_micro_vr.dm
diff --git a/code/modules/vore/resizing/resize_vr.dm b/modular_citadel/code/modules/vore/resizing/resize_vr.dm
similarity index 100%
rename from code/modules/vore/resizing/resize_vr.dm
rename to modular_citadel/code/modules/vore/resizing/resize_vr.dm
diff --git a/code/modules/vore/resizing/sizechemicals.dm b/modular_citadel/code/modules/vore/resizing/sizechemicals.dm
similarity index 98%
rename from code/modules/vore/resizing/sizechemicals.dm
rename to modular_citadel/code/modules/vore/resizing/sizechemicals.dm
index 78b4bd71ca..1164bf65d6 100644
--- a/code/modules/vore/resizing/sizechemicals.dm
+++ b/modular_citadel/code/modules/vore/resizing/sizechemicals.dm
@@ -110,6 +110,6 @@
for(var/atom/movable/A in B.internal_contents)
if(prob(55))
playsound(M, 'sound/effects/splat.ogg', 50, 1)
- B.release_specific_contents(A)
+ B.release_vore_contents(A)
..()
. = 1
\ No newline at end of file
diff --git a/code/modules/vore/resizing/sizegun_vr.dm b/modular_citadel/code/modules/vore/resizing/sizegun_vr.dm
similarity index 100%
rename from code/modules/vore/resizing/sizegun_vr.dm
rename to modular_citadel/code/modules/vore/resizing/sizegun_vr.dm
diff --git a/code/modules/vore/trycatch_vr.dm b/modular_citadel/code/modules/vore/trycatch_vr.dm
similarity index 100%
rename from code/modules/vore/trycatch_vr.dm
rename to modular_citadel/code/modules/vore/trycatch_vr.dm
diff --git a/code/citadel/icons/misc.dmi b/modular_citadel/icons/misc/misc.dmi
similarity index 100%
rename from code/citadel/icons/misc.dmi
rename to modular_citadel/icons/misc/misc.dmi
diff --git a/code/citadel/icons/robot_transformations.dmi b/modular_citadel/icons/mob/legacy robo transforms.dmi
similarity index 100%
rename from code/citadel/icons/robot_transformations.dmi
rename to modular_citadel/icons/mob/legacy robo transforms.dmi
diff --git a/code/citadel/icons/mobs.dmi b/modular_citadel/icons/mob/mobs.dmi
similarity index 100%
rename from code/citadel/icons/mobs.dmi
rename to modular_citadel/icons/mob/mobs.dmi
diff --git a/code/citadel/icons/drinks.dmi b/modular_citadel/icons/obj/drinks.dmi
similarity index 100%
rename from code/citadel/icons/drinks.dmi
rename to modular_citadel/icons/obj/drinks.dmi
diff --git a/code/citadel/icons/breasts.dmi b/modular_citadel/icons/obj/genitals/breasts.dmi
similarity index 100%
rename from code/citadel/icons/breasts.dmi
rename to modular_citadel/icons/obj/genitals/breasts.dmi
diff --git a/code/citadel/icons/breasts_onmob.dmi b/modular_citadel/icons/obj/genitals/breasts_onmob.dmi
similarity index 100%
rename from code/citadel/icons/breasts_onmob.dmi
rename to modular_citadel/icons/obj/genitals/breasts_onmob.dmi
diff --git a/code/citadel/icons/dildo.dmi b/modular_citadel/icons/obj/genitals/dildo.dmi
similarity index 100%
rename from code/citadel/icons/dildo.dmi
rename to modular_citadel/icons/obj/genitals/dildo.dmi
diff --git a/code/citadel/icons/effects.dmi b/modular_citadel/icons/obj/genitals/effects.dmi
similarity index 100%
rename from code/citadel/icons/effects.dmi
rename to modular_citadel/icons/obj/genitals/effects.dmi
diff --git a/code/citadel/icons/hud.dmi b/modular_citadel/icons/obj/genitals/hud.dmi
similarity index 100%
rename from code/citadel/icons/hud.dmi
rename to modular_citadel/icons/obj/genitals/hud.dmi
diff --git a/code/citadel/icons/onahole.dmi b/modular_citadel/icons/obj/genitals/onahole.dmi
similarity index 100%
rename from code/citadel/icons/onahole.dmi
rename to modular_citadel/icons/obj/genitals/onahole.dmi
diff --git a/code/citadel/icons/ovipositor.dmi b/modular_citadel/icons/obj/genitals/ovipositor.dmi
similarity index 100%
rename from code/citadel/icons/ovipositor.dmi
rename to modular_citadel/icons/obj/genitals/ovipositor.dmi
diff --git a/code/citadel/icons/penis.dmi b/modular_citadel/icons/obj/genitals/penis.dmi
similarity index 100%
rename from code/citadel/icons/penis.dmi
rename to modular_citadel/icons/obj/genitals/penis.dmi
diff --git a/code/citadel/icons/penis_onmob.dmi b/modular_citadel/icons/obj/genitals/penis_onmob.dmi
similarity index 100%
rename from code/citadel/icons/penis_onmob.dmi
rename to modular_citadel/icons/obj/genitals/penis_onmob.dmi
diff --git a/code/citadel/icons/taur_penis_onmob.dmi b/modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi
similarity index 100%
rename from code/citadel/icons/taur_penis_onmob.dmi
rename to modular_citadel/icons/obj/genitals/taur_penis_onmob.dmi
diff --git a/code/citadel/icons/vagina.dmi b/modular_citadel/icons/obj/genitals/vagina.dmi
similarity index 100%
rename from code/citadel/icons/vagina.dmi
rename to modular_citadel/icons/obj/genitals/vagina.dmi
diff --git a/code/citadel/icons/vagina_onmob.dmi b/modular_citadel/icons/obj/genitals/vagina_onmob.dmi
similarity index 100%
rename from code/citadel/icons/vagina_onmob.dmi
rename to modular_citadel/icons/obj/genitals/vagina_onmob.dmi
diff --git a/modular_citadel/icons/obj/hypospraymkii.dmi b/modular_citadel/icons/obj/hypospraymkii.dmi
new file mode 100644
index 0000000000..f5e89227c7
Binary files /dev/null and b/modular_citadel/icons/obj/hypospraymkii.dmi differ
diff --git a/code/citadel/icons/objects.dmi b/modular_citadel/icons/obj/objects.dmi
similarity index 100%
rename from code/citadel/icons/objects.dmi
rename to modular_citadel/icons/obj/objects.dmi
diff --git a/code/citadel/icons/structures.dmi b/modular_citadel/icons/obj/structures.dmi
similarity index 100%
rename from code/citadel/icons/structures.dmi
rename to modular_citadel/icons/obj/structures.dmi
diff --git a/modular_citadel/icons/obj/vial.dmi b/modular_citadel/icons/obj/vial.dmi
new file mode 100644
index 0000000000..694cc1741b
Binary files /dev/null and b/modular_citadel/icons/obj/vial.dmi differ
diff --git a/sound/items/hypospray.ogg b/sound/items/hypospray.ogg
new file mode 100644
index 0000000000..b70d3fd5b5
Binary files /dev/null and b/sound/items/hypospray.ogg differ
diff --git a/sound/items/hypospray2.ogg b/sound/items/hypospray2.ogg
new file mode 100644
index 0000000000..14835e9bb6
Binary files /dev/null and b/sound/items/hypospray2.ogg differ
diff --git a/sound/items/hypospray_long.ogg b/sound/items/hypospray_long.ogg
new file mode 100644
index 0000000000..d7da6c839f
Binary files /dev/null and b/sound/items/hypospray_long.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 5ff54b3ea5..b12d784030 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -92,6 +92,7 @@
#include "code\__DEFINES\vv.dm"
#include "code\__DEFINES\wall_dents.dm"
#include "code\__DEFINES\wires.dm"
+#include "code\__HELPERS\_cit_helpers.dm"
#include "code\__HELPERS\_lists.dm"
#include "code\__HELPERS\_logging.dm"
#include "code\__HELPERS\_string_lists.dm"
@@ -182,42 +183,6 @@
#include "code\_onclick\hud\robot.dm"
#include "code\_onclick\hud\screen_objects.dm"
#include "code\_onclick\hud\swarmer.dm"
-#include "code\citadel\_cit_helpers.dm"
-#include "code\citadel\cit_areas.dm"
-#include "code\citadel\cit_arousal.dm"
-#include "code\citadel\cit_clothes.dm"
-#include "code\citadel\cit_crewobjectives.dm"
-#include "code\citadel\cit_displaycases.dm"
-#include "code\citadel\cit_emotes.dm"
-#include "code\citadel\cit_guns.dm"
-#include "code\citadel\cit_kegs.dm"
-#include "code\citadel\cit_miscreants.dm"
-#include "code\citadel\cit_reagents.dm"
-#include "code\citadel\cit_spawners.dm"
-#include "code\citadel\cit_uniforms.dm"
-#include "code\citadel\cit_vendors.dm"
-#include "code\citadel\dogborgstuff.dm"
-#include "code\citadel\plasmacases.dm"
-#include "code\citadel\crew_objectives\cit_crewobjectives_cargo.dm"
-#include "code\citadel\crew_objectives\cit_crewobjectives_civilian.dm"
-#include "code\citadel\crew_objectives\cit_crewobjectives_command.dm"
-#include "code\citadel\crew_objectives\cit_crewobjectives_engineering.dm"
-#include "code\citadel\crew_objectives\cit_crewobjectives_medical.dm"
-#include "code\citadel\crew_objectives\cit_crewobjectives_science.dm"
-#include "code\citadel\crew_objectives\cit_crewobjectives_security.dm"
-#include "code\citadel\custom_loadout\custom_items.dm"
-#include "code\citadel\custom_loadout\load_to_mob.dm"
-#include "code\citadel\custom_loadout\read_from_file.dm"
-#include "code\citadel\organs\breasts.dm"
-#include "code\citadel\organs\eggsack.dm"
-#include "code\citadel\organs\genitals.dm"
-#include "code\citadel\organs\genitals_sprite_accessories.dm"
-#include "code\citadel\organs\ovipositor.dm"
-#include "code\citadel\organs\penis.dm"
-#include "code\citadel\organs\testicles.dm"
-#include "code\citadel\organs\vagina.dm"
-#include "code\citadel\organs\womb.dm"
-#include "code\citadel\toys\dildos.dm"
#include "code\controllers\admin.dm"
#include "code\controllers\configuration_citadel.dm"
#include "code\controllers\controller.dm"
@@ -282,6 +247,7 @@
#include "code\controllers\subsystem\timer.dm"
#include "code\controllers\subsystem\title.dm"
#include "code\controllers\subsystem\traumas.dm"
+#include "code\controllers\subsystem\vore.dm"
#include "code\controllers\subsystem\vote.dm"
#include "code\controllers\subsystem\weather.dm"
#include "code\controllers\subsystem\processing\circuit.dm"
@@ -473,7 +439,6 @@
#include "code\datums\wires\robot.dm"
#include "code\datums\wires\suit_storage_unit.dm"
#include "code\datums\wires\syndicatebomb.dm"
-#include "code\datums\wires\tesla_coil.dm"
#include "code\datums\wires\vending.dm"
#include "code\datums\wires\wires.dm"
#include "code\game\alternate_appearance.dm"
@@ -805,6 +770,7 @@
#include "code\game\objects\items\devices\aicard.dm"
#include "code\game\objects\items\devices\camera_bug.dm"
#include "code\game\objects\items\devices\chameleonproj.dm"
+#include "code\game\objects\items\devices\dogborg_sleeper.dm"
#include "code\game\objects\items\devices\doorCharge.dm"
#include "code\game\objects\items\devices\electroadaptive_pseudocircuit.dm"
#include "code\game\objects\items\devices\flashlight.dm"
@@ -1093,6 +1059,7 @@
#include "code\modules\admin\verbs\pray.dm"
#include "code\modules\admin\verbs\randomverbs.dm"
#include "code\modules\admin\verbs\reestablish_db_connection.dm"
+#include "code\modules\admin\verbs\spawnobjasmob.dm"
#include "code\modules\admin\verbs\tripAI.dm"
#include "code\modules\admin\verbs\SDQL2\SDQL_2.dm"
#include "code\modules\admin\verbs\SDQL2\SDQL_2_parser.dm"
@@ -2585,15 +2552,6 @@
#include "code\modules\vehicles\speedbike.dm"
#include "code\modules\vehicles\vehicle_actions.dm"
#include "code\modules\vehicles\vehicle_key.dm"
-#include "code\modules\vore\hook-defs_vr.dm"
-#include "code\modules\vore\trycatch_vr.dm"
-#include "code\modules\vore\eating\belly_vr.dm"
-#include "code\modules\vore\eating\bellymodes_vr.dm"
-#include "code\modules\vore\eating\living_vr.dm"
-#include "code\modules\vore\eating\simple_animal_vr.dm"
-#include "code\modules\vore\eating\vore_vr.dm"
-#include "code\modules\vore\eating\voreitems.dm"
-#include "code\modules\vore\eating\vorepanel_vr.dm"
#include "code\modules\VR\vr_human.dm"
#include "code\modules\VR\vr_sleeper.dm"
#include "code\modules\zombie\items.dm"
@@ -2621,15 +2579,18 @@
#include "modular_citadel\code\datums\mutations\hulk.dm"
#include "modular_citadel\code\datums\wires\airlock.dm"
#include "modular_citadel\code\datums\wires\autoylathe.dm"
+#include "modular_citadel\code\game\area\cit_areas.dm"
#include "modular_citadel\code\game\gamemodes\miniantags\bot_swarm\swarmer_event.dm"
#include "modular_citadel\code\game\gamemodes\revolution\revolution.dm"
#include "modular_citadel\code\game\machinery\cryopod.dm"
+#include "modular_citadel\code\game\machinery\displaycases.dm"
#include "modular_citadel\code\game\machinery\Sleeper.dm"
#include "modular_citadel\code\game\machinery\toylathe.dm"
#include "modular_citadel\code\game\machinery\vending.dm"
#include "modular_citadel\code\game\machinery\computer\card.dm"
#include "modular_citadel\code\game\objects\ids.dm"
#include "modular_citadel\code\game\objects\tools.dm"
+#include "modular_citadel\code\game\objects\effects\spawner\spawners.dm"
#include "modular_citadel\code\game\objects\effects\temporary_visuals\projectiles\impact.dm"
#include "modular_citadel\code\game\objects\effects\temporary_visuals\projectiles\muzzle.dm"
#include "modular_citadel\code\game\objects\effects\temporary_visuals\projectiles\tracer.dm"
@@ -2652,12 +2613,33 @@
#include "modular_citadel\code\modules\admin\holder2.dm"
#include "modular_citadel\code\modules\admin\secrets.dm"
#include "modular_citadel\code\modules\admin\topic.dm"
+#include "modular_citadel\code\modules\antagonists\cit_crewobjectives.dm"
+#include "modular_citadel\code\modules\antagonists\cit_miscreants.dm"
+#include "modular_citadel\code\modules\antagonists\crew_objectives\cit_crewobjectives_cargo.dm"
+#include "modular_citadel\code\modules\antagonists\crew_objectives\cit_crewobjectives_civilian.dm"
+#include "modular_citadel\code\modules\antagonists\crew_objectives\cit_crewobjectives_command.dm"
+#include "modular_citadel\code\modules\antagonists\crew_objectives\cit_crewobjectives_engineering.dm"
+#include "modular_citadel\code\modules\antagonists\crew_objectives\cit_crewobjectives_medical.dm"
+#include "modular_citadel\code\modules\antagonists\crew_objectives\cit_crewobjectives_science.dm"
+#include "modular_citadel\code\modules\antagonists\crew_objectives\cit_crewobjectives_security.dm"
+#include "modular_citadel\code\modules\arousal\arousal.dm"
+#include "modular_citadel\code\modules\arousal\organs\breasts.dm"
+#include "modular_citadel\code\modules\arousal\organs\eggsack.dm"
+#include "modular_citadel\code\modules\arousal\organs\genitals.dm"
+#include "modular_citadel\code\modules\arousal\organs\genitals_sprite_accessories.dm"
+#include "modular_citadel\code\modules\arousal\organs\ovipositor.dm"
+#include "modular_citadel\code\modules\arousal\organs\penis.dm"
+#include "modular_citadel\code\modules\arousal\organs\testicles.dm"
+#include "modular_citadel\code\modules\arousal\organs\vagina.dm"
+#include "modular_citadel\code\modules\arousal\organs\womb.dm"
+#include "modular_citadel\code\modules\arousal\toys\dildos.dm"
#include "modular_citadel\code\modules\cargo\console.dm"
#include "modular_citadel\code\modules\cargo\packs.dm"
#include "modular_citadel\code\modules\client\client_defines.dm"
#include "modular_citadel\code\modules\client\client_procs.dm"
#include "modular_citadel\code\modules\client\preferences.dm"
#include "modular_citadel\code\modules\client\preferences_savefile.dm"
+#include "modular_citadel\code\modules\client\preferences_toggles.dm"
#include "modular_citadel\code\modules\client\loadout\__donator.dm"
#include "modular_citadel\code\modules\client\loadout\_medical.dm"
#include "modular_citadel\code\modules\client\loadout\_security.dm"
@@ -2674,12 +2656,15 @@
#include "modular_citadel\code\modules\client\loadout\suit.dm"
#include "modular_citadel\code\modules\client\loadout\uniform.dm"
#include "modular_citadel\code\modules\client\verbs\who.dm"
-#include "modular_citadel\code\modules\clothing\under.dm"
#include "modular_citadel\code\modules\clothing\spacesuits\flightsuit.dm"
+#include "modular_citadel\code\modules\clothing\suits\suits.dm"
#include "modular_citadel\code\modules\clothing\under\polychromic_clothes.dm"
-#include "modular_citadel\code\modules\clothing\under\syndicate.dm"
#include "modular_citadel\code\modules\clothing\under\turtlenecks.dm"
+#include "modular_citadel\code\modules\clothing\under\under.dm"
#include "modular_citadel\code\modules\crafting\recipes.dm"
+#include "modular_citadel\code\modules\custom_loadout\custom_items.dm"
+#include "modular_citadel\code\modules\custom_loadout\load_to_mob.dm"
+#include "modular_citadel\code\modules\custom_loadout\read_from_file.dm"
#include "modular_citadel\code\modules\events\blob.dm"
#include "modular_citadel\code\modules\jobs\jobs.dm"
#include "modular_citadel\code\modules\jobs\job_types\captain.dm"
@@ -2694,9 +2679,11 @@
#include "modular_citadel\code\modules\mentor\mentorpm.dm"
#include "modular_citadel\code\modules\mentor\mentorsay.dm"
#include "modular_citadel\code\modules\mining\mine_items.dm"
+#include "modular_citadel\code\modules\mob\cit_emotes.dm"
#include "modular_citadel\code\modules\mob\living\carbon\human\human_defense.dm"
#include "modular_citadel\code\modules\mob\living\carbon\human\life.dm"
#include "modular_citadel\code\modules\mob\living\carbon\human\species_types\jellypeople.dm"
+#include "modular_citadel\code\modules\mob\living\silicon\robot\dogborg_equipment.dm"
#include "modular_citadel\code\modules\mob\living\silicon\robot\robot.dm"
#include "modular_citadel\code\modules\mob\living\silicon\robot\robot_modules.dm"
#include "modular_citadel\code\modules\mob\living\simple_animal\banana_spider.dm"
@@ -2704,14 +2691,35 @@
#include "modular_citadel\code\modules\power\lighting.dm"
#include "modular_citadel\code\modules\projectiles\guns\pumpenergy.dm"
#include "modular_citadel\code\modules\projectiles\guns\toys.dm"
+#include "modular_citadel\code\modules\projectiles\guns\ballistic\flechette.dm"
+#include "modular_citadel\code\modules\projectiles\guns\ballistic\handguns.dm"
+#include "modular_citadel\code\modules\projectiles\guns\ballistic\magweapon.dm"
#include "modular_citadel\code\modules\projectiles\guns\ballistic\revolver.dm"
+#include "modular_citadel\code\modules\projectiles\guns\ballistic\rifles.dm"
+#include "modular_citadel\code\modules\projectiles\guns\ballistic\spinfusor.dm"
#include "modular_citadel\code\modules\projectiles\guns\energy\energy_gun.dm"
#include "modular_citadel\code\modules\projectiles\guns\energy\laser.dm"
#include "modular_citadel\code\modules\reagents\chemistry\reagents\other_reagents.dm"
+#include "modular_citadel\code\modules\reagents\reagent container\cit_kegs.dm"
+#include "modular_citadel\code\modules\reagents\reagent container\hypospraymkii.dm"
+#include "modular_citadel\code\modules\reagents\reagent container\hypovial.dm"
+#include "modular_citadel\code\modules\reagents\reagents\cit_reagents.dm"
#include "modular_citadel\code\modules\research\designs\autoylathe_designs.dm"
#include "modular_citadel\code\modules\research\designs\machine_designs.dm"
#include "modular_citadel\code\modules\research\techweb\_techweb.dm"
#include "modular_citadel\code\modules\research\techweb\all_nodes.dm"
#include "modular_citadel\code\modules\uplink\uplink_items.dm"
+#include "modular_citadel\code\modules\vore\hook-defs_vr.dm"
+#include "modular_citadel\code\modules\vore\persistence.dm"
+#include "modular_citadel\code\modules\vore\trycatch_vr.dm"
+#include "modular_citadel\code\modules\vore\eating\belly_dat_vr.dm"
+#include "modular_citadel\code\modules\vore\eating\belly_obj_vr.dm"
+#include "modular_citadel\code\modules\vore\eating\bellymodes_vr.dm"
+#include "modular_citadel\code\modules\vore\eating\digest_act_vr.dm"
+#include "modular_citadel\code\modules\vore\eating\living_vr.dm"
+#include "modular_citadel\code\modules\vore\eating\simple_animal_vr.dm"
+#include "modular_citadel\code\modules\vore\eating\vore_vr.dm"
+#include "modular_citadel\code\modules\vore\eating\voreitems.dm"
+#include "modular_citadel\code\modules\vore\eating\vorepanel_vr.dm"
#include "modular_citadel\interface\skin.dmf"
// END_INCLUDE
diff --git a/tgui/assets/tgui.css b/tgui/assets/tgui.css
index ffe61666b9..256b53c106 100644
--- a/tgui/assets/tgui.css
+++ b/tgui/assets/tgui.css
@@ -1 +1 @@
-@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input::-webkit-input-placeholder{color:#999}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input::-webkit-input-placeholder{color:#999}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input::-webkit-input-placeholder{color:#999}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"}
\ No newline at end of file
+@charset "utf-8";body,html{box-sizing:border-box;height:100%;margin:0}html{overflow:hidden;cursor:default}body{overflow:auto;font-family:Verdana,Geneva,sans-serif;font-size:12px;color:#fff;background-color:#2a2a2a;background-image:linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}*,:after,:before{box-sizing:inherit}h1,h2,h3,h4{display:inline-block;margin:0;padding:6px 0}h1{font-size:18px}h2{font-size:16px}h3{font-size:14px}h4{font-size:12px}body.clockwork{background:linear-gradient(180deg,#b18b25 0,#5f380e);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ffb18b25",endColorstr="#ff5f380e",GradientType=0)}body.clockwork .normal{color:#b18b25}body.clockwork .good{color:#cfba47}body.clockwork .average{color:#896b19}body.clockwork .bad{color:#5f380e}body.clockwork .highlight{color:#b18b25}body.clockwork main{display:block;margin-top:32px;padding:2px 6px 0}body.clockwork hr{height:2px;background-color:#b18b25;border:none}body.clockwork .hidden{display:none}body.clockwork .bar .barText,body.clockwork span.button{color:#b18b25;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.clockwork .bold{font-weight:700}body.clockwork .italic{font-style:italic}body.clockwork [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.clockwork div[data-tooltip],body.clockwork span[data-tooltip]{position:relative}body.clockwork div[data-tooltip]:after,body.clockwork span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #170800;background-color:#2d1400}body.clockwork div[data-tooltip]:hover:after,body.clockwork span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.clockwork div[data-tooltip].tooltip-top:after,body.clockwork span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-top:hover:after,body.clockwork span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:after,body.clockwork span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.clockwork div[data-tooltip].tooltip-bottom:hover:after,body.clockwork span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.clockwork div[data-tooltip].tooltip-left:after,body.clockwork span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-left:hover:after,body.clockwork span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:after,body.clockwork span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.clockwork div[data-tooltip].tooltip-right:hover:after,body.clockwork span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.clockwork .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #170800;background:#2d1400}body.clockwork .bar .barText{position:absolute;top:0;right:3px}body.clockwork .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#b18b25}body.clockwork .bar .barFill.good{background-color:#cfba47}body.clockwork .bar .barFill.average{background-color:#896b19}body.clockwork .bar .barFill.bad{background-color:#5f380e}body.clockwork span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #170800}body.clockwork span.button .fa{padding-right:2px}body.clockwork span.button.normal{transition:background-color .5s;background-color:#5f380e}body.clockwork span.button.normal.active:focus,body.clockwork span.button.normal.active:hover{transition:background-color .25s;background-color:#704211;outline:0}body.clockwork span.button.disabled{transition:background-color .5s;background-color:#2d1400}body.clockwork span.button.disabled.active:focus,body.clockwork span.button.disabled.active:hover{transition:background-color .25s;background-color:#441e00;outline:0}body.clockwork span.button.selected{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.selected.active:focus,body.clockwork span.button.selected.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.toggle{transition:background-color .5s;background-color:#cfba47}body.clockwork span.button.toggle.active:focus,body.clockwork span.button.toggle.active:hover{transition:background-color .25s;background-color:#d1bd50;outline:0}body.clockwork span.button.caution{transition:background-color .5s;background-color:#be6209}body.clockwork span.button.caution.active:focus,body.clockwork span.button.caution.active:hover{transition:background-color .25s;background-color:#cd6a0a;outline:0}body.clockwork span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.clockwork span.button.danger.active:focus,body.clockwork span.button.danger.active:hover{transition:background-color .25s;background-color:#abaf00;outline:0}body.clockwork span.button.gridable{width:125px;margin:2px 0}body.clockwork span.button.gridable.center{text-align:center;width:75px}body.clockwork span.button+span:not(.button),body.clockwork span:not(.button)+span.button{margin-left:5px}body.clockwork div.display{width:100%;padding:4px;margin:6px 0;background-color:#2d1400;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#e62d1400,endColorStr=#e62d1400);background-color:rgba(45,20,0,.9);box-shadow:inset 0 0 5px rgba(0,0,0,.3)}body.clockwork div.display.tabular{padding:0;margin:0}body.clockwork div.display header,body.clockwork div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#cfba47;border-bottom:2px solid #b18b25}body.clockwork div.display header .buttonRight,body.clockwork div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.clockwork div.display article,body.clockwork div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.clockwork input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#b18b25;background-color:#cfba47;border:1px solid #272727}body.clockwork input.number{width:35px}body.clockwork input:-ms-input-placeholder{color:#999}body.clockwork input::placeholder{color:#999}body.clockwork input::-ms-clear{display:none}body.clockwork svg.linegraph{overflow:hidden}body.clockwork div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#2d1400;font-weight:700;font-style:italic;background-color:#000;background-image:repeating-linear-gradient(-45deg,#000,#000 10px,#170800 0,#170800 20px)}body.clockwork div.notice .label{color:#2d1400}body.clockwork div.notice .content:only-of-type{padding:0}body.clockwork div.notice hr{background-color:#896b19}body.clockwork div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #5f380e;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.clockwork section .cell,body.clockwork section .content,body.clockwork section .label,body.clockwork section .line,body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.clockwork section{display:table-row;width:100%}body.clockwork section:not(:first-child){padding-top:4px}body.clockwork section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.clockwork section .label{width:1%;padding-right:32px;white-space:nowrap;color:#b18b25}body.clockwork section .content:not(:last-child){padding-right:16px}body.clockwork section .line{width:100%}body.clockwork section .cell:not(:first-child){text-align:center;padding-top:0}body.clockwork section .cell span.button{width:75px}body.clockwork section:not(:last-child){padding-right:4px}body.clockwork div.subdisplay{width:100%;margin:0}body.clockwork header.titlebar .close,body.clockwork header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#cfba47}body.clockwork header.titlebar .close:hover,body.clockwork header.titlebar .minimize:hover{color:#d1bd50}body.clockwork header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#5f380e;border-bottom:1px solid #170800;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.clockwork header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.clockwork header.titlebar .title{position:absolute;top:6px;left:46px;color:#cfba47;font-size:16px;white-space:nowrap}body.clockwork header.titlebar .minimize{position:absolute;top:6px;right:46px}body.clockwork header.titlebar .close{position:absolute;top:4px;right:12px}body.nanotrasen{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgNDI1IDIwMCIgb3BhY2l0eT0iLjMzIj4NCiAgPHBhdGggZD0ibSAxNzguMDAzOTksMC4wMzg2OSAtNzEuMjAzOTMsMCBhIDYuNzYxMzQyMiw2LjAyNTU0OTUgMCAwIDAgLTYuNzYxMzQsNi4wMjU1NSBsIDAsMTg3Ljg3MTQ3IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCA2Ljc2MTM0LDYuMDI1NTQgbCA1My4xMDcyLDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xMDEuNTQ0MDE4IDcyLjIxNjI4LDEwNC42OTkzOTggYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDUuNzYwMTUsMi44NzAxNiBsIDczLjU1NDg3LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIDYuNzYxMzUsLTYuMDI1NTQgbCAwLC0xODcuODcxNDcgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTM1LC02LjAyNTU1IGwgLTU0LjcxNjQ0LDAgYSA2Ljc2MTM0MjIsNi4wMjU1NDk1IDAgMCAwIC02Ljc2MTMzLDYuMDI1NTUgbCAwLDEwMi42MTkzNSBMIDE4My43NjQxMywyLjkwODg2IGEgNi43NjEzNDIyLDYuMDI1NTQ5NSAwIDAgMCAtNS43NjAxNCwtMi44NzAxNyB6IiAvPg0KICA8cGF0aCBkPSJNIDQuODQ0NjMzMywyMi4xMDg3NSBBIDEzLjQxMjAzOSwxMi41MDE4NDIgMCAwIDEgMTMuNDc3NTg4LDAuMDM5MjQgbCA2Ni4xMTgzMTUsMCBhIDUuMzY0ODE1OCw1LjAwMDczNyAwIDAgMSA1LjM2NDgyMyw1LjAwMDczIGwgMCw3OS44NzkzMSB6IiAvPg0KICA8cGF0aCBkPSJtIDQyMC4xNTUzNSwxNzcuODkxMTkgYSAxMy40MTIwMzgsMTIuNTAxODQyIDAgMCAxIC04LjYzMjk1LDIyLjA2OTUxIGwgLTY2LjExODMyLDAgYSA1LjM2NDgxNTIsNS4wMDA3MzcgMCAwIDEgLTUuMzY0ODIsLTUuMDAwNzQgbCAwLC03OS44NzkzMSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#2a2a2a 0,#202020);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff2a2a2a",endColorstr="#ff202020",GradientType=0)}body.nanotrasen .normal{color:#40628a}body.nanotrasen .good{color:#537d29}body.nanotrasen .average{color:#be6209}body.nanotrasen .bad{color:#b00e0e}body.nanotrasen .highlight{color:#8ba5c4}body.nanotrasen main{display:block;margin-top:32px;padding:2px 6px 0}body.nanotrasen hr{height:2px;background-color:#40628a;border:none}body.nanotrasen .hidden{display:none}body.nanotrasen .bar .barText,body.nanotrasen span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.nanotrasen .bold{font-weight:700}body.nanotrasen .italic{font-style:italic}body.nanotrasen [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.nanotrasen div[data-tooltip],body.nanotrasen span[data-tooltip]{position:relative}body.nanotrasen div[data-tooltip]:after,body.nanotrasen span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.nanotrasen div[data-tooltip]:hover:after,body.nanotrasen span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.nanotrasen div[data-tooltip].tooltip-top:after,body.nanotrasen span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-top:hover:after,body.nanotrasen span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:after,body.nanotrasen span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.nanotrasen div[data-tooltip].tooltip-bottom:hover:after,body.nanotrasen span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.nanotrasen div[data-tooltip].tooltip-left:after,body.nanotrasen span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-left:hover:after,body.nanotrasen span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:after,body.nanotrasen span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.nanotrasen div[data-tooltip].tooltip-right:hover:after,body.nanotrasen span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.nanotrasen .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #40628a;background:#272727}body.nanotrasen .bar .barText{position:absolute;top:0;right:3px}body.nanotrasen .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#40628a}body.nanotrasen .bar .barFill.good{background-color:#537d29}body.nanotrasen .bar .barFill.average{background-color:#be6209}body.nanotrasen .bar .barFill.bad{background-color:#b00e0e}body.nanotrasen span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.nanotrasen span.button .fa{padding-right:2px}body.nanotrasen span.button.normal{transition:background-color .5s;background-color:#40628a}body.nanotrasen span.button.normal.active:focus,body.nanotrasen span.button.normal.active:hover{transition:background-color .25s;background-color:#4f78aa;outline:0}body.nanotrasen span.button.disabled{transition:background-color .5s;background-color:#999}body.nanotrasen span.button.disabled.active:focus,body.nanotrasen span.button.disabled.active:hover{transition:background-color .25s;background-color:#a8a8a8;outline:0}body.nanotrasen span.button.selected{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.selected.active:focus,body.nanotrasen span.button.selected.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.toggle{transition:background-color .5s;background-color:#2f943c}body.nanotrasen span.button.toggle.active:focus,body.nanotrasen span.button.toggle.active:hover{transition:background-color .25s;background-color:#3ab84b;outline:0}body.nanotrasen span.button.caution{transition:background-color .5s;background-color:#9a9d00}body.nanotrasen span.button.caution.active:focus,body.nanotrasen span.button.caution.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.nanotrasen span.button.danger{transition:background-color .5s;background-color:#9d0808}body.nanotrasen span.button.danger.active:focus,body.nanotrasen span.button.danger.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.nanotrasen span.button.gridable{width:125px;margin:2px 0}body.nanotrasen span.button.gridable.center{text-align:center;width:75px}body.nanotrasen span.button+span:not(.button),body.nanotrasen span:not(.button)+span.button{margin-left:5px}body.nanotrasen div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#54000000,endColorStr=#54000000);background-color:rgba(0,0,0,.33);box-shadow:inset 0 0 5px rgba(0,0,0,.5)}body.nanotrasen div.display.tabular{padding:0;margin:0}body.nanotrasen div.display header,body.nanotrasen div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #40628a}body.nanotrasen div.display header .buttonRight,body.nanotrasen div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.nanotrasen div.display article,body.nanotrasen div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.nanotrasen input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#000;background-color:#fff;border:1px solid #272727}body.nanotrasen input.number{width:35px}body.nanotrasen input:-ms-input-placeholder{color:#999}body.nanotrasen input::placeholder{color:#999}body.nanotrasen input::-ms-clear{display:none}body.nanotrasen svg.linegraph{overflow:hidden}body.nanotrasen div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#bb9b68;background-image:repeating-linear-gradient(-45deg,#bb9b68,#bb9b68 10px,#b1905d 0,#b1905d 20px)}body.nanotrasen div.notice .label{color:#000}body.nanotrasen div.notice .content:only-of-type{padding:0}body.nanotrasen div.notice hr{background-color:#272727}body.nanotrasen div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.nanotrasen section .cell,body.nanotrasen section .content,body.nanotrasen section .label,body.nanotrasen section .line,body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.nanotrasen section{display:table-row;width:100%}body.nanotrasen section:not(:first-child){padding-top:4px}body.nanotrasen section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.nanotrasen section .label{width:1%;padding-right:32px;white-space:nowrap;color:#8ba5c4}body.nanotrasen section .content:not(:last-child){padding-right:16px}body.nanotrasen section .line{width:100%}body.nanotrasen section .cell:not(:first-child){text-align:center;padding-top:0}body.nanotrasen section .cell span.button{width:75px}body.nanotrasen section:not(:last-child){padding-right:4px}body.nanotrasen div.subdisplay{width:100%;margin:0}body.nanotrasen header.titlebar .close,body.nanotrasen header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#8ba5c4}body.nanotrasen header.titlebar .close:hover,body.nanotrasen header.titlebar .minimize:hover{color:#9cb2cd}body.nanotrasen header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.nanotrasen header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.nanotrasen header.titlebar .title{position:absolute;top:6px;left:46px;color:#8ba5c4;font-size:16px;white-space:nowrap}body.nanotrasen header.titlebar .minimize{position:absolute;top:6px;right:46px}body.nanotrasen header.titlebar .close{position:absolute;top:4px;right:12px}body.syndicate{background:url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+DQo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmVyc2lvbj0iMS4wIiB2aWV3Qm94PSIwIDAgMjAwIDI4OS43NDIiIG9wYWNpdHk9Ii4zMyI+DQogIDxwYXRoIGQ9Im0gOTMuNTM3Njc3LDAgYyAtMTguMTEzMTI1LDAgLTM0LjIyMDEzMywzLjExMTY0IC00OC4zMjM0ODQsOS4zMzQzNyAtMTMuOTY1MDkyLDYuMjIxNjcgLTI0LjYxMjQ0MiwxNS4wNzExNCAtMzEuOTQwNjUxLDI2LjU0NzEgLTcuMTg5OTM5OCwxMS4zMzc4OSAtMTAuMzAxMjI2NiwyNC43NDkxMSAtMTAuMzAxMjI2Niw0MC4yMzQ3OCAwLDEwLjY0NjYyIDIuNzI1MDAyNiwyMC40NjQ2NSA4LjE3NTExMTYsMjkuNDUyNTggNS42MTUyNzcsOC45ODY4NiAxNC4wMzgyNzcsMTcuMzUyMDQgMjUuMjY4ODIxLDI1LjA5NDM2IDExLjIzMDU0NCw3LjYwNTMxIDI2LjUwNzQyMSwxNS40MTgzNSA0NS44MzA1MTQsMjMuNDM3ODIgMTkuOTgzNzQ4LDguMjk1NTcgMzQuODQ4ODQ4LDE1LjU1NDcxIDQ0LjU5Mjk5OCwyMS43NzYzOCA5Ljc0NDE0LDYuMjIyNzMgMTYuNzYxNywxMi44NTg1IDIxLjA1NTcyLDE5LjkwOTUxIDQuMjk0MDQsNy4wNTIwOCA2LjQ0MTkzLDE1Ljc2NDA4IDYuNDQxOTMsMjYuMTM0NTkgMCwxNi4xNzcwMiAtNS4yMDE5NiwyOC40ODIyMiAtMTUuNjA2NzMsMzYuOTE2ODIgLTEwLjIzOTYsOC40MzQ3IC0yNS4wMjIwMywxMi42NTIzIC00NC4zNDUxNjksMTIuNjUyMyAtMTQuMDM4MTcxLDAgLTI1LjUxNTI0NywtMS42NTk0IC0zNC40MzM2MTgsLTQuOTc3NyAtOC45MTgzNywtMy40NTY2IC0xNi4xODU1NzIsLTguNzExMyAtMjEuODAwODM5LC0xNS43NjMzIC01LjYxNTI3NywtNy4wNTIxIC0xMC4wNzQ3OTUsLTE2LjY2MDg4IC0xMy4zNzc4OTksLTI4LjgyODEyIGwgLTI0Ljc3MzE2MjYyOTM5NDUsMCAwLDU2LjgyNjMyIEMgMzMuODU2NzY5LDI4Ni4wNzYwMSA2My43NDkwNCwyODkuNzQyMDEgODkuNjc4MzgzLDI4OS43NDIwMSBjIDE2LjAyMDAyNywwIDMwLjcxOTc4NywtMS4zODI3IDQ0LjA5NzMzNywtNC4xNDc5IDEzLjU0MjcyLC0yLjkwNDMgMjUuMTA0MSwtNy40Njc2IDM0LjY4MzA5LC0xMy42ODkzIDkuNzQ0MTMsLTYuMzU5NyAxNy4zNDA0MiwtMTQuNTE5NSAyMi43OTA1MiwtMjQuNDc0OCA1LjQ1MDEsLTEwLjA5MzMyIDguMTc1MTEsLTIyLjM5OTU5IDguMTc1MTEsLTM2LjkxNjgyIDAsLTEyLjk5NzY0IC0zLjMwMjEsLTI0LjMzNTM5IC05LjkwODI5LC0zNC4wMTQ2IC02LjQ0MTA1LC05LjgxNzI1IC0xNS41MjU0NSwtMTguNTI3MDcgLTI3LjI1MTQ2LC0yNi4xMzEzMyAtMTEuNTYwODUsLTcuNjA0MjcgLTI3LjkxMDgzLC0xNS44MzE0MiAtNDkuMDUwNjYsLTI0LjY4MDIyIC0xNy41MDY0NCwtNy4xOTAxMiAtMzAuNzE5NjY4LC0xMy42ODk0OCAtMzkuNjM4MDM4LC0xOS40OTcwMSAtOC45MTgzNzEsLTUuODA3NTIgLTE4LjYwNzQ3NCwtMTIuNDM0MDkgLTI0LjA5NjUyNCwtMTguODc0MTcgLTUuNDI2MDQzLC02LjM2NjE2IC05LjY1ODgyNiwtMTUuMDcwMDMgLTkuNjU4ODI2LC0yNC44ODcyOSAwLC05LjI2NDAxIDIuMDc1NDE0LC0xNy4yMTM0NSA2LjIyMzQ1NCwtMjMuODUwMzMgMTEuMDk4Mjk4LC0xNC4zOTc0OCA0MS4yODY2MzgsLTEuNzk1MDcgNDUuMDc1NjA5LDI0LjM0NzYyIDQuODM5MzkyLDYuNzc0OTEgOC44NDkzNSwxNi4yNDcyOSAxMi4wMjk1MTUsMjguNDE1NiBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNC40NzgyNSwtNS45MjQ0OCAtOS45NTQ4OCwtMTAuNjMyMjIgLTE1LjkwODM3LC0xNC4zNzQxMSAxLjY0MDU1LDAuNDc5MDUgMy4xOTAzOSwxLjAyMzc2IDQuNjM4NjUsMS42NDAyNCA2LjQ5ODYxLDIuNjI2MDcgMTIuMTY3OTMsNy4zMjc0NyAxNy4wMDczLDE0LjEwMzQ1IDQuODM5MzksNi43NzQ5MSA4Ljg0OTM1LDE2LjI0NTY3IDEyLjAyOTUyLDI4LjQxMzk3IDAsMCA4LjQ4MTI4LC0wLjEyODk0IDguNDg5NzgsLTAuMDAyIDAuNDE3NzYsNi40MTQ5NCAtMS43NTMzOSw5LjQ1Mjg2IC00LjEyMzQyLDEyLjU2MTA0IC0yLjQxNzQsMy4xNjk3OCAtNS4xNDQ4Niw2Ljc4OTczIC00LjAwMjc4LDEzLjAwMjkgMS41MDc4Niw4LjIwMzE4IDEwLjE4MzU0LDEwLjU5NjQyIDE0LjYyMTk0LDkuMzExNTQgLTMuMzE4NDIsLTAuNDk5MTEgLTUuMzE4NTUsLTEuNzQ5NDggLTUuMzE4NTUsLTEuNzQ5NDggMCwwIDEuODc2NDYsMC45OTg2OCA1LjY1MTE3LC0xLjM1OTgxIC0zLjI3Njk1LDAuOTU1NzEgLTEwLjcwNTI5LC0wLjc5NzM4IC0xMS44MDEyNSwtNi43NjMxMyAtMC45NTc1MiwtNS4yMDg2MSAwLjk0NjU0LC03LjI5NTE0IDMuNDAxMTMsLTEwLjUxNDgyIDIuNDU0NjIsLTMuMjE5NjggNS4yODQyNiwtNi45NTgzMSA0LjY4NDMsLTE0LjQ4ODI0IGwgMC4wMDMsMC4wMDIgOC45MjY3NiwwIDAsLTU1Ljk5OTY3IGMgLTE1LjA3MTI1LC0zLjg3MTY4IC0yNy42NTMxNCwtNi4zNjA0MiAtMzcuNzQ2NzEsLTcuNDY1ODYgLTkuOTU1MzEsLTEuMTA3NTUgLTIwLjE4ODIzLC0xLjY1OTgxIC0zMC42OTY2MTMsLTEuNjU5ODEgeiBtIDcwLjMyMTYwMywxNy4zMDg5MyAwLjIzODA1LDQwLjMwNDkgYyAxLjMxODA4LDEuMjI2NjYgMi40Mzk2NSwyLjI3ODE1IDMuMzQwODEsMy4xMDYwMiA0LjgzOTM5LDYuNzc0OTEgOC44NDkzNCwxNi4yNDU2NiAxMi4wMjk1MSwyOC40MTM5NyBsIDIwLjUzMjM0LDAgMCwtNTUuOTk5NjcgYyAtNi42NzczMSwtNC41OTM4MSAtMTkuODM2NDMsLTEwLjQ3MzA5IC0zNi4xNDA3MSwtMTUuODI1MjIgeiBtIC0yOC4xMjA0OSw1LjYwNTUxIDguNTY0NzksMTcuNzE2NTUgYyAtMTEuOTcwMzcsLTYuNDY2OTcgLTEzLjg0Njc4LC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk3MDUsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IG0gMTUuMjIxOTUsMjQuMDA4NDggOC41NjQ3OSwxNy43MTY1NSBjIC0xMS45NzAzOCwtNi40NjY5NyAtMTMuODQ2NzksLTkuNzE3MjYgLTguNTY0NzksLTE3LjcxNjU1IHogbSAyMi43OTcwNCwwIGMgMi43NzE1LDcuOTk5MjkgMS43ODc0MSwxMS4yNDk1OCAtNC40OTM1NCwxNy43MTY1NSBsIDQuNDkzNTQsLTE3LjcxNjU1IHogbSAtOTkuMTEzODQsMi4yMDc2NCA4LjU2NDc5LDE3LjcxNjU1IGMgLTExLjk3MDM4MiwtNi40NjY5NyAtMTMuODQ2NzgyLC05LjcxNzI2IC04LjU2NDc5LC0xNy43MTY1NSB6IG0gMjIuNzk1NDIsMCBjIDIuNzcxNSw3Ljk5OTI5IDEuNzg3NDEsMTEuMjQ5NTggLTQuNDkzNTQsMTcuNzE2NTUgbCA0LjQ5MzU0LC0xNy43MTY1NSB6IiAvPg0KPC9zdmc+DQo8IS0tIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmVBbGlrZSA0LjAgSW50ZXJuYXRpb25hbCBMaWNlbnNlLiAtLT4NCjwhLS0gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvNC4wLyAtLT4NCg==") no-repeat fixed 50%/70% 70%,linear-gradient(180deg,#750000 0,#340404);filter:progid:DXImageTransform.Microsoft.gradient(startColorstr="#ff750000",endColorstr="#ff340404",GradientType=0)}body.syndicate .normal{color:#40628a}body.syndicate .good{color:#73e573}body.syndicate .average{color:#be6209}body.syndicate .bad{color:#b00e0e}body.syndicate .highlight{color:#000}body.syndicate main{display:block;margin-top:32px;padding:2px 6px 0}body.syndicate hr{height:2px;background-color:#272727;border:none}body.syndicate .hidden{display:none}body.syndicate .bar .barText,body.syndicate span.button{color:#fff;font-size:12px;font-weight:400;font-style:normal;text-decoration:none}body.syndicate .bold{font-weight:700}body.syndicate .italic{font-style:italic}body.syndicate [unselectable=on]{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}body.syndicate div[data-tooltip],body.syndicate span[data-tooltip]{position:relative}body.syndicate div[data-tooltip]:after,body.syndicate span[data-tooltip]:after{position:absolute;display:block;z-index:2;width:250px;padding:10px;-ms-transform:translateX(-50%);transform:translateX(-50%);visibility:hidden;opacity:0;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";white-space:normal;text-align:left;content:attr(data-tooltip);transition:all .5s;border:1px solid #272727;background-color:#363636}body.syndicate div[data-tooltip]:hover:after,body.syndicate span[data-tooltip]:hover:after{visibility:visible;opacity:1;-ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=100)"}body.syndicate div[data-tooltip].tooltip-top:after,body.syndicate span[data-tooltip].tooltip-top:after{bottom:100%;left:50%;-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-top:hover:after,body.syndicate span[data-tooltip].tooltip-top:hover:after{-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:after,body.syndicate span[data-tooltip].tooltip-bottom:after{top:100%;left:50%;-ms-transform:translateX(-50%) translateY(-8px);transform:translateX(-50%) translateY(-8px)}body.syndicate div[data-tooltip].tooltip-bottom:hover:after,body.syndicate span[data-tooltip].tooltip-bottom:hover:after{-ms-transform:translateX(-50%) translateY(8px);transform:translateX(-50%) translateY(8px)}body.syndicate div[data-tooltip].tooltip-left:after,body.syndicate span[data-tooltip].tooltip-left:after{top:50%;right:100%;-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-left:hover:after,body.syndicate span[data-tooltip].tooltip-left:hover:after{-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:after,body.syndicate span[data-tooltip].tooltip-right:after{top:50%;left:100%;-ms-transform:translateX(-8px) translateY(-50%);transform:translateX(-8px) translateY(-50%)}body.syndicate div[data-tooltip].tooltip-right:hover:after,body.syndicate span[data-tooltip].tooltip-right:hover:after{-ms-transform:translateX(8px) translateY(-50%);transform:translateX(8px) translateY(-50%)}body.syndicate .bar{display:inline-block;position:relative;vertical-align:middle;width:100%;height:20px;line-height:17px;padding:1px;border:1px solid #000;background:#272727}body.syndicate .bar .barText{position:absolute;top:0;right:3px}body.syndicate .bar .barFill{display:block;height:100%;transition:background-color 1s;background-color:#000}body.syndicate .bar .barFill.good{background-color:#73e573}body.syndicate .bar .barFill.average{background-color:#be6209}body.syndicate .bar .barFill.bad{background-color:#b00e0e}body.syndicate span.button{display:inline-block;vertical-align:middle;min-height:20px;line-height:17px;padding:0 5px;white-space:nowrap;border:1px solid #272727}body.syndicate span.button .fa{padding-right:2px}body.syndicate span.button.normal{transition:background-color .5s;background-color:#397439}body.syndicate span.button.normal.active:focus,body.syndicate span.button.normal.active:hover{transition:background-color .25s;background-color:#4a964a;outline:0}body.syndicate span.button.disabled{transition:background-color .5s;background-color:#363636}body.syndicate span.button.disabled.active:focus,body.syndicate span.button.disabled.active:hover{transition:background-color .25s;background-color:#545454;outline:0}body.syndicate span.button.selected{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.selected.active:focus,body.syndicate span.button.selected.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.toggle{transition:background-color .5s;background-color:#9d0808}body.syndicate span.button.toggle.active:focus,body.syndicate span.button.toggle.active:hover{transition:background-color .25s;background-color:#ce0b0b;outline:0}body.syndicate span.button.caution{transition:background-color .5s;background-color:#be6209}body.syndicate span.button.caution.active:focus,body.syndicate span.button.caution.active:hover{transition:background-color .25s;background-color:#eb790b;outline:0}body.syndicate span.button.danger{transition:background-color .5s;background-color:#9a9d00}body.syndicate span.button.danger.active:focus,body.syndicate span.button.danger.active:hover{transition:background-color .25s;background-color:#ced200;outline:0}body.syndicate span.button.gridable{width:125px;margin:2px 0}body.syndicate span.button.gridable.center{text-align:center;width:75px}body.syndicate span.button+span:not(.button),body.syndicate span:not(.button)+span.button{margin-left:5px}body.syndicate div.display{width:100%;padding:4px;margin:6px 0;background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#80000000,endColorStr=#80000000);background-color:rgba(0,0,0,.5);box-shadow:inset 0 0 5px rgba(0,0,0,.75)}body.syndicate div.display.tabular{padding:0;margin:0}body.syndicate div.display header,body.syndicate div.subdisplay header{display:block;position:relative;width:100%;padding:0 4px;margin-bottom:6px;color:#fff;border-bottom:2px solid #272727}body.syndicate div.display header .buttonRight,body.syndicate div.subdisplay header .buttonRight{position:absolute;bottom:6px;right:4px}body.syndicate div.display article,body.syndicate div.subdisplay article{display:table;width:100%;border-collapse:collapse}body.syndicate input{display:inline-block;vertical-align:middle;height:20px;line-height:17px;padding:0 5px;white-space:nowrap;color:#fff;background-color:#9d0808;border:1px solid #272727}body.syndicate input.number{width:35px}body.syndicate input:-ms-input-placeholder{color:#999}body.syndicate input::placeholder{color:#999}body.syndicate input::-ms-clear{display:none}body.syndicate svg.linegraph{overflow:hidden}body.syndicate div.notice{margin:8px 0;padding:4px;box-shadow:none;color:#000;font-weight:700;font-style:italic;background-color:#750000;background-image:repeating-linear-gradient(-45deg,#750000,#750000 10px,#910101 0,#910101 20px)}body.syndicate div.notice .label{color:#000}body.syndicate div.notice .content:only-of-type{padding:0}body.syndicate div.notice hr{background-color:#272727}body.syndicate div.resize{position:fixed;bottom:0;right:0;width:0;height:0;border-style:solid;border-width:0 0 45px 45px;border-color:transparent transparent #363636;-ms-transform:rotate(1turn);transform:rotate(1turn)}body.syndicate section .cell,body.syndicate section .content,body.syndicate section .label,body.syndicate section .line{display:table-cell;margin:0;text-align:left;vertical-align:middle;padding:3px 2px}body.syndicate section{display:table-row;width:100%}body.syndicate section:not(:first-child){padding-top:4px}body.syndicate section.candystripe:nth-child(2n){background-color:#000;-ms-filter:"progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000)";filter:progid:DXImageTransform.Microsoft.gradient(startColorStr=#33000000,endColorStr=#33000000);background-color:rgba(0,0,0,.2)}body.syndicate section .label{width:1%;padding-right:32px;white-space:nowrap;color:#fff}body.syndicate section .content:not(:last-child){padding-right:16px}body.syndicate section .line{width:100%}body.syndicate section .cell:not(:first-child){text-align:center;padding-top:0}body.syndicate section .cell span.button{width:75px}body.syndicate section:not(:last-child){padding-right:4px}body.syndicate div.subdisplay{width:100%;margin:0}body.syndicate header.titlebar .close,body.syndicate header.titlebar .minimize{display:inline-block;position:relative;padding:7px;margin:-7px;color:#e74242}body.syndicate header.titlebar .close:hover,body.syndicate header.titlebar .minimize:hover{color:#eb5e5e}body.syndicate header.titlebar{position:fixed;z-index:1;top:0;left:0;width:100%;height:32px;background-color:#363636;border-bottom:1px solid #161616;box-shadow:0 3px 3px rgba(0,0,0,.1)}body.syndicate header.titlebar .statusicon{position:absolute;top:4px;left:12px;transition:color .5s}body.syndicate header.titlebar .title{position:absolute;top:6px;left:46px;color:#e74242;font-size:16px;white-space:nowrap}body.syndicate header.titlebar .minimize{position:absolute;top:6px;right:46px}body.syndicate header.titlebar .close{position:absolute;top:4px;right:12px}.no-icons header.titlebar .statusicon{font-size:20px}.no-icons header.titlebar .statusicon:after{content:"O"}.no-icons header.titlebar .minimize{top:-2px;font-size:20px}.no-icons header.titlebar .minimize:after{content:"—"}.no-icons header.titlebar .close{font-size:20px}.no-icons header.titlebar .close:after{content:"X"}
\ No newline at end of file