diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm
index 19c8e68546..39688c1db8 100644
--- a/_maps/map_files/Deltastation/DeltaStation2.dmm
+++ b/_maps/map_files/Deltastation/DeltaStation2.dmm
@@ -7322,6 +7322,22 @@
},
/turf/open/floor/plasteel,
/area/maintenance/starboard/fore)
+"avT" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 5
+ },
+/turf/open/floor/plasteel/dark,
+/area/science/xenobiology)
"avX" = (
/obj/effect/decal/cleanable/dirt,
/obj/machinery/door/airlock/maintenance_hatch{
@@ -7726,6 +7742,13 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/fore)
+"ayq" = (
+/obj/structure/sign/warning/electricshock,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/science/xenobiology)
"ayS" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
@@ -18573,6 +18596,18 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/turret_protected/ai)
+"bxE" = (
+/obj/structure/cable/white{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"bxV" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 6
@@ -39771,6 +39806,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"cQw" = (
@@ -40614,6 +40650,7 @@
id = "xeno4";
name = "Creature Cell #4"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"cRX" = (
@@ -40654,6 +40691,7 @@
id = "xeno4";
name = "Creature Cell #4"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"cRZ" = (
@@ -40665,6 +40703,7 @@
id = "xeno5";
name = "Creature Cell #5"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"cSa" = (
@@ -40705,6 +40744,7 @@
id = "xeno5";
name = "Creature Cell #5"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"cSc" = (
@@ -40716,6 +40756,7 @@
id = "xeno6";
name = "Creature Cell #6"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"cSd" = (
@@ -40756,6 +40797,7 @@
id = "xeno6";
name = "Creature Cell #6"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"cSf" = (
@@ -41528,6 +41570,10 @@
/area/science/xenobiology)
"cTA" = (
/obj/structure/sign/warning/electricshock,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
/turf/closed/wall/r_wall,
/area/science/xenobiology)
"cTB" = (
@@ -41539,6 +41585,9 @@
id = "xenosecure";
name = "Secure Pen Shutters"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/science/xenobiology)
"cTC" = (
@@ -41548,16 +41597,19 @@
network = list("xeno")
},
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTD" = (
/obj/structure/cable/white{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
- dir = 4
- },
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 1
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTE" = (
@@ -41600,6 +41652,7 @@
req_access_txt = "55"
},
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTI" = (
@@ -41622,6 +41675,7 @@
dir = 1
},
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTK" = (
@@ -41639,6 +41693,7 @@
req_access_txt = "55"
},
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTM" = (
@@ -41654,6 +41709,7 @@
dir = 1
},
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTN" = (
@@ -41679,6 +41735,7 @@
req_access_txt = "55"
},
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cTP" = (
@@ -42650,6 +42707,7 @@
/obj/effect/turf_decal/stripes/line{
dir = 8
},
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cVF" = (
@@ -42751,18 +42809,6 @@
},
/turf/open/floor/plasteel,
/area/science/xenobiology)
-"cVN" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/turf/open/floor/plasteel,
-/area/science/xenobiology)
"cVO" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -43488,10 +43534,12 @@
dir = 4;
name = "emergency shower"
},
-/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
/obj/effect/turf_decal/stripes/end{
dir = 8
},
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"cXd" = (
@@ -43539,12 +43587,12 @@
dir = 8;
name = "emergency shower"
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
/obj/effect/turf_decal/stripes/end{
dir = 4
},
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
/turf/open/floor/plasteel/white,
/area/science/xenobiology)
"cXh" = (
@@ -43560,6 +43608,9 @@
/obj/effect/turf_decal/stripes/line{
dir = 4
},
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cXi" = (
@@ -44311,6 +44362,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/orange/hidden,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"cYL" = (
@@ -44386,11 +44438,11 @@
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cYS" = (
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral,
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"cYT" = (
@@ -45144,22 +45196,26 @@
id = "xenosecure";
name = "Secure Pen Shutters"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/science/xenobiology)
"dar" = (
/obj/structure/table/reinforced,
/obj/machinery/cell_charger,
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"das" = (
/obj/structure/cable/white{
icon_state = "1-2"
},
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 4
- },
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"dat" = (
@@ -45191,6 +45247,7 @@
/obj/machinery/disposal/bin,
/obj/structure/disposalpipe/trunk,
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"daw" = (
@@ -45220,6 +45277,7 @@
req_access_txt = "55"
},
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"day" = (
@@ -45233,6 +45291,7 @@
},
/obj/structure/disposalpipe/trunk,
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"daz" = (
@@ -45246,6 +45305,7 @@
req_access_txt = "55"
},
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"daA" = (
@@ -45259,6 +45319,7 @@
req_access_txt = "55"
},
/obj/effect/turf_decal/bot,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/science/xenobiology)
"daB" = (
@@ -46056,6 +46117,9 @@
dir = 5
},
/obj/machinery/shieldwallgen/xenobiologyaccess,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 4
+ },
/turf/open/floor/plating,
/area/science/xenobiology)
"dcd" = (
@@ -46067,6 +46131,10 @@
pixel_y = -22
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/components/binary/valve/digital{
+ icon_state = "dvalve_map-2";
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"dce" = (
@@ -46075,6 +46143,9 @@
},
/obj/effect/turf_decal/bot,
/obj/machinery/portable_atmospherics/canister/bz,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 8
+ },
/turf/open/floor/plasteel,
/area/science/xenobiology)
"dcf" = (
@@ -46100,6 +46171,7 @@
id = "xeno1";
name = "Creature Cell #1"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"dch" = (
@@ -46138,6 +46210,7 @@
id = "xeno1";
name = "Creature Cell #1"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"dcj" = (
@@ -46150,6 +46223,7 @@
id = "xeno2";
name = "Creature Cell #2"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"dck" = (
@@ -46188,6 +46262,7 @@
id = "xeno2";
name = "Creature Cell #2"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"dcm" = (
@@ -46200,6 +46275,7 @@
id = "xeno3";
name = "Creature Cell #3"
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"dcn" = (
@@ -46238,6 +46314,7 @@
id = "xeno3";
name = "Creature Cell #3"
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plating,
/area/science/xenobiology)
"dcp" = (
@@ -47050,7 +47127,9 @@
/turf/open/floor/plasteel,
/area/maintenance/port)
"ddQ" = (
-/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
/turf/closed/wall/r_wall,
/area/science/xenobiology)
"ddR" = (
@@ -47068,6 +47147,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/turf/open/floor/plasteel/dark,
/area/science/xenobiology)
"ddS" = (
@@ -47718,8 +47798,8 @@
"dfb" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{
- dir = 4
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 10
},
/turf/open/floor/plating,
/area/maintenance/port)
@@ -48270,6 +48350,7 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/open/floor/plasteel,
/area/maintenance/port)
"dgn" = (
@@ -65044,6 +65125,10 @@
network = list("ss13","medbay")
},
/obj/effect/turf_decal/delivery,
+/obj/machinery/airalarm{
+ dir = 8;
+ pixel_x = 24
+ },
/turf/open/floor/plasteel,
/area/medical/virology)
"dQh" = (
@@ -73719,6 +73804,11 @@
},
/turf/open/floor/plasteel,
/area/engineering/main)
+"fdK" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/manifold4w/scrubbers,
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"fdM" = (
/obj/structure/cable/white{
icon_state = "1-2"
@@ -77437,6 +77527,13 @@
},
/turf/open/floor/plasteel,
/area/engineering/main)
+"grf" = (
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ icon_state = "pipe11-2";
+ dir = 5
+ },
+/turf/closed/wall/r_wall,
+/area/science/xenobiology)
"grh" = (
/obj/item/kirbyplants/random,
/turf/open/floor/plasteel/dark,
@@ -77551,6 +77648,10 @@
icon_state = "wood-broken2"
},
/area/service/abandoned_gambling_den/secondary)
+"gux" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall,
+/area/service/abandoned_gambling_den)
"guH" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
@@ -77753,6 +77854,23 @@
},
/turf/open/floor/plasteel/white,
/area/command/heads_quarters/cmo)
+"gzQ" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/outlet_injector/on{
+ icon_state = "inje_map-2";
+ dir = 4
+ },
+/turf/open/floor/plasteel/dark,
+/area/science/xenobiology)
"gAA" = (
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
dir = 8
@@ -80895,6 +81013,16 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/cargo/storage)
+"hDD" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold4w/supply,
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"hDE" = (
/obj/machinery/light{
dir = 4
@@ -84800,6 +84928,11 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/command/nuke_storage)
+"iMf" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/manifold4w/supply,
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"iMm" = (
/obj/structure/cable{
icon_state = "2-4"
@@ -86986,6 +87119,14 @@
},
/turf/open/floor/plasteel/white,
/area/command/heads_quarters/cmo)
+"jyy" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"jyI" = (
/obj/structure/chair/stool/bar,
/obj/item/radio/intercom{
@@ -87613,6 +87754,24 @@
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
/area/cargo/qm)
+"jJL" = (
+/obj/structure/cable/white{
+ icon_state = "2-4"
+ },
+/obj/structure/cable/white{
+ icon_state = "1-4"
+ },
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"jJT" = (
/obj/machinery/photocopier,
/obj/machinery/firealarm{
@@ -89077,6 +89236,20 @@
},
/turf/open/floor/plasteel/dark/corner,
/area/engineering/atmospherics_engine)
+"kiv" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/dark,
+/area/science/xenobiology)
"kiP" = (
/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/neutral{
@@ -92058,6 +92231,14 @@
icon_state = "chapel"
},
/area/service/chapel/main)
+"lnO" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"lnY" = (
/obj/structure/weightmachine/stacklifter,
/obj/effect/turf_decal/tile/neutral{
@@ -93157,6 +93338,20 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/aisat/exterior)
+"lIV" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on,
+/turf/open/floor/plasteel/dark,
+/area/science/xenobiology)
"lIY" = (
/obj/effect/turf_decal/tile/blue,
/obj/effect/turf_decal/tile/green{
@@ -95681,6 +95876,13 @@
},
/turf/open/floor/plasteel,
/area/engineering/main)
+"mFc" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plating,
+/area/maintenance/port)
"mFj" = (
/obj/machinery/disposal/bin,
/obj/machinery/airalarm{
@@ -96639,6 +96841,16 @@
/obj/effect/turf_decal/delivery,
/turf/open/floor/plasteel,
/area/engineering/main)
+"mSI" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 4
+ },
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"mSP" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/reagent_dispensers/fueltank,
@@ -96685,6 +96897,17 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmos)
+"mTS" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"mTU" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/structure/disposalpipe/segment{
@@ -96979,6 +97202,12 @@
/obj/structure/chair/office/dark,
/turf/open/floor/wood,
/area/commons/dorms)
+"mYQ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/turf/closed/wall/r_wall,
+/area/science/circuit)
"mYT" = (
/obj/effect/decal/cleanable/dirt,
/obj/structure/closet/cardboard,
@@ -97895,6 +98124,20 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/service/hydroponics/garden/abandoned)
+"nqC" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/dark,
+/area/science/xenobiology)
"nqX" = (
/obj/structure/table/wood,
/obj/item/storage/dice,
@@ -100236,6 +100479,12 @@
"ohd" = (
/turf/open/floor/plasteel/freezer,
/area/service/kitchen)
+"ohp" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/closed/wall/r_wall,
+/area/science/xenobiology)
"ohv" = (
/obj/effect/decal/cleanable/dirt,
/obj/item/kirbyplants/random,
@@ -101343,6 +101592,17 @@
/obj/structure/sign/poster/random,
/turf/closed/wall,
/area/service/bar/atrium)
+"oCR" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel/white,
+/area/science/xenobiology)
"oDg" = (
/obj/structure/lattice,
/turf/open/space,
@@ -101730,6 +101990,17 @@
},
/turf/open/floor/plasteel/dark,
/area/service/chapel/office)
+"oJE" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"oKj" = (
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/obj/effect/turf_decal/tile/neutral{
@@ -101788,6 +102059,20 @@
},
/turf/open/floor/plasteel/dark,
/area/ai_monitored/command/storage/eva)
+"oKZ" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/turf/open/floor/plasteel/dark,
+/area/science/xenobiology)
"oLg" = (
/obj/machinery/vending/cart,
/obj/machinery/computer/security/telescreen/entertainment{
@@ -102573,6 +102858,22 @@
},
/turf/open/floor/plating,
/area/command/heads_quarters/hos)
+"paH" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/science/xenobiology)
"paM" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on,
/obj/structure/disposalpipe/segment{
@@ -103613,6 +103914,12 @@
},
/turf/open/floor/plasteel,
/area/cargo/sorting)
+"puJ" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/closed/wall,
+/area/science/circuit)
"puK" = (
/obj/machinery/light,
/obj/machinery/status_display/evac{
@@ -107266,6 +107573,14 @@
icon_state = "chapel"
},
/area/service/chapel/main)
+"qMB" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"qMI" = (
/obj/structure/table/wood,
/obj/item/storage/briefcase,
@@ -111076,6 +111391,7 @@
/turf/open/floor/wood,
/area/service/library/abandoned)
"saw" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
/turf/closed/wall,
/area/science/circuit)
"sax" = (
@@ -111947,6 +112263,12 @@
/obj/effect/turf_decal/stripes/line,
/turf/open/floor/plating,
/area/engineering/main)
+"spV" = (
+/obj/machinery/atmospherics/components/unary/outlet_injector/on{
+ dir = 1
+ },
+/turf/open/floor/plating,
+/area/science/xenobiology)
"sqb" = (
/obj/structure/cable/white,
/obj/effect/turf_decal/stripes/line{
@@ -114385,6 +114707,10 @@
/obj/effect/turf_decal/bot,
/turf/open/floor/plasteel,
/area/cargo/storage)
+"thh" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall,
+/area/science/research/abandoned)
"tin" = (
/obj/machinery/light{
dir = 1
@@ -115245,7 +115571,7 @@
/turf/open/floor/plasteel/dark,
/area/engineering/atmos)
"tvv" = (
-/obj/machinery/atmospherics/pipe/simple/yellow/visible{
+/obj/machinery/atmospherics/pipe/layer_manifold{
dir = 4
},
/turf/closed/wall/r_wall,
@@ -116748,6 +117074,19 @@
},
/turf/open/floor/plating,
/area/command/heads_quarters/ce)
+"tXb" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"tXd" = (
/obj/effect/spawner/structure/window/reinforced,
/turf/open/floor/plating,
@@ -118682,6 +119021,12 @@
},
/turf/open/floor/plasteel,
/area/engineering/atmospherics_engine)
+"uGN" = (
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 9
+ },
+/turf/closed/wall/r_wall,
+/area/science/circuit)
"uGQ" = (
/obj/structure/table/glass,
/obj/item/clipboard,
@@ -121009,6 +121354,11 @@
/obj/machinery/status_display/evac,
/turf/closed/wall,
/area/cargo/qm)
+"vDi" = (
+/obj/structure/grille,
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
+/turf/closed/wall/r_wall,
+/area/space/nearstation)
"vDp" = (
/obj/structure/cable/white{
icon_state = "2-4"
@@ -122486,6 +122836,22 @@
},
/turf/closed/wall/r_wall,
/area/engineering/atmospherics_engine)
+"wiI" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/orange/hidden{
+ dir = 10
+ },
+/turf/open/floor/plasteel/dark,
+/area/science/xenobiology)
"wiL" = (
/obj/structure/table/reinforced,
/obj/item/paper_bin,
@@ -124099,6 +124465,22 @@
},
/turf/closed/wall/r_wall,
/area/engineering/gravity_generator)
+"wKw" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/turf/open/floor/plasteel/dark,
+/area/science/xenobiology)
"wKz" = (
/obj/machinery/atmospherics/components/unary/vent_scrubber/on{
dir = 4
@@ -126005,6 +126387,14 @@
},
/turf/open/floor/plasteel,
/area/security/office)
+"xxJ" = (
+/obj/structure/cable/white{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/science/xenobiology)
"xxK" = (
/obj/structure/table/reinforced,
/obj/item/crowbar/red,
@@ -127019,6 +127409,22 @@
},
/turf/open/floor/plasteel/dark,
/area/commons/fitness/recreation)
+"xPN" = (
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 6
+ },
+/turf/open/floor/plasteel/dark,
+/area/science/xenobiology)
"xQl" = (
/obj/machinery/airalarm{
dir = 1;
@@ -152893,6 +153299,7 @@ cLs
cJT
caE
caE
+puJ
saw
saw
saw
@@ -152900,18 +153307,17 @@ saw
saw
saw
saw
-saw
-dhQ
-dhQ
-dhQ
-dhQ
-dhQ
-dhQ
-dhQ
-dhQ
-efN
-ajr
-aaa
+thh
+thh
+thh
+thh
+thh
+thh
+thh
+thh
+gux
+vDi
+spV
aaa
aad
aaa
@@ -153150,7 +153556,7 @@ cEo
ddO
cQt
dgl
-dhR
+mYQ
djn
dle
dmr
@@ -153407,7 +153813,7 @@ cRP
ddP
deW
cKk
-dhR
+mYQ
jjN
hNZ
hic
@@ -153661,10 +154067,10 @@ cMY
cMY
cMY
cMY
-cMY
-cCM
+ohp
+mFc
dgm
-dhR
+uGN
djp
qpq
dmt
@@ -153918,7 +154324,7 @@ cWV
cNd
cNd
cNd
-cMY
+cLI
cLO
lEm
gmj
@@ -154175,7 +154581,7 @@ cON
cON
cON
dcb
-cMY
+cLI
deX
dgn
dhR
@@ -154426,13 +154832,13 @@ cMW
cOG
cMY
cNd
+xPN
+paH
+gzQ
+oKZ
+avT
cNd
-cNd
-cNd
-cNd
-cNd
-cNd
-cMY
+cLI
deX
dgo
dhR
@@ -154683,13 +155089,13 @@ ceb
cCM
cMY
cMY
-cTA
-cNd
+ayq
cNd
+wiI
cYK
cTA
-cMY
-cMY
+grf
+cLI
deY
cKl
dhR
@@ -154946,7 +155352,7 @@ cWW
cYL
daq
dcc
-cMY
+cLI
cOD
cKj
dhR
@@ -155202,8 +155608,8 @@ cVD
cWX
cYM
dar
-cRS
-cMY
+mSI
+cLI
deZ
dgo
dhR
@@ -155455,12 +155861,12 @@ cOJ
cNc
cRT
cTD
-cVE
+bxE
cWY
cVE
das
dcd
-cMY
+cLI
deX
dgo
dhR
@@ -155717,7 +156123,7 @@ cWZ
cYN
dat
dce
-cMY
+cLI
dfa
dgp
fGq
@@ -156479,17 +156885,17 @@ caE
cJZ
cLI
cNd
-cNd
-cNd
+oKZ
+kiv
cRW
cTH
-cVI
-cRS
-cYQ
+iMf
+xxJ
+lnO
dav
dcg
ddR
-cNd
+wKw
cNd
cMY
djz
@@ -156741,7 +157147,7 @@ cNd
cRX
cTI
cVJ
-cWY
+jJL
cYR
daw
dch
@@ -156993,17 +157399,17 @@ caE
cKa
cLI
cNd
-cNd
+lIV
cQv
cRY
cTJ
-cVK
+tXb
cXc
cYS
dax
dci
-cNd
-cNd
+nqC
+paH
cNd
cMY
djB
@@ -157507,17 +157913,17 @@ caE
cKg
cLI
cNd
-cNd
-cNd
+oKZ
+kiv
cRZ
cTL
-cVK
-cXd
-cYU
+hDD
+mTS
+oJE
day
dcj
ddR
-cNd
+wKw
cNd
cMY
djD
@@ -158021,17 +158427,17 @@ cqL
cKi
cLI
cNd
-cNd
+lIV
cQv
cSb
cTM
-cVK
-cXd
-cYU
+tXb
+oCR
+cYS
daz
dcl
-cNd
-cNd
+nqC
+paH
cNd
cMY
sYo
@@ -158535,17 +158941,17 @@ cjp
cJZ
cLI
cNd
-cNd
-cNd
+oKZ
+kiv
cSc
cTO
-cVN
+hDD
cXg
-cYU
+oJE
dav
dcm
ddR
-cNd
+wKw
cNd
cMY
djH
@@ -159049,17 +159455,17 @@ ceb
cJZ
cLI
cNd
-cNd
+lIV
cQv
cSe
cTJ
-cVI
-cRS
-cYQ
+qMB
+jyy
+fdK
daA
dco
-cNd
-cNd
+nqC
+paH
cNd
cMY
djJ
diff --git a/_maps/shuttles/pirate_default.dmm b/_maps/shuttles/pirate_default.dmm
index e23159a2bd..56d0ca606f 100644
--- a/_maps/shuttles/pirate_default.dmm
+++ b/_maps/shuttles/pirate_default.dmm
@@ -1,102 +1,415 @@
//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
"aa" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 1
+/obj/machinery/porta_turret/syndicate/energy/pirate{
+ dir = 1;
+ faction = list("pirate");
+ icon_state = "standard_lethal"
},
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/machinery/airalarm/all_access{
- dir = 4;
- pixel_x = -24
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/pod/dark,
+/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
/area/shuttle/pirate)
"ab" = (
-/obj/structure/table,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/recharger,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
+/obj/structure/grille,
+/turf/open/floor/plating/airless,
/area/shuttle/pirate)
"ac" = (
-/obj/machinery/computer/shuttle/pirate,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 8
+/obj/structure/girder,
+/obj/item/stack/rods{
+ amount = 3
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/shuttle/pirate)
"ad" = (
-/obj/structure/table,
-/obj/machinery/button/door{
- id = "piratebridge";
- name = "Bridge Shutters Control";
- pixel_y = -5
+/obj/structure/girder,
+/obj/item/stack/rods{
+ amount = 5
},
-/obj/item/radio/intercom{
- pixel_y = 5
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plating/airless,
/area/shuttle/pirate)
"ae" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
+/turf/closed/wall/r_wall/syndicate/pirate,
/area/shuttle/pirate)
"af" = (
/turf/template_noop,
/area/template_noop)
"ag" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 1
- },
-/turf/open/floor/plasteel/dark,
+/obj/structure/window/reinforced,
+/obj/structure/frame/machine,
+/obj/item/crowbar,
+/turf/open/floor/plating/airless,
/area/shuttle/pirate)
"ah" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
+/obj/structure/window/reinforced,
+/obj/structure/frame/machine,
+/obj/item/stack/cable_coil/cut/red,
+/turf/open/floor/plating/airless,
/area/shuttle/pirate)
"ai" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
+/obj/structure/window/reinforced{
+ dir = 1;
+ pixel_y = 1
+ },
+/obj/structure/frame/computer{
+ anchored = 1
},
/obj/effect/decal/cleanable/dirt,
-/obj/machinery/light/small,
/turf/open/floor/pod/dark,
/area/shuttle/pirate)
"aj" = (
/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
/area/shuttle/pirate)
"ak" = (
-/obj/machinery/airalarm/all_access{
+/obj/structure/grille,
+/obj/structure/window/plastitanium/pirate,
+/obj/machinery/door/poddoor/shutters{
+ id = "cuttershutters";
+ name = "Blast Shutters"
+ },
+/turf/open/floor/plating,
+/area/shuttle/pirate)
+"al" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/airalarm/syndicate{
dir = 4;
pixel_x = -24
},
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"am" = (
+/obj/structure/rack,
+/obj/machinery/nuclearbomb/beer{
+ desc = "A nuclear fission warhead designed to be fired from a high-speed matter-propellent cannon to turn some unlucky sod in the distance into a sun. This one has a jolly roger crudely painted on the side of it. Interestingly, there's a tap on the back and it sloshes when it moves.";
+ name = "\improper Very Real Nuclear Explosive"
+ },
/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"an" = (
+/obj/machinery/porta_turret/syndicate/energy/pirate{
+ dir = 4;
+ faction = list("pirate");
+ icon_state = "standard_lethal"
+ },
+/turf/closed/wall/r_wall/syndicate/pirate,
+/area/shuttle/pirate)
+"aq" = (
+/obj/structure/rack,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"ar" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
+ },
+/obj/machinery/light/small{
+ dir = 4
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/airalarm/syndicate{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"as" = (
+/obj/machinery/door/airlock/hatch{
+ aiControlDisabled = 1;
+ name = "Port Gun Battery";
+ req_access_txt = "150"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/barricade/wooden/crude{
+ layer = 3.13
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"at" = (
+/obj/machinery/door/poddoor/shutters/preopen{
+ id = "piratebridge"
+ },
+/obj/structure/grille,
+/obj/structure/window/plastitanium/pirate,
+/obj/machinery/door/poddoor/shutters{
+ id = "cuttershutters";
+ name = "Blast Shutters"
+ },
+/turf/open/floor/plating,
+/area/shuttle/pirate)
+"ay" = (
+/obj/machinery/recharger{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/structure/table/reinforced,
+/obj/machinery/button/door{
+ id = "cuttershutters";
+ name = "Corvette Shutters Control";
+ pixel_x = 6;
+ pixel_y = -3;
+ req_access_txt = "150"
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"az" = (
+/obj/machinery/door/airlock/hatch{
+ aiControlDisabled = 1;
+ name = "Starboard Gun Battery";
+ req_access_txt = "150"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/barricade/wooden/crude{
+ layer = 3.13
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"aA" = (
+/obj/machinery/porta_turret/syndicate/energy/pirate{
+ dir = 8;
+ faction = list("pirate");
+ icon_state = "standard_lethal"
+ },
+/turf/closed/wall/r_wall/syndicate/pirate,
+/area/shuttle/pirate)
+"aB" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/shuttle/pirate)
+"aC" = (
+/obj/structure/rack{
+ icon = 'icons/obj/stationobjs.dmi';
+ icon_state = "minibar_left";
+ name = "skeletal minibar"
+ },
+/obj/machinery/chem_dispenser/drinks{
+ dir = 0;
+ pixel_y = 12
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/shuttle/pirate)
+"aD" = (
+/obj/structure/rack{
+ icon = 'icons/obj/stationobjs.dmi';
+ icon_state = "minibar_right";
+ name = "skeletal minibar"
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/item/bedsheet/pirate{
+ pixel_y = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light{
+ dir = 1
+ },
+/turf/open/floor/plasteel,
+/area/shuttle/pirate)
+"aE" = (
+/obj/machinery/vending/boozeomat,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/shuttle/pirate)
+"aF" = (
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/computer/shuttle/pirate,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"aG" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 8
+ },
+/obj/machinery/turretid{
+ icon_state = "control_kill";
+ lethal = 1;
+ locked = 0;
+ pixel_y = -24;
+ req_access = "150"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 9
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"aH" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/airalarm/syndicate{
+ dir = 1;
+ pixel_y = -24
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"aI" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on,
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"aJ" = (
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"aK" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/machinery/button/door{
+ id = "piratebridgebolt";
+ name = "Bridge Bolt Control";
+ normaldoorcontrol = 1;
+ pixel_y = -24;
+ req_access_txt = "150";
+ specialfunctions = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"aL" = (
+/obj/machinery/computer/security,
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/stripes/corner,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"aM" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/backpack/duffelbag/med{
+ pixel_y = 8
+ },
+/obj/item/wirecutters{
+ pixel_y = 8
+ },
+/obj/item/weldingtool/mini{
+ pixel_y = -6
+ },
+/obj/item/reagent_containers/medspray/sterilizine{
+ pixel_x = 6;
+ pixel_y = -12
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"aN" = (
+/obj/structure/table/optable,
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/robot_debris{
+ layer = 2.81;
+ pixel_x = -2;
+ pixel_y = 6
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/contraband/random{
+ pixel_y = 32
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot_white,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/pirate)
+"aO" = (
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/frame/computer{
+ anchored = 1;
+ dir = 8
+ },
+/obj/structure/sign/departments/showers{
+ pixel_y = 32
+ },
+/obj/item/shard{
+ pixel_x = -4;
+ pixel_y = -4
+ },
+/obj/effect/decal/cleanable/glass,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/bot_white,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/pirate)
+"aP" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"aQ" = (
+/obj/machinery/shuttle_scrambler,
+/obj/item/radio/intercom{
+ freerange = 1;
+ name = "Station Intercom (General)";
+ pixel_x = -26
+ },
+/obj/effect/turf_decal/box,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light{
+ dir = 8
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"aR" = (
/obj/machinery/light/small{
dir = 8
},
@@ -116,31 +429,30 @@
pixel_y = -6
},
/obj/item/reagent_containers/food/snacks/chocolatebar,
-/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
},
/obj/item/reagent_containers/food/condiment/milk,
-/obj/item/reagent_containers/food/condiment/milk,
+/obj/effect/decal/cleanable/dirt,
/turf/open/floor/plasteel,
/area/shuttle/pirate)
-"al" = (
-/obj/machinery/loot_locator,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/red{
+"aS" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
dir = 1
},
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel,
/area/shuttle/pirate)
-"am" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
+"aT" = (
+/obj/machinery/door/airlock/hatch{
+ aiControlDisabled = 1;
+ id_tag = "piratebridgebolt";
+ name = "Bridge";
+ req_access_txt = "150"
+ },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -151,60 +463,82 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
-/turf/open/floor/plasteel/dark,
-/area/shuttle/pirate)
-"an" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 4
- },
-/obj/machinery/button/door{
- id = "piratebridgebolt";
- name = "Bridge Bolt Control";
- normaldoorcontrol = 1;
- pixel_y = -24;
- specialfunctions = 4
- },
-/obj/effect/turf_decal/tile/red,
-/turf/open/floor/plasteel/dark,
-/area/shuttle/pirate)
-"ao" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 1
- },
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/airalarm/all_access{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/pod/dark,
-/area/shuttle/pirate)
-"ap" = (
-/obj/machinery/door/airlock/hatch{
- name = "Port Gun Battery"
- },
-/obj/structure/barricade/wooden/crude,
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/firedoor,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"aU" = (
+/obj/structure/table/reinforced,
+/obj/structure/window/reinforced,
+/obj/item/book/manual/wiki/surgery{
+ pixel_x = -2;
+ pixel_y = 4
+ },
+/obj/item/clipboard{
+ pixel_x = 2
+ },
+/obj/item/clothing/gloves/color/latex,
+/obj/item/clothing/suit/apron/surgical,
+/obj/item/clothing/mask/surgical,
+/obj/item/surgical_drapes,
+/obj/item/scalpel{
+ pixel_y = 16
+ },
+/obj/item/wrench{
+ pixel_y = 12
+ },
+/obj/item/pen{
+ pixel_x = -4;
+ pixel_y = 12
+ },
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/pod/dark,
/area/shuttle/pirate)
-"aq" = (
-/obj/structure/chair/stool,
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+"aV" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"aW" = (
+/obj/structure/window/reinforced{
dir = 4
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
+/obj/structure/window/reinforced,
+/obj/structure/sink{
+ dir = 4;
+ pixel_x = 6
+ },
+/obj/machinery/shower{
+ dir = 1;
+ pixel_y = 4
+ },
+/obj/structure/curtain,
+/obj/effect/decal/cleanable/blood/old,
+/obj/structure/window/reinforced{
+ dir = 1;
+ pixel_y = 1
},
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"ar" = (
/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/box/white,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"aX" = (
+/obj/structure/closet/crate/medical,
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/clothing/under/rank/medical/doctor/blue,
+/obj/item/clothing/shoes/sneakers/white,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"aY" = (
/obj/structure/table,
/obj/item/storage/fancy/cigarettes{
pixel_x = 2;
@@ -232,388 +566,853 @@
pixel_x = -10;
pixel_y = -2
},
-/obj/effect/decal/cleanable/dirt,
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
},
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"as" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on,
-/obj/structure/closet/secure_closet/personal,
/obj/effect/decal/cleanable/dirt,
-/obj/item/bedsheet/pirate,
+/obj/structure/sign/poster/official/high_class_martini{
+ pixel_x = -32
+ },
/turf/open/floor/plasteel,
/area/shuttle/pirate)
-"at" = (
-/obj/structure/closet/secure_closet/personal,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/obj/item/bedsheet/pirate,
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"au" = (
-/obj/machinery/door/airlock/hatch{
- id_tag = "piratebridgebolt";
- name = "Bridge"
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/turf_decal/tile/neutral{
+"aZ" = (
+/obj/structure/chair/stool,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
dir = 8
},
-/turf/open/floor/plasteel/dark,
+/turf/open/floor/plasteel,
/area/shuttle/pirate)
-"av" = (
-/obj/machinery/door/airlock/hatch{
- name = "Starboard Gun Battery"
+"ba" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/bottle/whiskey{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/item/shard,
+/obj/item/chair/stool/bar,
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/glass,
+/turf/open/floor/plasteel,
+/area/shuttle/pirate)
+"bb" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/flask,
+/obj/item/reagent_containers/food/condiment/milk{
+ pixel_x = -12;
+ pixel_y = 4
+ },
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = 32
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel,
+/area/shuttle/pirate)
+"bc" = (
+/obj/structure/chair/comfy/shuttle{
+ dir = 1
},
-/obj/structure/barricade/wooden/crude,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
/obj/effect/decal/cleanable/dirt,
/turf/open/floor/pod/dark,
/area/shuttle/pirate)
-"aw" = (
+"bd" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"be" = (
+/obj/machinery/loot_locator,
+/obj/item/radio/intercom{
+ dir = 4;
+ name = "Station Intercom (General)";
+ pixel_x = 27
+ },
+/obj/effect/turf_decal/box,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light{
+ dir = 4
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bf" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bg" = (
+/obj/machinery/power/apc{
+ dir = 1;
+ name = "Pirate Corvette APC";
+ pixel_y = 23;
+ req_access = null
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-2"
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bh" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bi" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/door/poddoor/shutters{
+ id = "cuttermedbay";
+ name = "Blast Shutters"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bj" = (
+/obj/effect/turf_decal/caution/stand_clear/white{
+ dir = 4
+ },
+/obj/effect/turf_decal/bot_white,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/firedoor,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bk" = (
+/obj/structure/sign/departments/medbay/alt{
+ pixel_x = -32;
+ pixel_y = 32
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bl" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bm" = (
+/obj/effect/decal/cleanable/vomit/old,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bn" = (
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bo" = (
+/obj/machinery/sleeper{
+ dir = 8
+ },
+/obj/effect/turf_decal/delivery,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/official/medical_green_cross{
+ pixel_x = 32
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bq" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/pirate)
+"br" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/pirate)
+"bs" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/pirate)
+"bt" = (
+/obj/structure/chair/stool/bar,
+/obj/item/shard,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/glass,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/pirate)
+"bu" = (
+/obj/structure/chair/office/dark{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/departments/cargo{
+ pixel_x = -32
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bv" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bw" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/turf_decal/stripes/line{
+ dir = 1
+ },
+/obj/structure/cable/yellow{
+ icon_state = "2-4"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bx" = (
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/corner,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"by" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bz" = (
+/obj/effect/turf_decal/stripes/line,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bA" = (
+/obj/effect/turf_decal/delivery,
+/obj/machinery/door/poddoor/shutters{
+ id = "cuttermedbay";
+ name = "Blast Shutters"
+ },
+/obj/machinery/button/door{
+ id = "cuttermedbay";
+ pixel_y = -24;
+ req_access_txt = "150"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bB" = (
+/obj/effect/turf_decal/caution/stand_clear/white{
+ dir = 4
+ },
+/obj/effect/turf_decal/bot_white,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/machinery/door/firedoor,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bC" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/sign/departments/examroom{
+ pixel_x = -32;
+ pixel_y = -32
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bD" = (
+/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/corner,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bF" = (
+/obj/effect/turf_decal/stripes/white/line{
+ dir = 9
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/structure/sign/directions/dorms{
+ dir = 1;
+ pixel_y = -22
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bG" = (
+/obj/machinery/sleeper{
+ dir = 8
+ },
+/obj/effect/turf_decal/delivery,
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/firealarm{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bH" = (
+/obj/structure/table,
+/obj/machinery/microwave{
+ pixel_y = 5
+ },
+/obj/item/book/manual/wiki/barman_recipes{
+ pixel_x = -8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/pirate)
+"bI" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 5
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"ax" = (
-/obj/machinery/firealarm{
- pixel_y = 24
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"ay" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 10
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/vomit/old,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"az" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/machinery/chem_dispenser/drinks{
- dir = 8
- },
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"aA" = (
-/obj/structure/closet/secure_closet/personal,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line,
-/obj/item/bedsheet/pirate,
-/turf/open/floor/wood,
-/area/shuttle/pirate)
-"aB" = (
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/computer/monitor/secret{
- dir = 8
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/airalarm/all_access{
+/obj/item/chair/stool,
+/obj/machinery/light,
+/obj/machinery/airalarm/syndicate{
dir = 1;
pixel_y = -24
},
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
/turf/open/floor/plasteel/dark,
/area/shuttle/pirate)
-"aC" = (
-/obj/machinery/shuttle_scrambler,
+"bJ" = (
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/red{
- dir = 1
- },
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/turf/open/floor/plasteel/dark,
-/area/shuttle/pirate)
-"aD" = (
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"aF" = (
-/obj/machinery/door/airlock/external/glass{
- id_tag = "pirateportexternal"
- },
-/obj/effect/mapping_helpers/airlock/locked,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"aG" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/power/port_gen/pacman{
- anchored = 1
- },
-/obj/structure/cable{
- icon_state = "0-4"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"aH" = (
-/obj/structure/shuttle/engine/propulsion/left,
-/turf/open/floor/plating/airless,
-/area/shuttle/pirate)
-"aI" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/structure/sign/warning/vacuum/external{
- pixel_x = -32
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"aJ" = (
-/obj/machinery/door/airlock/external/glass{
- id_tag = "pirateportexternal"
- },
-/obj/effect/mapping_helpers/airlock/locked,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
-/obj/structure/fans/tiny,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"aK" = (
-/obj/structure/shuttle/engine/propulsion,
-/turf/open/floor/plating/airless,
-/area/shuttle/pirate)
-"aL" = (
/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"aN" = (
-/obj/machinery/light/small,
-/obj/machinery/button/door{
- id = "pirateportexternal";
- name = "External Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = -4;
- pixel_y = -24;
- specialfunctions = 4
- },
-/obj/effect/turf_decal/stripes/corner{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"aO" = (
-/obj/machinery/light/small,
-/obj/machinery/button/door{
- id = "piratestarboardexternal";
- name = "External Bolt Control";
- normaldoorcontrol = 1;
- pixel_x = 4;
- pixel_y = -24;
- specialfunctions = 4
- },
-/obj/effect/turf_decal/stripes/corner,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"aQ" = (
-/obj/machinery/porta_turret/syndicate/energy/pirate{
- dir = 1;
- faction = list("pirate");
- icon_state = "standard_lethal"
- },
-/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
-/area/shuttle/pirate)
-"aR" = (
-/obj/machinery/porta_turret/syndicate/energy/pirate{
- faction = list("pirate");
- icon_state = "standard_lethal"
- },
-/turf/closed/wall/r_wall/syndicate/pirate,
-/area/shuttle/pirate)
-"aS" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"aU" = (
-/obj/structure/sign/departments/engineering,
-/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
-/area/shuttle/pirate)
-"aV" = (
-/obj/effect/mob_spawn/human/pirate{
- dir = 1
- },
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
/turf/open/floor/plasteel/dark,
/area/shuttle/pirate)
-"aW" = (
-/obj/machinery/light/small{
- dir = 8
+"bK" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
},
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/pirate)
+"bL" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/hatch{
+ aiControlDisabled = 1;
+ name = "Spirits Lounge";
+ req_access_txt = "150"
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bM" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bN" = (
/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate{
dir = 4;
+ req_access = "150";
x_offset = -3;
y_offset = 7
},
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bO" = (
+/obj/machinery/computer/monitor/secret{
+ dir = 8
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-8"
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bP" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/backpack/duffelbag/syndie/x4{
+ pixel_y = 8
+ },
+/obj/item/grenade/smokebomb{
+ pixel_x = -5
+ },
+/obj/item/grenade/smokebomb{
+ pixel_x = 5
+ },
+/obj/effect/turf_decal/box/red,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bQ" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/pirate)
+"bR" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/vending/cigarette,
+/obj/effect/turf_decal/box/white,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bS" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/corner,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"bT" = (
+/obj/structure/table/reinforced,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/reagent_containers/glass/bottle/bicaridine{
+ pixel_x = -6;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/kelotane{
+ pixel_x = 2;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/glass/bottle/antitoxin{
+ layer = 3.01;
+ pixel_x = 2
+ },
+/obj/item/reagent_containers/glass/bottle/epinephrine{
+ layer = 3.01;
+ pixel_x = -6
+ },
+/obj/item/clipboard{
+ layer = 2.99;
+ pixel_x = 16;
+ pixel_y = 4
+ },
+/obj/item/reagent_containers/syringe{
+ pixel_x = 14;
+ pixel_y = 6
+ },
+/obj/item/reagent_containers/dropper{
+ pixel_x = 15;
+ pixel_y = -2
+ },
+/obj/item/reagent_containers/hypospray/medipen{
+ pixel_x = 16;
+ pixel_y = 11
+ },
+/obj/item/reagent_containers/hypospray/medipen{
+ pixel_x = 16;
+ pixel_y = 7
+ },
+/obj/machinery/light,
+/obj/machinery/airalarm/syndicate{
+ dir = 1;
+ pixel_y = -24
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bU" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/box/bodybags{
+ pixel_y = 4
+ },
+/obj/item/reagent_containers/spray/cleaner{
+ pixel_x = 8;
+ pixel_y = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/reagent_containers/glass/bottle/charcoal{
+ layer = 3.01;
+ pixel_x = -6
+ },
+/obj/item/reagent_containers/glass/bottle/dexalin{
+ layer = 3.01;
+ pixel_x = 2
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bV" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/hatch{
+ aiControlDisabled = 1;
+ name = "Captain's Quarters";
+ req_access_txt = "150"
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bX" = (
+/obj/item/shard{
+ pixel_x = 6;
+ pixel_y = 6
+ },
+/obj/effect/decal/cleanable/glass,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/bot_white,
+/obj/machinery/door/window/southleft{
+ name = "Surgical Ward";
+ req_access_txt = "150"
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"bZ" = (
+/obj/machinery/computer/piratepad_control{
+ dir = 0
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/directions/medical{
+ dir = 4;
+ pixel_y = 22
+ },
+/obj/structure/sign/directions/supply{
+ pixel_y = 30
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"ca" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 1
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/pirate)
+"cb" = (
+/obj/effect/turf_decal/stripes/red/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/pirate)
+"cc" = (
+/obj/machinery/piratepad{
+ pixel_y = 6
+ },
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/box,
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/structure/sign/directions/command{
+ dir = 1;
+ pixel_y = 22
+ },
+/obj/structure/sign/directions/engineering{
+ pixel_y = 30
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cd" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/hatch{
+ aiControlDisabled = 1;
+ name = "Crew's Quarters";
+ req_access_txt = "150"
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"ce" = (
+/obj/structure/closet/secure_closet/personal/cabinet,
+/obj/item/bedsheet/pirate,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/wood,
+/area/shuttle/pirate)
+"cf" = (
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/wood,
+/area/shuttle/pirate)
+"cg" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/wood,
+/area/shuttle/pirate)
+"ch" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/turf/open/floor/wood,
+/area/shuttle/pirate)
+"ci" = (
+/obj/structure/closet/crate,
+/obj/item/storage/bag/money/vault,
+/obj/item/stack/sheet/mineral/gold{
+ amount = 3;
+ pixel_x = -2;
+ pixel_y = 2
+ },
+/obj/item/stack/sheet/mineral/silver{
+ amount = 8;
+ pixel_x = 2;
+ pixel_y = -1
+ },
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cj" = (
+/obj/machinery/vending/dinnerware,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/firealarm{
+ dir = 4;
+ pixel_x = -24
+ },
+/obj/effect/turf_decal/bot_white,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/pirate)
+"ck" = (
+/turf/open/floor/plating/airless,
+/area/shuttle/pirate)
+"cl" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/vomit/old,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cm" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"cn" = (
+/obj/item/tank/internals/oxygen/yellow,
+/obj/item/clothing/suit/space/syndicate/green/dark{
+ pixel_x = 2;
+ pixel_y = -2
+ },
+/obj/item/clothing/head/helmet/space/syndicate/green/dark{
+ pixel_x = -4;
+ pixel_y = 4
+ },
+/obj/item/tank/jetpack/carbondioxide{
+ pixel_x = -2;
+ pixel_y = -2
+ },
+/obj/item/clothing/mask/breath,
+/obj/structure/closet/crate/large,
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = -32
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"co" = (
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/bot,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cp" = (
+/obj/structure/cable/yellow{
+ icon_state = "1-2"
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cq" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/pirate)
+"cr" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/turf/open/floor/plasteel/dark,
+/area/shuttle/pirate)
+"cs" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
/obj/effect/decal/cleanable/dirt,
/obj/machinery/firealarm{
dir = 1;
pixel_y = -24
},
-/obj/effect/turf_decal/tile/red,
-/obj/effect/turf_decal/tile/red{
- dir = 4
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
+/obj/machinery/light,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/mineral/plastitanium/red,
/area/shuttle/pirate)
-"be" = (
-/obj/machinery/space_heater,
-/obj/effect/turf_decal/bot,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
+"ct" = (
+/obj/structure/mirror{
+ pixel_y = 32
},
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/decal/cleanable/oil,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"bf" = (
-/obj/structure/chair/comfy/shuttle{
- dir = 8
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/turretid{
- icon_state = "control_kill";
- lethal = 1;
- locked = 0;
- pixel_y = -24;
- req_access = null
- },
-/obj/effect/turf_decal/tile/red{
- dir = 8
- },
-/turf/open/floor/plasteel/dark,
-/area/shuttle/pirate)
-"bg" = (
-/obj/effect/turf_decal/stripes/line,
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/item/gun/energy/laser{
- pixel_x = -3;
- pixel_y = 6
- },
-/obj/item/gun/energy/laser{
- pixel_y = 3
- },
-/obj/machinery/recharger,
-/turf/open/floor/pod/light,
-/area/shuttle/pirate)
-"bk" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/obj/machinery/power/smes/engineering{
- charge = 1e+006
- },
-/obj/structure/cable,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"bl" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 6
- },
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/machinery/airalarm/all_access{
+/obj/structure/sink{
pixel_y = 24
},
+/obj/structure/curtain,
+/obj/machinery/shower{
+ dir = 1
+ },
/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/item/gun/energy/laser{
- pixel_x = -3;
- pixel_y = 6
- },
-/obj/item/gun/energy/laser{
- pixel_y = 3
- },
-/turf/open/floor/pod/light,
-/area/shuttle/pirate)
-"bm" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/turf_decal/box/white,
/turf/open/floor/pod/dark,
/area/shuttle/pirate)
-"bo" = (
-/obj/machinery/light/small{
- dir = 4
+"cu" = (
+/obj/structure/table/reinforced,
+/obj/machinery/recharger,
+/obj/item/gun/energy/laser{
+ pixel_x = -3;
+ pixel_y = 2
},
-/obj/structure/sign/warning/vacuum/external{
+/obj/item/gun/energy/laser{
+ pixel_y = -1
+ },
+/obj/item/gun/energy/laser{
+ pixel_x = 2;
+ pixel_y = -4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/contraband/random{
pixel_x = 32
},
-/turf/open/floor/plating,
+/turf/open/floor/pod/dark,
/area/shuttle/pirate)
-"br" = (
+"cv" = (
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/old,
+/obj/structure/chair/wood/normal{
+ dir = 4
+ },
+/turf/open/floor/wood,
+/area/shuttle/pirate)
+"cw" = (
/obj/structure/table/wood,
/obj/item/storage/box/matches,
/obj/item/reagent_containers/food/drinks/bottle/rum{
@@ -627,244 +1426,398 @@
},
/obj/item/clothing/mask/cigarette/cigar,
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/stripes/line,
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/machinery/light,
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = 32
+ },
/turf/open/floor/wood,
/area/shuttle/pirate)
-"bt" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 10
- },
-/obj/machinery/light/small{
- dir = 1
- },
-/obj/machinery/firealarm{
- pixel_y = 24
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/item/melee/transforming/energy/sword/pirate{
- pixel_x = -1;
- pixel_y = 6
- },
-/obj/item/melee/transforming/energy/sword/pirate{
- pixel_x = 6;
- pixel_y = 6
- },
-/obj/item/melee/transforming/energy/sword/pirate{
- pixel_x = 13;
- pixel_y = 6
- },
-/turf/open/floor/pod/light,
-/area/shuttle/pirate)
-"bu" = (
-/obj/machinery/firealarm{
- pixel_y = 24
- },
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"bv" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 9
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"bx" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"by" = (
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/piratepad,
-/turf/open/floor/pod/dark,
-/area/shuttle/pirate)
-"bA" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/pod/dark,
-/area/shuttle/pirate)
-"bB" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"bC" = (
-/obj/machinery/airalarm/all_access{
- dir = 8;
- pixel_x = 24
- },
-/obj/machinery/light/small{
- dir = 4
- },
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral,
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"bF" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/machinery/microwave{
- pixel_y = 5
- },
-/obj/item/book/manual/wiki/barman_recipes{
- pixel_x = -8
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"bH" = (
-/obj/machinery/vending/boozeomat,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"bI" = (
-/obj/machinery/light/small,
-/obj/machinery/computer/piratepad_control{
- dir = 1
- },
-/turf/open/floor/pod/dark,
-/area/shuttle/pirate)
-"bJ" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
+"cy" = (
+/obj/effect/mob_spawn/human/pirate/captain{
dir = 8
},
/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
- },
-/turf/open/floor/plasteel,
+/obj/effect/decal/cleanable/blood/old,
+/turf/open/floor/wood,
/area/shuttle/pirate)
-"bK" = (
+"cz" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/sink{
- pixel_y = 24
- },
-/obj/structure/toilet{
- dir = 8
- },
-/obj/machinery/light/small,
+/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
+/area/shuttle/pirate)
+"cA" = (
/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 8
- },
-/turf/open/floor/plasteel/showroomfloor,
-/area/shuttle/pirate)
-"bM" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/door/airlock{
- name = "Crew Cabin"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/neutral{
dir = 1
},
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/mob_spawn/human/pirate{
+ dir = 1
},
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/effect/turf_decal/box/red,
+/obj/machinery/firealarm{
+ dir = 1;
+ pixel_y = -24
+ },
+/obj/machinery/light,
+/obj/structure/sign/poster/contraband/random{
+ pixel_x = -32
},
/turf/open/floor/plasteel/dark,
/area/shuttle/pirate)
-"bO" = (
-/obj/structure/cable{
- icon_state = "0-2"
- },
-/obj/machinery/power/apc{
- dir = 1;
- name = "Pirate Corvette APC";
- pixel_y = 23;
- req_access = null
- },
-/obj/structure/reagent_dispensers/watertank,
-/obj/effect/turf_decal/bot,
+"cB" = (
/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"bP" = (
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+/obj/effect/mob_spawn/human/pirate{
dir = 1
},
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
+/obj/effect/turf_decal/box/red,
+/turf/open/floor/plasteel/dark,
/area/shuttle/pirate)
-"bQ" = (
-/obj/structure/cable{
+"cC" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/bot,
+/obj/structure/closet/crate/large,
+/obj/machinery/jukebox{
+ anchored = 0;
+ desc = "Formally known as the SSDD, the Space Shanty Delivery Device is employed by various rings of the piracy scene for its capability of raising crew morale with its inspiring tunes. Unfortunately, this one doesn't seem as if it has many records pertaining to its designated topic on hand.";
+ name = "\improper Space Shanty Delivery Device";
+ req_one_access = null
+ },
+/obj/item/clothing/head/collectable/pirate{
+ pixel_x = 1;
+ pixel_y = 4
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cD" = (
+/obj/machinery/suit_storage_unit/pirate,
+/obj/effect/turf_decal/box,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/bot,
+/obj/structure/closet/crate/large,
+/obj/structure/reagent_dispensers/fueltank,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cF" = (
+/obj/structure/shuttle/engine/heater,
+/obj/effect/spawner/structure/window/plastitanium/pirate,
+/obj/structure/window/reinforced/tinted{
+ layer = 3.1
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/pirate)
+"cG" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
+/area/shuttle/pirate)
+"cH" = (
+/obj/structure/table/reinforced,
+/obj/item/stack/sheet/mineral/plastitanium{
+ amount = 20
+ },
+/obj/item/stack/cable_coil/yellow{
+ pixel_x = -2;
+ pixel_y = 2
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/item/stack/cable_coil/yellow{
+ pixel_x = 2;
+ pixel_y = -2
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cI" = (
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/tank_dispenser/oxygen,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium,
+/area/shuttle/pirate)
+"cJ" = (
+/obj/structure/table/reinforced,
+/obj/item/pickaxe,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/pickaxe{
+ pixel_x = 6;
+ pixel_y = 6
+ },
+/obj/item/extinguisher/mini{
+ pixel_x = 4
+ },
+/obj/item/extinguisher/mini{
+ pixel_x = -2;
+ pixel_y = 2
+ },
+/obj/item/flashlight/seclite{
+ pixel_x = -12;
+ pixel_y = 6
+ },
+/obj/item/flashlight/seclite{
+ pixel_x = -10
+ },
+/obj/item/crowbar/red{
+ pixel_x = -20;
+ pixel_y = 2
+ },
+/obj/item/crowbar/red{
+ pixel_x = -16;
+ pixel_y = -4
+ },
+/obj/structure/sign/poster/contraband/random{
+ pixel_y = -32
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cK" = (
+/obj/structure/table/reinforced,
+/obj/item/storage/box/lethalshot{
+ pixel_y = 8
+ },
+/obj/item/gun/ballistic/shotgun/automatic/combat{
+ pixel_y = 16
+ },
+/obj/item/melee/transforming/energy/sword/pirate{
+ pixel_x = -1;
+ pixel_y = 0
+ },
+/obj/item/melee/transforming/energy/sword/pirate{
+ pixel_x = 6;
+ pixel_y = 0
+ },
+/obj/item/melee/transforming/energy/sword/pirate{
+ pixel_x = 13;
+ pixel_y = 0
+ },
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cL" = (
+/obj/structure/closet/secure_closet/personal,
+/obj/item/bedsheet/pirate,
+/obj/effect/decal/cleanable/dirt,
+/obj/item/bedsheet/pirate,
+/obj/item/storage/backpack/satchel,
+/turf/open/floor/plasteel/dark,
+/area/shuttle/pirate)
+"cM" = (
+/obj/structure/shuttle/engine/heater,
+/obj/effect/spawner/structure/window/plastitanium/pirate,
+/obj/structure/window/reinforced/tinted{
+ layer = 3.1
+ },
+/obj/structure/window/reinforced/tinted{
+ dir = 4;
+ layer = 3.1
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/pirate)
+"cN" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/dresser,
+/turf/open/floor/wood,
+/area/shuttle/pirate)
+"cO" = (
+/obj/structure/cable/yellow{
icon_state = "1-2"
},
/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
+/obj/machinery/door/firedoor,
+/obj/machinery/door/airlock/hatch{
+ aiControlDisabled = 1;
+ name = "Engineering";
+ req_access_txt = "150"
+ },
+/turf/open/floor/pod/dark,
/area/shuttle/pirate)
-"bX" = (
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/power/terminal{
+"cP" = (
+/obj/structure/shuttle/engine/heater,
+/obj/effect/spawner/structure/window/plastitanium/pirate,
+/obj/structure/window/reinforced/tinted{
+ layer = 3.1
+ },
+/obj/structure/window/reinforced/tinted{
+ dir = 8;
+ layer = 3.1
+ },
+/turf/open/floor/plating/airless,
+/area/shuttle/pirate)
+"cR" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/effect/turf_decal/stripes/corner{
+ dir = 8
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
-/obj/structure/cable{
- icon_state = "0-8"
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"cS" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 5
},
-/obj/structure/rack,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/machinery/airalarm/syndicate{
+ dir = 8;
+ pixel_x = 24
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"cT" = (
+/obj/structure/reagent_dispensers/watertank,
+/obj/effect/turf_decal/bot,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light,
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cV" = (
+/obj/machinery/suit_storage_unit/pirate,
+/obj/effect/turf_decal/box,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/sign/poster/official/safety_eye_protection{
+ pixel_x = -32
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"cW" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/firealarm{
+ pixel_y = 24
+ },
+/obj/effect/turf_decal/stripes/white/full,
+/obj/machinery/power/smes/engineering{
+ charge = 1e+006
+ },
+/obj/structure/cable/yellow{
+ icon_state = "0-4"
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"cX" = (
+/obj/effect/turf_decal/stripes/white/line{
+ dir = 8
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/visible{
+ dir = 6
+ },
+/obj/structure/cable/yellow{
+ icon_state = "4-8"
+ },
+/obj/structure/sign/warning/electricshock{
+ pixel_y = 32
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"cY" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/cable/yellow{
+ icon_state = "1-8"
+ },
+/obj/machinery/atmospherics/components/binary/pump/on{
+ dir = 4;
+ target_pressure = 405.3
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"cZ" = (
+/obj/structure/sign/warning/vacuum/external,
+/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
+/area/shuttle/pirate)
+"da" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 10
+ },
+/obj/structure/chair/comfy/shuttle{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/vomit/old,
+/obj/effect/decal/cleanable/dirt,
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"db" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 6
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/poster/official/safety_internals{
+ pixel_x = 32
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"dc" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/light{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot,
+/obj/machinery/meter,
+/obj/machinery/atmospherics/pipe/manifold4w/supply/visible,
+/obj/machinery/airalarm/syndicate{
+ pixel_y = 24
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"dd" = (
+/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{
+ dir = 8
+ },
+/obj/effect/turf_decal/box,
+/obj/structure/sign/departments/engineering{
+ pixel_y = 32
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"de" = (
+/obj/item/storage/box/lights/bulbs,
/obj/item/storage/toolbox/mechanical{
pixel_y = 4
},
+/obj/item/multitool,
+/obj/item/storage/belt/utility{
+ pixel_x = 2;
+ pixel_y = -4
+ },
/obj/item/flashlight{
pixel_x = 3;
pixel_y = 3
},
-/obj/item/storage/box/lights/bulbs,
/obj/item/stack/sheet/mineral/plasma{
amount = 10
},
-/obj/item/multitool,
-/obj/effect/turf_decal/stripes/line{
- dir = 1
- },
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"bZ" = (
-/obj/machinery/door/airlock/external/glass{
- id_tag = "piratestarboardexternal"
- },
-/obj/effect/mapping_helpers/airlock/locked,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper,
+/obj/structure/rack,
+/obj/effect/turf_decal/bot,
/obj/effect/decal/cleanable/dirt,
+/obj/structure/sign/warning/fire{
+ pixel_x = 32
+ },
/turf/open/floor/plating,
/area/shuttle/pirate)
-"ce" = (
-/obj/machinery/door/airlock/external/glass{
- id_tag = "piratestarboardexternal"
- },
-/obj/effect/mapping_helpers/airlock/locked,
-/obj/effect/mapping_helpers/airlock/cyclelink_helper{
- dir = 1
- },
+"dg" = (
/obj/docking_port/mobile/pirate{
dwidth = 11;
height = 16;
@@ -872,7 +1825,7 @@
movement_force = list("KNOCKDOWN" = 0, "THROW" = 0);
name = "Pirate Ship";
port_direction = 2;
- width = 17
+ width = 23
},
/obj/docking_port/stationary{
dwidth = 11;
@@ -882,612 +1835,798 @@
width = 17
},
/obj/structure/fans/tiny,
-/turf/open/floor/plating,
+/obj/machinery/door/poddoor/shutters{
+ id = "cuttereva";
+ name = "EVA Shutters"
+ },
+/obj/machinery/button/door{
+ id = "cuttereva";
+ name = "EVA Shutters";
+ pixel_x = 26;
+ req_access_txt = "150"
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/barricade/wooden/crude{
+ layer = 3.13
+ },
+/turf/open/floor/pod/dark,
/area/shuttle/pirate)
-"db" = (
-/obj/structure/shuttle/engine/heater,
-/obj/effect/spawner/structure/window/plastitanium/pirate,
+"dk" = (
+/obj/structure/shuttle/engine/large,
/turf/open/floor/plating/airless,
/area/shuttle/pirate)
-"df" = (
+"dl" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/machinery/door/window/eastleft{
+ name = "EVA Storage";
+ req_access_txt = "150"
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"dm" = (
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/white/line{
+ dir = 1
+ },
+/obj/machinery/power/terminal{
+ dir = 1
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/visible{
+ dir = 6
+ },
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable{
+ icon_state = "0-4"
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"dn" = (
+/obj/effect/turf_decal/stripes/white/corner{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/supply/visible{
+ dir = 4
+ },
+/obj/machinery/meter,
+/obj/effect/turf_decal/stripes/line,
+/obj/structure/cable{
+ icon_state = "4-8"
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"do" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/corner{
+ dir = 1
+ },
+/obj/structure/cable{
+ icon_state = "2-8"
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"dp" = (
+/obj/machinery/porta_turret/syndicate/energy/pirate{
+ faction = list("pirate");
+ icon_state = "standard_lethal"
+ },
+/turf/closed/wall/r_wall/syndicate/pirate,
+/area/shuttle/pirate)
+"dq" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/manifold/supply/visible{
+ dir = 8
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"dr" = (
+/obj/machinery/atmospherics/pipe/simple/supply/visible{
+ dir = 4
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"ds" = (
+/obj/item/crowbar,
+/obj/effect/decal/cleanable/oil,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/visible{
+ dir = 4
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"dt" = (
+/obj/machinery/door/airlock/external/glass{
+ aiControlDisabled = 1;
+ id_tag = "piratestarboardexternal";
+ name = "EVA Airlock";
+ req_access_txt = "150"
+ },
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+ dir = 4
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/door/firedoor,
+/obj/structure/barricade/wooden/crude{
+ layer = 3.13
+ },
+/turf/open/floor/pod/dark,
+/area/shuttle/pirate)
+"dv" = (
+/obj/effect/decal/cleanable/oil,
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/line{
+ dir = 4
+ },
+/obj/structure/window/reinforced{
+ dir = 4
+ },
+/obj/structure/sign/poster/official/wtf_is_co2{
+ pixel_y = -32
+ },
+/turf/open/floor/mineral/plastitanium/red,
+/area/shuttle/pirate)
+"dw" = (
+/obj/machinery/portable_atmospherics/canister/carbon_dioxide,
+/obj/effect/turf_decal/delivery,
+/obj/machinery/atmospherics/components/unary/portables_connector/visible{
+ dir = 1
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"dx" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/tank/air{
+ dir = 1
+ },
+/obj/effect/turf_decal/bot,
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"dy" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/power/port_gen/pacman{
+ anchored = 1
+ },
+/obj/item/wrench,
+/obj/effect/turf_decal/bot,
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/structure/cable,
+/turf/open/floor/plating,
+/area/shuttle/pirate)
+"dz" = (
+/obj/effect/decal/cleanable/blood/old,
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
+ dir = 1
+ },
+/obj/structure/sign/poster/contraband/random{
+ pixel_y = -32
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"dA" = (
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"dB" = (
+/obj/effect/decal/cleanable/vomit/old,
+/obj/effect/decal/cleanable/dirt,
+/obj/structure/closet/crate/large,
+/obj/item/stack/sheet/mineral/plastitanium{
+ amount = 20
+ },
+/obj/item/clothing/gloves/color/fyellow/old{
+ pixel_y = 2
+ },
+/obj/item/clothing/gloves/color/fyellow/old{
+ pixel_y = -2
+ },
+/turf/open/floor/pod/light,
+/area/shuttle/pirate)
+"dC" = (
+/obj/structure/shuttle/engine/propulsion/left,
+/turf/open/floor/plating,
+/area/shuttle/pirate)
+"dD" = (
+/obj/structure/shuttle/engine/propulsion,
+/turf/open/floor/plating,
+/area/shuttle/pirate)
+"dE" = (
+/obj/structure/shuttle/engine/propulsion/right,
+/turf/open/floor/plating,
+/area/shuttle/pirate)
+"kI" = (
+/obj/structure/sign/barsign,
+/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
+/area/shuttle/pirate)
+"mq" = (
+/obj/machinery/porta_turret/syndicate/energy/pirate{
+ dir = 8;
+ faction = list("pirate");
+ icon_state = "standard_lethal"
+ },
+/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
+/area/shuttle/pirate)
+"ol" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
+ dir = 1
+ },
+/obj/effect/decal/cleanable/dirt,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/shuttle/pirate)
+"pw" = (
/obj/machinery/porta_turret/syndicate/energy/pirate{
dir = 4;
faction = list("pirate");
icon_state = "standard_lethal"
},
-/turf/closed/wall/r_wall/syndicate/pirate,
+/turf/closed/wall/r_wall/syndicate/pirate/nodiagonal,
/area/shuttle/pirate)
-"dy" = (
-/obj/structure/chair/wood/normal,
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
+"sE" = (
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/shuttle/pirate)
+"un" = (
+/obj/effect/turf_decal/stripes/red/line{
+ dir = 8
+ },
+/turf/open/floor/wood,
+/area/shuttle/pirate)
+"vT" = (
+/obj/effect/turf_decal/tile/bar,
+/obj/effect/turf_decal/tile/bar{
dir = 1
},
-/obj/machinery/light/small{
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/old,
+/obj/machinery/atmospherics/pipe/simple/supply/hidden,
+/turf/open/floor/plasteel,
+/area/shuttle/pirate)
+"yP" = (
+/obj/machinery/atmospherics/pipe/simple/supply/hidden{
dir = 4
},
/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/wood,
-/area/shuttle/pirate)
-"dU" = (
-/obj/machinery/light/small{
- dir = 8
- },
-/obj/machinery/atmospherics/components/unary/vent_pump/on{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 8
+/obj/structure/sign/directions/dorms{
+ pixel_y = -22
},
/turf/open/floor/plasteel/dark,
/area/shuttle/pirate)
-"ek" = (
-/obj/effect/turf_decal/stripes/line,
+"BD" = (
/obj/effect/decal/cleanable/dirt,
-/obj/structure/table,
-/obj/structure/sign/poster/contraband/revolver{
- pixel_x = 32
- },
-/obj/item/storage/backpack/duffelbag/syndie/x4{
- pixel_y = 8
- },
-/obj/item/grenade/smokebomb{
- pixel_x = -5
- },
-/obj/item/grenade/smokebomb{
- pixel_x = 5
- },
-/obj/item/pickaxe/drill/diamonddrill,
-/obj/item/pickaxe/drill/diamonddrill,
-/obj/item/pickaxe/drill/diamonddrill,
-/turf/open/floor/pod/light,
-/area/shuttle/pirate)
-"ep" = (
-/obj/structure/window/reinforced{
- dir = 1;
- pixel_y = 1
- },
-/obj/structure/shuttle/engine/heater,
-/turf/open/floor/plating/airless,
-/area/shuttle/pirate)
-"er" = (
-/obj/structure/shuttle/engine/propulsion/right,
-/turf/open/floor/plating/airless,
-/area/shuttle/pirate)
-"et" = (
-/obj/structure/grille,
-/turf/open/floor/plating/airless,
-/area/shuttle/pirate)
-"eu" = (
-/obj/structure/girder,
-/obj/item/stack/rods{
- amount = 3
- },
-/turf/open/floor/plating/airless,
-/area/shuttle/pirate)
-"ew" = (
-/obj/structure/girder,
-/obj/item/stack/rods{
- amount = 5
- },
-/turf/open/floor/plating/airless,
-/area/shuttle/pirate)
-"ex" = (
-/obj/structure/window/reinforced,
-/obj/structure/frame/machine,
-/obj/item/wrench,
-/turf/open/floor/plating/airless,
-/area/shuttle/pirate)
-"ey" = (
-/obj/machinery/door/poddoor/shutters/preopen{
- id = "piratebridge"
- },
-/obj/structure/grille,
-/obj/structure/window/plastitanium/pirate,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"ez" = (
-/obj/structure/window/reinforced,
-/obj/structure/frame/machine,
-/obj/item/stack/cable_coil/cut/red,
-/turf/open/floor/plating/airless,
-/area/shuttle/pirate)
-"eA" = (
-/obj/structure/window/reinforced{
- dir = 1;
- pixel_y = 1
- },
-/obj/structure/frame/computer{
- anchored = 1
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/pod/dark,
-/area/shuttle/pirate)
-"eE" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
+/obj/effect/turf_decal/stripes/line{
dir = 6
},
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"fW" = (
-/turf/closed/wall/r_wall/syndicate/pirate,
-/area/shuttle/pirate)
-"fY" = (
-/obj/machinery/atmospherics/pipe/manifold/supply/hidden{
- dir = 1
- },
-/turf/open/floor/pod/dark,
-/area/shuttle/pirate)
-"gY" = (
/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/pod/dark,
-/area/shuttle/pirate)
-"km" = (
-/obj/machinery/atmospherics/components/unary/tank/air,
-/obj/effect/turf_decal/bot,
-/obj/machinery/firealarm{
- pixel_y = 24
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"mU" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/door/airlock/engineering{
- name = "Engineering"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/pod/dark,
-/area/shuttle/pirate)
-"np" = (
-/obj/structure/reagent_dispensers/fueltank,
-/obj/effect/turf_decal/bot,
-/obj/machinery/airalarm/all_access{
- pixel_y = 24
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"vB" = (
-/obj/effect/turf_decal/stripes/line{
dir = 9
},
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/rack{
- dir = 8;
- layer = 2.9
- },
-/obj/item/storage/box/lethalshot,
-/obj/item/gun/ballistic/shotgun/automatic/combat{
- pixel_x = -2;
- pixel_y = 2
- },
-/turf/open/floor/pod/light,
+/turf/open/floor/mineral/plastitanium/red,
/area/shuttle/pirate)
-"wf" = (
-/obj/machinery/door/airlock{
- name = "Unisex Restrooms"
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/turf/open/floor/plasteel/showroomfloor,
-/area/shuttle/pirate)
-"wR" = (
-/obj/machinery/porta_turret/syndicate/energy/pirate{
- dir = 8;
- faction = list("pirate");
- icon_state = "standard_lethal"
- },
-/turf/closed/wall/r_wall/syndicate/pirate,
-/area/shuttle/pirate)
-"yi" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 4
- },
-/obj/machinery/door/airlock/hatch{
- name = "Armory Access"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/pod/dark,
-/area/shuttle/pirate)
-"zw" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/machinery/door/airlock{
- name = "Captain's Quarters"
- },
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/wood,
-/area/shuttle/pirate)
-"Gk" = (
-/obj/effect/turf_decal/delivery,
-/obj/machinery/suit_storage_unit/pirate,
-/obj/effect/decal/cleanable/dirt,
-/turf/open/floor/plating,
-/area/shuttle/pirate)
-"JT" = (
-/obj/effect/turf_decal/stripes/line{
- dir = 5
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/closet/crate,
-/obj/item/storage/bag/money/vault,
-/obj/item/stack/sheet/mineral/gold{
- amount = 3;
- pixel_x = -2;
- pixel_y = 2
- },
-/obj/item/stack/sheet/mineral/silver{
- amount = 8;
- pixel_x = 2;
- pixel_y = -1
- },
-/turf/open/floor/pod/light,
-/area/shuttle/pirate)
-"Oe" = (
-/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,
+"HH" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
dir = 1
},
-/turf/open/floor/plasteel,
-/area/shuttle/pirate)
-"OD" = (
-/obj/machinery/airalarm/all_access{
- pixel_y = 24
- },
-/obj/structure/sign/poster/contraband/random{
- pixel_x = 32
- },
-/obj/effect/turf_decal/tile/neutral{
- dir = 1
- },
-/obj/effect/turf_decal/tile/neutral,
-/obj/effect/turf_decal/tile/neutral{
- dir = 4
- },
-/obj/effect/turf_decal/tile/neutral{
+/obj/effect/decal/cleanable/dirt,
+/obj/effect/decal/cleanable/blood/old,
+/obj/machinery/atmospherics/components/unary/vent_pump/on{
dir = 8
},
-/turf/open/floor/plasteel/dark,
-/area/shuttle/pirate)
-"OL" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden,
-/obj/effect/decal/cleanable/dirt,
-/obj/effect/turf_decal/tile/bar,
-/obj/effect/turf_decal/tile/bar{
- dir = 1
- },
/turf/open/floor/plasteel,
/area/shuttle/pirate)
-"RY" = (
-/obj/effect/mob_spawn/human/pirate/captain{
- dir = 4
- },
-/obj/machinery/airalarm/all_access{
- pixel_y = 24
- },
-/obj/effect/decal/cleanable/dirt,
-/obj/structure/sign/poster/contraband/random{
- pixel_x = -32
- },
-/turf/open/floor/wood,
-/area/shuttle/pirate)
(1,1,1) = {"
af
af
af
-fW
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-wR
af
af
af
af
+af
+af
+af
+af
+af
+af
+ae
+aj
+aj
+mq
+af
+af
+af
"}
(2,1,1) = {"
af
-et
-eu
-ex
-eA
-aa
-ap
-aw
-ak
-bF
+af
+af
+af
+af
+af
+af
+aA
aj
aj
aj
-fW
+aj
+aj
+aj
+cF
+ck
+dk
+af
af
af
"}
(3,1,1) = {"
-aQ
-aj
-aj
-aj
-aj
-aj
-aj
-ax
-aq
-ar
-aj
-RY
-aA
-ep
-aH
-af
-"}
-(4,1,1) = {"
af
af
af
-af
-af
-af
-ey
-ay
-Oe
-OL
-zw
-dy
-br
-ep
-er
-af
-"}
-(5,1,1) = {"
-af
-af
-af
-af
-af
-af
-aj
-az
-bx
-bH
-aj
+ae
aj
aj
aj
aj
aR
+aY
+cj
+bH
+aj
+ce
+cM
+ck
+ck
+af
+af
+af
+"}
+(4,1,1) = {"
+af
+ab
+ac
+ag
+ai
+al
+as
+ol
+vT
+aZ
+bq
+bI
+aj
+cf
+cN
+cP
+ck
+dk
+af
+af
+"}
+(5,1,1) = {"
+aa
+aj
+aj
+aj
+aj
+am
+kI
+aC
+aB
+HH
+br
+bJ
+bV
+cg
+cv
+cF
+ck
+ck
+af
+af
"}
(6,1,1) = {"
af
af
af
-ey
-ey
+af
+ae
+aj
+aj
+aD
+aB
+ba
+bs
+yP
+aj
+ch
+cw
aj
aj
aj
-yi
aj
-aj
-Gk
-aS
-aF
-aI
-aJ
+af
"}
(7,1,1) = {"
af
af
-ey
-ey
-aC
-aW
+af
+af
+af
+af
+at
+aE
+aS
+bb
+bt
+bK
aj
-bg
-gY
-JT
-aj
-km
-aN
+cy
aj
aj
+cD
+cT
aj
+af
"}
(8,1,1) = {"
af
af
-ey
-ab
-ae
-bf
+af
+af
+af
+af
aj
-bl
-fY
-ai
-aU
-be
-aD
-aG
-db
-aH
+aj
+aj
+aj
+aj
+bL
+aj
+aj
+aj
+cV
+dl
+dv
+aj
+dp
"}
(9,1,1) = {"
af
af
-ey
-ac
-ag
-am
-au
-bm
-by
-bm
-mU
-aL
-bP
-bX
-db
-aK
+af
+af
+af
+ak
+aj
+bN
+aj
+bZ
+bu
+bM
+cn
+cC
+aj
+cW
+dm
+dw
+cF
+dC
"}
(10,1,1) = {"
af
af
-ey
-ad
-ah
-an
+af
+af
+ak
+ak
+aQ
+aG
aj
-bt
-gY
-bI
+cc
+bv
+bM
+co
+cE
aj
-bO
-bQ
-bk
-db
-er
+cX
+dn
+dx
+cF
+dD
"}
(11,1,1) = {"
af
af
-ey
-ey
-al
-aB
-aj
-ek
-bA
-vB
-aj
-np
-aO
-aj
-aj
+af
+af
+ak
+ay
+aV
+aH
aj
+ci
+bw
+cl
+cp
+cp
+cO
+cY
+do
+dy
+cF
+dE
"}
(12,1,1) = {"
af
af
af
-ey
-ey
+af
+ak
+aF
+bc
+aI
+aT
+bf
+bx
+cm
+cs
+cG
+cG
+dc
+dq
+dz
aj
aj
-aj
-yi
-aj
-aj
-Gk
-aS
-bZ
-bo
-ce
"}
(13,1,1) = {"
af
af
af
af
-af
-af
+ak
+aL
+bd
+aJ
aj
-as
-bB
-at
+bg
+by
+bP
+ca
+cH
aj
-aj
-aj
-aj
-aj
-aR
+dd
+dr
+dA
+cF
+dC
"}
(14,1,1) = {"
af
af
af
af
-af
-af
-ey
-eE
-bC
-bJ
-bM
-dU
-aV
-ep
-aH
-af
+ak
+ak
+be
+aK
+aj
+bh
+bz
+bQ
+cb
+cJ
+aj
+de
+ds
+dB
+cF
+dD
"}
(15,1,1) = {"
-aQ
-aj
-aj
-aj
-aj
-aj
-aj
-bu
-aj
-wf
-aj
-OD
-aV
-ep
-er
af
+af
+af
+af
+af
+ak
+aj
+bO
+aj
+bi
+bA
+aj
+cu
+cK
+aj
+aj
+dt
+cZ
+cF
+dE
"}
(16,1,1) = {"
af
-et
-ew
-ez
-eA
-ao
-av
-bv
-aj
-bK
-aj
-aj
-aj
-fW
af
af
+af
+af
+af
+aj
+aj
+aj
+bj
+bB
+aj
+aj
+aj
+aj
+cI
+cR
+da
+aj
+dp
"}
(17,1,1) = {"
af
af
af
-fW
-aj
-aj
-aj
-aj
-aj
-aj
-aj
-df
af
af
af
+at
+aM
+aU
+bk
+bC
+bR
+aj
+cL
+cz
+aj
+cS
+db
+dg
+af
+"}
+(18,1,1) = {"
+af
+af
+af
+af
+ae
+aj
+aj
+aN
+bX
+bl
+bD
+bS
+cd
+cq
+cA
+aj
+aj
+aj
+aj
+af
+"}
+(19,1,1) = {"
+aa
+aj
+aj
+aj
+aj
+aq
+aj
+aO
+aW
+bm
+bE
+bF
+aj
+cr
+cB
+cF
+ck
+dk
+af
+af
+"}
+(20,1,1) = {"
+af
+ab
+ad
+ah
+ai
+ar
+az
+aP
+aP
+bn
+BD
+bT
+aj
+sE
+un
+cM
+ck
+ck
+af
+af
+"}
+(21,1,1) = {"
+af
+af
+af
+ae
+aj
+aj
+aj
+aj
+aX
+bo
+bG
+bU
+aj
+ct
+cP
+ck
+dk
+af
+af
+af
+"}
+(22,1,1) = {"
+af
+af
+af
+af
+af
+af
+af
+an
+aj
+aj
+aj
+aj
+aj
+aj
+cF
+ck
+ck
+af
+af
+af
+"}
+(23,1,1) = {"
+af
+af
+af
+af
+af
+af
+af
+af
+af
+af
+af
+af
+af
+ae
+aj
+aj
+pw
+af
+af
af
"}
diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm
index 88f9759940..5e36abac15 100644
--- a/code/__DEFINES/dcs/signals.dm
+++ b/code/__DEFINES/dcs/signals.dm
@@ -83,6 +83,8 @@
#define COMSIG_ATOM_EXIT "atom_exit" //from base of atom/Exit(): (/atom/movable/exiting, /atom/newloc)
#define COMPONENT_ATOM_BLOCK_EXIT 1
#define COMSIG_ATOM_EXITED "atom_exited" //from base of atom/Exited(): (atom/movable/exiting, atom/newloc)
+/// From base of atom/wave_ex_act(): (datum/wave_explosion/explosion, args)
+#define COMSIG_ATOM_WAVE_EX_ACT "atom_wave_ex_act"
///from base of atom/ex_act(): (severity, target)
#define COMSIG_ATOM_EX_ACT "atom_ex_act"
///from base of atom/emp_act(): (severity)
diff --git a/code/__DEFINES/explosion.dm b/code/__DEFINES/explosion.dm
new file mode 100644
index 0000000000..adba852ff1
--- /dev/null
+++ b/code/__DEFINES/explosion.dm
@@ -0,0 +1,86 @@
+// THIS IS INSANITY
+// These are how wave explosions track when there's not only one direction to keep track of (diagonals, etc)
+#define WEX_DIR_NORTH NORTH
+#define WEX_DIR_SOUTH SOUTH
+#define WEX_DIR_EAST EAST
+#define WEX_DIR_WEST WEST
+#define WEX_ALLDIRS (WEX_DIR_NORTH | WEX_DIR_SOUTH | WEX_DIR_EAST | WEX_DIR_WEST)
+
+/// Default explosion power to consider an explosion over
+#define EXPLOSION_POWER_DEAD 2.5
+/// Default explosion falloff
+#define EXPLOSION_DEFAULT_FALLOFF_MULTIPLY 0.98
+/// Default explosion constant falloff
+#define EXPLOSION_DEFAULT_FALLOFF_SUBTRACT 5
+/// Block amount at which point having 0 block resistance will result in a full block
+#define EXPLOSION_POWER_NO_RESIST_THRESHOLD 5
+
+/// Explosion power quantization
+#define EXPLOSION_POWER_QUANTIZATION_ACCURACY 0.1
+
+// [explosion_flags] variable on /atom
+/// No blocking if we're not dense
+#define EXPLOSION_FLAG_DENSITY_DEPENDENT (1<<0)
+/// If we survive the explosion, we block ALL the power and ignore the results of wave_ex_act().
+#define EXPLOSION_FLAG_HARD_OBSTACLE (1<<1)
+
+// Standardized explosion powers
+/// Maxcap
+#define EXPLOSION_POWER_MAXCAP 500
+/// erases shreds from explosions/item damage
+#define EXPLOSION_POWER_ERASE_SHREDS 400
+/// Gibs most mobs
+#define EXPLOSION_POWER_NORMAL_MOB_GIB 400
+
+// Walls
+#define EXPLOSION_POWER_WALL_SCRAPE 400
+#define EXPLOSION_POWER_WALL_DISMANTLE 300
+#define EXPLOSION_POWER_WALL_MINIMUM_DISMANTLE 200
+
+#define EXPLOSION_POWER_RWALL_SCRAPE 450
+#define EXPLOSION_POWER_RWALL_DISMANTLE 400
+#define EXPLOSION_POWER_RWALL_MINIMUM_DISMANTLE 300
+
+// Floors
+#define EXPLOSION_POWER_FLOOR_TILE_BREAK 50
+#define EXPLOSION_POWER_FLOOR_MINIMUM_TURF_BREAK 125
+#define EXPLOSION_POWER_FLOOR_TURF_BREAK_BONUS 225
+#define EXPLOSION_POWER_FLOOR_TURF_BREAK 350
+#define EXPLOSION_POWER_FLOOR_TURF_SCRAPE 425
+#define EXPLOSION_POWER_FLOOR_SHIELDED_IMMUNITY 250
+
+// Helpers
+/// Explosion power to object damage (without taking into consideration armor)
+#define EXPLOSION_POWER_STANDARD_SCALE_OBJECT_DAMAGE(power, multiplier) (power>500)?(10*(power**0.6)*multiplier):(0.1*(power**1.3)*multiplier)
+/// Explosion power to object damage for hard obstacles
+#define EXPLOSION_POWER_STANDARD_SCALE_HARD_OBSTACLE_DAMAGE(power, multiplier) (power>500)?(10*(power**0.6)*multiplier):(0.15*(power**1.3)*multiplier)
+/// Explosion power to object damage for windows
+#define EXPLOSION_POWER_STANDARD_SCALE_WINDOW_DAMAGE(power, multiplier) (power>500)?(10*(power**0.6)*multiplier):(0.2*(power**1.3)*multiplier)
+/// Default brute damage to do to living things
+#define EXPLOSION_POWER_STANDARD_SCALE_MOB_DAMAGE(power, multiplier) ((power / 2) * multiplier)
+
+// Damage factors
+/// Factor to multiply damage to a door by if it's open (and therefore not blocking the explosion)
+#define EXPLOSION_DAMAGE_OPEN_DOOR_FACTOR 0.25
+
+// Standardized explosion constant blocks
+#define EXPLOSION_BLOCK_WINDOW 10
+#define EXPLOSION_BLOCK_MACHINE 20
+#define EXPLOSION_BLOCK_SPACE 20
+#define EXPLOSION_BLOCK_REINFORCED_WINDOW 50
+#define EXPLOSION_BLOCK_DENSE_FILLER 50
+#define EXPLOSION_BLOCK_WALL 75
+#define EXPLOSION_BLOCK_BLAST_PROOF 250
+#define EXPLOSION_BLOCK_BOROSILICATE_WINDOW 250
+#define EXPLOSION_BLOCK_EXTREME 250
+
+// Standardized explosion factor blocks
+#define EXPLOSION_DAMPEN_MACHINE 0.95
+#define EXPLOSION_DAMPEN_SPACE 0.95
+#define EXPLOSION_DAMPEN_WINDOW 0.95
+#define EXPLOSION_DAMPEN_REINFORCED_WINDOW 0.9
+#define EXPLOSION_DAMPEN_DENSE_FILLER 0.85
+#define EXPLOSION_DAMPEN_WALL 0.8
+#define EXPLOSION_DAMPEN_BOROSILICATE_WINDOW 0.65
+#define EXPLOSION_DAMPEN_BLAST_PROOF 0.65
+#define EXPLOSION_DAMPEN_EXTREME 0.5
diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm
index deb578464f..2c8001b086 100644
--- a/code/__DEFINES/subsystems.dm
+++ b/code/__DEFINES/subsystems.dm
@@ -180,6 +180,7 @@
#define FIRE_PRIORITY_PROJECTILES 200
#define FIRE_PRIORITY_TICKER 200
#define FIRE_PRIORITY_ATMOS_ADJACENCY 300
+#define FIRE_PRIORITY_EXPLOSIONS 350
#define FIRE_PRIORITY_STATPANEL 390
#define FIRE_PRIORITY_CHAT 400
#define FIRE_PRIORITY_RUNECHAT 410
@@ -219,7 +220,6 @@
A.flags_1 &= ~OVERLAY_QUEUED_1;\
} while(FALSE)
-
/**
Create a new timer and add it to the queue.
* Arguments:
diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm
index 75ce77302b..2c13f30707 100644
--- a/code/__HELPERS/roundend.dm
+++ b/code/__HELPERS/roundend.dm
@@ -551,8 +551,7 @@
///How many players joined the round.
var/total_players = GLOB.joined_player_list.len
var/list/typecache_bank = typecacheof(list(/datum/bank_account/department, /datum/bank_account/remote))
- for(var/i in SSeconomy.generated_accounts)
- var/datum/bank_account/current_acc = SSeconomy.generated_accounts[i]
+ for(var/datum/bank_account/current_acc in SSeconomy.generated_accounts)
if(typecache_bank[current_acc.type])
continue
station_vault += current_acc.account_balance
diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm
index 929e01c6d9..7d22b70cbc 100644
--- a/code/_onclick/hud/radial.dm
+++ b/code/_onclick/hud/radial.dm
@@ -13,7 +13,6 @@ GLOBAL_LIST_EMPTY(radial_menus)
icon_state = "radial_slice"
var/choice
var/next_page = FALSE
- var/tooltips = FALSE
/obj/screen/radial/slice/MouseEntered(location, control, params)
. = ..()
diff --git a/code/controllers/subsystem/explosions.dm b/code/controllers/subsystem/explosions.dm
new file mode 100644
index 0000000000..30a05a7505
--- /dev/null
+++ b/code/controllers/subsystem/explosions.dm
@@ -0,0 +1,23 @@
+SUBSYSTEM_DEF(explosions)
+ name = "Explosions"
+ wait = 1
+ flags = SS_TICKER
+ priority = FIRE_PRIORITY_EXPLOSIONS
+ var/static/list/datum/wave_explosion/wave_explosions = list()
+ var/static/list/datum/wave_explosion/active_wave_explosions = list()
+ var/static/list/datum/wave_explosion/currentrun = list()
+
+/datum/controller/subsystem/explosions/fire(resumed)
+ if(!resumed)
+ currentrun = active_wave_explosions.Copy()
+ var/datum/wave_explosion/E
+ var/ran = 0
+ while(length(currentrun) && !MC_TICK_CHECK)
+ ran = 0
+ for(var/i in currentrun)
+ E = i
+ if(E.tick())
+ currentrun -= E
+ ran++
+ if(!ran)
+ break
diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm
index 20e1a0a4e2..1e3fff8a17 100644
--- a/code/datums/components/storage/concrete/pockets.dm
+++ b/code/datums/components/storage/concrete/pockets.dm
@@ -57,7 +57,7 @@
/obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper,
/obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini,
/obj/item/firing_pin, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/automatic/magrifle/pistol,
- /obj/item/toy/plush/snakeplushie, /obj/item/gun/energy/e_gun/mini
+ /obj/item/toy/plush/snakeplushie, /obj/item/gun/energy/e_gun/mini, /obj/item/gun/ballistic/derringer
))
/datum/component/storage/concrete/pockets/shoes/clown/Initialize()
diff --git a/code/datums/explosion2.dm b/code/datums/explosion2.dm
new file mode 100644
index 0000000000..75f65e4b23
--- /dev/null
+++ b/code/datums/explosion2.dm
@@ -0,0 +1,378 @@
+/// Creates a wave explosion at a certain place
+/proc/wave_explosion(turf/target, power, factor = EXPLOSION_DEFAULT_FALLOFF_MULTIPLY, constant = EXPLOSION_DEFAULT_FALLOFF_SUBTRACT, flash = 0, fire = 0, atom/source, speed = 0,
+ silent = FALSE, bypass_logging = FALSE, block_resistance = 1, start_immediately = TRUE)
+ if(!istype(target) || (power <= EXPLOSION_POWER_DEAD))
+ return
+ if(!bypass_logging)
+ var/logstring = "Wave explosion at [COORD(target)]: [power]/[factor]/[constant]/[flash]/[fire]/[speed] initial/factor/constant/flash/fire/speed"
+ log_game(logstring)
+ message_admins(logstring)
+ return new /datum/wave_explosion(target, power, factor, constant, flash, fire, source, speed, silent, start_immediately, block_resistance)
+
+/**
+ * New force-blastwave explosion system
+ */
+/datum/wave_explosion
+ /// Next unique numerical ID
+ var/static/next_id = 0
+ /// Our unique nuumerical ID
+ var/id
+ /// world.time we started at
+ var/start_time
+ /// Are we currently running?
+ var/running = FALSE
+ /// Are we currently finished?
+ var/finished = FALSE
+ /// What atom we originated from, if any
+ var/atom/source
+
+ /// Explosion power at which point to consider to be a dead expansion
+ var/power_considered_dead = EXPLOSION_POWER_DEAD
+ /// Explosion power we were initially at
+ var/power_initial
+ /// Base explosion power falloff multiplier (applied first)
+ var/power_falloff_factor = EXPLOSION_DEFAULT_FALLOFF_MULTIPLY
+ /// Base explosion power falloff subtract (applied second)
+ var/power_falloff_constant = EXPLOSION_DEFAULT_FALLOFF_SUBTRACT
+ /// Flash range
+ var/flash_range = 0
+ /// Fire probability per tile
+ var/fire_probability = 0
+ /// Are we silent/do we make the screenshake/sounds?
+ var/silent = FALSE
+
+ // Modifications
+ /// Object damage mod
+ var/object_damage_mod = 1
+ /// Hard obstcales get this mod INSTEAD of object damage mod
+ var/hard_obstacle_mod = 1
+ /// Window shatter mod. Overrides both [hard_obstcale_mod] and [object_damage_mod]
+ var/window_shatter_mod = 1
+ /// Wall destruction mod
+ var/wall_destroy_mod = 1
+ /// Mob damage mod
+ var/mob_damage_mod = 1
+ /// Mob gib mod
+ var/mob_gib_mod = 1
+ /// Mob deafen mod
+ var/mob_deafen_mod = 1
+ /// block = block / this, if 0 any block is absolute
+ var/block_resistance = 1
+
+ // Rewrite count: 2
+ // Each cycle is a "perfect ring".
+ // We run into the problem that diagonal hitboxes don't exist on 2d grid games.
+ // How we deal with this is this:
+ // The first half of each cycle explodes cardinal directions awaiting expansion first
+ // Diagonals get added to a potential diagonals list.
+ // The second half of each cycle checks the potential diagonals list. If something isn't on the exploded list,
+ // we know it's a valid diagonal and explode it.
+ // Then all exploded turfs are flushed to exploded_last and it continues.
+ // Direction bitflags use the WEX_DIR_X flags so we can keep track of more than one direction in a single field
+ // The insanity begins when I realized that doing cardinals are easy but diagonals require:
+ // - Tallying the explosive power that should go into it
+ // - Exploding it afterwards using the tallied power rather than passed power (so corners aren't far weaker unless there's one side of it blocked)
+ // Expanding the explosion power of the now exploded diagonal into the two dirs its cardinals are in
+ // If this is done using a perfect algorithm it should be relatively efficient and result in a near-perfect shockwave simulation.
+
+ /// The last ring that's been exploded. Any turfs in this will completely ignore the current cycle. Turf = TRUE
+ var/list/turf/exploded_last = list()
+ /// The "edges" + dirs that need to be processed this cycle. turf = dir flags
+ var/list/turf/edges = list()
+ /// The powers of the current turf edges. turf = power
+ var/list/turf/powers = list()
+
+ /// What cycle are we on?
+ var/cycle
+ /// When we started the current cycle
+ var/cycle_start
+ /// Time to wait between cycles
+ var/cycle_speed = 0
+ /// Current index for list
+ var/index = 1
+
+/datum/wave_explosion/New(turf/initial, power, factor = EXPLOSION_DEFAULT_FALLOFF_MULTIPLY, constant = EXPLOSION_DEFAULT_FALLOFF_SUBTRACT, flash = 0, fire = 0, atom/source, speed = 0, silent = FALSE, autostart = TRUE, block_resistance = 1)
+ id = ++next_id
+ if(next_id > SHORT_REAL_LIMIT)
+ next_id = 0
+ SSexplosions.wave_explosions += src
+ src.power_initial = power
+ src.power_falloff_factor = factor
+ src.power_falloff_constant = constant
+ src.flash_range = flash
+ src.fire_probability = fire
+ src.source = source
+ src.cycle_speed = speed
+ src.silent = silent
+ src.block_resistance = block_resistance
+ if(!istype(initial))
+ stack_trace("Wave explosion created without a turf. This better be for debugging purposes.")
+ return
+ if(autostart)
+ start(initial)
+
+/datum/wave_explosion/Destroy()
+ if(running)
+ stop(FALSE)
+ return ..()
+
+/datum/wave_explosion/proc/start(list/turf/_starting)
+ if(running)
+ CRASH("Attempted to start() a running wave explosion")
+ if(!islist(_starting))
+ _starting = list(_starting)
+ var/list/mob/to_flash = list()
+ var/list/feedback = list()
+ var/list/mob/mob_potential_shake = list()
+ var/list/mob/closest_to = list()
+ for(var/i in 1 to _starting.len)
+ var/turf/starting = _starting[i]
+ edges[starting] = WEX_ALLDIRS
+ powers[starting] = power_initial
+ var/x0 = starting.x
+ var/y0 = starting.y
+ var/z0 = starting.z
+ var/area/areatype = get_area(starting)
+ feedback += list(list("power" = power_initial, factor = "factor", constant = "constant", flash = "flash", fire = "fire", speed = "speed", "x" = x0, "y" = y0, "z" = z0, "area" = areatype.type, "time" = TIME_STAMP("YYYY-MM-DD hh:mm:ss", 1)))
+ // 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
+
+ if(!silent)
+ 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, starting)
+ if(isnull(mob_potential_shake[M]))
+ mob_potential_shake[M] = dist
+ closest_to[M] = starting
+ else if(mob_potential_shake[M] < dist)
+ mob_potential_shake[M] = dist
+ closest_to[M] = starting
+
+ for(var/array in GLOB.doppler_arrays)
+ var/obj/machinery/doppler_array/A = array
+ A.sense_wave_explosion(starting, power_initial, cycle_speed)
+
+ // Flash mobs
+ if(flash_range)
+ for(var/mob/living/L in viewers(flash_range, starting))
+ to_flash |= L
+
+ if(!silent)
+ var/frequency = get_rand_frequency()
+ var/sound/explosion_sound = sound(get_sfx("explosion"))
+ var/sound/far_explosion_sound = sound('sound/effects/explosionfar.ogg')
+
+ var/far_dist = sqrt(power_initial) * 7.5
+
+ for(var/mob/M in mob_potential_shake)
+ var/dist = mob_potential_shake[M]
+ var/baseshakeamount
+ if(sqrt(power_initial) - dist > 0)
+ baseshakeamount = sqrt((sqrt(power_initial) - dist)*0.1)
+ // If inside the blast radius + world.view - 2
+ if(dist <= round(2 * sqrt(power_initial) + world.view - 2, 1))
+ M.playsound_local(closest_to[M], null, 100, 1, frequency, max_distance = 5, S = explosion_sound)
+ if(baseshakeamount > 0)
+ shake_camera(M, 25, clamp(baseshakeamount, 0, 10))
+ // 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(closest_to[M], null, far_volume, 1, frequency, max_distance = 5, S = far_explosion_sound)
+ if(baseshakeamount > 0)
+ shake_camera(M, 10, clamp(baseshakeamount*0.25, 0, 2.5))
+
+ for(var/i in 1 to to_flash.len)
+ var/mob/living/L = to_flash[i]
+ L.flash_act()
+
+ SSblackbox.record_feedback("associative", "wave_explosion", 1, feedback)
+
+ if(!cycle)
+ cycle = 1
+ SSexplosions.active_wave_explosions += src
+ running = TRUE
+ cycle_start = world.time - cycle_speed
+ tick()
+
+/datum/wave_explosion/proc/stop(delete = TRUE)
+ SSexplosions.active_wave_explosions -= src
+ SSexplosions.currentrun -= src
+ edges = null
+ powers = null
+ exploded_last = null
+ cycle = null
+ running = FALSE
+ qdel(src)
+
+#define SHOULD_SUSPEND ((cycle_start + cycle_speed) > world.time)
+
+/**
+ * Called by SSexplosions to propagate this.
+ * Return TRUE if postponed
+ */
+/datum/wave_explosion/proc/tick()
+ /// Each tick goes through one full cycle.
+ // This can be changed to a "continuous process" system where indexes are tracked if needed.
+ if(!src.edges.len)
+ // we're done
+ finished = TRUE
+ stop(TRUE)
+ return TRUE
+ if(SHOULD_SUSPEND)
+ return TRUE
+ // Set up variables
+ var/turf/T
+ var/turf/expanding
+ var/power
+ var/returned
+ var/blocked
+ var/dir
+ // insanity define to explode a turf with a certain amount of power, direction, and set returned.
+#define WEX_ACT(_T, _P, _D) \
+ returned = max(0, _T.wave_explode(_P, src, _D)); \
+ blocked = _P - returned; \
+ if(!block_resistance) { \
+ if(blocked > EXPLOSION_POWER_NO_RESIST_THRESHOLD) { \
+ returned = 0; \
+ } \
+ } \
+ else if(blocked) { \
+ returned = _P - (blocked / block_resistance); \
+ }; \
+ returned = round((returned * power_falloff_factor) - power_falloff_constant, EXPLOSION_POWER_QUANTIZATION_ACCURACY); \
+ if(prob(fire_probability)) { \
+ new /obj/effect/hotspot(_T); \
+ };
+
+ // Cache hot lists
+ var/list/turf/edges = src.edges
+ var/list/turf/powers = src.powers
+ var/list/turf/exploded_last = src.exploded_last
+
+ // prepare expansions
+ var/list/turf/edges_next = list()
+ var/list/turf/powers_next = list()
+ var/list/turf/powers_returned = list()
+ var/list/turf/diagonals = list()
+ var/list/turf/diagonal_powers = list()
+ var/list/turf/diagonal_powers_max = list()
+
+ // to_chat(world, "DEBUG: cycle start edges [english_list_assoc(edges)]")
+
+ // Process cardinals:
+ // Explode all cardinals and expand in directions, gathering all cardinals it should go to.
+ // Power for when things meet in the middle should be the greatest of the two.
+ for(var/i in edges)
+ T = i
+ power = powers[T]
+ dir = edges[T]
+ WEX_ACT(T, power, dir)
+ if(returned < power_considered_dead)
+ continue
+ powers_returned[T] = returned
+ // diagonal power calc when multiple things hit one diagonal
+#define CALCULATE_DIAGONAL_POWER(existing, adding, maximum) min(maximum, existing + adding)
+ // diagonal hitting cardinal expansion
+#define CALCULATE_DIAGONAL_CROSS_POWER(existing, adding) max(existing, adding)
+ // insanity define to mark the next set of cardinals.
+#define CARDINAL_MARK(ndir, cdir, edir) \
+ if(edir & cdir) { \
+ CARDINAL_MARK_NOCHECK(ndir, cdir, edir); \
+ };
+
+#define CARDINAL_MARK_NOCHECK(ndir, cdir, edir) \
+ expanding = get_step(T,ndir); \
+ if(expanding && !exploded_last[expanding] && !edges[expanding]) { \
+ powers_next[expanding] = max(powers_next[expanding], returned); \
+ edges_next[expanding] = (cdir | edges_next[expanding]); \
+ };
+
+ // insanity define to do diagonal marking as 2 substeps
+#define DIAGONAL_SUBSTEP(ndir, cdir, edir) \
+ expanding = get_step(T,ndir); \
+ if(expanding && !exploded_last[expanding] && !edges[expanding]) { \
+ if(!edges_next[expanding]) { \
+ diagonal_powers_max[expanding] = max(diagonal_powers_max[expanding], returned, powers[T]); \
+ diagonal_powers[expanding] = CALCULATE_DIAGONAL_POWER(diagonal_powers[expanding], returned, diagonal_powers_max[expanding]); \
+ diagonals[expanding] = (cdir | diagonals[expanding]); \
+ }; \
+ else { \
+ powers_next[expanding] = CALCULATE_DIAGONAL_CROSS_POWER(powers_next[expanding], returned); \
+ }; \
+ };
+
+ // insanity define to mark the diagonals that would otherwise be missed
+#define DIAGONAL_MARK(ndir, cdir, edir) \
+ if(edir & cdir) { \
+ DIAGONAL_MARK_NOCHECK(ndir, cdir, edir); \
+ };
+
+ // this only works because right now, WEX_DIR_X is the same as a byond dir
+ // and we know we're only passing in one dir at a time.
+ // if this ever stops being the case, and explosions break when you touch this, now you know why.
+#define DIAGONAL_MARK_NOCHECK(ndir, cdir, edir) \
+ DIAGONAL_SUBSTEP(turn(ndir, 90), turn(cdir, 90), edir); \
+ DIAGONAL_SUBSTEP(turn(ndir, -90), turn(cdir, -90), edir);
+
+ // mark
+#define MARK(ndir, cdir, edir) \
+ if(edir & cdir) { \
+ CARDINAL_MARK_NOCHECK(ndir, cdir, edir); \
+ DIAGONAL_MARK_NOCHECK(ndir, cdir, edir); \
+ };
+ CARDINAL_MARK(NORTH, WEX_DIR_NORTH, dir)
+ CARDINAL_MARK(SOUTH, WEX_DIR_SOUTH, dir)
+ CARDINAL_MARK(EAST, WEX_DIR_EAST, dir)
+ CARDINAL_MARK(WEST, WEX_DIR_WEST, dir)
+
+ // to_chat(world, "DEBUG: cycle mid edges_next [english_list_assoc(edges_next)]")
+
+ // Sweep after cardinals for diagonals
+ for(var/i in edges)
+ T = i
+ power = powers[T]
+ dir = edges[T]
+ returned = powers_returned[T]
+ DIAGONAL_MARK(NORTH, WEX_DIR_NORTH, dir)
+ DIAGONAL_MARK(SOUTH, WEX_DIR_SOUTH, dir)
+ DIAGONAL_MARK(EAST, WEX_DIR_EAST, dir)
+ DIAGONAL_MARK(WEST, WEX_DIR_WEST, dir)
+
+ // to_chat(world, "DEBUG: cycle mid diagonals [english_list_assoc(diagonals)]")
+
+ // Process diagonals:
+ for(var/i in diagonals)
+ T = i
+ power = diagonal_powers[T]
+ dir = diagonals[T]
+ WEX_ACT(T, power, dir)
+ if(returned < power_considered_dead)
+ continue
+ CARDINAL_MARK(NORTH, WEX_DIR_NORTH, dir)
+ CARDINAL_MARK(SOUTH, WEX_DIR_SOUTH, dir)
+ CARDINAL_MARK(EAST, WEX_DIR_EAST, dir)
+ CARDINAL_MARK(WEST, WEX_DIR_WEST, dir)
+
+ // to_chat(world, "DEBUG: cycle end edges_next [english_list_assoc(edges_next)]")
+
+ // flush lists
+ src.exploded_last = edges + diagonals
+ src.edges = edges_next
+ src.powers = powers_next
+ cycle++
+ cycle_start = world.time
+
+#undef SHOULD_SUSPEND
+
+#undef WEX_ACT
+
+#undef DIAGONAL_SUBSTEP
+#undef DIAGONAL_MARK
+#undef CARDINAL_MARK
+#undef MARK
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 7855c4e87b..c1aed96d61 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -142,7 +142,8 @@
// Can most things breathe?
if(trace_gases)
continue
- if(A.get_moles(/datum/gas/oxygen) >= 16)
+ var/oxy_moles = A.get_moles(/datum/gas/oxygen)
+ if(oxy_moles < 16 || oxy_moles > 50)
continue
if(A.get_moles(/datum/gas/plasma))
continue
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 18674cdb17..3009831da7 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -36,6 +36,14 @@
///Value used to increment ex_act() if reactionary_explosions is on
var/explosion_block = 0
+ /// Flags for explosions
+ var/explosion_flags = NONE
+ /// Amount to decrease wave explosions by
+ var/wave_explosion_block = 0
+ /// Amount to multiply wave explosions by
+ var/wave_explosion_multiply = 1
+
+ //its inherent color, the colored paint applied on it, special color effect etc...
/**
* used to store the different colors on an atom
*
@@ -43,7 +51,6 @@
*/
var/list/atom_colours
-
/// a very temporary list of overlays to remove
var/list/remove_overlays
/// a very temporary list of overlays to add
@@ -556,6 +563,34 @@
contents_explosion(severity, target)
SEND_SIGNAL(src, COMSIG_ATOM_EX_ACT, severity, target)
+/**
+ * Called when a wave explosion hits this atom. Do not override this.
+ *
+ * Returns explosion power to "allow through".
+ */
+/atom/proc/wave_explode(power, datum/wave_explosion/explosion, dir)
+ set waitfor = FALSE
+ // SHOULD_NOT_SLEEP(TRUE)
+ SHOULD_NOT_OVERRIDE(TRUE)
+ SEND_SIGNAL(src, COMSIG_ATOM_WAVE_EX_ACT, args)
+ . = wave_ex_act(power, explosion, dir) // this must happen first for stuff like destruction/damage to tick.
+ if(isnull(.))
+ stack_trace("wave_ex_act on [type] failed to return a number. defaulting to no blocking.")
+ return power
+ if((explosion_flags & EXPLOSION_FLAG_DENSITY_DEPENDENT) && !density)
+ return power // no block
+ else if((explosion_flags & EXPLOSION_FLAG_HARD_OBSTACLE) && !QDELETED(src))
+ return 0 // fully blocked
+
+/**
+ * Called when a wave explosion hits this atom.
+ *
+ * Returns explosion power to "allow through". Standard handling and flag overrides in [wave_explode()].
+ */
+/atom/proc/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ // SHOULD_NOT_SLEEP(TRUE)
+ return power * wave_explosion_multiply - wave_explosion_block
+
/atom/proc/blob_act(obj/structure/blob/B)
SEND_SIGNAL(src, COMSIG_ATOM_BLOB_ACT, B)
return
diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm
index fbda722e4f..aafa77b878 100644
--- a/code/game/atoms_movable.dm
+++ b/code/game/atoms_movable.dm
@@ -55,6 +55,9 @@
///Internal holder for emissive blocker object, do not use directly use blocks_emissive
var/atom/movable/emissive_blocker/em_block
+ /// Should we use tooltips, if the thing does not have the code implemented `get_tooltip_data()`, it will default to examine(src)
+ var/tooltips = FALSE
+
/atom/movable/Initialize(mapload)
. = ..()
diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm
index d26f8c5639..2ccf7d317d 100644
--- a/code/game/machinery/_machinery.dm
+++ b/code/game/machinery/_machinery.dm
@@ -96,6 +96,10 @@ Class Procs:
flags_ricochet = RICOCHET_HARD
ricochet_chance_mod = 0.3
+ explosion_flags = EXPLOSION_FLAG_DENSITY_DEPENDENT
+ wave_explosion_block = EXPLOSION_BLOCK_MACHINE
+ wave_explosion_multiply = EXPLOSION_DAMPEN_MACHINE
+
anchored = TRUE
interaction_flags_atom = INTERACT_ATOM_ATTACK_HAND | INTERACT_ATOM_UI_INTERACT
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index 048247c630..5621b47885 100755
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -79,6 +79,7 @@
if (obj_flags & EMAGGED)
return
obj_flags |= EMAGGED
+ SSshuttle.shuttle_purchase_requirements_met |= "emagged"
if (authenticated)
authorize_access = get_all_accesses()
to_chat(user, "You scramble the communication routing circuits!")
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index f4a65ce984..4eed168ad6 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -54,6 +54,8 @@
assemblytype = /obj/structure/door_assembly
normalspeed = 1
explosion_block = 1
+ wave_explosion_block = EXPLOSION_BLOCK_WALL
+ wave_explosion_multiply = EXPLOSION_DAMPEN_WALL
hud_possible = list(DIAG_AIRLOCK_HUD)
interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN_SILICON | INTERACT_MACHINE_REQUIRES_SILICON | INTERACT_MACHINE_OPEN
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 63a8ad22d4..a20374f878 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -16,6 +16,11 @@
interaction_flags_atom = INTERACT_ATOM_UI_INTERACT
+ wave_explosion_block = EXPLOSION_BLOCK_DENSE_FILLER
+ wave_explosion_multiply = EXPLOSION_DAMPEN_DENSE_FILLER
+
+ explosion_flags = EXPLOSION_FLAG_HARD_OBSTACLE | EXPLOSION_FLAG_DENSITY_DEPENDENT
+
var/secondsElectrified = 0
var/air_tight = FALSE //TRUE means density will be set as soon as the door begins to close
var/shockedby
@@ -412,3 +417,8 @@
/obj/machinery/door/GetExplosionBlock()
return density ? real_explosion_block : 0
+
+/obj/machinery/door/wave_explosion_damage(power, datum/wave_explosion/explosion)
+ . = ..()
+ if(!density)
+ return . * EXPLOSION_DAMAGE_OPEN_DOOR_FACTOR
diff --git a/code/game/machinery/doors/passworddoor.dm b/code/game/machinery/doors/passworddoor.dm
index 1ec5b3c373..0c64151bca 100644
--- a/code/game/machinery/doors/passworddoor.dm
+++ b/code/game/machinery/doors/passworddoor.dm
@@ -71,3 +71,6 @@
/obj/machinery/door/password/ex_act(severity, target)
return
+
+/obj/machinery/door/password/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ return 0 //no.
diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm
index 4226d8a439..8c7fc692bc 100644
--- a/code/game/machinery/doors/poddoor.dm
+++ b/code/game/machinery/doors/poddoor.dm
@@ -8,6 +8,8 @@
closingLayer = CLOSED_BLASTDOOR_LAYER
sub_door = TRUE
explosion_block = 3
+ wave_explosion_block = EXPLOSION_BLOCK_BLAST_PROOF
+ wave_explosion_multiply = EXPLOSION_DAMPEN_BLAST_PROOF
heat_proof = TRUE
safe = FALSE
max_integrity = 600
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index dd885542c9..af7545d3c9 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -360,6 +360,8 @@
max_integrity = 300 //Stronger doors for prison (regular window door health is 200)
reinf = 1
explosion_block = 1
+ wave_explosion_block = EXPLOSION_BLOCK_REINFORCED_WINDOW
+ wave_explosion_multiply = EXPLOSION_DAMPEN_REINFORCED_WINDOW
/obj/machinery/door/window/brigdoor/security/cell
name = "cell door"
diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm
index 1cdb81ee1d..2066e88f85 100644
--- a/code/game/machinery/doppler_array.dm
+++ b/code/game/machinery/doppler_array.dm
@@ -114,6 +114,44 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
LAZYADD(message_log, messages.Join(" "))
return TRUE
+/obj/machinery/doppler_array/proc/sense_wave_explosion(turf/epicenter, power, speed)
+ if(stat & NOPOWER)
+ return FALSE
+ var/turf/zone = get_turf(src)
+ if(zone.z != epicenter.z)
+ return FALSE
+
+ if(next_announce > world.time)
+ return FALSE
+ next_announce = world.time + cooldown
+
+ var/distance = get_dist(epicenter, zone)
+ var/direct = get_dir(zone, epicenter)
+
+ if(distance > max_dist)
+ return FALSE
+ if(!(direct & dir) && !integrated)
+ return FALSE
+
+
+ var/list/messages = list("Explosive shockwave detected.", \
+ "Epicenter at: grid ([epicenter.x],[epicenter.y]). Shockwave expanding at a theoretical speed of [speed] m/s.", \
+ "Wave energy: [power]MJ.")
+
+ if(integrated)
+ var/obj/item/clothing/head/helmet/space/hardsuit/helm = loc
+ if(!helm || !istype(helm, /obj/item/clothing/head/helmet/space/hardsuit))
+ return FALSE
+ helm.display_visor_message("Waveform explosion detected! Wave energy: [power]MJ.")
+ else
+ for(var/message in messages)
+ say(message)
+ if(LAZYLEN(message_log) > list_limit)
+ say("Storage buffer is full! Clearing buffers...")
+ LAZYCLEARLIST(message_log)
+ LAZYADD(message_log, messages.Join(" "))
+ return TRUE
+
/obj/machinery/doppler_array/examine(mob/user)
. = ..()
. += "Its dish is facing to the [dir2text(dir)]."
diff --git a/code/game/objects/effects/decals/cleanable/misc.dm b/code/game/objects/effects/decals/cleanable/misc.dm
index bb566f4d87..fe4ab20617 100644
--- a/code/game/objects/effects/decals/cleanable/misc.dm
+++ b/code/game/objects/effects/decals/cleanable/misc.dm
@@ -50,6 +50,10 @@
/obj/effect/decal/cleanable/glass/ex_act()
qdel(src)
+/obj/effect/decal/cleanable/glass/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ qdel(src)
+ return power
+
/obj/effect/decal/cleanable/glass/plasma
icon_state = "plasmatiny"
@@ -131,6 +135,9 @@
/obj/effect/decal/cleanable/greenglow/ex_act()
return
+/obj/effect/decal/cleanable/greenglow/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ return power
+
/obj/effect/decal/cleanable/cobweb
name = "cobweb"
desc = "Somebody should remove that."
@@ -253,6 +260,11 @@
if(severity == 1) //so shreds created during an explosion aren't deleted by the explosion.
qdel(src)
+/obj/effect/decal/cleanable/shreds/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ if(power > EXPLOSION_POWER_ERASE_SHREDS)
+ qdel(src)
+ return power // no block
+
/obj/effect/decal/cleanable/shreds/Initialize()
pixel_x = rand(-10, 10)
pixel_y = rand(-10, 10)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 8a09bca0bf..5089d26c88 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -248,6 +248,14 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb
loc = null
loc = T
+/obj/item/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ . = ..()
+ if(!anchored)
+ var/throw_dist = round(rand(3, max(3, 2.5 * sqrt(power))), 1)
+ throw_speed = EXPLOSION_THROW_SPEED
+ var/turf/target = get_ranged_target_turf(src, dir, throw_dist)
+ throw_at(target, throw_dist, EXPLOSION_THROW_SPEED)
+
/obj/item/examine(mob/user) //This might be spammy. Remove?
. = ..()
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 7d2b0ed832..df7d6467f0 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -553,6 +553,9 @@
/obj/item/card/id/syndicate/locked_banking
bank_support = ID_LOCKED_BANK_ACCOUNT
+/obj/item/card/id/pirate
+ access = list(ACCESS_SYNDICATE)
+
/obj/item/card/id/captains_spare
name = "captain's spare ID"
desc = "The spare ID of the High Lord himself."
diff --git a/code/game/objects/items/kitchen.dm b/code/game/objects/items/kitchen.dm
index 7f2fe6a01d..417fd96c85 100644
--- a/code/game/objects/items/kitchen.dm
+++ b/code/game/objects/items/kitchen.dm
@@ -248,6 +248,24 @@
/obj/item/kitchen/rollingpin/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins flattening [user.p_their()] head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
return BRUTELOSS
+
+/obj/item/kitchen/unrollingpin
+ name = "unrolling pin"
+ desc = "For when you accidentally flattened something."
+ icon_state = "unrolling_pin"
+ force = 8
+ throwforce = 5
+ throw_speed = 3
+ throw_range = 7
+ w_class = WEIGHT_CLASS_NORMAL
+ custom_materials = list(/datum/material/wood = MINERAL_MATERIAL_AMOUNT * 1.5)
+ attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked")
+ custom_price = PRICE_ALMOST_CHEAP
+
+/obj/item/kitchen/unrollingpin/suicide_act(mob/living/carbon/user)
+ user.visible_message("[user] begins unflattening [user.p_their()] head with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
+ return BRUTELOSS
+
/* Trays moved to /obj/item/storage/bag */
/obj/item/kitchen/knife/scimitar
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index 3f84844743..ffcd15c39e 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -248,6 +248,7 @@ GLOBAL_LIST_INIT(wood_recipes, list ( \
null, \
new/datum/stack_recipe("rifle stock", /obj/item/weaponcrafting/stock, 10, time = 20), \
new/datum/stack_recipe("rolling pin", /obj/item/kitchen/rollingpin, 2, time = 30), \
+ new/datum/stack_recipe("unrolling pin", /obj/item/kitchen/unrollingpin, 2, time = 30), \
new/datum/stack_recipe("wooden bucket", /obj/item/reagent_containers/glass/bucket/wood, 2, time = 30), \
new/datum/stack_recipe("painting frame", /obj/item/wallframe/painting, 1, time = 10),\
new/datum/stack_recipe("wooden buckler", /obj/item/shield/riot/buckler, 20, time = 40), \
diff --git a/code/game/objects/items/storage/fancy.dm b/code/game/objects/items/storage/fancy.dm
index e73097bf18..f68084d63a 100644
--- a/code/game/objects/items/storage/fancy.dm
+++ b/code/game/objects/items/storage/fancy.dm
@@ -367,7 +367,7 @@
/obj/item/storage/fancy/cigarettes/derringer/AltClick(mob/living/carbon/user)
if(!istype(user) || !user.canUseTopic(src, BE_CLOSE, ismonkey(user)))
return
- var/obj/item/W = (locate(/obj/item/ammo_casing/a357) in contents) || (locate(/obj/item/clothing/mask/cigarette) in contents) || locate(/obj/item/ammo_casing/g4570) //Easy access smokes and bullets
+ var/obj/item/W = (locate(/obj/item/ammo_casing/a357) in contents) || (locate(/obj/item/clothing/mask/cigarette) in contents) ||(locate(/obj/item/gun/ballistic/derringer) in contents) || (locate(/obj/item/ammo_casing/c38) in contents) || locate(/obj/item/ammo_casing/g4570) in contents//Easy access smokes and bullets
if(W && contents.len > 0)
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_TAKE, W, user)
user.put_in_hands(W)
@@ -382,6 +382,7 @@
new /obj/item/ammo_casing/a357(src)
new /obj/item/ammo_casing/a357(src)
new /obj/item/ammo_casing/a357(src)
+ new /obj/item/ammo_casing/a357(src)
new /obj/item/clothing/mask/cigarette/syndicate(src)
//For traitors with luck/class
@@ -404,6 +405,7 @@
new /obj/item/ammo_casing/g4570(src)
new /obj/item/ammo_casing/g4570(src)
new /obj/item/ammo_casing/g4570(src)
+ new /obj/item/ammo_casing/g4570(src)
new /obj/item/clothing/mask/cigarette/xeno(src)
//For Cargomen, looking for a good deal on arms, with no quarrels as to where they're from.
@@ -419,6 +421,7 @@
new /obj/item/ammo_casing/c38/lethal(src)
new /obj/item/ammo_casing/c38/lethal(src)
new /obj/item/ammo_casing/c38/lethal(src)
+ new /obj/item/ammo_casing/c38/lethal(src)
new /obj/item/clothing/mask/cigarette/shadyjims (src)
/////////////
//CIGAR BOX//
diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm
index 73a21e4a25..02f2009667 100644
--- a/code/game/objects/obj_defense.dm
+++ b/code/game/objects/obj_defense.dm
@@ -71,6 +71,19 @@
if(3)
take_damage(rand(10, 90), BRUTE, "bomb", 0)
+/obj/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ if(resistance_flags & INDESTRUCTIBLE)
+ return power
+ . = ..()
+ if(explosion.source == src)
+ obj_integrity = 0
+ qdel(src)
+ return
+ take_damage(wave_explosion_damage(power, explosion), BRUTE, "bomb", 0)
+
+/obj/proc/wave_explosion_damage(power, datum/wave_explosion/explosion)
+ return (explosion_flags & EXPLOSION_FLAG_HARD_OBSTACLE)? EXPLOSION_POWER_STANDARD_SCALE_HARD_OBSTACLE_DAMAGE(power, explosion.hard_obstacle_mod) : EXPLOSION_POWER_STANDARD_SCALE_OBJECT_DAMAGE(power, explosion.object_damage_mod)
+
/obj/bullet_act(obj/item/projectile/P)
. = ..()
playsound(src, P.hitsound, 50, 1)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index 53bcd28fa1..e40e158895 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -43,6 +43,10 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
attack_hand_speed = CLICK_CD_MELEE
attack_hand_is_action = TRUE
+ explosion_flags = EXPLOSION_FLAG_HARD_OBSTACLE
+ wave_explosion_block = EXPLOSION_BLOCK_WINDOW
+ wave_explosion_multiply = EXPLOSION_DAMPEN_WINDOW
+
/// Electrochromatic status
var/electrochromatic_status = NOT_ELECTROCHROMATIC
/// Electrochromatic ID. Set the first character to ! to replace with a SSmapping generated pseudorandom obfuscated ID for mapping purposes.
@@ -111,6 +115,9 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
return TRUE
return FALSE
+/obj/structure/window/wave_explosion_damage(power, datum/wave_explosion/explosion)
+ return EXPLOSION_POWER_STANDARD_SCALE_WINDOW_DAMAGE(power, explosion.window_shatter_mod)
+
/obj/structure/window/narsie_act()
add_atom_colour(NARSIE_WINDOW_COLOUR, FIXED_COLOUR_PRIORITY)
@@ -520,6 +527,8 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
max_integrity = 50
explosion_block = 1
+ wave_explosion_block = EXPLOSION_BLOCK_REINFORCED_WINDOW
+ wave_explosion_multiply = EXPLOSION_DAMPEN_REINFORCED_WINDOW
glass_type = /obj/item/stack/sheet/rglass
rad_insulation = RAD_HEAVY_INSULATION
ricochet_chance_mod = 0.8
@@ -545,6 +554,8 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
armor = list("melee" = 75, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
max_integrity = 150
explosion_block = 1
+ wave_explosion_block = EXPLOSION_BLOCK_BOROSILICATE_WINDOW
+ wave_explosion_multiply = EXPLOSION_DAMPEN_BOROSILICATE_WINDOW
glass_type = /obj/item/stack/sheet/plasmaglass
cleanable_type = /obj/effect/decal/cleanable/glass/plasma
rad_insulation = RAD_NO_INSULATION
@@ -570,6 +581,8 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
armor = list("melee" = 85, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100)
max_integrity = 500
explosion_block = 2
+ wave_explosion_block = EXPLOSION_BLOCK_EXTREME
+ wave_explosion_multiply = EXPLOSION_BLOCK_EXTREME
glass_type = /obj/item/stack/sheet/plasmarglass
/obj/structure/window/plasma/reinforced/spawner/east
@@ -742,6 +755,8 @@ GLOBAL_LIST_EMPTY(electrochromatic_window_lookup)
max_integrity = 80
armor = list("melee" = 60, "bullet" = 25, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100)
explosion_block = 2 //fancy AND hard to destroy. the most useful combination.
+ wave_explosion_block = EXPLOSION_BLOCK_BOROSILICATE_WINDOW
+ wave_explosion_multiply = EXPLOSION_DAMPEN_BOROSILICATE_WINDOW
decon_speed = 40
glass_type = /obj/item/stack/tile/brass
glass_amount = 1
diff --git a/code/game/turfs/closed.dm b/code/game/turfs/closed.dm
index be0c444541..91a8ba4f46 100644
--- a/code/game/turfs/closed.dm
+++ b/code/game/turfs/closed.dm
@@ -6,6 +6,8 @@
blocks_air = 1
rad_flags = RAD_PROTECT_CONTENTS | RAD_NO_CONTAMINATE
rad_insulation = RAD_MEDIUM_INSULATION
+ wave_explosion_block = 10
+ wave_explosion_multiply = 0.75
/turf/closed/Initialize()
. = ..()
@@ -28,6 +30,7 @@
name = "wall"
icon = 'icons/turf/walls.dmi'
explosion_block = 50
+ wave_explosion_block = INFINITY
/turf/closed/indestructible/rust_heretic_act()
return
diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm
index 565d5640e3..e5034e4b2f 100644
--- a/code/game/turfs/simulated/floor.dm
+++ b/code/game/turfs/simulated/floor.dm
@@ -12,6 +12,19 @@
clawfootstep = FOOTSTEP_HARD_CLAW
heavyfootstep = FOOTSTEP_GENERIC_HEAVY
+ /// Minimum explosion power to break tile
+ var/explosion_power_break_tile = EXPLOSION_POWER_FLOOR_TILE_BREAK
+ /// Minimum explosion power to break turf
+ var/explosion_power_break_turf = EXPLOSION_POWER_FLOOR_TURF_BREAK
+ //// Minimum explosion power to scrape away the floor
+ var/explosion_power_turf_scrape = EXPLOSION_POWER_FLOOR_TURF_SCRAPE
+ //// Shielded turfs are completely protected from anything under this
+ var/explosion_power_protect_shielded = EXPLOSION_POWER_FLOOR_SHIELDED_IMMUNITY
+ /// Starting from here, there's a chance for this to break
+ var/explosion_power_minimum_chance_break = EXPLOSION_POWER_FLOOR_MINIMUM_TURF_BREAK
+ /// Starting from here, +20% chance to break turf.
+ var/explosion_power_break_turf_bonus = EXPLOSION_POWER_FLOOR_TURF_BREAK_BONUS
+
var/icon_regular_floor = "floor" //used to remember what icon the tile should have by default
var/icon_plating = "plating"
thermal_conductivity = 0.004
@@ -98,6 +111,48 @@
src.break_tile()
src.hotspot_expose(1000,CELL_VOLUME)
+/turf/open/floor/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ var/shielded = is_shielded()
+ . = ..()
+ if(shielded)
+ if(power < explosion_power_protect_shielded)
+ return
+ else
+ power -= explosion_power_protect_shielded
+ hotspot_expose(1000, CELL_VOLUME)
+ if(power < explosion_power_break_tile)
+ return
+ if(power < explosion_power_minimum_chance_break)
+ if(prob(33 + ((explosion_power_break_turf - power) / (explosion_power_break_turf - explosion_power_break_tile))))
+ break_tile()
+ return
+ if((power < explosion_power_turf_scrape) && ((power >= explosion_power_break_turf) || prob((1 - ((explosion_power_break_turf - power) / (explosion_power_break_turf - explosion_power_minimum_chance_break))) * 100 + ((power > explosion_power_break_turf_bonus)? 20 : 0))))
+ switch(pick(1, 2;75, 3))
+ if(1)
+ if(!length(baseturfs) || !ispath(baseturfs[baseturfs.len-1], /turf/open/floor))
+ ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
+ ReplaceWithLattice()
+ else
+ ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR)
+ if(prob(33))
+ new /obj/item/stack/sheet/metal(src)
+ return
+ if(2)
+ ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR)
+ return
+ if(3)
+ if(prob(80))
+ ScrapeAway(flags = CHANGETURF_INHERIT_AIR)
+ return
+ else
+ break_tile()
+ hotspot_expose(1000,CELL_VOLUME)
+ if(prob(33))
+ new /obj/item/stack/sheet/metal(src)
+ if(power >= explosion_power_turf_scrape)
+ ScrapeAway(2, flags = CHANGETURF_INHERIT_AIR)
+ return
+
/turf/open/floor/is_shielded()
for(var/obj/structure/A in contents)
if(A.level == 3)
diff --git a/code/game/turfs/simulated/wall/reinf_walls.dm b/code/game/turfs/simulated/wall/reinf_walls.dm
index 03d5cecc26..620c9adfc8 100644
--- a/code/game/turfs/simulated/wall/reinf_walls.dm
+++ b/code/game/turfs/simulated/wall/reinf_walls.dm
@@ -12,6 +12,11 @@
sheet_amount = 1
girder_type = /obj/structure/girder/reinforced
explosion_block = 2
+ wave_explosion_block = EXPLOSION_BLOCK_BLAST_PROOF
+ wave_explosion_multiply = EXPLOSION_DAMPEN_BLAST_PROOF
+ explosion_power_to_scrape = EXPLOSION_POWER_RWALL_SCRAPE
+ explosion_power_to_dismantle = EXPLOSION_POWER_RWALL_DISMANTLE
+ explosion_power_minimum_chance_dismantle = EXPLOSION_POWER_RWALL_MINIMUM_DISMANTLE
rad_insulation = RAD_HEAVY_INSULATION
/turf/closed/wall/r_wall/deconstruction_hints(mob/user)
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 79ca5add10..76dc6533b6 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -6,6 +6,8 @@
icon = 'icons/turf/walls/wall.dmi'
icon_state = "wall"
explosion_block = 1
+ wave_explosion_block = EXPLOSION_BLOCK_WALL
+ wave_explosion_multiply = EXPLOSION_DAMPEN_WALL
flags_1 = DEFAULT_RICOCHET_1
flags_ricochet = RICOCHET_HARD
thermal_conductivity = WALL_HEAT_TRANSFER_COEFFICIENT
@@ -15,6 +17,14 @@
baseturfs = /turf/open/floor/plating
+ explosion_flags = EXPLOSION_FLAG_HARD_OBSTACLE
+ /// Explosion power to disintegrate the wall
+ var/explosion_power_to_scrape = EXPLOSION_POWER_WALL_SCRAPE
+ /// Explosion power to dismantle the wall
+ var/explosion_power_to_dismantle = EXPLOSION_POWER_WALL_DISMANTLE
+ /// Explosion power to potentially dismantle the wall
+ var/explosion_power_minimum_chance_dismantle = EXPLOSION_POWER_WALL_MINIMUM_DISMANTLE
+
var/hardness = 40 //lower numbers are harder. Used to determine the probability of a hulk smashing through.
var/slicing_duration = 100 //default time taken to slice the wall
var/sheet_type = /obj/item/stack/sheet/metal
@@ -91,6 +101,13 @@
if(!density)
..()
+/turf/closed/wall/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ . = ..()
+ var/resultant_power = power * explosion.wall_destroy_mod
+ if(resultant_power >= explosion_power_to_scrape)
+ ScrapeAway()
+ else if((resultant_power >= explosion_power_to_dismantle) || ((resultant_power >= explosion_power_minimum_chance_dismantle) && prob(((resultant_power - explosion_power_minimum_chance_dismantle) / (explosion_power_to_dismantle - explosion_power_minimum_chance_dismantle)) * 100)))
+ dismantle_wall(prob((resultant_power - explosion_power_to_dismantle)/(explosion_power_to_scrape - explosion_power_to_dismantle)), TRUE)
/turf/closed/wall/blob_act(obj/structure/blob/B)
if(prob(50))
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 0905fb2e9c..b1a4efc97e 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -8,6 +8,8 @@
temperature = TCMB
thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT
heat_capacity = 700000
+ wave_explosion_multiply = EXPLOSION_DAMPEN_SPACE
+ wave_explosion_block = EXPLOSION_BLOCK_SPACE
var/destination_z
var/destination_x
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 0808408192..93735f1079 100755
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -462,6 +462,24 @@ GLOBAL_LIST_EMPTY(station_turfs)
A.ex_act(severity, target)
CHECK_TICK
+/turf/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ . = ..()
+ var/affecting_level
+ if(is_shielded())
+ affecting_level = 3
+ else if(intact)
+ affecting_level = 2
+ else
+ affecting_level = 1
+ var/atom/A
+ for(var/i in contents)
+ if(. <= 0)
+ return 0
+ A = i
+ if(!QDELETED(A) && A.level >= affecting_level)
+ . = A.wave_explode(., explosion, dir)
+ maptext = "[.]"
+
/turf/narsie_act(force, ignore_mobs, probability = 20)
. = (prob(probability) || force)
for(var/I in src)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 96eb4e4a0f..9e784e72cb 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -96,6 +96,7 @@ GLOBAL_LIST_INIT(admin_verbs_fun, list(
/client/proc/cmd_select_equipment,
/client/proc/cmd_admin_gib_self,
/client/proc/drop_bomb,
+ /client/proc/drop_wave_explosion,
/client/proc/set_dynex_scale,
/client/proc/drop_dynex_bomb,
/client/proc/cinematic,
@@ -550,6 +551,51 @@ GLOBAL_PROTECT(admin_verbs_hideable)
log_admin("[key_name(usr)] created an admin explosion at [epicenter.loc].")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Bomb") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+/client/proc/drop_wave_explosion()
+ set category = "Special Verbs"
+ set name = "Drop Wave Explosion"
+ set desc = "Cause an explosive shockwave at your location."
+
+ var/power = input(src, "Wave initial power", "Power", 50) as num|null
+ if(isnull(power))
+ return
+ var/falloff = input(src, "Wave innate falloff factor", "Falloff", EXPLOSION_DEFAULT_FALLOFF_MULTIPLY) as num|null
+ if(isnull(falloff))
+ return
+ falloff = max(0, falloff)
+ if(falloff > 1)
+ to_chat(src, "Aborting: Falloff cannot be higher tahn 1.")
+ return
+ var/constant = input(src, "Wave innate falloff constant", "Constant", EXPLOSION_DEFAULT_FALLOFF_SUBTRACT) as num|null
+ if(isnull(constant))
+ return
+ if(constant < 0)
+ to_chat(src, "Aborting: Falloff constant cannot be less than 0.")
+ return
+ var/fire = input(src, "Probability per tile of fire?", "Fire Probability", 0) as num|null
+ if(isnull(fire))
+ return
+ var/speed = input(src, "Speed in ticks to wait between cycles? 0 for fast as possible", "Wait", 0) as num|null
+ if(isnull(speed))
+ return
+ var/block_resistance = input(src, "DANGEROUS: Block resistance? USE 1 IF YOU DO NOT KNOW WHAT YOU ARE DOING.", "Block Negation", 1) as num|null
+ if(isnull(block_resistance))
+ return
+ block_resistance = max(0, block_resistance)
+ if(power > 500)
+ var/sure = alert(src, "Explosion power is extremely high. Are you absolutely sure?", "Uhh...", "No", "Yes")
+ if(sure != "Yes")
+ return
+ // point of no return
+ var/turf/target = get_turf(mob)
+ if(!target)
+ to_chat(src, "Cannot proceed. Not on turf.")
+ return
+ message_admins("[ADMIN_LOOKUPFLW(usr)] creating an admin explosion at [target.loc].")
+ log_admin("[key_name(usr)] created an admin explosion at [target.loc].")
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "Drop Wave Explosion") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+ wave_explosion(target, power, falloff, constant, null, fire, speed = speed, block_resistance = block_resistance)
+
/client/proc/drop_dynex_bomb()
set category = "Admin.Fun"
set name = "Drop DynEx Bomb"
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 7e7bac9ff0..59eee83b35 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -571,6 +571,26 @@ Traitors and the like can also be revived with the previous role mostly intact.
message_admins("[key_name_admin(src)] has created a command report")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Create Command Report") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+/client/proc/cmd_admin_make_priority_announcement()
+ set category = "Admin.Events"
+ set name = "Make Priority Announcement"
+
+ if(!check_rights(R_ADMIN))
+ return
+
+ var/input = input(usr, "Enter a priority announcement. Ensure it makes sense IC.", "What?", "") as message|null
+ if(!input)
+ return
+
+ var/title = input(src, "What should the title be?", "What?","") as text|null
+
+ var/special_name = input(src, "Who is making the announcement?", "Who?", "") as text|null
+ priority_announce(input, title, sender_override = special_name)
+
+ log_admin("[key_name(src)] has sent a priority announcement: [input]")
+ message_admins("[key_name_admin(src)] has made a priority announcement")
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "Make Priority Announcement") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
/client/proc/cmd_change_command_name()
set category = "Admin.Events"
set name = "Change Command Name"
diff --git a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
index f1ce13a90f..e8ae133ede 100644
--- a/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
+++ b/code/modules/antagonists/clockcult/clock_structures/traps/brass_skewer.dm
@@ -115,7 +115,7 @@
skewee.visible_message("[skewee] painfully slides back down [src].")
if(skewee.stat >= UNCONSCIOUS)
return //by ratvar, no more spamming my deadchat, holy fuck
- skewee.say("Oof, ouch owwie!!", forced = "fail brass skewer removal")
+ skewee.emote("pain")
return
skewee.visible_message("[skewee] comes free of [src] with a squelching pop!", \
"You come free of [src]!")
diff --git a/code/modules/antagonists/eldritch_cult/eldritch_items.dm b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
index 0dd9cf6bea..a6380a81b2 100644
--- a/code/modules/antagonists/eldritch_cult/eldritch_items.dm
+++ b/code/modules/antagonists/eldritch_cult/eldritch_items.dm
@@ -62,13 +62,24 @@
/datum/action/innate/heretic_shatter/IsAvailable()
if(IS_HERETIC(holder) || IS_HERETIC_MONSTER(holder))
- return TRUE
+ return ..()
else
return FALSE
/datum/action/innate/heretic_shatter/Activate()
if(do_after(holder,10, target = holder))
- var/turf/safe_turf = find_safe_turf(zlevels = sword.z, extended_safety_checks = TRUE)
+ if(!sword || QDELETED(sword))
+ return
+ if(!IsAvailable()) //Never trust the user.
+ return
+ var/swordz = (get_turf(sword))?.z //SHOULD usually have a turf but if it doesn't better be prepared.
+ if(!swordz)
+ to_chat(holder, "[sword] flickers but remains in place, as do you...")
+ return
+ var/turf/safe_turf = find_safe_turf(zlevels = swordz, extended_safety_checks = TRUE)
+ if(!safe_turf)
+ to_chat(holder, "[sword] flickers but remains in place, as do you...")
+ return
do_teleport(holder,safe_turf,forceMove = TRUE,channel=TELEPORT_CHANNEL_MAGIC)
to_chat(holder,"You feel a gust of energy flow through your body... the Rusted Hills heard your call...")
qdel(sword)
diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
index 7d669e5c41..eb98635e65 100644
--- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
+++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm
@@ -633,7 +633,7 @@ This is here to make the tiles around the station mininuke change when it's arme
AddComponent(/datum/component/stationloving, !fake)
/obj/item/disk/nuclear/process()
- ++process_tick
+ process_tick++
if(fake)
STOP_PROCESSING(SSobj, src)
CRASH("A fake nuke disk tried to call process(). Who the fuck and how the fuck")
@@ -650,7 +650,7 @@ This is here to make the tiles around the station mininuke change when it's arme
disk_comfort_level++
if(disk_comfort_level >= 2) //Sleep tight, disky.
- if(process_tick % 30)
+ if(!(process_tick % 30))
visible_message("[src] sleeps soundly. Sleep tight, disky.")
if(last_disk_move < world.time - 5000 && prob((world.time - 5000 - last_disk_move)*0.0001))
var/datum/round_event_control/operative/loneop = locate(/datum/round_event_control/operative) in SSevents.control
diff --git a/code/modules/antagonists/revenant/revenant.dm b/code/modules/antagonists/revenant/revenant.dm
index 7e4c5c5343..31989fe241 100644
--- a/code/modules/antagonists/revenant/revenant.dm
+++ b/code/modules/antagonists/revenant/revenant.dm
@@ -177,6 +177,9 @@
/mob/living/simple_animal/revenant/ex_act(severity, target)
return 1 //Immune to the effects of explosions.
+/mob/living/simple_animal/revenant/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ return power
+
/mob/living/simple_animal/revenant/blob_act(obj/structure/blob/B)
return //blah blah blobs aren't in tune with the spirit world, or something.
diff --git a/code/modules/atmospherics/environmental/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm
index 2267ebf1d1..f714a94646 100644
--- a/code/modules/atmospherics/environmental/LINDA_system.dm
+++ b/code/modules/atmospherics/environmental/LINDA_system.dm
@@ -79,31 +79,27 @@
if (atmos_adjacent_turfs)
adjacent_turfs = atmos_adjacent_turfs.Copy()
else
- adjacent_turfs = list()
+ return list() // don't bother checking diagonals, diagonals are going to be cardinal checks anyways.
if (!alldir)
return adjacent_turfs
- var/turf/curloc = src
-
- for (var/direction in GLOB.diagonals_multiz)
- var/matchingDirections = 0
- var/turf/S = get_step_multiz(curloc, direction)
- if(!S)
+ var/turf/other
+ var/turf/mid
+ for (var/d in GLOB.diagonals)
+ other = get_step(src, d)
+ if(!other)
+ continue
+ // NS step
+ mid = get_step(src, NSCOMPONENT(d))
+ if((mid in adjacent_turfs) && (get_step(mid, EWCOMPONENT(d)) in adjacent_turfs))
+ adjacent_turfs += other
+ continue
+ // EW step
+ mid = get_step(src, EWCOMPONENT(d))
+ if((mid in adjacent_turfs) && (get_step(mid, NSCOMPONENT(d)) in adjacent_turfs))
+ adjacent_turfs += other
continue
-
- for (var/checkDirection in GLOB.cardinals_multiz)
- var/turf/checkTurf = get_step(S, checkDirection)
- if(!S.atmos_adjacent_turfs || !S.atmos_adjacent_turfs[checkTurf])
- continue
-
- if (adjacent_turfs[checkTurf])
- matchingDirections++
-
- if (matchingDirections >= 2)
- adjacent_turfs += S
- break
-
return adjacent_turfs
/atom/proc/air_update_turf(command = 0)
diff --git a/code/modules/cargo/packs/armory.dm b/code/modules/cargo/packs/armory.dm
index ed3f274f47..de3e657386 100644
--- a/code/modules/cargo/packs/armory.dm
+++ b/code/modules/cargo/packs/armory.dm
@@ -240,7 +240,6 @@
desc = "Hey kid.. c'mere. Boss says we need to offload these, to any buyer, no questions asked. You pay us, we give you three of these guns, no strings attached. Locks are to ensure they get to PAYING customers."
cost = 2000
contraband = TRUE
- can_private_buy = TRUE
contains = list(/obj/item/storage/fancy/cigarettes/derringer/smuggled,
/obj/item/storage/fancy/cigarettes/derringer/smuggled,
/obj/item/storage/fancy/cigarettes/derringer/smuggled,
diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm
index afe74de6a0..8091ce331b 100644
--- a/code/modules/clothing/outfits/standard.dm
+++ b/code/modules/clothing/outfits/standard.dm
@@ -89,10 +89,8 @@
/datum/outfit/pirate/space
suit = /obj/item/clothing/suit/space/pirate
head = /obj/item/clothing/head/helmet/space/pirate/bandana
- mask = /obj/item/clothing/mask/breath
- suit_store = /obj/item/tank/internals/oxygen
ears = /obj/item/radio/headset/syndicate
- id = /obj/item/card/id
+ id = /obj/item/card/id/pirate
/datum/outfit/pirate/space/captain
head = /obj/item/clothing/head/helmet/space/pirate
diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm
index 388a4fdac0..d284146ea3 100644
--- a/code/modules/events/pirates.dm
+++ b/code/modules/events/pirates.dm
@@ -206,6 +206,7 @@
icon_screen = "syndishuttle"
icon_keyboard = "syndie_key"
light_color = LIGHT_COLOR_RED
+ req_access = list(ACCESS_SYNDICATE)
possible_destinations = "pirateship_away;pirateship_home;pirateship_custom"
/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/pirate
@@ -214,8 +215,8 @@
shuttleId = "pirateship"
lock_override = CAMERA_LOCK_STATION
shuttlePortId = "pirateship_custom"
- x_offset = 9
- y_offset = 0
+ x_offset = 11
+ y_offset = 1
see_hidden = FALSE
/obj/docking_port/mobile/pirate
@@ -224,11 +225,7 @@
rechargeTime = 3 MINUTES
/obj/machinery/suit_storage_unit/pirate
- suit_type = /obj/item/clothing/suit/space
- helmet_type = /obj/item/clothing/head/helmet/space
- mask_type = /obj/item/clothing/mask/breath
- storage_type = /obj/item/tank/jetpack/void
- // storage_type = /obj/item/tank/internals/oxygen
+ storage_type = /obj/item/tank/jetpack/carbondioxide
/obj/machinery/loot_locator
name = "Booty Locator"
diff --git a/code/modules/events/supernova.dm b/code/modules/events/supernova.dm
index 6fc2fb0c4c..ca64984cde 100644
--- a/code/modules/events/supernova.dm
+++ b/code/modules/events/supernova.dm
@@ -17,24 +17,29 @@
announceWhen = rand(4, 60)
supernova = new
SSsun.suns += supernova
- if(prob(20))
- power = rand(5,100) / 100
- else
- power = rand(5,5000) / 100
+ switch(rand(1,5))
+ if(1)
+ power = rand(5,100) / 100
+ if(2)
+ power = rand(5,500) / 100
+ if(3)
+ power = rand(5,1000) / 100
+ if(4, 5)
+ power = rand(5,5000) / 100
supernova.azimuth = rand(0, 359)
supernova.power_mod = 0
/datum/round_event/supernova/announce()
- var/message = "Our tachyon-doppler array has detected a supernova in your vicinity. Peak flux from the supernova estimated to be [round(power,0.1)] times current solar flux. [power > 1 ? "Short burts of radiation may be possible, so please prepare accordingly." : ""]"
+ var/message = "[station_name()]: Our tachyon-doppler array has detected a supernova in your vicinity. Peak flux from the supernova estimated to be [round(power,0.1)] times current solar flux; if the supernova is close to your sun in the sky, your solars may receive this as a power boost.[power > 1 ? " Short burts of radiation may be possible, so please prepare accordingly." : ""] We hope you enjoy the light."
if(prob(power * 25))
- priority_announce(message)
+ priority_announce(message, sender_override = "Nanotrasen Meteorology Division")
else
print_command_report(message)
/datum/round_event/supernova/start()
supernova.power_mod = 0.001 * power
- var/explosion_size = rand(1000000000, 999999999)
+ var/explosion_size = rand(1000000000, 10000000000)
var/turf/epicenter = get_turf_in_angle(supernova.azimuth, SSmapping.get_station_center(), round(world.maxx * 0.45))
for(var/array in GLOB.doppler_arrays)
var/obj/machinery/doppler_array/A = array
@@ -51,13 +56,15 @@
supernova.power_mod = min(supernova.power_mod*1.2, power)
if(activeFor > endWhen-10)
supernova.power_mod /= 4
- if(prob(round(supernova.power_mod)) && prob(5) && storm_count < 5 && !SSweather.get_weather_by_type(/datum/weather/rad_storm))
+ if(prob(round(supernova.power_mod*2)) && prob(3) && storm_count < 5 && !SSweather.get_weather_by_type(/datum/weather/rad_storm))
SSweather.run_weather(/datum/weather/rad_storm/supernova)
storm_count++
/datum/round_event/supernova/end()
SSsun.suns -= supernova
qdel(supernova)
+ priority_announce("The supernova's flux is now negligible. Radiation storms have ceased. Have a pleasant shift, [station_name()], and thank you for bearing with nature.",
+ sender_override = "Nanotrasen Meteorology Division")
/datum/weather/rad_storm/supernova
weather_duration_lower = 50
diff --git a/code/modules/food_and_drinks/food/snacks/dough.dm b/code/modules/food_and_drinks/food/snacks/dough.dm
index e071fb3df7..10b8c946fc 100644
--- a/code/modules/food_and_drinks/food/snacks/dough.dm
+++ b/code/modules/food_and_drinks/food/snacks/dough.dm
@@ -26,6 +26,17 @@
else
..()
+/obj/item/reagent_containers/food/snacks/flatdough/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/kitchen/unrollingpin))
+ if(isturf(loc))
+ new /obj/item/reagent_containers/food/snacks/dough(loc)
+ to_chat(user, "You unflatten [src].")
+ qdel(src)
+ else
+ to_chat(user, "You need to put [src] on a surface to undo the rolling!")
+ else
+ ..()
+
// sliceable into 3xdoughslices
/obj/item/reagent_containers/food/snacks/flatdough
@@ -98,6 +109,17 @@
else
..()
+/obj/item/reagent_containers/food/snacks/piedough/attackby(obj/item/I, mob/user, params)
+ if(istype(I, /obj/item/kitchen/unrollingpin))
+ if(isturf(loc))
+ new /obj/item/reagent_containers/food/snacks/cakebatter(loc)
+ to_chat(user, "You unflatten [src].")
+ qdel(src)
+ else
+ to_chat(user, "You need to put [src] on a surface to undo the rolling!")
+ else
+ ..()
+
/obj/item/reagent_containers/food/snacks/piedough
name = "pie dough"
desc = "Cook it to get a pie."
diff --git a/code/modules/food_and_drinks/recipes/drinks_recipes.dm b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
index 972f9a8cc3..943f421a64 100644
--- a/code/modules/food_and_drinks/recipes/drinks_recipes.dm
+++ b/code/modules/food_and_drinks/recipes/drinks_recipes.dm
@@ -604,6 +604,14 @@
mix_message = "You hear faint sounds of gears turning as it mixes."
mix_sound = 'sound/machines/clockcult/steam_whoosh.ogg'
+/datum/chemical_reaction/pinotmort
+ name = "Pinot Mort"
+ id = /datum/reagent/consumable/ethanol/pinotmort
+ results = list(/datum/reagent/consumable/ethanol/pinotmort = 4)
+ required_reagents = list(/datum/reagent/ash = 2, /datum/reagent/consumable/ethanol/lizardwine = 1, /datum/reagent/consumable/vitfro = 1)
+ mix_message = "You hear an undescribable scream as it mixes... You're not sure how to feel about this."
+ mix_sound = 'sound/effects/tendril_destroyed.ogg'
+
/datum/chemical_reaction/quadruplesec
name = "Quadruple Sec"
id = /datum/reagent/consumable/ethanol/quadruple_sec
diff --git a/code/modules/holiday/halloween/halloween.dm b/code/modules/holiday/halloween/halloween.dm
index d44b94aaf3..f468022918 100644
--- a/code/modules/holiday/halloween/halloween.dm
+++ b/code/modules/holiday/halloween/halloween.dm
@@ -206,6 +206,9 @@
/mob/living/simple_animal/hostile/retaliate/clown/insane/ex_act()
return
+/mob/living/simple_animal/hostile/retaliate/clown/insane/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ return power
+
/mob/living/simple_animal/hostile/retaliate/clown/insane/Life()
timer--
if(target)
diff --git a/code/modules/mapping/space_management/multiz_helpers.dm b/code/modules/mapping/space_management/multiz_helpers.dm
index ae05aee150..b949ac67e6 100644
--- a/code/modules/mapping/space_management/multiz_helpers.dm
+++ b/code/modules/mapping/space_management/multiz_helpers.dm
@@ -13,13 +13,15 @@
var/offset
while((offset = SSmapping.level_trait(other_z, ZTRAIT_DOWN)))
other_z += offset
+ if(other_z in .)
+ break // no infinite loops
. += other_z
other_z = center_z
while((offset = SSmapping.level_trait(other_z, ZTRAIT_UP)))
other_z += offset
+ if(other_z in .)
+ break // no infinite loops
. += other_z
- return .
-
/proc/get_dir_multiz(turf/us, turf/them)
us = get_turf(us)
@@ -46,4 +48,4 @@
/turf/proc/below()
return get_step_multiz(src, DOWN)
-
+
diff --git a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm
index e09a0386ee..8fb735e10a 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories/ears.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories/ears.dm
@@ -67,6 +67,13 @@
matrixed_sections = MATRIX_RED_GREEN
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+/datum/sprite_accessory/ears/bunnyalt
+ name = "Bunny (Vegas)"
+ icon_state = "bunnyalt"
+ color_src = MATRIXED
+ matrixed_sections = MATRIX_RED_GREEN
+ icon = 'modular_citadel/icons/mob/mam_ears.dmi'
+
/datum/sprite_accessory/ears/cat
name = "Cat"
icon_state = "cat"
@@ -258,6 +265,11 @@
icon_state = "bunny"
matrixed_sections = MATRIX_RED_GREEN
+/datum/sprite_accessory/ears/mam_ears/bunnyalt
+ name = "Bunny (Vegas)"
+ icon_state = "bunnyalt"
+ matrixed_sections = MATRIX_RED_GREEN
+
/datum/sprite_accessory/ears/mam_ears/cat
name = "Cat"
icon_state = "cat"
diff --git a/code/modules/mob/living/bloodcrawl.dm b/code/modules/mob/living/bloodcrawl.dm
index 24d456bf8f..b66158db8a 100644
--- a/code/modules/mob/living/bloodcrawl.dm
+++ b/code/modules/mob/living/bloodcrawl.dm
@@ -13,6 +13,10 @@
/obj/effect/dummy/phased_mob/slaughter/ex_act()
return
+
+/obj/effect/dummy/phased_mob/slaughter/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ return power
+
/obj/effect/dummy/phased_mob/slaughter/bullet_act()
return BULLET_ACT_FORCE_PIERCE
diff --git a/code/modules/mob/living/brain/brain.dm b/code/modules/mob/living/brain/brain.dm
index be03827695..8ffcce248b 100644
--- a/code/modules/mob/living/brain/brain.dm
+++ b/code/modules/mob/living/brain/brain.dm
@@ -46,6 +46,9 @@
/mob/living/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up.
return
+/mob/living/brain/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ return power
+
/mob/living/brain/blob_act(obj/structure/blob/B)
return
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 6f5109c90b..c1110af267 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -370,7 +370,7 @@
breakouttime = 50
visible_message("[src] is trying to break [I]!")
to_chat(src, "You attempt to break [I]... (This will take around 5 seconds and you need to stand still.)")
- if(do_after(src, breakouttime, 0, target = src))
+ if(do_after(src, breakouttime, 0, target = src, required_mobility_flags = MOBILITY_RESIST))
clear_cuffs(I, cuff_break)
else
to_chat(src, "You fail to break [I]!")
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index c2014cbe41..f636ae76ab 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1083,6 +1083,17 @@
. = ..()
set_species(race)
+/mob/living/carbon/human/get_tooltip_data()
+ var/t_He = p_they(TRUE)
+ var/t_is = p_are()
+ . = list()
+ var/skipface = (wear_mask && (wear_mask.flags_inv & HIDEFACE)) || (head && (head.flags_inv & HIDEFACE))
+ if(skipface || get_visible_name() == "Unknown")
+ . += "You can't make out what species they are."
+ else
+ . += "[t_He] [t_is] a [dna.custom_species ? dna.custom_species : dna.species.name]"
+ SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, usr, .)
+
/mob/living/carbon/human/species/abductor
race = /datum/species/abductor
diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm
index 9f80b5a933..102f3df65d 100644
--- a/code/modules/mob/living/carbon/human/human_defines.dm
+++ b/code/modules/mob/living/carbon/human/human_defines.dm
@@ -77,6 +77,8 @@
var/last_fire_update
var/hardcore_survival_score = 0
+ tooltips = TRUE
+
/// Unarmed parry data for human
/datum/block_parry_data/unarmed/human
parry_respect_clickdelay = TRUE
diff --git a/code/modules/mob/living/carbon/human/species_types/anthromorph.dm b/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm
similarity index 97%
rename from code/modules/mob/living/carbon/human/species_types/anthromorph.dm
rename to code/modules/mob/living/carbon/human/species_types/anthropomorph.dm
index 1c0936af37..95cb9cca59 100644
--- a/code/modules/mob/living/carbon/human/species_types/anthromorph.dm
+++ b/code/modules/mob/living/carbon/human/species_types/anthropomorph.dm
@@ -1,5 +1,5 @@
/datum/species/mammal
- name = "Anthromorph"
+ name = "Anthropomorph"
id = SPECIES_MAMMAL
default_color = "4B4B4B"
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE)
@@ -20,7 +20,7 @@
allowed_limb_ids = list("mammal","aquatic","avian")
/datum/species/mammal/synthetic
- name = "Synthetic Anthromorph"
+ name = "Synthetic Anthropomorph"
id = SPECIES_MAMMAL_SYNTHETIC
species_traits = list(MUTCOLORS,NOTRANSSTING,EYECOLOR,LIPS,HAIR,ROBOTIC_LIMBS,HAS_FLESH,HAS_BONE,WINGCOLOR,HORNCOLOR)
diff --git a/code/modules/mob/living/carbon/human/species_types/bugmen.dm b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
index 773651d464..c649339fe3 100644
--- a/code/modules/mob/living/carbon/human/species_types/bugmen.dm
+++ b/code/modules/mob/living/carbon/human/species_types/bugmen.dm
@@ -1,5 +1,5 @@
/datum/species/insect
- name = "Anthromorphic Insect"
+ name = "Anthropomorphic Insect"
id = SPECIES_INSECT
say_mod = "chitters"
default_color = "00FF00"
diff --git a/code/modules/mob/living/carbon/human/species_types/flypeople.dm b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
index c3e406244b..5a185cbeb8 100644
--- a/code/modules/mob/living/carbon/human/species_types/flypeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/flypeople.dm
@@ -1,5 +1,5 @@
/datum/species/fly
- name = "Anthromorphic Fly"
+ name = "Anthropomorphic Fly"
id = SPECIES_FLY
say_mod = "buzzes"
species_traits = list(NOEYES,HAS_FLESH,HAS_BONE)
diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
index 41d9ed4fef..07fa78a88a 100644
--- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm
@@ -1,6 +1,6 @@
/datum/species/lizard
// Reptilian humanoids with scaled skin and tails.
- name = "Anthromorphic Lizard"
+ name = "Anthropomorphic Lizard"
id = SPECIES_LIZARD
say_mod = "hisses"
default_color = "00FF00"
diff --git a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
index dcbdf91485..0655b28197 100644
--- a/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/mushpeople.dm
@@ -1,5 +1,5 @@
/datum/species/mush //mush mush codecuck
- name = "Anthromorphic Mushroom"
+ name = "Anthropomorphic Mushroom"
id = SPECIES_MUSHROOM
mutant_bodyparts = list("caps" = "Round")
diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
index e30f4622a0..ed0fa9ae87 100644
--- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm
+++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm
@@ -1,6 +1,6 @@
/datum/species/pod
// A mutation caused by a human being ressurected in a revival pod. These regain health in light, and begin to wither in darkness.
- name = "Anthromorphic Plant"
+ name = "Anthropomorphic Plant"
id = SPECIES_POD
default_color = "59CE00"
species_traits = list(MUTCOLORS,EYECOLOR,CAN_SCAR,HAS_FLESH,HAS_BONE)
@@ -71,7 +71,7 @@
H.emote("spin")
/datum/species/pod/pseudo_weak
- name = "Anthromorphic Plant"
+ name = "Anthropomorphic Plant"
id = SPECIES_POD_WEAK
species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,MUTCOLORS,CAN_SCAR,HAS_FLESH,HAS_BONE)
mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "mam_body_markings" = list(), "taur" = "None", "legs" = "Normal Legs")
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 5f3f530437..4c6ede3904 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -438,6 +438,12 @@
return
..()
+/mob/living/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ if(power > EXPLOSION_POWER_NORMAL_MOB_GIB)
+ gib()
+ adjustBruteLoss(EXPLOSION_POWER_STANDARD_SCALE_MOB_DAMAGE(power, explosion.mob_damage_mod))
+ return power
+
//Looking for irradiate()? It's been moved to radiation.dm under the rad_act() for mobs.
/mob/living/acid_act(acidpwr, acid_volume)
diff --git a/code/modules/mob/living/silicon/examine.dm b/code/modules/mob/living/silicon/examine.dm
index 7de281de5f..0840ea1191 100644
--- a/code/modules/mob/living/silicon/examine.dm
+++ b/code/modules/mob/living/silicon/examine.dm
@@ -1,5 +1,4 @@
/mob/living/silicon/examine(mob/user) //Displays a silicon's laws to ghosts
- . = ..()
if(laws && isobserver(user))
. += "[src] has the following laws:"
for(var/law in laws.get_law_list(include_zeroth = TRUE))
diff --git a/code/modules/mob/living/silicon/robot/examine.dm b/code/modules/mob/living/silicon/robot/examine.dm
index 6ac1d410eb..45a3d15635 100644
--- a/code/modules/mob/living/silicon/robot/examine.dm
+++ b/code/modules/mob/living/silicon/robot/examine.dm
@@ -48,6 +48,9 @@
. += "It doesn't seem to be responding."
if(DEAD)
. += "It looks like its system is corrupted and requires a reset."
+
+ SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, usr, .)
+
. += "*---------*"
. += ..()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 38f93f9ffc..47f9a794cf 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1326,3 +1326,18 @@
var/datum/computer_file/program/robotact/program = modularInterface.get_robotact()
if(program)
program.force_full_update()
+
+/mob/living/silicon/robot/get_tooltip_data()
+ var/t_He = p_they(TRUE)
+ var/t_is = p_are()
+ . = list()
+ var/borg_type = module ? module : "Default"
+//This isn't even used normally, but if that ever changes, just uncomment this
+/* var/obj/item/borg_chameleon/chameleon = locate() in src
+ if(!chameleon)
+ chameleon = locate() in src.module
+ if(chameleon?.active)
+ borg_type = "Engineering"
+*/
+ . += "[t_He] [t_is] a [borg_type] unit"
+ SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, usr, .)
diff --git a/code/modules/mob/living/silicon/robot/robot_defines.dm b/code/modules/mob/living/silicon/robot/robot_defines.dm
index f44552f1ab..fe22ec1236 100644
--- a/code/modules/mob/living/silicon/robot/robot_defines.dm
+++ b/code/modules/mob/living/silicon/robot/robot_defines.dm
@@ -125,3 +125,5 @@
var/sleeper_g
var/sleeper_r
var/sleeper_nv
+
+ tooltips = TRUE
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index b2b27c7d70..8af55370bb 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -59,8 +59,8 @@
/mob/living/silicon/ComponentInitialize()
. = ..()
- AddElement(/datum/element/flavor_text, _name = "Silicon Flavor Text", _save_key = "silicon_flavor_text")
- AddElement(/datum/element/flavor_text, "", "Temporary Flavor Text", "This should be used only for things pertaining to the current round!")
+ AddElement(/datum/element/flavor_text, _name = "Silicon Flavor Text", _always_show = TRUE, _save_key = "silicon_flavor_text")
+ AddElement(/datum/element/flavor_text, "", "Temporary Flavor Text", "This should be used only for things pertaining to the current round!", _always_show = TRUE)
AddElement(/datum/element/flavor_text, _name = "OOC Notes", _addendum = "Put information on ERP/vore/lewd-related preferences here. THIS SHOULD NOT CONTAIN REGULAR FLAVORTEXT!!", _always_show = TRUE, _save_key = "ooc_notes", _examine_no_preview = TRUE)
/mob/living/silicon/med_hud_set_health()
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 012515d0e9..7c7ff3779c 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -280,6 +280,9 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
if(3)
adjustBruteLoss(30)
+/mob/living/simple_animal/hostile/guardian/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ adjustBruteLoss(EXPLOSION_POWER_STANDARD_SCALE_MOB_DAMAGE(power, explosion.mob_damage_mod * 0.33))
+
/mob/living/simple_animal/hostile/guardian/gib()
if(summoner)
to_chat(summoner, "Your [src] was blown up!")
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
index e2d6602a88..3940388625 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/megafauna.dm
@@ -149,6 +149,9 @@
if(EXPLODE_LIGHT)
adjustBruteLoss(50)
+/mob/living/simple_animal/hostile/megafauna/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ adjustBruteLoss(EXPLOSION_POWER_STANDARD_SCALE_MOB_DAMAGE(power, explosion.mob_damage_mod) / 2)
+
/// Sets the next time the megafauna can use a melee or ranged attack, in deciseconds
/mob/living/simple_animal/hostile/megafauna/proc/SetRecoveryTime(buffer_time, ranged_buffer_time)
recovery_time = world.time + buffer_time
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
index cee7e2979d..bda898ef17 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/basilisk.dm
@@ -59,6 +59,13 @@
if(3)
adjustBruteLoss(110)
+/mob/living/simple_animal/hostile/asteroid/basilisk/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ . = ..()
+ if(power > EXPLOSION_POWER_NORMAL_MOB_GIB)
+ gib()
+ else
+ adjustBruteLoss(EXPLOSION_POWER_STANDARD_SCALE_MOB_DAMAGE(power, explosion.mob_damage_mod))
+
//Watcher
/mob/living/simple_animal/hostile/asteroid/basilisk/watcher
name = "watcher"
diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
index 103868e1d3..df73516337 100644
--- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm
@@ -130,11 +130,11 @@
QDEL_NULL(sord)
return ..()
-/mob/living/simple_animal/hostile/syndicate/melee/bullet_act(obj/item/projectile/Proj)
- if(prob(25))
- return ..()
- visible_message("[src] blocks [Proj] with its shield!")
- return BULLET_ACT_BLOCK
+/mob/living/simple_animal/hostile/syndicate/melee/sword/bullet_act(obj/item/projectile/Proj)
+ if(prob(50))
+ visible_message("[src] blocks [Proj] with its shield!")
+ return BULLET_ACT_BLOCK
+ return ..()
/mob/living/simple_animal/hostile/syndicate/melee/sword/space
icon_state = "syndicate_space_sword"
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 92aa95bfb7..9cc289b06d 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -152,7 +152,7 @@
else
//dot product of sun and panel -- Lambert's Cosine Law
cur_pow = cos(azimuth_current - sun_azimuth) * sun.power_mod
- cur_pow = clamp(round(cur_pow, 0.01), 0, 1)
+ cur_pow = clamp(round(cur_pow, 0.01), 0, sun.power_mod)
total_flux += cur_pow
/obj/machinery/power/solar/process()
diff --git a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
index 70058801f8..1f1cc10459 100644
--- a/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
+++ b/code/modules/projectiles/boxes_magazines/ammo_boxes.dm
@@ -60,6 +60,13 @@
desc = "Designed to quickly reload revolvers. These rounds are manufactured within extremely tight tolerances, making them easy to show off trickshots with."
ammo_type = /obj/item/ammo_casing/c38/match
+/obj/item/ammo_box/g4570
+ name = "ammo box (.45-70 GOVT)"
+ desc = "Brought to you at great expense,this box contains 10 more .45-70 GOVT bullets."
+ ammo_type = /obj/item/ammo_casing/g4570
+ icon_state = "45box"
+ max_ammo = 10
+
/obj/item/ammo_box/c9mm
name = "ammo box (9mm)"
icon_state = "9mmbox"
diff --git a/code/modules/projectiles/boxes_magazines/internal/derringer.dm b/code/modules/projectiles/boxes_magazines/internal/derringer.dm
index cc86549793..dad8386178 100644
--- a/code/modules/projectiles/boxes_magazines/internal/derringer.dm
+++ b/code/modules/projectiles/boxes_magazines/internal/derringer.dm
@@ -3,28 +3,17 @@
ammo_type = /obj/item/ammo_casing/c38
caliber = "38"
max_ammo = 2
- multiload = FALSE
-
-/obj/item/ammo_box/magazine/internal/derringer/ammo_count(countempties = 1)
- if (!countempties)
- var/boolets = 0
- for(var/obj/item/ammo_casing/bullet in stored_ammo)
- if(bullet.BB)
- boolets++
- return boolets
- else
- return ..()
/obj/item/ammo_box/magazine/internal/derringer/a357
name = "\improper derringer muzzle"
ammo_type = /obj/item/ammo_casing/a357
caliber = "357"
max_ammo = 2
- multiload = FALSE
+ multiload = 0
/obj/item/ammo_box/magazine/internal/derringer/g4570
name = "\improper derringer muzzle"
ammo_type = /obj/item/ammo_casing/g4570
caliber = "45-70g"
max_ammo = 2
- multiload = FALSE
+ multiload = 0
diff --git a/code/modules/projectiles/guns/ballistic/derringer.dm b/code/modules/projectiles/guns/ballistic/derringer.dm
index a88a11b416..47213f17df 100644
--- a/code/modules/projectiles/guns/ballistic/derringer.dm
+++ b/code/modules/projectiles/guns/ballistic/derringer.dm
@@ -3,16 +3,14 @@
desc = "A easily concealable derringer. Uses .38 ammo"
icon = 'icons/obj/guns/projectile.dmi'
icon_state = "derringer"
+ flags_1 = CONDUCT_1
mag_type = /obj/item/ammo_box/magazine/internal/derringer
+ fire_delay = 5
obj_flags = UNIQUE_RENAME
fire_sound = 'sound/weapons/revolvershot.ogg'
casing_ejector = FALSE
w_class = WEIGHT_CLASS_TINY
-/obj/item/gun/ballistic/derringer/Initialize()
- ..()
- transform *= 0.8 //Spriter too lazy to make icons smaller than default revolvers, local coder hacks in solution.
-
/obj/item/gun/ballistic/derringer/get_ammo(countchambered = FALSE, countempties = TRUE)
var/boolets = 0 //legacy var name maturity
if (chambered && countchambered)
@@ -27,7 +25,7 @@
return
var/num_loaded = magazine.attackby(A, user, params, 1)
if(num_loaded)
- to_chat(user, "You load [num_loaded] shell\s into \the [src].")
+ to_chat(user, "You load [num_loaded] bullet\s into \the [src].")
playsound(user, 'sound/weapons/bulletinsert.ogg', 60, 1)
A.update_icon()
update_icon()
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index aae21464b1..f53ac7ac40 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -1490,6 +1490,25 @@ All effects don't start immediately, but rather get worse over time; the rate is
M.stuttering = min(M.stuttering + 3, 3)
..()
+/datum/reagent/consumable/ethanol/pinotmort
+ name = "Pinot Mort"
+ description = "If you just can't get enough of lavaland."
+ color = rgb(167, 36, 36)
+ boozepwr = 20
+ quality = DRINK_FANTASTIC
+ taste_description = "death, ash and lizards"
+ glass_icon_state = "pinotmort"
+ glass_name = "Pinot Mort"
+ glass_desc = "The taste of Lavaland served in a legion skull. You feel like you might regret drinking this."
+ value = REAGENT_VALUE_UNCOMMON
+
+/datum/reagent/consumable/ethanol/pinotmort/on_mob_life(mob/living/carbon/M)
+ if((islizard(M) && M.mind.assigned_role == "Ash Walker") || ispodperson(M) && M.mind.assigned_role == "Lifebringer" || isgolem(M))
+ M.heal_bodypart_damage(1, 1)
+ M.adjustBruteLoss(-2,0)
+ . = 1
+ return ..()
+
/datum/reagent/consumable/ethanol/triple_sec
name = "Triple Sec"
description = "A sweet and vibrant orange liqueur."
diff --git a/code/modules/reagents/reagent_containers/bottle.dm b/code/modules/reagents/reagent_containers/bottle.dm
index 5d68d00200..be8c7fac36 100644
--- a/code/modules/reagents/reagent_containers/bottle.dm
+++ b/code/modules/reagents/reagent_containers/bottle.dm
@@ -44,6 +44,26 @@
desc = "A small bottle. Contains epinephrine - used to stabilize patients."
list_reagents = list(/datum/reagent/medicine/epinephrine = 30)
+/obj/item/reagent_containers/glass/bottle/bicaridine
+ name = "bicaridine bottle"
+ desc = "A small bottle. Contains bicaridine - used to treat brute damage."
+ list_reagents = list(/datum/reagent/medicine/bicaridine = 30)
+
+/obj/item/reagent_containers/glass/bottle/kelotane
+ name = "kelotane bottle"
+ desc = "A small bottle. Contains kelotane - used to treat burn damage."
+ list_reagents = list(/datum/reagent/medicine/kelotane = 30)
+
+/obj/item/reagent_containers/glass/bottle/antitoxin
+ name = "anti-toxin bottle"
+ desc = "A small bottle. Contains anti-toxin - used to treat minor poisoning."
+ list_reagents = list(/datum/reagent/medicine/antitoxin = 30)
+
+/obj/item/reagent_containers/glass/bottle/dexalin
+ name = "dexalin bottle"
+ desc = "A small bottle. Contains dexalin - used to treat minor suffocation."
+ list_reagents = list(/datum/reagent/medicine/dexalin = 30)
+
/obj/item/reagent_containers/glass/bottle/toxin
name = "toxin bottle"
desc = "A small bottle of toxins. Do not drink, it is poisonous."
diff --git a/code/modules/spells/spell_types/ethereal_jaunt.dm b/code/modules/spells/spell_types/ethereal_jaunt.dm
index 9d91b6534d..7a05583071 100644
--- a/code/modules/spells/spell_types/ethereal_jaunt.dm
+++ b/code/modules/spells/spell_types/ethereal_jaunt.dm
@@ -108,5 +108,8 @@
/obj/effect/dummy/phased_mob/spell_jaunt/ex_act(blah)
return
+/obj/effect/dummy/phased_mob/spell_jaunt/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ return power
+
/obj/effect/dummy/phased_mob/spell_jaunt/bullet_act(blah)
return BULLET_ACT_FORCE_PIERCE
diff --git a/code/modules/spells/spell_types/shadow_walk.dm b/code/modules/spells/spell_types/shadow_walk.dm
index 8436de2119..821bf73425 100644
--- a/code/modules/spells/spell_types/shadow_walk.dm
+++ b/code/modules/spells/spell_types/shadow_walk.dm
@@ -90,6 +90,9 @@
/obj/effect/dummy/phased_mob/shadow/ex_act()
return
+/obj/effect/dummy/phased_mob/shadow/wave_ex_act(power, datum/wave_explosion/explosion, dir)
+ return power
+
/obj/effect/dummy/phased_mob/shadow/bullet_act()
return BULLET_ACT_FORCE_PIERCE
diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm
index 0e6456e8b0..12e282200c 100644
--- a/code/modules/surgery/organs/vocal_cords.dm
+++ b/code/modules/surgery/organs/vocal_cords.dm
@@ -751,7 +751,6 @@
//phase 2
var/static/regex/awoo_words = regex("howl|awoo|bark")
var/static/regex/nya_words = regex("nya|meow|mewl")
- var/static/regex/sleep_words = regex("sleep|slumber|rest")
var/static/regex/strip_words = regex("strip|derobe|nude|at ease|suit off")
var/static/regex/walk_words = regex("slow down|walk")
var/static/regex/run_words = regex("run|speed up")
@@ -1096,17 +1095,6 @@
H.emote("me", EMOTE_VISIBLE, "lets out a nya!")
E.cooldown += 1
- //SLEEP
- else if((findtext(message, sleep_words)))
- for(var/mob/living/carbon/C in listeners)
- var/datum/status_effect/chem/enthrall/E = C.has_status_effect(/datum/status_effect/chem/enthrall)
- switch(E.phase)
- if(2 to INFINITY)
- C.Sleeping(45 * power_multiplier)
- E.cooldown += 10
- addtimer(CALLBACK(GLOBAL_PROC, .proc/to_chat, C, "Drowsiness suddenly overwhelms you as you fall asleep!"), 5)
- to_chat(user, "You send [C] to sleep.")
-
//STRIP
else if((findtext(message, strip_words)))
for(var/V in listeners)
diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm
index ab7dc91739..fd45ea37d9 100644
--- a/code/modules/tooltip/tooltip.dm
+++ b/code/modules/tooltip/tooltip.dm
@@ -51,7 +51,7 @@ Notes:
/datum/tooltip/proc/show(atom/movable/thing, params = null, title = null, content = null, theme = "default", special = "none")
if (!thing || !params || (!title && !content) || !owner || !isnum(world.icon_size))
- return 0
+ return FALSE
if (!init)
//Initialize some vars
init = 1
@@ -83,7 +83,7 @@ Notes:
if (queueHide)
hide()
- return 1
+ return TRUE
/datum/tooltip/proc/hide()
@@ -122,4 +122,33 @@ Notes:
if(user.client && user.client.tooltips)
user.client.tooltips.hide()
+/**
+ * # `get_tooltip_data()`
+ *
+ * If set, will return a list for the tooltip (that will also be put together in a `Join()`)
+ * However, if returning `null`, falls back to default behavior, which is `examine(src)`, and it will definitely include
+ * images since it is the default behavior
+ *
+ * Though no tooltips will be created for atoms that have `tooltips = FALSE`
+*/
+/atom/movable/proc/get_tooltip_data()
+ return
+/atom/movable/MouseEntered(location, control, params)
+ . = ..()
+ if(tooltips)
+ if(!QDELETED(src))
+ var/list/examine_list = examine(src)
+ var/get_tooltip_data = get_tooltip_data()
+ if(length(get_tooltip_data))
+ examine_list = get_tooltip_data
+ var/examine_data = examine_list.Join("
")
+ openToolTip(usr, src, params, title = name, content = examine_data)
+
+/atom/movable/MouseExited(location, control, params)
+ . = ..()
+ closeToolTip(usr)
+
+/client/MouseDown(object, location, control, params)
+ closeToolTip(usr)
+ . = ..()
diff --git a/code/modules/tooltip/tooltip.html b/code/modules/tooltip/tooltip.html
index 60bd358031..2743bc03d5 100644
--- a/code/modules/tooltip/tooltip.html
+++ b/code/modules/tooltip/tooltip.html
@@ -65,12 +65,12 @@
.hisgrace .wrap {border-color: #7C1414;}
.hisgrace .content {color: #15D512; border-color: #9D1414; background-color: #861414;}
-
+
/* TG: Themes */
/* ScreenUI */
.midnight .wrap {border-color: #2B2B33;}
.midnight .content {color: #6087A0; border-color: #2B2B33; background-color: #36363C;}
-
+
.plasmafire .wrap {border-color: #21213D;}
.plasmafire .content {color: #FFA800 ; border-color: #21213D; background-color:#1D1D36;}
@@ -85,7 +85,7 @@
.clockwork .wrap {border-color: #170800;}
.clockwork .content {color: #B18B25; border-color: #000000; background-color: #5F380E;}
-
+
diff --git a/code/modules/uplink/uplink_items/uplink_ammo.dm b/code/modules/uplink/uplink_items/uplink_ammo.dm
index 853f6111b2..2ab6c6f490 100644
--- a/code/modules/uplink/uplink_items/uplink_ammo.dm
+++ b/code/modules/uplink/uplink_items/uplink_ammo.dm
@@ -7,6 +7,13 @@
// Ammunition
+/datum/uplink_item/ammo/derringer
+ name = "Ammo Box - .45-70 GOVT"
+ desc = "Contains 10 additional .45-70 GOVT rounds. Caliber is exceedingly rare, and thus, comes at a premium."
+ item = /obj/item/ammo_box/g4570
+ cost = 5
+ include_modes = list(/datum/game_mode/nuclear)
+
/datum/uplink_item/ammo/pistol
name = "10mm Handgun Magazine"
desc = "An additional 8-round 10mm magazine; compatible with the Stechkin Pistol. These rounds \
diff --git a/code/modules/uplink/uplink_items/uplink_stealth.dm b/code/modules/uplink/uplink_items/uplink_stealth.dm
index 673f2ab6ee..f401514542 100644
--- a/code/modules/uplink/uplink_items/uplink_stealth.dm
+++ b/code/modules/uplink/uplink_items/uplink_stealth.dm
@@ -9,7 +9,7 @@
/datum/uplink_item/stealthy_weapons/telescopicbat
name = "Telescopic Baseball Bat"
- desc = "A robust telescopic baseball bat that hits like a truck and can be consealed when collapsed."
+ desc = "A robust telescopic baseball bat that hits like a truck and can be concealed when collapsed."
item = /obj/item/melee/baseball_bat/telescopic
cost = 2
@@ -49,7 +49,7 @@
name = "Compact Derringer"
desc = "An easily concealable handgun capable of firing .357 rounds. Comes in an inconspicuious packet of cigarettes with additional munitions."
item = /obj/item/storage/fancy/cigarettes/derringer
- cost = 8
+ cost = 6
surplus = 30
/datum/uplink_item/stealthy_weapons/derringerpack/purchase(mob/user, datum/component/uplink/U)
@@ -57,7 +57,7 @@
item = /obj/item/storage/fancy/cigarettes/derringer/gold
..()
-/datum/uplink_item/stalthy_weapons/derringerpack_nukie
+/datum/uplink_item/stealthy_weapons/derringerpack_nukie
name = "Antique Derringer"
desc = "An easy to conceal, yet extremely deadly handgun, capable of firing .45-70 Govt rounds. Comes in a unique pack of cigarettes with additional munitions."
item = /obj/item/storage/fancy/cigarettes/derringer/midworld
diff --git a/code/modules/vending/dinnerware.dm b/code/modules/vending/dinnerware.dm
index b78af9c46b..c5b85ed61c 100644
--- a/code/modules/vending/dinnerware.dm
+++ b/code/modules/vending/dinnerware.dm
@@ -8,6 +8,7 @@
/obj/item/kitchen/fork = 6,
/obj/item/kitchen/knife = 6,
/obj/item/kitchen/rollingpin = 4,
+ /obj/item/kitchen/unrollingpin = 4,
/obj/item/reagent_containers/food/drinks/drinkingglass = 8,
/obj/item/clothing/suit/apron/chef = 2,
/obj/item/storage/box/cups = 2,
diff --git a/html/changelog.html b/html/changelog.html
index 193d320cbe..7e3f24bf3b 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -50,6 +50,99 @@
-->
+
14 May 2021
+
keronshb updated:
+
+ - Removes VOG sleep command since it was an undocumented readd.
+
+
zeroisthebiggay updated:
+
+
+
13 May 2021
+
Linzolle updated:
+
+ - anthromorphic -> anthropomorphic
+
+
WanderingFox95 updated:
+
+ - Pinot Mort (Necropolis Wine), a new, (totally healthy) mixed drink!
+
+
qweq12yt updated:
+
+ - Fixed sleeping disky spam (it still sleeps soundly, but every minute instead of every two seconds)
+ - Fixed Hulks not breaking cuffs, zipties, restraints.
+
+
silicons updated:
+
+ - A deterministic wave explosion system has been added. Use it with wave_explosion().
+
+
zeroisthebiggay updated:
+
+ - vegas style bunny ears
+
+
+
12 May 2021
+
DeltaFire15 updated:
+
+ - find_safe_turf no longer always fails on safe oxygen levels(??)
+ - Heretic bladeshatters now actually take the heretic's z into account as intended, instead of always being station z tweak: Message for failing the bladeshatter despite succeeding the do_after tweak: Improves bladeshatter a bit by making it safer codewise
+
+
+
11 May 2021
+
LetterN updated:
+
+ - fixes emagging console shuttle purchases
+ - syndie melee simplemobs has no more bullshit shield
+
+
bunny232 updated:
+
+ - Delta station xenobiology department has received enhanced scrubbing and ventilation capabilities similar to box and meta
+
+
+
09 May 2021
+
Putnam3145 updated:
+
+ - Priority announcement admeme verb
+
+
SandPoot updated:
+
+ - Fixed Cyborg examines adding an extra weird line.
+ - Everything can be set to have tooltips, and even coded to have neat tooltips.
+ - Makes it so humans and borgs already have tooltips.
+
+
TheObserver-sys updated:
+
+ - Fixes most of the weird handling bugs and improves cigarette case handling in general.
+ - The Gorlex Marauders have seen fit to allow you to purchase the .45-70 GOVT rare ammo, at a premium cost. Don't waste it.
+
+
WanderingFox95 updated:
+
+ - added the unrolling pin, an innovative solution to dough-based mishaps.
+ - added visuals for the unrolling pin
+
+
dzahlus updated:
+
+ - added new malf AI spawn and doomsday sound
+ - removed old malf AI spawn and doomsday sound
+
+
zeroisthebiggay updated:
+
+ - pirates now have a medbay and several other things qualifying as a buff
+ - pirates lost their toilet
+
+
+
08 May 2021
+
Arturlang updated:
+
+ - Synthblood bottles now have the proper color and probably won't poison you anymore
+
+
timothyteakettle updated:
+
+ - lets humans have digi legs (and avian legs)
+
+
05 May 2021
The0bserver, with a great amount of advice from TripleZeta/TetraZeta updated:
@@ -702,53 +795,6 @@
- Fixes cosmetic augments missing their foot sprites.
-
- 12 March 2021
- R3dtail updated:
-
- - Adds Periods and moves some words around.
-
-
- 10 March 2021
- Hatterhat updated:
-
- - The femur breaker now actually breaks legs by applying a compound fracture.
-
- Putnam3145 updated:
-
- - uncapped TEG power, buffing high-temp TEGs
-
-
- 09 March 2021
- LetterN updated:
-
- - tg hardsync, mostly contains tgui
-
-
- 07 March 2021
- Hatterhat updated:
-
- - You can now reskin your improvised shotguns.
- - The spontaneous brain trauma event now announces to ghosts whoever got funnied upon.
- - Ports EikoBiko's cat tail sprite.
-
- Putnam3145 updated:
-
- - nitryl now consumes oxygen/nitrogen instead of generating them
- - Hyper-nob and nitryl are easier to make.
-
- dzahlus updated:
-
- - Added taser microbattery for MWS-01
- - tweaked MWS-01 beacondrop to have more batteries
- - rebalanced MWS-01 disabler battery to fire 10 shots
- - added unique sound to the MWS-01
- - fixed Modula Weapons System to "Modular Weapon System"
-
- timothyteakettle updated:
-
- - exiting a bluespace jar through any means, hardstuns you for 5 seconds
-
GoonStation 13 Development Team
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index 74a9c9400e..ca2426d1f0 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -29241,3 +29241,63 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
keronshb:
- balance: Nightmare Shadow Jaunt threshold up to 0.4
- balance: Vendor and Engraved message light down to 0.3
+2021-05-08:
+ Arturlang:
+ - bugfix: Synthblood bottles now have the proper color and probably won't poison
+ you anymore
+ timothyteakettle:
+ - rscadd: lets humans have digi legs (and avian legs)
+2021-05-09:
+ Putnam3145:
+ - rscadd: Priority announcement admeme verb
+ SandPoot:
+ - bugfix: Fixed Cyborg examines adding an extra weird line.
+ - code_imp: Everything can be set to have tooltips, and even coded to have neat
+ tooltips.
+ - rscadd: Makes it so humans and borgs already have tooltips.
+ TheObserver-sys:
+ - bugfix: Fixes most of the weird handling bugs and improves cigarette case handling
+ in general.
+ - rscadd: The Gorlex Marauders have seen fit to allow you to purchase the .45-70
+ GOVT rare ammo, at a premium cost. Don't waste it.
+ WanderingFox95:
+ - rscadd: added the unrolling pin, an innovative solution to dough-based mishaps.
+ - imageadd: added visuals for the unrolling pin
+ dzahlus:
+ - soundadd: added new malf AI spawn and doomsday sound
+ - sounddel: removed old malf AI spawn and doomsday sound
+ zeroisthebiggay:
+ - balance: pirates now have a medbay and several other things qualifying as a buff
+ - balance: pirates lost their toilet
+2021-05-11:
+ LetterN:
+ - bugfix: fixes emagging console shuttle purchases
+ - balance: syndie melee simplemobs has no more bullshit shield
+ bunny232:
+ - rscadd: Delta station xenobiology department has received enhanced scrubbing and
+ ventilation capabilities similar to box and meta
+2021-05-12:
+ DeltaFire15:
+ - bugfix: find_safe_turf no longer always fails on safe oxygen levels(??)
+ - bugfix: 'Heretic bladeshatters now actually take the heretic''s z into account
+ as intended, instead of always being station z tweak: Message for failing the
+ bladeshatter despite succeeding the do_after tweak: Improves bladeshatter a
+ bit by making it safer codewise'
+2021-05-13:
+ Linzolle:
+ - spellcheck: anthromorphic -> anthropomorphic
+ WanderingFox95:
+ - rscadd: Pinot Mort (Necropolis Wine), a new, (totally healthy) mixed drink!
+ qweq12yt:
+ - bugfix: Fixed sleeping disky spam (it still sleeps soundly, but every minute instead
+ of every two seconds)
+ - bugfix: Fixed Hulks not breaking cuffs, zipties, restraints.
+ silicons:
+ - code_imp: A deterministic wave explosion system has been added. Use it with wave_explosion().
+ zeroisthebiggay:
+ - rscadd: vegas style bunny ears
+2021-05-14:
+ keronshb:
+ - balance: Removes VOG sleep command since it was an undocumented readd.
+ zeroisthebiggay:
+ - spellcheck: consealed
diff --git a/html/changelogs/AutoChangeLog-pr-14671.yml b/html/changelogs/AutoChangeLog-pr-14671.yml
deleted file mode 100644
index af1cea597a..0000000000
--- a/html/changelogs/AutoChangeLog-pr-14671.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "timothyteakettle"
-delete-after: True
-changes:
- - rscadd: "lets humans have digi legs (and avian legs)"
diff --git a/html/changelogs/AutoChangeLog-pr-14687.yml b/html/changelogs/AutoChangeLog-pr-14687.yml
deleted file mode 100644
index f1dcdbfe44..0000000000
--- a/html/changelogs/AutoChangeLog-pr-14687.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Arturlang"
-delete-after: True
-changes:
- - bugfix: "Synthblood bottles now have the proper color and probably won't poison you anymore"
diff --git a/icons/mob/inhands/equipment/kitchen_lefthand.dmi b/icons/mob/inhands/equipment/kitchen_lefthand.dmi
index 93cd988cff..bd3e1f779f 100644
Binary files a/icons/mob/inhands/equipment/kitchen_lefthand.dmi and b/icons/mob/inhands/equipment/kitchen_lefthand.dmi differ
diff --git a/icons/mob/inhands/equipment/kitchen_righthand.dmi b/icons/mob/inhands/equipment/kitchen_righthand.dmi
index 075b4c2033..9e9f21b0f5 100644
Binary files a/icons/mob/inhands/equipment/kitchen_righthand.dmi and b/icons/mob/inhands/equipment/kitchen_righthand.dmi differ
diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi
index 7dac61a663..892f974afd 100644
Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index 1b28b910c1..1c3b10b9de 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi
index 31312ac9a1..9a4af82449 100644
Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ
diff --git a/modular_citadel/icons/mob/mam_ears.dmi b/modular_citadel/icons/mob/mam_ears.dmi
index a3f09819f2..1ed3d8fbbe 100644
Binary files a/modular_citadel/icons/mob/mam_ears.dmi and b/modular_citadel/icons/mob/mam_ears.dmi differ
diff --git a/sound/ambience/antag/Malf.ogg b/sound/ambience/antag/Malf.ogg
index feea5fbf19..c84ec5ecff 100644
Binary files a/sound/ambience/antag/Malf.ogg and b/sound/ambience/antag/Malf.ogg differ
diff --git a/sound/announcer/classic/aimalf.ogg b/sound/announcer/classic/aimalf.ogg
index b7996916b4..cd74872c66 100644
Binary files a/sound/announcer/classic/aimalf.ogg and b/sound/announcer/classic/aimalf.ogg differ
diff --git a/tgstation.dme b/tgstation.dme
index 017bd393e7..2e5bd87e51 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -51,6 +51,7 @@
#include "code\__DEFINES\economy.dm"
#include "code\__DEFINES\events.dm"
#include "code\__DEFINES\exosuit_fabs.dm"
+#include "code\__DEFINES\explosion.dm"
#include "code\__DEFINES\exports.dm"
#include "code\__DEFINES\fantasy_affixes.dm"
#include "code\__DEFINES\food.dm"
@@ -320,6 +321,7 @@
#include "code\controllers\subsystem\disease.dm"
#include "code\controllers\subsystem\economy.dm"
#include "code\controllers\subsystem\events.dm"
+#include "code\controllers\subsystem\explosions.dm"
#include "code\controllers\subsystem\fail2topic.dm"
#include "code\controllers\subsystem\fire_burning.dm"
#include "code\controllers\subsystem\fluid.dm"
@@ -410,6 +412,7 @@
#include "code\datums\emotes.dm"
#include "code\datums\ert.dm"
#include "code\datums\explosion.dm"
+#include "code\datums\explosion2.dm"
#include "code\datums\forced_movement.dm"
#include "code\datums\holocall.dm"
#include "code\datums\http.dm"
@@ -2625,7 +2628,7 @@
#include "code\modules\mob\living\carbon\human\species_types\abductor.dm"
#include "code\modules\mob\living\carbon\human\species_types\android.dm"
#include "code\modules\mob\living\carbon\human\species_types\angel.dm"
-#include "code\modules\mob\living\carbon\human\species_types\anthromorph.dm"
+#include "code\modules\mob\living\carbon\human\species_types\anthropomorph.dm"
#include "code\modules\mob\living\carbon\human\species_types\arachnid.dm"
#include "code\modules\mob\living\carbon\human\species_types\bugmen.dm"
#include "code\modules\mob\living\carbon\human\species_types\corporate.dm"