diff --git a/_maps/RandomZLevels/away_mission/TheBeach.dmm b/_maps/RandomZLevels/away_mission/TheBeach.dmm index 80a649bcc8..2c65f2dd8a 100644 --- a/_maps/RandomZLevels/away_mission/TheBeach.dmm +++ b/_maps/RandomZLevels/away_mission/TheBeach.dmm @@ -272,7 +272,7 @@ /obj/structure/mirror{ pixel_y = 28 }, -/turf/open/floor/wood, +/turf/open/floor/wood/wood_diagonal, /area/awaymission/beach) "bd" = ( /turf/open/floor/wood, @@ -312,7 +312,7 @@ pixel_x = 24; specialfunctions = 4 }, -/turf/open/floor/wood, +/turf/open/floor/wood/wood_diagonal, /area/awaymission/beach) "bj" = ( /obj/machinery/button/door{ @@ -322,7 +322,7 @@ pixel_x = -24; specialfunctions = 4 }, -/turf/open/floor/wood, +/turf/open/floor/wood/wood_diagonal, /area/awaymission/beach) "bk" = ( /obj/structure/closet/secure_closet/personal/cabinet, @@ -392,14 +392,14 @@ id_tag = "changlinhut2"; name = "changing room" }, -/turf/open/floor/wood, +/turf/open/floor/wood/wood_diagonal, /area/awaymission/beach) "bt" = ( /obj/machinery/door/airlock/sandstone{ id_tag = "changlinhut1"; name = "changing room" }, -/turf/open/floor/wood, +/turf/open/floor/wood/wood_diagonal, /area/awaymission/beach) "bu" = ( /obj/item/reagent_containers/food/drinks/bottle/wine, @@ -477,9 +477,9 @@ /turf/open/floor/plating/beach/sand, /area/awaymission/beach) "bF" = ( -/obj/structure/bedsheetbin, /obj/effect/turf_decal/sand, /obj/structure/table/wood, +/obj/structure/bedsheetbin/towel, /turf/open/floor/plating/beach/sand, /area/awaymission/beach) "bG" = ( @@ -773,7 +773,7 @@ /area/awaymission/beach) "cv" = ( /obj/effect/turf_decal/stripes/white/corner{ - dir = 4 + dir = 1 }, /turf/open/floor/plating/beach/sand, /area/awaymission/beach) @@ -1001,6 +1001,16 @@ /obj/item/clothing/glasses/heat, /turf/open/floor/plating/beach/sand, /area/awaymission/beach) +"iv" = ( +/obj/structure/dresser{ + density = 0; + pixel_y = 18 + }, +/turf/open/floor/wood/wood_diagonal, +/area/awaymission/beach) +"kr" = ( +/turf/open/floor/wood/wood_diagonal, +/area/awaymission/beach) "np" = ( /obj/machinery/shower{ dir = 8 @@ -7586,8 +7596,8 @@ ak ak ak aX -bb -bd +iv +kr aX ak ba @@ -8442,7 +8452,7 @@ aJ aE ak aX -bb +iv bj bt ba @@ -8550,7 +8560,7 @@ ak aS aX bc -bd +kr aX ak ba @@ -9090,7 +9100,7 @@ ak ak ba ba -ak +bF ak ak ak diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 26253018ff..ea760cd55a 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -94,6 +94,13 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/item/radio/intercom{ + desc = "Talk through this. It looks like it has been modified to not broadcast."; + name = "Prison Intercom (General)"; + pixel_x = -27; + pixel_y = -27; + prison_radio = 1 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "aao" = ( @@ -105,6 +112,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/security/prison/upper) "aap" = ( @@ -123,6 +131,11 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/security/prison) "aau" = ( @@ -154,6 +167,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/security/prison/upper) "aay" = ( @@ -206,6 +220,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/security/prison/upper) "aaC" = ( @@ -220,6 +235,8 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/security/prison/upper) "aaD" = ( @@ -340,7 +357,7 @@ /turf/open/floor/plating, /area/command/heads_quarters/hos) "aaN" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/security/prison/upper) "aaO" = ( @@ -394,6 +411,9 @@ name = "Permabrig Transfer"; req_access_txt = "2" }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel/dark, /area/security/prison) "aaV" = ( @@ -478,9 +498,6 @@ /turf/closed/wall, /area/security/execution/transfer) "abf" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Prison Laundry" - }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -492,29 +509,21 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/grunge{ + name = "Prison Laundry"; + wiretypepath = /datum/wires/airlock/security + }, /turf/open/floor/plasteel/dark, /area/security/prison/upper) "abg" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Cell Block" - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "abh" = ( @@ -532,6 +541,10 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/effect/decal/cleanable/blood/old, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "abi" = ( @@ -603,13 +616,6 @@ }, /turf/open/floor/plasteel/dark, /area/command/heads_quarters/hos) -"abs" = ( -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/machinery/power/tracker, -/turf/open/floor/plasteel/airless/solarpanel, -/area/solars/port/fore) "abt" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -669,6 +675,10 @@ /obj/structure/cable{ icon_state = "0-2" }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, /turf/open/floor/plating, /area/security/prison) "abE" = ( @@ -684,6 +694,7 @@ /area/security/prison/upper) "abF" = ( /obj/structure/table, +/obj/item/flashlight/lamp, /turf/open/floor/plasteel/dark, /area/security/prison/upper) "abG" = ( @@ -728,13 +739,7 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/security/prison) "abL" = ( /obj/structure/chair/stool, @@ -836,13 +841,6 @@ /obj/structure/grille, /turf/open/space, /area/space/nearstation) -"abZ" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solars/port/fore) "aca" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -873,6 +871,12 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/security/prison) "acg" = ( @@ -1125,9 +1129,10 @@ dir = 1 }, /obj/effect/landmark/start/prisoner, -/obj/machinery/light/small{ - dir = 1; - light_color = "#ffc1c1" +/obj/machinery/button/door{ + id = "permacells1"; + name = "Privacy Shutters"; + pixel_x = 25 }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) @@ -1140,6 +1145,12 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/security/prison) "acD" = ( @@ -1151,6 +1162,10 @@ /obj/structure/cable{ icon_state = "0-2" }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, /turf/open/floor/plating, /area/security/prison/upper) "acE" = ( @@ -1161,11 +1176,7 @@ dir = 4; light_color = "#c1caff" }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/security/prison) "acF" = ( /obj/machinery/light_switch{ @@ -1318,16 +1329,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/maintenance/fore/secondary) -"acV" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solars/port/fore) "acW" = ( /obj/structure/cable{ icon_state = "0-2" @@ -1343,13 +1344,7 @@ dir = 8 }, /obj/structure/table, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/security/prison) "ada" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -1358,6 +1353,12 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/security/prison) "adb" = ( @@ -1369,11 +1370,32 @@ /area/security/prison/upper) "add" = ( /obj/structure/table, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = 10 }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/plasteel/dark, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = -2 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = 4 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_x = -6; + pixel_y = -8 + }, +/obj/item/clothing/under/rank/prisoner{ + pixel_x = 8; + pixel_y = 5 + }, +/obj/machinery/camera{ + c_tag = "Permabrig Processing"; + dir = 8; + network = list("ss13","prison") + }, +/turf/open/floor/plasteel, /area/security/prison) "adf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -1523,24 +1545,6 @@ /obj/effect/landmark/barthpot, /turf/open/floor/wood, /area/service/library) -"adw" = ( -/obj/structure/cable, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solars/port/fore) -"adx" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solars/port/fore) "ady" = ( /obj/structure/lattice/catwalk, /turf/open/space, @@ -1616,6 +1620,7 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/security/prison) "adI" = ( @@ -1807,13 +1812,6 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/solars/starboard/fore) -"adZ" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solars/port/fore) "aeb" = ( /obj/structure/table, /obj/item/storage/box/handcuffs{ @@ -1839,8 +1837,12 @@ /area/security/prison) "aed" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/machinery/computer/prisoner/management, /obj/effect/turf_decal/delivery, +/obj/machinery/disposal/deliveryChute, +/obj/structure/plasticflaps/opaque{ + name = "Prisoner Transfer" + }, +/obj/structure/disposalpipe/trunk, /turf/open/floor/plasteel/dark, /area/security/prison) "aef" = ( @@ -1848,15 +1850,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -1866,7 +1859,16 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/plasteel, /area/security/prison) "aeh" = ( /obj/effect/turf_decal/tile/red{ @@ -1879,9 +1881,6 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, /turf/open/floor/plasteel, /area/security/prison) "aei" = ( @@ -1889,6 +1888,10 @@ /obj/structure/cable{ icon_state = "0-8" }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, /turf/open/floor/plating, /area/security/prison) "aej" = ( @@ -1901,6 +1904,9 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/machinery/light_switch{ + pixel_y = 23 + }, /turf/open/floor/plasteel, /area/security/prison) "aek" = ( @@ -1919,11 +1925,6 @@ /turf/open/floor/plasteel, /area/security/prison) "ael" = ( -/obj/machinery/button/flasher{ - id = "PCell 2"; - pixel_x = 6; - pixel_y = 24 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -1937,9 +1938,7 @@ /area/security/prison) "aem" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/security/prison) "aen" = ( @@ -1977,15 +1976,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/security/prison) "aeq" = ( -/obj/machinery/button/flasher{ - id = "PCell 1"; - pixel_x = 6; - pixel_y = 24 - }, /obj/effect/turf_decal/tile/red{ dir = 4 }, @@ -2221,21 +2214,15 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/structure/cable{ icon_state = "2-4" }, /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/prison) "aeO" = ( @@ -2297,10 +2284,12 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/prison) "aeU" = ( @@ -2612,6 +2601,10 @@ /obj/structure/cable{ icon_state = "0-4" }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, /turf/open/floor/plating, /area/security/brig) "afr" = ( @@ -2665,6 +2658,9 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = -32 + }, /turf/open/floor/plasteel/dark, /area/security/prison) "afy" = ( @@ -2677,32 +2673,18 @@ }, /turf/open/floor/plasteel/dark, /area/security/prison) -"afz" = ( +"afA" = ( /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/plasteel, /area/security/prison) -"afA" = ( -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/plasteel/dark, -/area/security/prison) "afB" = ( /obj/item/radio/intercom{ dir = 4; @@ -2809,9 +2791,6 @@ pixel_y = -27 }, /obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /turf/open/floor/plasteel, /area/security/prison) "afK" = ( @@ -3424,7 +3403,11 @@ /obj/structure/cable{ icon_state = "1-8" }, -/turf/open/floor/plasteel, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, +/turf/open/floor/plasteel/dark, /area/security/brig) "agP" = ( /obj/structure/cable{ @@ -3776,6 +3759,10 @@ /obj/structure/cable{ icon_state = "0-4" }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, /turf/open/floor/plating, /area/security/brig) "ahw" = ( @@ -3787,6 +3774,10 @@ icon_state = "1-4" }, /obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, /turf/open/floor/plating, /area/security/brig) "ahx" = ( @@ -4324,9 +4315,6 @@ /turf/open/floor/plating, /area/security/brig) "aik" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/effect/turf_decal/tile/red{ dir = 1 }, @@ -4981,9 +4969,6 @@ /turf/open/floor/plasteel, /area/commons/vacant_room/office/b) "aju" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/structure/cable{ icon_state = "2-4" }, @@ -5303,13 +5288,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/maintenance/solars/port/fore) -"ajW" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solars/port/fore) "ajX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -6531,19 +6509,6 @@ }, /turf/open/floor/plasteel/dark, /area/security/courtroom) -"amv" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solars/port/fore) "amw" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -8392,16 +8357,6 @@ }, /turf/open/floor/plasteel, /area/security/processing) -"aqJ" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/solars/port/fore) "aqN" = ( /obj/structure/closet/secure_closet/warden, /obj/structure/sign/poster/official/ion_rifle{ @@ -41408,10 +41363,6 @@ "bXs" = ( /turf/open/floor/plasteel/white, /area/science/circuit) -"bXv" = ( -/obj/item/stack/rods, -/turf/open/space, -/area/space) "bXw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, @@ -42061,7 +42012,8 @@ /area/maintenance/port/aft) "bZm" = ( /obj/structure/disposaloutlet{ - dir = 8 + dir = 8; + name = "Prisoner Outlet" }, /obj/structure/disposalpipe/trunk{ dir = 4 @@ -51822,6 +51774,10 @@ /obj/structure/cable{ icon_state = "0-4" }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, /turf/open/floor/plating, /area/security/prison/upper) "cNE" = ( @@ -51984,13 +51940,13 @@ /obj/structure/sign/warning/securearea{ pixel_x = -32 }, -/obj/machinery/door/poddoor/preopen{ - id = "Prison Gate"; - name = "prison blast door" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, +/turf/open/floor/plasteel/dark, /area/security/prison) "cPb" = ( /turf/open/floor/wood/wood_diagonal, @@ -52896,11 +52852,13 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/light/small{ - dir = 1; - light_color = "#ffc1c1" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/button/door{ + id = "permacells3"; + name = "Privacy Shutters"; + pixel_x = 25 + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "dJL" = ( @@ -52933,6 +52891,10 @@ }, /turf/open/floor/plasteel, /area/security/prison/upper) +"dLl" = ( +/obj/item/stack/rods, +/turf/open/space, +/area/space) "dLZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -53009,6 +52971,10 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "2-8" + }, /turf/open/floor/plasteel, /area/security/prison/upper) "dQD" = ( @@ -53076,6 +53042,11 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/effect/decal/cleanable/blood/old, +/obj/machinery/button/electrochromatic{ + id = "!permabrigshowers"; + pixel_x = -25 + }, /turf/open/floor/plasteel/freezer, /area/security/prison/cells) "dYZ" = ( @@ -53189,9 +53160,6 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "ejr" = ( -/obj/machinery/door/airlock/security{ - name = "Permanent Cell 4" - }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -53205,6 +53173,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/door/airlock/grunge{ + name = "Permanent Cell 4"; + wiretypepath = /datum/wires/airlock/security + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "eky" = ( @@ -53262,9 +53234,6 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "eoJ" = ( -/obj/machinery/door/airlock/security{ - name = "Permanent Cell 5" - }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -53278,6 +53247,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/door/airlock/grunge{ + name = "Permanent Cell 5"; + wiretypepath = /datum/wires/airlock/security + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "eoR" = ( @@ -53412,6 +53385,9 @@ amount = 14 }, /obj/item/stack/packageWrap, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/prison/upper) "evR" = ( @@ -53428,6 +53404,17 @@ }, /turf/open/floor/plating, /area/commons/fitness) +"ewG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "permacells5"; + name = "Privacy Shutters" + }, +/turf/open/floor/plating, +/area/security/prison/cells) "ewN" = ( /obj/machinery/hydroponics/soil{ pixel_y = 8 @@ -53536,6 +53523,16 @@ /obj/item/clothing/under/rank/civilian/lawyer/red, /turf/open/floor/plasteel, /area/commons/fitness) +"eCB" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/security/prison/upper) "eCR" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -53587,6 +53584,12 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/security/prison) "eFx" = ( @@ -53731,6 +53734,16 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) +"eTt" = ( +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solars/port/fore) "eTA" = ( /obj/structure/table/wood/fancy, /obj/item/reagent_containers/food/condiment/saltshaker{ @@ -53787,13 +53800,13 @@ /area/cargo/miningdock) "eWL" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id = "Prison Gate"; - name = "prison blast door" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, +/turf/open/floor/plasteel/dark, /area/security/prison) "eXz" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -53833,10 +53846,6 @@ /turf/open/floor/plasteel, /area/security/prison/upper) "eZS" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, /obj/effect/turf_decal/bot_white, /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance, @@ -53891,8 +53900,9 @@ /area/maintenance/port/fore) "fcj" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, -/area/space) +/area/maintenance/prison/starboard) "fcn" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ @@ -54036,6 +54046,9 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "fjS" = ( @@ -54444,11 +54457,7 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/security/prison) "fGf" = ( /obj/machinery/smartfridge/disks{ @@ -54516,9 +54525,6 @@ /turf/open/floor/plasteel/dark, /area/security/courtroom) "fMF" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Prison Laundry" - }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -54530,6 +54536,10 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/airlock/grunge{ + name = "Prison Laundry"; + wiretypepath = /datum/wires/airlock/security + }, /turf/open/floor/plasteel/dark, /area/security/prison/upper) "fMY" = ( @@ -54546,13 +54556,15 @@ /turf/open/floor/plasteel, /area/security/prison/upper) "fNB" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ icon_state = "1-4" }, /obj/structure/cable{ icon_state = "0-4" }, +/obj/effect/spawner/structure/window/reinforced/tinted/electrochromatic{ + electrochromatic_id = "!permabrigshowers" + }, /turf/open/floor/plating, /area/security/prison/cells) "fNN" = ( @@ -54745,6 +54757,9 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "gcX" = ( @@ -54838,12 +54853,14 @@ dir = 1 }, /obj/effect/landmark/start/prisoner, -/obj/machinery/light/small{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/button/door{ + id = "permacells4"; + name = "Privacy Shutters"; + pixel_y = 25 + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "giT" = ( @@ -54959,7 +54976,12 @@ /area/engineering/atmos) "gxK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "permacells3"; + name = "Privacy Shutters" + }, +/turf/open/floor/plating, /area/security/prison/cells) "gyr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -55161,9 +55183,6 @@ /turf/open/floor/wood, /area/maintenance/bar) "gMB" = ( -/obj/machinery/door/airlock/security{ - name = "Permanent Cell 6" - }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -55177,6 +55196,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/door/airlock/grunge{ + name = "Permanent Cell 6"; + wiretypepath = /datum/wires/airlock/security + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "gMD" = ( @@ -55245,9 +55268,6 @@ /turf/open/floor/carpet, /area/service/library) "gSj" = ( -/obj/machinery/door/airlock/security{ - name = "Permanent Cell 3" - }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -55259,6 +55279,10 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/grunge{ + name = "Permanent Cell 3"; + wiretypepath = /datum/wires/airlock/security + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "gTx" = ( @@ -55412,6 +55436,19 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel, /area/commons/fitness) +"hcT" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solars/port/fore) "hgG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/structure/extinguisher_cabinet{ @@ -55449,7 +55486,24 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "hkA" = ( -/turf/open/floor/plasteel/dark, +/obj/structure/table, +/obj/item/clothing/under/rank/prisoner/skirt{ + pixel_x = -13; + pixel_y = 5 + }, +/obj/item/clothing/under/rank/prisoner/skirt{ + pixel_x = 9; + pixel_y = 5 + }, +/obj/item/clothing/under/rank/prisoner{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/machinery/flasher{ + id = "waitingflash"; + pixel_y = -28 + }, +/turf/open/floor/plasteel, /area/security/prison) "hlS" = ( /obj/structure/cable{ @@ -55488,6 +55542,9 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, +/obj/structure/cable{ + icon_state = "2-8" + }, /turf/open/floor/plasteel, /area/security/prison/upper) "hnU" = ( @@ -55673,10 +55730,12 @@ /turf/open/floor/plating, /area/security/prison/upper) "hKo" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ icon_state = "0-2" }, +/obj/effect/spawner/structure/window/reinforced/tinted/electrochromatic{ + electrochromatic_id = "!permabrigshowers" + }, /turf/open/floor/plating, /area/security/prison/cells) "hMs" = ( @@ -55714,7 +55773,7 @@ /obj/item/assembly/signaler, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/space) +/area/maintenance/prison/port) "hQX" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -55751,6 +55810,11 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plating, /area/service/abandoned_gambling_den) +"hSf" = ( +/obj/structure/cable, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solars/port/fore) "hSl" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -55888,6 +55952,18 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"ikv" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/security/prison) "iky" = ( /obj/effect/turf_decal/weather/dirt, /obj/effect/decal/cleanable/dirt, @@ -55907,6 +55983,9 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, +/obj/machinery/light_switch{ + pixel_y = 23 + }, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) "imk" = ( @@ -56065,7 +56144,7 @@ /obj/effect/decal/cleanable/dirt, /obj/structure/grille, /turf/open/floor/plating, -/area/space) +/area/maintenance/prison/starboard) "iBq" = ( /obj/machinery/portable_atmospherics/canister/air, /obj/effect/decal/cleanable/dirt, @@ -56094,6 +56173,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "iDo" = ( @@ -56618,9 +56700,6 @@ /turf/open/floor/plasteel, /area/service/hydroponics) "jxx" = ( -/obj/machinery/door/airlock/security{ - name = "Prison Yard" - }, /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/tile/neutral, @@ -56639,6 +56718,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/machinery/door/airlock/public/glass{ + name = "Prison Yard" + }, /turf/open/floor/plasteel/dark, /area/security/prison/upper) "jxF" = ( @@ -56749,10 +56831,6 @@ dir = 1 }, /area/commons/fitness) -"jFd" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/maintenance/port/fore) "jFB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -56811,6 +56889,9 @@ /obj/structure/cable{ icon_state = "1-8" }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "jHt" = ( @@ -56856,6 +56937,9 @@ /obj/structure/cable{ icon_state = "1-4" }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "jIW" = ( @@ -56960,12 +57044,9 @@ /obj/structure/cable{ icon_state = "1-8" }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/security/prison) "jOB" = ( -/obj/machinery/door/airlock/security{ - name = "Prison Forestry" - }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -56979,6 +57060,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/airlock/medical/glass{ + name = "Prison Forestry" + }, /turf/open/floor/plasteel/dark, /area/security/prison/upper) "jRw" = ( @@ -56999,6 +57083,9 @@ }, /turf/open/floor/plasteel, /area/security/prison/upper) +"jRV" = ( +/turf/open/floor/plasteel, +/area/security/prison) "jRW" = ( /obj/item/reagent_containers/glass/bucket, /obj/effect/turf_decal/tile/green{ @@ -57092,8 +57179,10 @@ /area/security/prison/upper) "jVV" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4; - pixel_y = 5 + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-4" }, /turf/open/floor/plasteel, /area/security/prison/upper) @@ -57182,13 +57271,14 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/machinery/light/small{ - brightness = 3; - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/button/door{ + id = "permacells4"; + name = "Privacy Shutters"; + pixel_y = 25 + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "kdF" = ( @@ -57236,6 +57326,10 @@ /obj/structure/cable{ icon_state = "0-4" }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, /turf/open/floor/plating, /area/security/prison/upper) "kfv" = ( @@ -57683,6 +57777,9 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/prison/upper) "kGv" = ( @@ -57761,19 +57858,19 @@ dir = 4; network = list("ss13","prison") }, -/obj/effect/turf_decal/tile/green{ - dir = 1 - }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, -/obj/effect/turf_decal/tile/green{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + dir = 4; + name = "Prisoner Delivery" + }, +/obj/effect/turf_decal/delivery, +/obj/structure/window/reinforced, +/turf/open/floor/plasteel/dark, /area/security/prison/upper) "kMt" = ( /obj/machinery/computer/prisoner/gulag_teleporter_computer, @@ -57799,6 +57896,7 @@ /obj/structure/cable{ icon_state = "2-4" }, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel, /area/security/prison/upper) "kOL" = ( @@ -58058,6 +58156,9 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/prison/upper) "lip" = ( @@ -58273,6 +58374,17 @@ }, /turf/open/floor/plasteel, /area/security/prison/upper) +"lvw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "permacells6"; + name = "Privacy Shutters" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/security/prison/cells) "lwN" = ( /obj/structure/cable{ icon_state = "1-8" @@ -58337,9 +58449,6 @@ }, /area/hallway/secondary/entry) "lBk" = ( -/obj/machinery/door/airlock/security{ - name = "Prison Yard" - }, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -58354,6 +58463,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/airlock/public/glass{ + name = "Prison Yard" + }, /turf/open/floor/plasteel/dark, /area/security/prison/upper) "lBz" = ( @@ -58394,12 +58506,23 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/structure/cable{ icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel, /area/security/prison/cells) +"lEf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "permacells4"; + name = "Privacy Shutters" + }, +/turf/open/floor/plating, +/area/security/prison/cells) "lGm" = ( /obj/machinery/shower{ dir = 4 @@ -58421,6 +58544,20 @@ }, /turf/open/floor/plating, /area/service/abandoned_gambling_den) +"lHK" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plasteel, +/area/security/prison/cells) "lJA" = ( /turf/closed/wall, /area/security/prison/cells) @@ -59105,6 +59242,18 @@ /obj/item/clothing/under/rank/prisoner/skirt, /obj/item/clothing/under/rank/prisoner/skirt, /obj/effect/decal/cleanable/dirt, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_y = 8 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_y = 8 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_y = 8 + }, +/obj/item/clothing/shoes/sneakers/orange{ + pixel_y = 8 + }, /turf/open/floor/plasteel/cafeteria, /area/security/prison/upper) "myh" = ( @@ -59240,22 +59389,10 @@ /area/maintenance/starboard/fore) "mIZ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Cell Block" - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "mJf" = ( @@ -59279,11 +59416,16 @@ "mJy" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/restraints/handcuffs, +/obj/item/taperecorder, +/obj/item/folder/red, /turf/open/floor/plasteel/dark, /area/security/prison/upper) "mJH" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced/tinted/electrochromatic{ + electrochromatic_id = "!permabrigshowers" + }, /turf/open/floor/plating, /area/security/prison/cells) "mLS" = ( @@ -59533,6 +59675,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/security/prison/upper) "ngs" = ( @@ -59577,11 +59720,12 @@ dir = 1 }, /obj/effect/landmark/start/prisoner, -/obj/machinery/light/small{ - dir = 1; - light_color = "#ffc1c1" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/button/door{ + id = "permacells2"; + name = "Privacy Shutters"; + pixel_x = 25 + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "nkP" = ( @@ -59911,9 +60055,6 @@ /turf/open/floor/wood, /area/maintenance/starboard/aft) "nRO" = ( -/obj/machinery/door/airlock/security{ - name = "Permanent Cell 2" - }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -59925,6 +60066,10 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/grunge{ + name = "Permanent Cell 2"; + wiretypepath = /datum/wires/airlock/security + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "nSt" = ( @@ -59941,6 +60086,7 @@ /area/commons/dorms) "nSI" = ( /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel/white, /area/security/prison/upper) "nTG" = ( @@ -60045,11 +60191,11 @@ /turf/open/floor/wood, /area/service/bar) "obq" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ icon_state = "1-2" }, +/obj/effect/spawner/structure/window, /turf/open/floor/plating, /area/security/prison/upper) "obs" = ( @@ -60057,6 +60203,7 @@ dir = 1; light_color = "#ffc1c1" }, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/padded, /area/security/execution/transfer) "oby" = ( @@ -60361,18 +60508,18 @@ "ozh" = ( /obj/machinery/door/window/eastright{ dir = 8; - name = "Holding Cell" - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 + name = "Holding Cell"; + req_access_txt = "2" }, /obj/structure/cable{ icon_state = "4-8" }, -/turf/open/floor/plasteel/dark, +/obj/machinery/button/flasher{ + id = "waitingflash"; + pixel_x = 6; + pixel_y = 24 + }, +/turf/open/floor/plasteel, /area/security/prison) "oAB" = ( /obj/structure/fireplace{ @@ -60509,6 +60656,15 @@ }, /turf/closed/wall, /area/medical/medbay/central) +"oTx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "permacells2"; + name = "Privacy Shutters" + }, +/turf/open/floor/plating, +/area/security/prison/cells) "oTH" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/shower, @@ -60643,6 +60799,9 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "peE" = ( @@ -60812,6 +60971,19 @@ }, /turf/open/floor/wood/wood_diagonal, /area/maintenance/port/fore) +"pry" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solars/port/fore) "psf" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/structure/sign/poster/official/the_owl{ @@ -60990,6 +61162,10 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"pGs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plating, +/area/maintenance/prison/starboard) "pGA" = ( /obj/machinery/hydroponics/soil, /obj/effect/turf_decal/tile/green{ @@ -61117,6 +61293,14 @@ }, /turf/open/floor/plasteel, /area/commons/fitness) +"pPE" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "permacells1"; + name = "Privacy Shutters" + }, +/turf/open/floor/plating, +/area/security/prison/cells) "pPI" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -61197,6 +61381,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/security/prison/upper) "pUf" = ( @@ -61216,6 +61401,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "pUy" = ( @@ -61260,9 +61448,6 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "pZD" = ( -/obj/machinery/door/airlock/security{ - name = "Permanent Cell 1" - }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -61274,6 +61459,10 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/airlock/grunge{ + name = "Permanent Cell 1"; + wiretypepath = /datum/wires/airlock/security + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "qae" = ( @@ -61302,6 +61491,9 @@ dir = 1 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/prison/upper) "qeb" = ( @@ -61372,6 +61564,13 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/security/prison/cells) +"qhA" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solars/port/fore) "qje" = ( /obj/structure/sign/mining{ pixel_y = 7 @@ -61636,13 +61835,15 @@ /turf/open/space, /area/space/nearstation) "qLo" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ icon_state = "2-4" }, /obj/structure/cable{ icon_state = "0-4" }, +/obj/effect/spawner/structure/window/reinforced/tinted/electrochromatic{ + electrochromatic_id = "!permabrigshowers" + }, /turf/open/floor/plating, /area/security/prison/cells) "qLy" = ( @@ -61753,6 +61954,7 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel, /area/security/prison/upper) "qSf" = ( @@ -61828,10 +62030,6 @@ /turf/open/space/basic, /area/space/nearstation) "qYa" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, /obj/effect/turf_decal/bot_white, /obj/effect/decal/cleanable/dirt, /obj/effect/spawner/lootdrop/maintenance, @@ -61941,6 +62139,11 @@ /area/service/hydroponics) "ref" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/security/prison) "reA" = ( @@ -62164,6 +62367,7 @@ name = "Permabrig Transfer"; req_access_txt = "2" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/security/prison) "rvr" = ( @@ -62198,6 +62402,13 @@ icon_state = "platingdmg2" }, /area/maintenance/port/fore) +"rwA" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solars/port/fore) "rxD" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -62241,6 +62452,27 @@ }, /turf/open/floor/plasteel, /area/commons/fitness) +"ryN" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/security/prison) "rAR" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -62279,6 +62511,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/light/small, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "rBY" = ( @@ -62318,6 +62551,9 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/prison/upper) "rDh" = ( @@ -62364,6 +62600,16 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"rGZ" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solars/port/fore) "rIA" = ( /obj/machinery/light{ dir = 8 @@ -62418,6 +62664,11 @@ /obj/machinery/status_display/evac, /turf/closed/wall, /area/ai_monitored/command/storage/eva) +"rQy" = ( +/obj/structure/lattice, +/obj/structure/grille, +/turf/open/space/basic, +/area/space) "rQJ" = ( /obj/machinery/light/small{ dir = 8 @@ -62527,6 +62778,13 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) +"rYM" = ( +/obj/structure/cable{ + icon_state = "0-2" + }, +/obj/machinery/power/tracker, +/turf/open/floor/plasteel/airless/solarpanel, +/area/solars/port/fore) "rZE" = ( /obj/structure/table, /obj/item/flashlight/lamp, @@ -62634,6 +62892,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/security/prison/upper) "ske" = ( @@ -62856,6 +63115,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "sBM" = ( @@ -62868,6 +63130,9 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/prison/upper) "sCa" = ( @@ -62943,6 +63208,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, /area/maintenance/prison/starboard) "sJw" = ( @@ -63273,6 +63539,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "tif" = ( @@ -63575,6 +63844,29 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/lobby) +"tCs" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4 + }, +/obj/structure/toilet{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/obj/effect/decal/cleanable/blood/old, +/turf/open/floor/plasteel/dark, +/area/security/prison/cells) "tEK" = ( /obj/structure/cable{ icon_state = "4-8" @@ -63837,6 +64129,7 @@ /obj/structure/cable{ icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/security/prison/upper) "tWj" = ( @@ -64375,6 +64668,20 @@ }, /turf/open/floor/plating, /area/security/prison/upper) +"uLB" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/bot, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/security/prison/upper) "uOd" = ( /turf/open/floor/plasteel/white/side{ dir = 4 @@ -64386,6 +64693,7 @@ light_color = "#ffc1c1" }, /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, /mob/living/simple_animal/mouse/brown/Tom, /turf/open/floor/plating, /area/security/prison/upper) @@ -64612,6 +64920,17 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/security/prison/upper) +"vhC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel, /area/security/prison/upper) "vim" = ( @@ -64649,6 +64968,9 @@ /obj/structure/cable{ icon_state = "2-8" }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "vjm" = ( @@ -64659,12 +64981,6 @@ }, /turf/open/floor/wood, /area/maintenance/bar) -"vli" = ( -/obj/structure/lattice, -/obj/structure/grille, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) "vmQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -65191,6 +65507,10 @@ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light/small{ + brightness = 3; + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/security/prison/cells) "vYY" = ( @@ -65373,15 +65693,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/port/fore) -"wll" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/structure/window/reinforced/tinted{ - dir = 4 - }, -/turf/open/floor/padded, -/area/security/execution/transfer) "wly" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -65590,6 +65901,9 @@ /obj/structure/cable{ icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "wBd" = ( @@ -65606,6 +65920,22 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"wDq" = ( +/obj/structure/lattice, +/turf/open/space/basic, +/area/space) +"wGc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/security/prison) "wHk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -65634,8 +65964,9 @@ /obj/structure/bed, /obj/effect/spawner/lootdrop/bedsheet, /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/plating, -/area/space) +/area/maintenance/prison/port) "wII" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/airlock/maintenance, @@ -65730,6 +66061,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/dark, /area/security/prison/upper) "wVt" = ( @@ -65943,6 +66277,10 @@ name = "prison blast door" }, /obj/structure/cable, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, /turf/open/floor/plating, /area/security/prison/upper) "xiw" = ( @@ -65983,6 +66321,22 @@ }, /turf/open/floor/plasteel, /area/commons/fitness) +"xkk" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/sign/warning/securearea{ + pixel_x = -32; + pixel_y = 32 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, +/turf/open/floor/plasteel/dark, +/area/security/range) "xlX" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -66076,6 +66430,17 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) +"xuu" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Prison Gate"; + name = "Prison Lockdown Shutters" + }, +/turf/open/floor/plating, +/area/security/brig) "xwB" = ( /obj/structure/chair/stool{ pixel_y = 8 @@ -66346,6 +66711,7 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel/cafeteria, /area/security/prison/upper) "xNV" = ( @@ -66370,6 +66736,11 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/machinery/flasher{ + id = "visitorflash"; + pixel_x = 16; + pixel_y = 24 + }, /turf/open/floor/plasteel, /area/security/prison/upper) "xPk" = ( @@ -66483,6 +66854,13 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"xVZ" = ( +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/lattice/catwalk, +/turf/open/space, +/area/solars/port/fore) "xWq" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/vacuum/external{ @@ -66615,6 +66993,28 @@ /obj/machinery/status_display/evac, /turf/closed/wall, /area/hallway/primary/central) +"yeU" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/landmark/start/prisoner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/button/door{ + id = "permacells5"; + name = "Privacy Shutters"; + pixel_y = 25 + }, +/turf/open/floor/plasteel/dark, +/area/security/prison/cells) "yeZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -80858,12 +81258,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaS aaS aaS @@ -80879,9 +81273,15 @@ aaS aba aaS aaS +gXs +gXs +gXs +eRz +eRz +eRz aaf aaf -aaf +aaT aaf aaf alU @@ -81115,12 +81515,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa abY aaa aaf @@ -81133,7 +81527,7 @@ acy aaa aaf aaa -bXv +dLl aaa aaS aaa @@ -81141,6 +81535,12 @@ aaa aaa aaa aaa +gXs +aaa +aaa +aaa +aaa +aaa alU ash atU @@ -81372,31 +81772,31 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa abY aaa acW -acV +eTt adA aaa acW -acV +eTt adA aaa acW -acV +eTt adA aaa aaS +gXs +gXs +gXs +gXs +eRz +eRz aaf aaf -aaf -aaf +aaT +aaT aaf alU atn @@ -81626,34 +82026,34 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aae aaa aaa abY aaf acW -adx +hcT adA aaa acW -adx +hcT adA aaa acW -adx +hcT adA aaf aaf aaa aaa +gXs aaa aaa +ktS +aaa +aaa +gXs +aaa aaa alU alU @@ -81886,31 +82286,31 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa abY aaa acW -adx +hcT adA aaf acW -adx +hcT adA aaf acW -adx +hcT adA aaa aaf aaa aaa +gXs aaa aaa +ktS +aaa +aaa +gXs +aaa aaa gXs ali @@ -82143,27 +82543,27 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaf aaf acW -adx +hcT adA aaa acW -adx +hcT adA aaa acW -adx +hcT adA aaf aaf +gXs +gXs +gXs +gXs +gXs +gXs aaf aaf aaf @@ -82397,32 +82797,32 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaS aaS aaS aaf aaa acW -adx +hcT adA aaa acW -adx +hcT adA aaa acW -adx +hcT adA aaa aaf aaa aaa +aaa +gXs +aaa +ktS +aaa +aaa ajV alR alR @@ -82654,29 +83054,29 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaS aaa aaf aaa aaa aaa -adZ +rwA aaa aaa aaa -adZ +rwA aaa aaa aaa -adZ +rwA aaa aaa +aaf +aaa +aaa +aaa +gXs +aaa ajV ajV ajV @@ -82911,18 +83311,12 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaS aaf -abs -abZ -abZ -adw +rYM +qhA +qhA +hSf ady ady ady @@ -82934,6 +83328,12 @@ ady ady cfK uDO +uDO +uDO +uDO +uDO +uDO +uDO ajq akB akB @@ -83168,29 +83568,29 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaS aaa aaf aaa aaa aaa -ajW +xVZ aaa aaa aaa -ajW +xVZ aaa aaa aaa -ajW +xVZ aaa aaa +aaf +aaa +aaa +aaa +gXs +aaa ajV ajV ajV @@ -83425,32 +83825,32 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaS aba aaS aaf aaa acW -amv +pry adA aaa acW -amv +pry adA aaa acW -amv +pry adA aaa aaf aaa aaa +aaa +gXs +aaa +ktS +aaa +aaa ajV alR alR @@ -83685,30 +84085,30 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaf aaf acW -amv +pry adA aaa acW -amv +pry adA aaa acW -amv +pry adA aaf aaf aaa aaa aaa +gXs +aaa +ktS +aaa +aaa +aaa alU amF alF @@ -83942,27 +84342,27 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaS aaa acW -amv +pry adA aaf acW -amv +pry adA aaf acW -amv +pry adA aaa aaf +gXs +gXs +gXs +gXs +gXs +gXs aaf aaf aaf @@ -84199,30 +84599,30 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaS aaf acW -amv +pry adA aaa acW -amv +pry adA aaa acW -amv +pry adA aaf aaf aaa aaa aaa +aaa +aaa +ktS +wDq +aaa +aaa alU alU alU @@ -84456,30 +84856,30 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaS aaa acW -aqJ +rGZ adA aaa acW -aqJ +rGZ adA aaa acW -aqJ +rGZ adA aaa aaS aaa aaa aaa +aaa +aaa +ktS +rQy +aaa +aaa alU lLA mzT @@ -84713,12 +85113,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa aaS aaa aaf @@ -84734,7 +85128,13 @@ aaa aaf aaa aaS -aaf +gXs +gXs +gXs +gXs +gXs +eRz +aaT aaf aaf alU @@ -84965,12 +85365,6 @@ cNd cNd aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa gXs gXs gXs @@ -84994,6 +85388,12 @@ aaS aaa aaa aaa +gXs +aaa +ktS +aaa +aaa +aaa alU enJ enJ @@ -85245,7 +85645,7 @@ gXs aaa aaa aaa -aaa +gXs aaa aaa aaa @@ -85502,13 +85902,13 @@ gXs aaa aaa aaa +gXs aaa aaa aaa aaa aaa -aaa -jFd +ali fDn gFs aKY @@ -85759,7 +86159,7 @@ gXs aaa aaa aaa -aaa +gXs aaa aaa aaa @@ -86003,15 +86403,19 @@ gXs aaa aaa aaa -gXs -gXs -gXs +eRz +eRz +eRz gXs gXs aaa aaa aaa aaa +eRz +aaa +aaa +aaa gXs aaa aaa @@ -86019,10 +86423,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa ali aok qZD @@ -86260,7 +86660,7 @@ gXs aaa aaa aaa -gXs +eRz aaa aaa aaa @@ -86269,6 +86669,10 @@ aaa aaa aaa aaa +eRz +aaa +aaa +aaa gXs aaa aaa @@ -86276,10 +86680,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa ali aok amC @@ -86517,7 +86917,7 @@ gXs aaa aaa aaa -gXs +eRz aaa aaa aaa @@ -86526,7 +86926,7 @@ gXs gXs gXs gXs -gXs +eRz gXs gXs gXs @@ -86783,7 +87183,7 @@ aaa aaa aaa aaa -gXs +eRz aaa aaa aaa @@ -87040,7 +87440,7 @@ aaa aae aaa aaa -gXs +eRz aaa aaa aaa @@ -87805,7 +88205,7 @@ mvV tso abc dIZ -wll +dIZ mbC abc abc @@ -88055,7 +88455,7 @@ wnX mAT mAT lJA -giE +yeU rBK lJA giE @@ -88312,10 +88712,10 @@ iCN lJA lJA lJA -czP +ewG eoJ lJA -czP +lEf ejr abc tJE @@ -88811,7 +89211,7 @@ aaa eRz eRz eRz -sMu +eRz eRz eRz gXs @@ -89074,8 +89474,8 @@ aaa aaa aaa adI -adI -adI +oUF +eCB adI qCc qCc @@ -89083,7 +89483,7 @@ wgu qCc qCc qCc -czP +lvw gMB lJA tnH @@ -89858,7 +90258,7 @@ acG acG lJA maP -wVt +lHK nRO vYF txs @@ -90116,7 +90516,7 @@ acG mnu xGm xNV -gxK +oTx nko vFZ szn @@ -90614,10 +91014,10 @@ adI mwN kfG uJY -kkb +vhC tLC aaN -peD +uLB kGj acG lux @@ -90632,7 +91032,7 @@ nFA wVt pZD vYF -txs +tCs szn pIR aeL @@ -90877,7 +91277,7 @@ pgq peD sBM acG -acG +aaN jOB acG acG @@ -90887,12 +91287,12 @@ acG aay oss abv -lJA +pPE acA acI adD aed -uql +wGc afv agg acd @@ -91149,7 +91549,7 @@ lJA lJA szn aeg -uql +ryN afA acd acd @@ -91407,9 +91807,9 @@ ada adF aef aeM -afz +aav ldY -lRb +xkk lRb vIi fsj @@ -91663,7 +92063,7 @@ ref aat adH aem -aeO +ikv afJ sXV sXV @@ -92173,7 +92573,7 @@ oKB vhy abA jNN -hkA +jRV hkA aai aek @@ -92693,7 +93093,7 @@ adI xKl omX afG -aim +xuu afL ahu aie @@ -93721,7 +94121,7 @@ adJ aep aeT afG -aim +xuu ajL akj afM @@ -93959,7 +94359,7 @@ jnk sIn eZS iBj -fcj +pGs iBq vHK dCd @@ -96016,15 +96416,15 @@ eRz eRz eRz eRz -vli +eRz eRz eRz eRz eRz aaT eRz -aaT -aaT +aaf +aaf aaT gXs abG diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 83a42bbf58..d3c8c90947 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -2055,12 +2055,12 @@ /turf/open/floor/plating, /area/ai_monitored/turret_protected/AIsatextAP) "afd" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "afe" = ( @@ -2076,6 +2076,9 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "aff" = ( @@ -2091,6 +2094,9 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "afg" = ( @@ -2108,14 +2114,18 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "afh" = ( /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) @@ -2127,24 +2137,21 @@ /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/AIsatextAS) "afj" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/AIsatextAS) "afk" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, @@ -2155,15 +2162,21 @@ c_tag = "MiniSat Maintenance Starboard Aft"; network = list("minisat") }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/AIsatextAS) "afl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, /obj/structure/cable/yellow{ icon_state = "4-8" }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/AIsatextAS) "afm" = ( @@ -8592,7 +8605,7 @@ dir = 10 }, /turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) +/area/command/bridge) "atN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -9642,7 +9655,7 @@ dir = 8 }, /turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) +/area/command/bridge) "avR" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -9748,7 +9761,7 @@ req_access_txt = "10;13" }, /turf/open/floor/plating, -/area/ai_monitored/turret_protected/aisat_interior) +/area/command/bridge) "awd" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -10369,7 +10382,7 @@ }, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/hallway/primary/fore) +/area/security/brig) "axF" = ( /obj/item/kirbyplants{ icon_state = "plant-10" @@ -10572,7 +10585,7 @@ }, /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, -/area/ai_monitored/turret_protected/aisat_interior) +/area/command/bridge) "ayf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -22904,7 +22917,7 @@ req_access_txt = "10;13" }, /turf/open/floor/plating, -/area/ai_monitored/turret_protected/aisat_interior) +/area/command/bridge) "baI" = ( /obj/structure/cable{ icon_state = "0-8" @@ -26844,10 +26857,10 @@ /turf/open/space, /area/solars/starboard) "bkQ" = ( -/obj/machinery/vending/snack, /obj/effect/turf_decal/stripes/line{ dir = 9 }, +/obj/structure/closet/emcloset, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bkR" = ( @@ -36803,15 +36816,9 @@ /turf/open/floor/plating, /area/maintenance/department/science) "bFE" = ( -/obj/docking_port/stationary{ - dwidth = 2; - height = 6; - id = "monastery_shuttle_asteroid"; - name = "monastery"; - width = 5 - }, -/turf/open/space, -/area/space/nearstation) +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plating, +/area/maintenance/department/crew_quarters/dorms) "bFF" = ( /obj/machinery/atmospherics/components/unary/tank/air{ dir = 1 @@ -37340,21 +37347,19 @@ /turf/open/floor/plating, /area/service/chapel/dock) "bGF" = ( -/obj/machinery/door/airlock/external{ - name = "Pod Docking Bay" +/obj/docking_port/stationary{ + dwidth = 2; + height = 6; + id = "monastery_shuttle_asteroid"; + name = "monastery"; + width = 5 }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/turf/open/floor/plating, -/area/service/chapel/dock) +/turf/open/space, +/area/space/nearstation) "bGG" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/on, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 8; - layer = 2.9 - }, -/turf/open/floor/plating/airless, -/area/service/chapel/dock) +/obj/effect/spawner/lootdrop/grille_or_trash, +/turf/open/floor/plating, +/area/maintenance/department/security/brig) "bGH" = ( /obj/structure/window/reinforced, /turf/open/space, @@ -37858,38 +37863,39 @@ /turf/open/floor/plasteel, /area/science/mixing) "bHI" = ( -/obj/structure/grille/broken, -/turf/open/space/basic, -/area/space/nearstation) +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/maintenance/department/cargo) "bHJ" = ( +/obj/machinery/door/airlock/external{ + name = "Pod Docking Bay" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/service/chapel/dock) "bHK" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, +/obj/item/cigbutt, /turf/open/floor/plating, -/area/service/chapel/dock) +/area/maintenance/department/cargo) "bHL" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/open/floor/plating, -/area/service/chapel/dock) -"bHM" = ( -/turf/closed/wall/r_wall, -/area/service/chapel/dock) -"bHN" = ( +/obj/machinery/atmospherics/components/unary/outlet_injector/on, /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 8; layer = 2.9 }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/turf/open/floor/plating/airless, +/area/service/chapel/dock) +"bHM" = ( +/turf/closed/wall/r_wall, +/area/service/chapel/dock) +"bHN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/vending/cola/random, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) "bHP" = ( /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plasteel/dark, @@ -38428,50 +38434,36 @@ /turf/open/space/basic, /area/space/nearstation) "bIU" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/closed/wall, -/area/service/chapel/dock) +/obj/machinery/vending/snack/random, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) "bIV" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/vacuum/external, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, /turf/open/floor/plating, /area/service/chapel/dock) "bIW" = ( -/obj/machinery/computer/shuttle/monastery_shuttle, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 }, -/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, +/turf/open/floor/plating, /area/service/chapel/dock) "bIX" = ( -/obj/machinery/atmospherics/components/unary/tank/air, -/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/service/chapel/dock) +/obj/structure/grille/broken, +/turf/open/space/basic, +/area/space/nearstation) "bIY" = ( +/obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 8; layer = 2.9 }, +/obj/structure/lattice, /turf/open/space/basic, -/area/space) +/area/space/nearstation) "bIZ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -38986,44 +38978,58 @@ /turf/open/space/basic, /area/space/nearstation) "bKa" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -22 +/obj/machinery/door/airlock/external{ + name = "Pod Docking Bay" }, -/turf/open/floor/plasteel/dark, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/turf/open/floor/plating, /area/service/chapel/dock) "bKb" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/vacuum/external, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating, /area/service/chapel/dock) "bKc" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/machinery/computer/shuttle/monastery_shuttle, +/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/service/chapel/dock) "bKd" = ( -/obj/machinery/power/apc{ - dir = 4; - name = "Monastery Docking Bay APC"; - pixel_x = 24 +/obj/machinery/atmospherics/components/unary/tank/air, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 }, -/obj/structure/cable{ - icon_state = "0-8" +/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/service/chapel/dock) "bKe" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 +/obj/structure/lattice, +/obj/structure/window/reinforced{ + dir = 8; + layer = 2.9 }, -/area/service/chapel/dock) +/turf/open/space/basic, +/area/space/nearstation) "bKf" = ( +/obj/structure/chair, /turf/open/floor/plasteel/white{ heat_capacity = 1e+006 }, @@ -39494,52 +39500,40 @@ /turf/open/floor/plating, /area/science/mixing) "bLn" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -24 + }, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bLo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable{ - icon_state = "1-2" - }, -/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 + icon_state = "2-4" }, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bLp" = ( -/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bLq" = ( -/obj/machinery/door/airlock/grunge{ - name = "Monastery Transit" +/obj/machinery/power/apc{ + dir = 4; + name = "Monastery Docking Bay APC"; + pixel_y = 24 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/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/cable{ + icon_state = "0-8" }, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bLr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, /turf/open/floor/plasteel/white{ heat_capacity = 1e+006 }, @@ -39988,9 +39982,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -40001,12 +39992,12 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bMt" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -40014,39 +40005,27 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bMu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bMv" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/closed/wall, -/area/service/chapel/dock) -"bMw" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 }, +/turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bMx" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, /turf/open/floor/plasteel/white{ heat_capacity = 1e+006 }, @@ -40456,12 +40435,6 @@ /turf/open/floor/plating, /area/service/chapel/asteroid/monastery) "bNt" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -24 - }, /obj/machinery/light/small, /obj/machinery/camera{ c_tag = "Monastery Dock"; @@ -40478,21 +40451,18 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/table/wood, +/obj/item/clothing/under/misc/burial, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bNu" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bNv" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, /obj/item/radio/intercom{ name = "Station Intercom (General)"; pixel_x = 27 @@ -40508,6 +40478,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/table/wood, +/obj/item/reagent_containers/food/snacks/grown/poppy, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bNw" = ( @@ -40546,13 +40518,26 @@ /obj/structure/lattice/catwalk, /turf/open/space, /area/space/nearstation) -"bNE" = ( -/obj/machinery/light/small{ +"bNC" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/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/plating{ - icon_state = "panelscorched" +/turf/open/floor/plasteel/dark, +/area/service/library) +"bNE" = ( +/obj/machinery/atmospherics/pipe/manifold/general/hidden{ + dir = 1 }, +/obj/machinery/meter, +/turf/open/floor/plating, /area/maintenance/department/chapel/monastery) "bNF" = ( /obj/item/stack/medical/suture, @@ -40907,19 +40892,12 @@ /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bOy" = ( -/obj/effect/turf_decal/tile/neutral{ +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/chair{ 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 = 6 - }, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) "bOz" = ( @@ -41311,7 +41289,7 @@ req_access_txt = "23" }, /turf/open/floor/plating, -/area/engineering/storage/tech) +/area/maintenance/department/engine) "bPG" = ( /obj/machinery/light{ dir = 8 @@ -44349,8 +44327,8 @@ /turf/open/floor/plating, /area/maintenance/department/engine) "bWl" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 +/obj/structure/disposalpipe/junction/yjunction{ + dir = 8 }, /turf/open/floor/plating, /area/maintenance/department/engine) @@ -46228,8 +46206,12 @@ /turf/open/floor/engine, /area/maintenance/disposal/incinerator) "caS" = ( -/turf/closed/wall, -/area/service/chapel/asteroid/monastery) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/holopad, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "caT" = ( /obj/structure/grille, /obj/structure/window/reinforced/tinted/fulltile, @@ -46528,6 +46510,9 @@ "cbT" = ( /obj/item/shovel, /obj/effect/landmark/xeno_spawn, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, /turf/open/floor/plating, /area/maintenance/department/engine) "cbV" = ( @@ -46900,6 +46885,7 @@ "cdE" = ( /obj/structure/chair, /obj/item/cigbutt, +/obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/department/engine) "cdI" = ( @@ -46971,6 +46957,11 @@ }, /turf/open/floor/plating, /area/engineering/main) +"cdV" = ( +/obj/structure/window/reinforced/fulltile, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/service/library/lounge) "cdW" = ( /obj/structure/reflector/box/anchored, /turf/open/floor/plasteel/dark, @@ -48320,48 +48311,26 @@ /turf/open/floor/plating, /area/service/chapel/main/monastery) "cjH" = ( -/obj/machinery/door/airlock/grunge{ - name = "Chapel Garden" +/obj/item/kirbyplants{ + icon_state = "plant-21" }, /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) "cjO" = ( -/obj/effect/decal/cleanable/cobweb{ - icon_state = "cobweb2" - }, -/obj/item/stack/sheet/glass/fifty{ - layer = 4 - }, -/obj/item/stack/sheet/metal{ - amount = 20; - layer = 3.1 - }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"cjP" = ( -/obj/item/kirbyplants{ - icon_state = "plant-22" - }, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = 26 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 }, /turf/open/floor/plasteel/dark, -/area/service/library/lounge) +/area/security/courtroom) +"cjP" = ( +/obj/structure/table, +/obj/item/storage/fancy/donut_box, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "cjQ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/carpet, +/obj/structure/bookcase/random/nonfiction, +/turf/open/floor/plasteel/dark, /area/service/library) -"cjR" = ( -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/carpet, -/area/service/library/lounge) "cjV" = ( /obj/machinery/camera/preset/toxins, /turf/open/floor/plating/asteroid/airless, @@ -48403,71 +48372,47 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) -"cke" = ( -/obj/machinery/power/smes{ - charge = 5e+006 - }, -/obj/structure/cable, -/obj/structure/cable{ - icon_state = "0-2" - }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) "ckf" = ( -/obj/machinery/power/terminal{ - dir = 8 - }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"ckg" = ( -/obj/item/wrench, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"ckh" = ( -/obj/item/stack/cable_coil, -/obj/item/stack/cable_coil, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"cki" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Air Out" - }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"ckj" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"ckk" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 24 - }, -/obj/item/stack/rods/fifty, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"ckl" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/photocopier, +/obj/structure/table, +/obj/item/book/manual/wiki/security_space_law, /turf/open/floor/plasteel/dark, -/area/service/library/lounge) -"ckm" = ( +/area/security/courtroom) +"ckh" = ( +/obj/structure/chair, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) +"ckj" = ( +/obj/structure/chair, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) +"cko" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/carpet, /area/service/library) -"cko" = ( -/obj/structure/bookcase/random/religion, -/turf/open/floor/plasteel/dark, -/area/service/library) "ckp" = ( -/obj/structure/bookcase/random/religion, -/obj/effect/decal/cleanable/cobweb{ - icon_state = "cobweb2" - }, +/obj/structure/closet/crate/bin, /turf/open/floor/plasteel/dark, /area/service/library/lounge) "ckt" = ( @@ -48504,74 +48449,66 @@ /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) "cky" = ( -/obj/machinery/power/smes{ - charge = 5e+006 +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"ckz" = ( -/obj/machinery/atmospherics/pipe/simple/general/hidden{ - dir = 6 +/obj/machinery/power/apc{ + areastring = "/area/security/courtroom"; + dir = 8; + name = "Courtroom APC"; + pixel_x = -25 }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "ckA" = ( -/obj/machinery/atmospherics/pipe/manifold/general/hidden{ - dir = 1 - }, -/obj/machinery/meter, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/chair, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "ckB" = ( -/obj/machinery/atmospherics/pipe/manifold/general/hidden{ +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) +"ckD" = ( +/obj/structure/statue/sandstone/venus{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 28 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) +"ckE" = ( +/obj/structure/grille/broken, +/obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"ckC" = ( -/obj/item/extinguisher, +/area/maintenance/department/engine) +"ckF" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"ckD" = ( +/area/maintenance/department/engine) +"ckG" = ( /obj/structure/chair/wood/normal, /obj/machinery/firealarm{ dir = 4; pixel_x = -28 }, -/turf/open/floor/plasteel/dark, -/area/service/library/lounge) -"ckE" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 +/obj/machinery/camera{ + c_tag = "Monastery Library"; + dir = 4; + network = list("ss13","monastery") }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/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/service/chapel/main/monastery) -"ckF" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/carpet, -/area/service/library/lounge) -"ckG" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/machinery/light/small{ dir = 8 }, /turf/open/floor/plasteel/dark, @@ -48580,8 +48517,8 @@ /turf/open/floor/plasteel/dark, /area/service/library) "ckI" = ( -/obj/machinery/light/small{ - dir = 4 +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 }, /turf/open/floor/plasteel/dark, /area/service/library/lounge) @@ -48615,57 +48552,39 @@ }, /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) -"ckO" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"ckP" = ( -/obj/machinery/atmospherics/components/unary/tank/air{ - dir = 1 - }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) "ckQ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall/mineral/iron, -/area/maintenance/department/chapel/monastery) -"ckR" = ( -/obj/structure/reagent_dispensers/watertank, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"ckS" = ( -/obj/structure/table/wood, -/obj/item/folder/yellow, -/obj/item/pen, -/obj/machinery/camera{ - c_tag = "Monastery Library"; - dir = 4; - network = list("ss13","monastery") +/obj/machinery/door/airlock/public/glass{ + name = "Courtroom" }, -/turf/open/floor/plasteel/dark, -/area/service/library/lounge) -"ckT" = ( -/obj/machinery/door/airlock/grunge{ - name = "Library" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, -/area/service/library/lounge) +/area/security/courtroom) +"ckS" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/security/courtroom) "ckU" = ( -/obj/machinery/bookbinder, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/libraryscanner, /turf/open/floor/plasteel/dark, /area/service/library/lounge) "ckV" = ( -/obj/structure/bookcase/random/reference, -/turf/open/floor/plasteel/dark, +/obj/effect/landmark/barthpot, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/carpet, /area/service/library/lounge) "ckW" = ( -/obj/structure/bookcase/random/nonfiction, -/turf/open/floor/plasteel/dark, -/area/service/library) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/department/engine) "ckX" = ( -/obj/structure/bookcase/random/fiction, +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole, /turf/open/floor/plasteel/dark, /area/service/library/lounge) "clb" = ( @@ -48675,36 +48594,18 @@ }, /turf/open/floor/plating, /area/service/chapel/main/monastery) -"cld" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/turf/closed/wall, -/area/maintenance/department/chapel/monastery) "cle" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/closed/wall, -/area/maintenance/department/chapel/monastery) +/obj/structure/statue/sandstone/venus, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "clf" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/item/storage/box/lights/bulbs, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"clg" = ( -/obj/structure/chair/wood/normal{ - dir = 1 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 }, /turf/open/floor/plasteel/dark, -/area/service/library/lounge) +/area/security/courtroom) "cli" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, /turf/open/floor/plasteel/dark, @@ -48716,25 +48617,23 @@ /turf/open/floor/plating/asteroid/airless, /area/asteroid/nearstation/bomb_site) "clk" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/machinery/light{ + dir = 4 }, -/obj/machinery/libraryscanner, /turf/open/floor/plasteel/dark, -/area/service/library/lounge) +/area/security/courtroom) "clm" = ( -/obj/structure/closet/crate/bin, +/obj/machinery/photocopier, /turf/open/floor/plasteel/dark, /area/service/library/lounge) "cln" = ( -/obj/structure/bookcase/random/adult, -/turf/open/floor/plasteel/dark, +/obj/machinery/newscaster{ + pixel_x = -32; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/carpet, /area/service/library/lounge) -"clp" = ( -/obj/structure/table/wood, -/obj/machinery/computer/libraryconsole/bookmanagement, -/turf/open/floor/plasteel/dark, -/area/service/library) "cls" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/closed/mineral, @@ -50327,8 +50226,9 @@ /turf/open/floor/plasteel, /area/engineering/atmos) "cqH" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 }, /turf/open/floor/plasteel/dark, /area/service/chapel/dock) @@ -50354,11 +50254,10 @@ /turf/open/floor/plasteel, /area/command/heads_quarters/ce) "cqW" = ( -/obj/structure/chair, -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 - }, -/area/service/chapel/dock) +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "cqX" = ( /obj/structure/disposalpipe/segment, /obj/structure/lattice, @@ -50715,7 +50614,7 @@ "csy" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/disposalpipe/segment{ - dir = 6 + dir = 4 }, /turf/open/floor/plating, /area/maintenance/department/engine) @@ -51051,12 +50950,13 @@ /turf/open/floor/plating, /area/service/chapel/main/monastery) "ctS" = ( -/obj/structure/disposaloutlet, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" }, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "ctX" = ( /obj/machinery/vending/wardrobe/chap_wardrobe, /turf/open/floor/carpet, @@ -51549,9 +51449,6 @@ /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) "cvy" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -51562,6 +51459,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) "cvA" = ( @@ -51593,9 +51491,7 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/item/kirbyplants{ - icon_state = "plant-21" - }, +/obj/machinery/light/small, /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) "cvF" = ( @@ -51618,15 +51514,9 @@ /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) "cvH" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -51637,10 +51527,18 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Monastery Cloister Aft"; + dir = 1; + network = list("ss13","monastery") + }, +/obj/machinery/light/small, /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) "cvI" = ( -/obj/machinery/light/small, /obj/structure/cable{ icon_state = "4-8" }, @@ -51648,21 +51546,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/camera{ - c_tag = "Monastery Cloister Aft"; - dir = 1; - network = list("ss13","monastery") - }, -/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/service/chapel/main/monastery) "cvJ" = ( @@ -51673,38 +51556,16 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/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/service/chapel/main/monastery) "cvK" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - icon_state = "2-8" - }, -/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/service/chapel/main/monastery) +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "cvR" = ( /obj/machinery/light/small{ dir = 8 @@ -51733,52 +51594,16 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) -"cvX" = ( -/obj/structure/cable{ - icon_state = "2-4" - }, -/turf/closed/wall/mineral/iron, -/area/maintenance/department/chapel/monastery) -"cvY" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/closed/wall/mineral/iron, -/area/maintenance/department/chapel/monastery) -"cvZ" = ( -/obj/structure/cable{ - icon_state = "2-8" - }, -/turf/closed/wall/mineral/iron, -/area/maintenance/department/chapel/monastery) -"cwa" = ( -/turf/closed/wall/mineral/iron, -/area/maintenance/department/chapel/monastery) "cwc" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/airlock/maintenance{ - name = "Monastery Maintenance"; - req_one_access_txt = "22;24;10;11;37" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) +/turf/closed/wall/mineral/iron, +/area/security/courtroom) "cwe" = ( /turf/closed/wall/mineral/iron, /area/service/library/lounge) "cwg" = ( -/obj/machinery/door/airlock/grunge{ - name = "Library" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, -/area/service/library/lounge) +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "cwj" = ( /obj/item/storage/box/matches{ pixel_x = -3; @@ -51802,69 +51627,42 @@ /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) "cwm" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) -"cwn" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/item/storage/toolbox/mechanical, -/obj/machinery/light/small{ +/obj/machinery/light{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/turf/open/floor/plasteel/dark, +/area/security/courtroom) +"cwn" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "cwo" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "Monastery Maintenance APC"; - pixel_y = 23 - }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "cwp" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable{ - icon_state = "1-8" +/obj/machinery/camera{ + c_tag = "Courtroom North" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/airalarm{ + pixel_y = 22 }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "cwr" = ( /obj/item/kirbyplants{ icon_state = "plant-22" }, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 4; - name = "Library Lounge APC"; - pixel_x = 24 - }, -/obj/machinery/airalarm{ - pixel_y = 22 +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = 26 }, /turf/open/floor/plasteel/dark, /area/service/library/lounge) @@ -51901,9 +51699,6 @@ /obj/structure/table/wood, /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) -"cwA" = ( -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) "cwE" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -51929,17 +51724,12 @@ /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) "cwH" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) +/obj/structure/chair, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "cwK" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, -/turf/open/floor/carpet, -/area/service/library/lounge) +/turf/closed/wall, +/area/security/courtroom) "cwM" = ( /obj/structure/window/reinforced{ dir = 4; @@ -51959,12 +51749,14 @@ /turf/open/space/basic, /area/space/nearstation) "cwS" = ( -/obj/structure/reagent_dispensers/fueltank, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/maintenance/department/chapel/monastery) +/area/security/courtroom) "cwU" = ( /obj/structure/table/wood, -/obj/machinery/computer/libraryconsole, +/obj/item/folder/yellow, +/obj/item/pen, /turf/open/floor/plasteel/dark, /area/service/library/lounge) "cxb" = ( @@ -51976,14 +51768,12 @@ /turf/open/floor/plasteel, /area/science/mixing) "cxe" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/carpet, -/area/service/library/lounge) +/obj/effect/spawner/lootdrop/maintenance, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "cxg" = ( /obj/structure/window/reinforced{ dir = 1; @@ -52013,14 +51803,6 @@ }, /turf/open/space/basic, /area/space/nearstation) -"cxn" = ( -/obj/machinery/newscaster{ - pixel_x = -32; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/carpet, -/area/service/library/lounge) "cxt" = ( /obj/effect/turf_decal/box/corners{ dir = 8 @@ -52038,265 +51820,134 @@ /turf/open/floor/plasteel/dark, /area/science/explab) "cxz" = ( -/obj/machinery/door/airlock/grunge{ - name = "Library" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, -/area/service/library/lounge) +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "cxB" = ( +/turf/open/floor/plasteel/dark, +/area/security/courtroom) +"cxD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"cxE" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, /turf/closed/wall, /area/service/library/lounge) -"cxC" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/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/service/library/lounge) -"cxD" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/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/service/library/lounge) -"cxE" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +"cxL" = ( +/obj/effect/landmark/xeno_spawn, +/obj/structure/disposalpipe/segment{ dir = 10 }, -/turf/closed/wall, -/area/service/library/lounge) -"cxJ" = ( +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"cxM" = ( /obj/structure/window/reinforced/fulltile, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/service/library/lounge) -"cxK" = ( -/obj/effect/turf_decal/stripes/line{ - 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 - }, -/turf/open/floor/plasteel/dark, -/area/service/library/lounge) -"cxL" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/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/service/library/lounge) -"cxM" = ( -/obj/structure/window/reinforced/fulltile, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/service/library/lounge) "cxX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/machinery/power/smes{ + charge = 5e+006 }, -/obj/machinery/camera{ - c_tag = "Monastery Archives Access Tunnel"; - dir = 4; - network = list("ss13","monastery") +/obj/structure/cable{ + icon_state = "0-2" }, -/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/service/library/lounge) +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "cxY" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/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/machinery/power/terminal{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/service/library/lounge) +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "cyl" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/item/storage/toolbox/mechanical, +/obj/machinery/light/small{ 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/service/library/lounge) -"cym" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-4" }, -/obj/effect/turf_decal/tile/neutral{ +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"cym" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "Monastery Maintenance APC"; + pixel_y = 23 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/effect/decal/cleanable/cobweb{ + icon_state = "cobweb2" + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"cyy" = ( +/obj/item/storage/box/lights/bulbs, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"cyz" = ( +/obj/machinery/light/small{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"cyA" = ( +/obj/machinery/power/smes{ + charge = 5e+006 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" }, -/turf/open/floor/plasteel/dark, -/area/service/library/lounge) -"cyy" = ( +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"cyB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, /turf/closed/wall, /area/service/library/lounge) -"cyz" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +"cyL" = ( +/obj/machinery/power/terminal{ + dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 + dir = 6 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"cyM" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/service/library/lounge) -"cyA" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, /obj/structure/cable{ icon_state = "1-2" }, -/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/service/library/lounge) -"cyB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/turf/closed/wall, -/area/service/library/lounge) -"cyL" = ( -/obj/structure/lattice, -/obj/structure/lattice, -/turf/closed/mineral, -/area/service/chapel/asteroid/monastery) -"cyM" = ( -/obj/structure/lattice, -/turf/closed/mineral, -/area/service/chapel/asteroid/monastery) +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "cyP" = ( -/obj/structure/bookcase/random/nonfiction, -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 10 }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"cyQ" = ( +/obj/machinery/vending/games, /turf/open/floor/plasteel/dark, /area/service/library) -"cyQ" = ( +"cyR" = ( /obj/item/kirbyplants{ icon_state = "plant-22" }, @@ -52309,48 +51960,52 @@ }, /turf/open/floor/plasteel/dark, /area/service/library) -"cyR" = ( +"cyT" = ( /obj/item/kirbyplants{ icon_state = "plant-22" }, /turf/open/floor/plasteel/dark, /area/service/library) -"cyS" = ( -/obj/structure/bookcase/random/religion, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) -"cyT" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - layer = 2.9; - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/pen, -/turf/open/floor/plasteel/dark, -/area/service/library) "cyU" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/service/library) "cyY" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/extinguisher, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"cyZ" = ( /obj/machinery/light/small{ dir = 8 }, /turf/open/floor/plasteel/dark, /area/service/library) -"cyZ" = ( -/obj/structure/displaycase/trophy, -/turf/open/floor/plasteel/dark, -/area/service/library) "czl" = ( -/obj/structure/chair/wood/normal, -/turf/open/floor/carpet, -/area/service/library) -"czo" = ( +/obj/item/stack/cable_coil, +/obj/item/stack/sheet/glass/fifty{ + layer = 4 + }, +/obj/item/stack/sheet/metal{ + amount = 20; + layer = 3.1 + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"czp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"czq" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ pixel_x = 1; @@ -52358,28 +52013,26 @@ }, /turf/open/floor/plasteel/dark, /area/service/library) -"czp" = ( -/obj/structure/table/wood, -/obj/item/barcodescanner, -/turf/open/floor/plasteel/dark, -/area/service/library) -"czq" = ( -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) "czr" = ( -/obj/structure/table/wood/fancy, -/turf/open/floor/carpet, -/area/service/library) +/obj/machinery/atmospherics/pipe/simple/general/hidden{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "czt" = ( -/obj/structure/table/wood/fancy, -/obj/item/storage/photo_album, +/obj/machinery/atmospherics/pipe/manifold/general/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"czv" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/carpet, /area/service/library) -"czu" = ( +"czw" = ( /obj/structure/table/wood, /obj/item/paper_bin{ layer = 2.9; @@ -52388,38 +52041,26 @@ }, /turf/open/floor/plasteel/dark, /area/service/library) -"czv" = ( -/obj/structure/chair/wood/normal{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) -"czw" = ( -/obj/machinery/newscaster{ - pixel_x = 32 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) "czB" = ( -/obj/structure/table/wood/fancy, -/obj/item/storage/fancy/candle_box, -/turf/open/floor/carpet, -/area/service/library) +/obj/structure/reagent_dispensers/fueltank, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "czC" = ( -/obj/structure/table/wood/fancy, -/obj/item/flashlight/lantern{ - icon_state = "lantern-on"; - pixel_y = 8 - }, -/turf/open/floor/carpet, -/area/service/library) +/obj/structure/closet/emcloset, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "czD" = ( -/obj/structure/table/wood, -/obj/item/folder/yellow, -/obj/item/pen, -/turf/open/floor/plasteel/dark, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/carpet, /area/service/library) "czH" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"czI" = ( /obj/machinery/light/small{ dir = 8 }, @@ -52430,73 +52071,71 @@ }, /turf/open/floor/plasteel/dark, /area/service/library) -"czI" = ( +"czM" = ( /obj/structure/chair/wood/normal{ dir = 1 }, /turf/open/floor/carpet, /area/service/library) -"czL" = ( +"czN" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, /area/service/library) -"czM" = ( +"czO" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/service/library) -"czN" = ( +"czP" = ( +/obj/machinery/atmospherics/components/unary/tank/air{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) +"czQ" = ( /obj/structure/table/wood, /obj/item/storage/bag/books, /turf/open/floor/plasteel/dark, /area/service/library) -"czO" = ( -/obj/structure/table/wood, -/obj/item/instrument/saxophone, -/turf/open/floor/plasteel/dark, -/area/service/library) -"czP" = ( -/obj/structure/table/wood, -/obj/item/stack/packageWrap, -/obj/item/coin/gold, -/turf/open/floor/plasteel/dark, -/area/service/library) -"czQ" = ( -/obj/machinery/light/small{ +"czV" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/camera{ - c_tag = "Monastery Archives Starboard"; - dir = 8; - network = list("ss13","monastery") +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/turf/open/floor/plasteel/dark, +/area/service/chapel/main/monastery) +"czW" = ( +/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 = 4 }, /turf/open/floor/plasteel/dark, -/area/service/library) -"czV" = ( +/area/service/chapel/main/monastery) +"czY" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, /turf/open/floor/plasteel/dark, /area/service/library) -"czW" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) -"czY" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) -"czZ" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) "cAa" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel/dark, @@ -52515,56 +52154,39 @@ /turf/open/floor/plasteel/dark, /area/service/library) "cAi" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) +/turf/closed/mineral, +/area/service/chapel/asteroid/monastery) "cAj" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) +/turf/closed/wall, +/area/maintenance/department/chapel/monastery) "cAr" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/machinery/door/window/northright{ - base_state = "left"; - dir = 2; - icon_state = "left"; - name = "Curator Desk Door"; - req_access_txt = "37" +/obj/machinery/door/airlock/maintenance{ + name = "Monastery Maintenance"; + req_one_access_txt = "22;24;10;11;37" }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/service/library) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "cAs" = ( /obj/structure/table/wood, -/obj/item/kirbyplants{ - icon_state = "plant-05"; - pixel_y = 10 - }, +/obj/item/clothing/head/pharaoh, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -52595,9 +52217,28 @@ /turf/open/floor/plasteel/dark, /area/service/library) "cAu" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/door/window/northright{ + base_state = "left"; + dir = 2; + icon_state = "left"; + name = "Curator Desk Door"; + req_access_txt = "37" + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) +"cAv" = ( /obj/structure/table/wood, -/obj/item/clothing/head/pharaoh, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/kirbyplants{ + icon_state = "plant-05"; + pixel_y = 10 + }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -52610,7 +52251,7 @@ }, /turf/open/floor/plasteel/dark, /area/service/library) -"cAv" = ( +"cAy" = ( /obj/structure/table/wood, /obj/item/camera, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -52626,38 +52267,7 @@ }, /turf/open/floor/plasteel/dark, /area/service/library) -"cAy" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/door/window/northright{ - dir = 2; - name = "Curator Desk Door"; - req_access_txt = "37" - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) "cAB" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) -"cAC" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/chair/wood/wings{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) -"cAD" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/chair/wood/wings{ dir = 1 @@ -52665,32 +52275,46 @@ /obj/effect/landmark/start/librarian, /turf/open/floor/plasteel/dark, /area/service/library) +"cAC" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) +"cAD" = ( +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "cAH" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/department/chapel/monastery) +"cAJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/space/basic, +/area/space) +"cAK" = ( /obj/machinery/light/small, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, /turf/open/floor/plasteel/dark, /area/service/library) -"cAJ" = ( +"cAM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, /turf/open/floor/plasteel/dark, /area/service/library) -"cAK" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) -"cAM" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/service/library) "cAQ" = ( /obj/structure/cable{ icon_state = "1-8" @@ -52701,31 +52325,57 @@ /turf/open/floor/plating, /area/engineering/main) "cAS" = ( -/obj/machinery/vending/wardrobe/curator_wardrobe, +/obj/structure/cable{ + icon_state = "4-8" + }, +/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/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel/dark, -/area/service/library) +/area/service/chapel/main/monastery) "cAT" = ( -/obj/structure/destructible/cult/tome, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, /turf/open/floor/plasteel/dark, -/area/service/library) +/area/service/chapel/main/monastery) "cAU" = ( -/obj/structure/rack{ - icon = 'icons/obj/stationobjs.dmi'; - icon_state = "minibar"; - name = "skeletal minibar" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/item/book/codex_gigas, -/obj/machinery/camera{ - c_tag = "Monastery Archives Aft"; - dir = 1; - network = list("ss13","monastery") +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 }, /turf/open/floor/plasteel/dark, -/area/service/library) +/area/service/chapel/main/monastery) "cAV" = ( -/obj/structure/bookcase{ - name = "Forbidden Knowledge" - }, +/obj/machinery/vending/wardrobe/curator_wardrobe, /turf/open/floor/plasteel/dark, /area/service/library) "cBi" = ( @@ -52929,15 +52579,6 @@ /obj/effect/turf_decal/bot/right, /turf/open/floor/plasteel/white, /area/engineering/gravity_generator) -"cCR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/outlet_injector/on{ - dir = 1 - }, -/turf/open/floor/plating/airless, -/area/maintenance/department/chapel/monastery) "cCS" = ( /obj/machinery/rnd/production/techfab/department/security, /turf/open/floor/plasteel/dark, @@ -52960,9 +52601,14 @@ /turf/open/floor/plasteel, /area/engineering/main) "cCW" = ( -/obj/machinery/vending/games, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/dark, -/area/service/library) +/area/service/chapel/main/monastery) "cCX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53011,6 +52657,15 @@ icon_state = "platingdmg3" }, /area/maintenance/department/security/brig) +"cIN" = ( +/obj/machinery/door/airlock/grunge{ + name = "Library" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "cJo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -53145,6 +52800,12 @@ }, /turf/open/floor/plasteel/dark, /area/science/lab) +"cTI" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "cXP" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -53438,6 +53099,13 @@ }, /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/exit/departure_lounge) +"dwq" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/chair/wood/wings{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "dxc" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53484,6 +53152,16 @@ }, /turf/open/floor/plasteel/dark, /area/engineering/main) +"dET" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "dFJ" = ( /turf/open/floor/engine, /area/engineering/supermatter) @@ -53604,6 +53282,10 @@ /obj/machinery/shieldwallgen/xenobiologyaccess, /turf/open/floor/plating, /area/maintenance/department/engine) +"dRT" = ( +/obj/structure/bookcase/random/reference, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "dSp" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{ dir = 1 @@ -53620,6 +53302,12 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"dVp" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = -32 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "dVI" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -53658,6 +53346,13 @@ }, /turf/open/floor/plasteel/dark, /area/security/prison) +"dYI" = ( +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "dZj" = ( /obj/machinery/atmospherics/pipe/manifold/green/visible, /obj/machinery/airalarm/engine{ @@ -53698,6 +53393,10 @@ /obj/machinery/status_display/supply, /turf/closed/wall, /area/cargo/office) +"eeG" = ( +/obj/machinery/bookbinder, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "eeQ" = ( /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -53719,6 +53418,10 @@ icon_state = "panelscorched" }, /area/maintenance/department/science) +"egu" = ( +/obj/structure/bookcase/random/religion, +/turf/open/floor/plasteel/dark, +/area/service/library) "egK" = ( /obj/structure/girder, /turf/open/floor/plating{ @@ -53733,6 +53436,14 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"ehR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/chair, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "eiV" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple{ dir = 4 @@ -53744,6 +53455,7 @@ /obj/effect/decal/cleanable/cobweb{ icon_state = "cobweb2" }, +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/maintenance/department/security/brig) "elk" = ( @@ -53923,6 +53635,18 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"eKC" = ( +/obj/machinery/door/airlock/grunge{ + name = "Library" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "eLt" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/tile/neutral{ @@ -53946,14 +53670,7 @@ }, /area/maintenance/department/science) "eNc" = ( -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" - }, -/obj/structure/rack, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, +/turf/open/floor/plating, /area/maintenance/department/chapel/monastery) "eNq" = ( /obj/effect/turf_decal/stripes/line{ @@ -54267,6 +53984,18 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"fug" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "Library APC"; + pixel_x = 24 + }, +/obj/structure/cable, +/turf/open/floor/plasteel/dark, +/area/service/library) "fuP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -54356,13 +54085,13 @@ /turf/open/floor/plasteel, /area/maintenance/department/engine) "fAx" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-4" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, /turf/open/floor/plating, /area/maintenance/department/security/brig) "fBt" = ( @@ -54494,8 +54223,8 @@ }, /area/hallway/secondary/exit/departure_lounge) "fWv" = ( -/obj/structure/bookcase/random/religion, -/turf/open/floor/plasteel/dark, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/carpet, /area/service/library/lounge) "fZK" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ @@ -54552,6 +54281,12 @@ }, /turf/open/floor/plasteel/white, /area/science/xenobiology) +"geL" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/ai_monitored/turret_protected/AIsatextAS) "geN" = ( /obj/machinery/igniter{ id = "xenoigniter"; @@ -54584,6 +54319,25 @@ }, /turf/open/floor/plasteel/dark, /area/engineering/main) +"ggN" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/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/service/library/lounge) "giI" = ( /obj/machinery/light/small{ dir = 1 @@ -54750,6 +54504,10 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"gqi" = ( +/obj/structure/bookcase/random/religion, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "gue" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -54947,6 +54705,14 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"gJV" = ( +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Court Cell"; + req_access_txt = "2" + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "gKz" = ( /obj/structure/table/wood, /obj/item/kirbyplants{ @@ -55011,6 +54777,20 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"gPs" = ( +/obj/machinery/door/airlock/grunge{ + name = "Library" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/service/library) "gPV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -55056,6 +54836,9 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) +"gXv" = ( +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "gXZ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/camera{ @@ -55085,6 +54868,12 @@ /obj/machinery/door/poddoor/incinerator_atmos_main, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) +"het" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "heC" = ( /obj/machinery/power/apc/highcap/five_k{ dir = 8; @@ -55171,6 +54960,18 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) +"hlj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) +"hlw" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "hnu" = ( /obj/machinery/button/door{ id = "lawyer_shutters"; @@ -55204,6 +55005,13 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/engine, /area/engineering/main) +"hpF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "hqo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -55219,6 +55027,16 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"hrk" = ( +/obj/item/beacon, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "hvW" = ( /obj/machinery/door/poddoor/preopen{ id = "xenobio4"; @@ -55303,6 +55121,20 @@ }, /turf/open/floor/plating, /area/maintenance/solars/port) +"hBu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/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/service/library) "hDG" = ( /obj/machinery/door/airlock/engineering{ name = "Auxillary Base Construction"; @@ -55611,11 +55443,11 @@ /turf/open/floor/plasteel/white, /area/science/xenobiology) "ijF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/bookcase/random/nonfiction, +/obj/machinery/light/small{ + dir = 1 }, -/turf/open/floor/carpet, +/turf/open/floor/plasteel/dark, /area/service/library) "ijU" = ( /obj/effect/spawner/lootdrop/organ_spawner, @@ -55701,6 +55533,10 @@ }, /turf/open/floor/plasteel, /area/engineering/main) +"ipv" = ( +/obj/structure/chair/wood/normal, +/turf/open/floor/carpet, +/area/service/library) "iqc" = ( /turf/open/floor/plasteel/stairs/right, /area/maintenance/department/crew_quarters/dorms) @@ -55770,6 +55606,9 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"iye" = ( +/turf/closed/wall, +/area/service/chapel/asteroid/monastery) "iyg" = ( /obj/structure/cable{ icon_state = "1-2" @@ -55786,6 +55625,12 @@ }, /turf/open/floor/plasteel/dark, /area/engineering/main) +"iyL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/closed/wall, +/area/service/library/lounge) "izB" = ( /obj/machinery/door/airlock/external{ name = "Escape Pod" @@ -55796,11 +55641,16 @@ /turf/open/floor/plating, /area/commons/dorms) "izF" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/plasteel/white{ - heat_capacity = 1e+006 +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "2-8" }, -/area/service/chapel/dock) +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/service/chapel/main/monastery) "iAx" = ( /obj/structure/cable{ icon_state = "4-8" @@ -55846,6 +55696,11 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plating, /area/security/execution/transfer) +"iEP" = ( +/obj/structure/table/wood/fancy, +/obj/item/storage/fancy/candle_box, +/turf/open/floor/carpet, +/area/service/library) "iEQ" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed, @@ -55855,6 +55710,12 @@ /obj/effect/spawner/lootdrop/keg, /turf/open/floor/plating, /area/maintenance/department/crew_quarters/dorms) +"iEX" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase, +/obj/item/folder/red, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "iFI" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -56007,16 +55868,64 @@ /area/maintenance/department/cargo) "iXx" = ( /obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating{ icon_state = "panelscorched" }, /area/maintenance/department/chapel/monastery) +"iYp" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/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/service/library/lounge) +"iYQ" = ( +/obj/structure/chair{ + dir = 4; + name = "Prosecution" + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "jcT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"jee" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/closed/wall, +/area/service/library/lounge) "jen" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -56049,16 +55958,14 @@ }, /area/hallway/secondary/exit/departure_lounge) "jgr" = ( -/obj/machinery/door/airlock/grunge{ - name = "Library" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, -/area/service/library) +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "jhk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -56097,6 +56004,16 @@ /obj/machinery/atmospherics/components/binary/pump, /turf/closed/wall/r_wall, /area/tcommsat/computer) +"jqZ" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + layer = 2.9; + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen, +/turf/open/floor/plasteel/dark, +/area/service/library) "jrG" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -56217,6 +56134,22 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"jzw" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/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/service/library/lounge) "jzz" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/vacuum/external, @@ -56293,11 +56226,8 @@ /turf/open/floor/plating, /area/maintenance/department/science) "jFO" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/carpet, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, /area/service/library/lounge) "jHP" = ( /obj/structure/table, @@ -56341,6 +56271,12 @@ /area/maintenance/department/science) "jSa" = ( /obj/machinery/door/airlock/maintenance, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/service/chapel/main/monastery) "jTh" = ( @@ -56384,8 +56320,8 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "jXh" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 +/obj/structure/chair/wood/normal{ + dir = 1 }, /turf/open/floor/plasteel/dark, /area/service/library/lounge) @@ -56451,6 +56387,12 @@ }, /turf/open/floor/engine, /area/engineering/main) +"keD" = ( +/obj/structure/table/wood, +/obj/item/storage/briefcase, +/obj/item/folder/blue, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "kfh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 @@ -56477,6 +56419,12 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"kix" = ( +/obj/structure/chair/wood/normal{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "kjK" = ( /obj/machinery/door/airlock/maintenance_hatch{ name = "MiniSat Maintenance"; @@ -56645,6 +56593,17 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) +"kAX" = ( +/obj/structure/table/wood, +/obj/item/gavelblock, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "kDf" = ( /obj/machinery/light/small, /turf/open/floor/carpet/black, @@ -56752,12 +56711,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "kJo" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, -/area/maintenance/department/security/brig) +/area/maintenance/department/chapel/monastery) "kJw" = ( /obj/machinery/door/airlock/maintenance/abandoned{ name = "Firing Range Target" @@ -56766,6 +56728,22 @@ icon_state = "platingdmg3" }, /area/maintenance/department/security/brig) +"kJN" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Courtroom South"; + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "kKI" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/structure/closet, @@ -56787,6 +56765,15 @@ }, /turf/open/floor/engine, /area/science/xenobiology) +"kOW" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/carpet, +/area/service/library/lounge) "kPi" = ( /obj/structure/table, /obj/machinery/microwave, @@ -56813,6 +56800,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/treatment_center) +"kQH" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "kQZ" = ( /obj/structure/closet, /obj/item/stack/spacecash/c10, @@ -56837,6 +56830,26 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"kRY" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/cable{ + icon_state = "1-2" + }, +/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/service/library/lounge) "kSb" = ( /obj/structure/chair/office/light{ dir = 8 @@ -56928,6 +56941,9 @@ /obj/item/kirbyplants{ icon_state = "plant-10" }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/service/chapel/main/monastery) "kYM" = ( @@ -57052,15 +57068,6 @@ /obj/effect/decal/cleanable/oil, /turf/open/floor/plating, /area/maintenance/department/security/brig) -"lqy" = ( -/obj/machinery/door/airlock/grunge{ - name = "Library" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/door/firedoor, -/turf/open/floor/plasteel/dark, -/area/service/library/lounge) "lrM" = ( /obj/structure/cable{ icon_state = "2-8" @@ -57069,10 +57076,8 @@ /turf/open/floor/plasteel, /area/engineering/main) "lxI" = ( -/obj/effect/landmark/xeno_spawn, -/turf/open/floor/plating{ - icon_state = "platingdmg1" - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, /area/maintenance/department/chapel/monastery) "lzJ" = ( /obj/structure/closet/crate/bin, @@ -57088,6 +57093,28 @@ "lAs" = ( /turf/closed/wall, /area/cargo/sorting) +"lAL" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/chair{ + dir = 8 + }, +/obj/structure/window/reinforced{ + 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 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "lAR" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -57111,6 +57138,12 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/engine, /area/science/xenobiology) +"lEh" = ( +/obj/structure/bookcase{ + name = "Forbidden Knowledge" + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "lEn" = ( /obj/structure/window/reinforced{ dir = 1 @@ -57220,6 +57253,12 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) +"lQo" = ( +/obj/machinery/newscaster{ + pixel_x = 32 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "lQQ" = ( /obj/machinery/door/poddoor/preopen{ id = "bridgespace"; @@ -57255,6 +57294,12 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"lUz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "lUO" = ( /obj/structure/sign/warning/radiation, /turf/closed/wall/r_wall, @@ -57301,6 +57346,20 @@ }, /turf/open/floor/engine, /area/science/xenobiology) +"lXv" = ( +/obj/structure/chair{ + dir = 8; + name = "Defense" + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/effect/turf_decal/tile/green, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "lXJ" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -57352,6 +57411,19 @@ /obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/plating, /area/engineering/main) +"mck" = ( +/obj/structure/table/wood, +/obj/item/paper_bin{ + layer = 2.9; + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -2; + pixel_y = 4 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "mdL" = ( /obj/structure/table, /obj/item/paper_bin, @@ -57650,6 +57722,17 @@ /obj/structure/cable, /turf/open/floor/plating, /area/tcommsat/computer) +"mEe" = ( +/obj/structure/table/wood, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "mEu" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 @@ -57671,12 +57754,10 @@ /turf/open/floor/wood, /area/maintenance/department/engine) "mIa" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, /obj/machinery/light/small{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/department/engine) "mJp" = ( @@ -57690,8 +57771,11 @@ /turf/open/water/decorative, /area/hallway/secondary/entry) "mKc" = ( -/obj/structure/bookcase/random/nonfiction, -/turf/open/floor/plasteel/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/carpet, /area/service/library/lounge) "mKk" = ( /obj/structure/cable{ @@ -57699,6 +57783,11 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"mKP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/security/courtroom) "mLB" = ( /obj/structure/cable{ icon_state = "1-4" @@ -57751,12 +57840,38 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating/airless, /area/space/nearstation) +"mWN" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/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/service/library/lounge) "mXq" = ( /obj/item/taperecorder, /obj/item/cartridge/lawyer, /obj/structure/table/wood, /turf/open/floor/wood, /area/service/lawoffice) +"mXJ" = ( +/obj/structure/table/wood/fancy, +/turf/open/floor/carpet, +/area/service/library) "mZE" = ( /turf/open/space/basic, /area/space/nearstation) @@ -57845,6 +57960,11 @@ /obj/effect/spawner/lootdrop/costume, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"nix" = ( +/obj/structure/lattice, +/obj/structure/lattice, +/turf/closed/mineral, +/area/service/chapel/asteroid/monastery) "niy" = ( /obj/structure/table, /obj/item/reagent_containers/food/snacks/cookie, @@ -57863,6 +57983,11 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) +"njI" = ( +/obj/structure/table/wood, +/obj/machinery/computer/libraryconsole/bookmanagement, +/turf/open/floor/plasteel/dark, +/area/service/library) "nku" = ( /obj/machinery/door/airlock/centcom{ name = "Crematorium"; @@ -57909,6 +58034,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"nso" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "nsy" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -58107,10 +58239,14 @@ /turf/open/floor/engine, /area/science/explab) "nKo" = ( -/obj/structure/lattice, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating, +/area/maintenance/department/chapel/monastery) "nLl" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -58166,6 +58302,25 @@ }, /turf/open/floor/plating/airless, /area/space/nearstation) +"nOF" = ( +/obj/effect/turf_decal/stripes/line{ + 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 + }, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "nOY" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -58221,6 +58376,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"nUc" = ( +/obj/structure/disposaloutlet, +/turf/open/floor/plating, +/area/space/nearstation) "nUQ" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/engine, @@ -58229,10 +58388,33 @@ /obj/item/spear, /turf/open/floor/plating, /area/maintenance/department/engine) +"nWD" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/door/window/northright{ + dir = 2; + name = "Curator Desk Door"; + req_access_txt = "37" + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "nWP" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plating, /area/maintenance/department/engine) +"nXR" = ( +/obj/structure/table/wood/fancy, +/obj/item/flashlight/lantern{ + icon_state = "lantern-on"; + pixel_y = 8 + }, +/turf/open/floor/carpet, +/area/service/library) "nYb" = ( /obj/structure/table_frame/wood, /turf/open/floor/wood, @@ -58242,6 +58424,12 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/hallway/secondary/exit/departure_lounge) +"nYC" = ( +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "nZw" = ( /obj/machinery/door/airlock/abandoned{ name = "Backup Laboratory" @@ -58269,11 +58457,14 @@ /obj/item/pen, /turf/open/floor/plating, /area/maintenance/department/science) -"odM" = ( -/obj/effect/landmark/barthpot, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +"odz" = ( +/obj/structure/table/wood/fancy, +/obj/item/storage/photo_album, /turf/open/floor/carpet, -/area/service/library/lounge) +/area/service/library) +"odM" = ( +/turf/closed/wall/r_wall, +/area/security/courtroom) "oep" = ( /obj/structure/table/glass, /obj/item/paper_bin, @@ -58390,6 +58581,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"osW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "osY" = ( /obj/structure/flora/ausbushes/reedbush{ pixel_x = -2; @@ -58452,6 +58649,13 @@ }, /turf/open/floor/plasteel/dark, /area/service/chapel/office) +"oxo" = ( +/obj/structure/bookcase/random/religion, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "oxw" = ( /obj/structure/cable/yellow{ icon_state = "4-8" @@ -58465,6 +58669,7 @@ /area/commons/storage/primary) "ozO" = ( /obj/machinery/door/airlock/maintenance, +/obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/department/engine) "oAw" = ( @@ -58582,6 +58787,22 @@ }, /turf/open/floor/plating, /area/engineering/main) +"oHk" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/carpet, +/area/service/library/lounge) +"oIU" = ( +/obj/structure/table/wood, +/obj/item/folder/yellow, +/obj/item/pen, +/turf/open/floor/plasteel/dark, +/area/service/library) "oKa" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -58628,7 +58849,6 @@ dir = 8 }, /obj/machinery/atmospherics/components/binary/pump/on{ - dir = 2; name = "Waste to Space" }, /turf/open/floor/plasteel/dark, @@ -58760,6 +58980,12 @@ }, /turf/open/floor/plating, /area/maintenance/department/engine) +"oWD" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "oXe" = ( /obj/structure/table/glass, /obj/item/mmi, @@ -58808,12 +59034,6 @@ /turf/open/floor/plating/airless, /area/engineering/main) "pbm" = ( -/obj/machinery/door/airlock/external{ - name = "Pod Docking Bay" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, /turf/open/floor/plating, /area/service/chapel/dock) "pbI" = ( @@ -58841,7 +59061,7 @@ dir = 5 }, /turf/open/floor/plating, -/area/science/explab) +/area/maintenance/department/cargo) "peE" = ( /obj/structure/cable{ icon_state = "1-4" @@ -58899,15 +59119,9 @@ /turf/open/floor/plating, /area/maintenance/disposal) "pia" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/structure/rack, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/maintenance/department/chapel/monastery) +/obj/structure/disposalpipe/segment, +/turf/open/space/basic, +/area/space) "pjH" = ( /obj/structure/cable{ icon_state = "1-2" @@ -59129,6 +59343,13 @@ }, /turf/open/floor/wood, /area/command/heads_quarters/hop) +"pJy" = ( +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -26 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "pKd" = ( /obj/effect/spawner/lootdrop/maintenance{ lootcount = 2; @@ -59246,12 +59467,16 @@ /turf/open/floor/plasteel, /area/service/hydroponics) "pXc" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable{ - icon_state = "1-4" + icon_state = "1-2" }, -/turf/open/floor/carpet, -/area/service/library) +/obj/machinery/door/airlock/public/glass{ + name = "Courtroom" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "pXg" = ( /obj/structure/table/glass, /obj/structure/window/reinforced, @@ -59481,10 +59706,13 @@ /turf/open/floor/plasteel, /area/commons/fitness/recreation) "qAM" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/item/cigbutt, -/turf/open/floor/plating, -/area/maintenance/department/cargo) +/obj/machinery/door/airlock/grunge{ + name = "Library" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "qBv" = ( /obj/item/clothing/head/ushanka, /turf/open/floor/plating, @@ -59535,6 +59763,15 @@ dir = 1 }, /area/hallway/secondary/entry) +"qGf" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/maintenance/department/chapel/monastery) "qGu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -59587,6 +59824,20 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating, /area/maintenance/department/science) +"qLb" = ( +/obj/structure/table/wood, +/obj/item/book/manual/wiki/security_space_law, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "qLI" = ( /obj/structure/table, /obj/item/stack/sheet/glass/fifty{ @@ -59620,7 +59871,10 @@ /turf/open/floor/plating, /area/security/execution/transfer) "qOE" = ( -/turf/open/floor/plasteel/dark, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/carpet, /area/service/library/lounge) "qOH" = ( /obj/structure/cable{ @@ -59733,9 +59987,10 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "qWo" = ( -/turf/open/floor/plating{ - icon_state = "platingdmg3" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 }, +/turf/closed/wall, /area/maintenance/department/chapel/monastery) "qWG" = ( /obj/structure/closet/emcloset/anchored, @@ -59807,6 +60062,10 @@ }, /turf/open/floor/plasteel/dark/telecomms, /area/tcommsat/server) +"qYW" = ( +/obj/structure/bookcase/random/nonfiction, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "rar" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -59928,12 +60187,16 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "rnE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/airlock/grunge{ + name = "Library" }, -/obj/structure/lattice, -/turf/open/space/basic, -/area/space/nearstation) +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "roc" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -59943,10 +60206,18 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/structure/closet/emcloset, /turf/open/floor/plasteel/white{ heat_capacity = 1e+006 }, /area/service/chapel/dock) +"rpx" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "rrb" = ( /obj/structure/cable{ icon_state = "1-2" @@ -60032,6 +60303,12 @@ }, /turf/open/floor/plasteel/cafeteria, /area/service/kitchen) +"rzm" = ( +/obj/structure/table/wood, +/obj/item/stack/packageWrap, +/obj/item/coin/gold, +/turf/open/floor/plasteel/dark, +/area/service/library) "rzp" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -60164,6 +60441,19 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/science/mixing) +"rRv" = ( +/obj/structure/bookcase/random/religion, +/obj/effect/decal/cleanable/cobweb{ + icon_state = "cobweb2" + }, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) +"rSE" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "rSH" = ( /obj/item/trash/can, /turf/open/floor/wood, @@ -60263,6 +60553,17 @@ }, /turf/open/space, /area/space/nearstation) +"sgD" = ( +/obj/structure/bookcase/random/adult, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) +"shw" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/carpet, +/area/service/library) "shH" = ( /turf/closed/wall/r_wall, /area/space/nearstation) @@ -60324,6 +60625,13 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/department/crew_quarters/dorms) +"sqt" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "sqQ" = ( /turf/open/floor/plating, /area/maintenance/disposal) @@ -60479,6 +60787,17 @@ }, /turf/open/floor/plasteel, /area/engineering/main) +"sKq" = ( +/obj/machinery/door/airlock/grunge{ + name = "Library" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/service/library) "sNk" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -60699,7 +61018,7 @@ }, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/science/explab) +/area/maintenance/department/cargo) "tix" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -60881,11 +61200,15 @@ }, /area/maintenance/department/science) "tyL" = ( -/obj/structure/cable{ - icon_state = "1-8" +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" }, -/turf/open/floor/plating, -/area/maintenance/department/security/brig) +/obj/structure/rack, +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) "tzj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel/white, @@ -60969,6 +61292,11 @@ icon_state = "panelscorched" }, /area/maintenance/department/engine) +"tRZ" = ( +/obj/structure/lattice, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "tSL" = ( /turf/open/floor/plating{ icon_state = "panelscorched" @@ -60997,6 +61325,22 @@ }, /turf/closed/wall/r_wall, /area/science/xenobiology) +"tVY" = ( +/obj/structure/chair{ + dir = 4; + name = "Prosecution" + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "tVZ" = ( /obj/effect/landmark/start/prisoner, /turf/open/floor/plasteel/dark, @@ -61124,11 +61468,15 @@ /turf/open/floor/plating, /area/maintenance/department/security/brig) "ukn" = ( -/obj/structure/disposalpipe/segment{ +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/rack, +/obj/machinery/light/small{ dir = 4 }, -/turf/closed/wall, -/area/maintenance/department/engine) +/turf/open/floor/plating{ + icon_state = "panelscorched" + }, +/area/maintenance/department/chapel/monastery) "ukp" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -61153,6 +61501,24 @@ }, /turf/open/floor/plasteel, /area/commons/storage/primary) +"ulQ" = ( +/obj/machinery/door/airlock/public/glass{ + name = "Courtroom"; + req_access_txt = "42" + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "ulY" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, @@ -61338,12 +61704,37 @@ }, /turf/open/floor/plasteel, /area/tcommsat/computer) +"uzy" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/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/service/library/lounge) "uzB" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /turf/open/floor/engine, /area/science/xenobiology) +"uAA" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "uAU" = ( /obj/structure/table/wood, /obj/item/folder/blue, @@ -61379,10 +61770,27 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating/airless, /area/space/nearstation) +"uIh" = ( +/obj/structure/chair{ + dir = 8; + name = "Defense" + }, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/effect/turf_decal/tile/green, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "uIn" = ( /obj/machinery/power/terminal{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plating, /area/maintenance/department/engine) "uIB" = ( @@ -61448,6 +61856,12 @@ }, /turf/open/floor/engine, /area/engineering/main) +"uTZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "uUQ" = ( /obj/machinery/door/airlock/maintenance{ name = "Engineering Maintenance"; @@ -61474,6 +61888,13 @@ /obj/item/stamp/law, /turf/open/floor/carpet, /area/service/lawoffice) +"uXp" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "uXG" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -61520,9 +61941,7 @@ /turf/open/floor/plating, /area/maintenance/department/engine) "vco" = ( -/obj/machinery/light/small{ - dir = 8 - }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/department/chapel/monastery) "veF" = ( @@ -61548,6 +61967,11 @@ }, /turf/open/floor/plasteel/dark, /area/science/mixing) +"vgg" = ( +/obj/structure/table/wood, +/obj/item/barcodescanner, +/turf/open/floor/plasteel/dark, +/area/service/library) "vgp" = ( /obj/machinery/door/firedoor, /obj/effect/mapping_helpers/airlock/cyclelink_helper{ @@ -61644,6 +62068,25 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) +"vrn" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/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/service/library/lounge) "vsk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -61728,6 +62171,10 @@ }, /turf/open/floor/plasteel, /area/engineering/main) +"vxV" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "vzp" = ( /obj/effect/turf_decal/tile/brown, /obj/item/stack/ore/iron, @@ -61823,6 +62270,10 @@ }, /turf/open/floor/plating, /area/maintenance/department/science) +"vHh" = ( +/obj/structure/lattice, +/turf/closed/mineral, +/area/service/chapel/asteroid/monastery) "vIa" = ( /turf/open/floor/plasteel/yellowsiding/corner{ dir = 4 @@ -61854,19 +62305,30 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "vOw" = ( -/obj/machinery/door/airlock/grunge{ - name = "Library" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/turf/open/space/basic, +/area/space/nearstation) +"vQN" = ( +/obj/effect/turf_decal/stripes/corner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/door/firedoor, +/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/service/library) +/area/service/library/lounge) "vRi" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -61905,6 +62367,20 @@ }, /turf/open/floor/plasteel, /area/engineering/main) +"vTc" = ( +/obj/structure/rack{ + icon = 'icons/obj/stationobjs.dmi'; + icon_state = "minibar"; + name = "skeletal minibar" + }, +/obj/item/book/codex_gigas, +/obj/machinery/camera{ + c_tag = "Monastery Archives Aft"; + dir = 1; + network = list("ss13","monastery") + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "vTL" = ( /obj/machinery/vending/tool, /obj/effect/turf_decal/tile/neutral{ @@ -61984,6 +62460,17 @@ /obj/machinery/meter, /turf/open/floor/plating, /area/maintenance/department/engine) +"wdY" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/camera{ + c_tag = "Monastery Archives Starboard"; + dir = 8; + network = list("ss13","monastery") + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "weL" = ( /obj/machinery/light/small, /turf/open/floor/plating, @@ -62098,6 +62585,13 @@ }, /turf/open/floor/plasteel/white, /area/science/explab) +"wnE" = ( +/obj/machinery/light/small, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/service/library) "wnJ" = ( /obj/structure/sign/warning, /turf/closed/wall, @@ -62173,6 +62667,11 @@ }, /turf/open/floor/plasteel/dark, /area/security/brig) +"wyf" = ( +/obj/structure/chair, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "wzb" = ( /obj/structure/chair, /turf/open/floor/wood, @@ -62210,6 +62709,10 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/maintenance/department/security/brig) +"wDq" = ( +/obj/structure/bookcase/random/fiction, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "wDZ" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 @@ -62408,6 +62911,11 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"wWJ" = ( +/obj/structure/closet/secure_closet/courtroom, +/obj/item/gavelhammer, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "wXu" = ( /obj/machinery/disposal/bin, /obj/structure/window/reinforced{ @@ -62504,9 +63012,9 @@ /turf/open/floor/plasteel, /area/science/explab) "xhj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/carpet, -/area/service/library/lounge) +/obj/structure/table, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "xhE" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 27 @@ -62525,23 +63033,19 @@ /turf/open/floor/plasteel, /area/engineering/main) "xja" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "Library APC"; - pixel_x = 24 - }, -/obj/structure/cable, +/obj/structure/displaycase/trophy, /turf/open/floor/plasteel/dark, /area/service/library) "xjc" = ( /obj/structure/cable{ - icon_state = "2-8" + icon_state = "1-4" }, -/turf/open/floor/plasteel/dark, -/area/service/library) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/carpet, +/area/service/library/lounge) "xje" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, @@ -62576,6 +63080,33 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"xkB" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) +"xld" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/camera{ + c_tag = "Monastery Archives Access Tunnel"; + dir = 4; + network = list("ss13","monastery") + }, +/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/service/library/lounge) "xlg" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/heat_exchanging/junction, @@ -62733,6 +63264,10 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"xEb" = ( +/obj/structure/destructible/cult/tome, +/turf/open/floor/plasteel/dark, +/area/service/library) "xEx" = ( /obj/machinery/portable_atmospherics/scrubber/huge, /obj/effect/turf_decal/stripes/line, @@ -62756,6 +63291,11 @@ /obj/effect/landmark/carpspawn, /turf/open/space, /area/space/station_ruins) +"xGY" = ( +/obj/structure/table/wood, +/obj/item/instrument/saxophone, +/turf/open/floor/plasteel/dark, +/area/service/library) "xIx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -62800,10 +63340,22 @@ /turf/open/floor/plasteel/dark, /area/service/lawoffice) "xNx" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/junction/flip, -/turf/open/space/basic, -/area/space/nearstation) +/obj/item/kirbyplants{ + icon_state = "plant-22" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + dir = 4; + name = "Library Lounge APC"; + pixel_x = 24 + }, +/obj/machinery/airalarm{ + pixel_y = 22 + }, +/turf/open/floor/plasteel/dark, +/area/service/library/lounge) "xNy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -62847,6 +63399,12 @@ /area/space/nearstation) "xSd" = ( /obj/machinery/light/small, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/maintenance/department/chapel/monastery) "xSX" = ( @@ -62863,14 +63421,8 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "xVt" = ( -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, -/obj/structure/rack, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, /area/maintenance/department/chapel/monastery) "xWl" = ( /obj/item/pen, @@ -62884,9 +63436,13 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "xYV" = ( -/turf/open/floor/plating{ - icon_state = "panelscorched" +/obj/item/stack/rods/fifty, +/obj/item/wrench, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Air to Distro" }, +/turf/open/floor/plating, /area/maintenance/department/chapel/monastery) "ybX" = ( /obj/structure/table, @@ -76762,31 +77318,31 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC rmC rmC rmC @@ -77019,31 +77575,31 @@ cxg aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC rmC rmC rmC @@ -77276,31 +77832,31 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC +rmC rmC rmC rmC @@ -77518,11 +78074,11 @@ cbK ceP cdC ciO -bWV -bWV -cgf +cfm +cfm +chF cjl -bWV +cfm cwl cwz bWV @@ -77539,17 +78095,17 @@ aaa aaa aaa aaa -cfN -cfN -cfN aaa aaa aaa aaa aaa aaa -cfN -cfN +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -77775,11 +78331,11 @@ cuK ceP bXJ cve -bWV +cfm bXJ ckd ceP -bWV +cfm bWV bWV bWV @@ -77793,22 +78349,22 @@ aaa aaa aaa aaa -cfN -cfN -cfN -cfN -cfN -cyM aaa aaa aaa -cfN -cfN -cfN -cfN -cfN -cfN -cfN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -77945,7 +78501,7 @@ aaa aaa aaa aaa -aaa +cFB aaa aaa aaa @@ -78034,13 +78590,30 @@ cfm cfm cfm cjH -chF -cuQ -cvX -cke +czV +ceP +cwc +xhj cky -cld -cCR +cwK +odM +odM +odM +odM +odM +odM +aaa +aaa +aaa +aaa +cfN +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -78048,26 +78621,9 @@ aaa aaa aaa aaa -cfN -cfN -cfN -cfN -cfN -cfN -cfN -aht aaa aaa aaa -cfN -cyM -cfN -cfN -cfN -cfN -cfN -cfN -cfN aaa aaa aaa @@ -78293,12 +78849,26 @@ chf cfD cvu cvE -cvY -ckf +cwc ckf +uAA cle -cjm -cjm +ckS +cxB +xkB +cxB +vxV +odM +odM +aaa +aaa +cfN +cfN +cfN +aaa +cfN +cfN +cfN aaa aaa aaa @@ -78307,24 +78877,10 @@ aaa aaa cfN cfN -cfN -cyM -cfN -cyM -aaa -aht aaa aaa aaa aaa -aht -aaa -cfN -cfN -cfN -cfN -cfN -cfN aaa aaa aaa @@ -78550,38 +79106,38 @@ cfE cfE cfo cvF -cvZ +cwc cwm ckj cwH -ckO -cjm +ckS +tVY +iYQ +cxB +cxB +wWJ +odM +aaa +aaa cfN +cfN +cfN +cfN +cfN +cfN +vHh aaa aaa aaa +cfN +cfN +cfN +cfN +cfN +cfN +cfN aaa aaa -cfN -cfN -cfN -aht -aaa -aht -aaa -aht -aht -aht -aht -aht -aht -aaa -cfN -cfN -cyM -cfN -cfN -cfN aaa aaa aaa @@ -78765,8 +79321,8 @@ aaa aaa aaa aaa -bHI -aby +aaa +bIX aby aby bGH @@ -78806,39 +79362,39 @@ cgG cgG bWV cfn -ciR -cwa +cAS +cwc cwn -ckg -ckz -ckP -cjm -cfN -cfN -cfN -aaa -aaa -aaa -aaa -aaa -aaa +ckj +cwH +ckS +mck +iEX +cxB +cxB +dVp +odM aht -aaa aht -aaa +cfN +cfN +cfN +cfN +cfN +cfN aht aaa aaa aaa -aaa -aht -aaa -aaa -aaa -aht +cfN +vHh +cfN +cfN +cfN +cfN +cfN cfN cfN -aaa aaa aaa aaa @@ -79021,11 +79577,11 @@ aaa aaa aaa aaa +aaa bGD bGD bIT bJZ -bIT bMr bNs bOw @@ -79063,40 +79619,40 @@ ciT cvh cgG cfn -cvF -cwa +cAT +pXc cwo ckh ckA -ckP -cjm +mKP +hpF +sqt +cTI +qLb +kJN +odM +aaa cfN cfN cfN +vHh cfN +vHh aaa -aaa -aaa -aaa -aaa -cjp -cyU -cjp -cyU -cjp -cjp -cyU -cjp -cyU -cjp -cyU -aht -aht aht aaa aaa aaa aaa +aht +aaa +cfN +cfN +cfN +cfN +cfN +cfN +aaa aaa aaa aaa @@ -79278,10 +79834,10 @@ aaa aaa aaa aaa +aaa +bGE bGE bGE -bIU -bHM bHM bHM bHM @@ -79323,43 +79879,43 @@ cfn cvH cwc cwp -cki +cxB ckB -ckP -cjm -caS -caS -caS +ulQ +hrk caS +osW +kAX +nso +odM +aaa +cfN +cfN +cfN +aht +aaa +aht +aaa +aht aht aht aht aht -cjp -cjp -ckH -cyY -ckH -ckH -ckH -ckH -czH -ckH -cyR -cyU -aaa -aaa aht aaa +cfN +cfN +vHh +cfN +cfN +cfN aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa +rmC +rmC +rmC rmC rmC rmC @@ -79534,7 +80090,7 @@ aaa aaa aaa aaa -bFE +aaa bGF bHJ pbm @@ -79580,43 +80136,43 @@ cvw cvI ckQ clf -cwA -cwA +wyf +ehR cwS -cjm -cfN -caS -cfN +rpx +uXp +lUz +mEe +dET +odM aaa aaa aaa aaa +aht +aaa +aht aaa -cjp -cCW -ckH -cyZ -ckH -czl -czr -czr -czI -ckH -ckH -cjp -cjp -cyU aht aaa aaa aaa aaa +aht +aaa +aaa +aaa +aht +cfN +cfN aaa aaa aaa aaa aaa -aaa +rmC +rmC +rmC rmC rmC rmC @@ -79792,8 +80348,8 @@ aaa aaa aaa aaa +aaa bGE -bHK bIV bKb bLo @@ -79834,36 +80390,36 @@ cgH cvi cgG cfn -ciR -cwa +cAS +cwc cjO -ckk -ckC -ckR -cjm -cfN -caS -caS -aht -aht -aht -aht -aht +cwH +cwH +ckS +keD +mck +cxB +cxB +pJy +odM +aaa +aaa +aaa +aaa cjp -ckW -ckH -ckH -ckH -czl -czr -czB -czI -czV -ckH -cAr -cAB cyU cjp +cyU +cjp +cjp +cyU +cjp +cyU +cjp +cyU +aht +aht +aht aaa aaa aaa @@ -79871,9 +80427,9 @@ aaa aaa aaa aaa -aaa -aaa -aaa +rmC +rmC +rmC rmC rmC rmC @@ -80049,7 +80605,7 @@ aaa aaa aaa aaa -bGG +aaa bHL bIW bKc @@ -80092,41 +80648,41 @@ cid cgG cfn ciR -cwe -cwe -cwe -cwe -cwe -cwe -cwe -cwe -cfN -aaa -aaa -aaa -aaa -aaa +cwc +cwm +cwH +cwH +ckS +uIh +lXv +cxB +lAL +hlw +odM +aht +aht +aht +cjp cjp -cyP ckH cyZ ckH -czl -czt -czC -czI -czW -cAg -cAs ckH -cAH -cjp +ckH +ckH +czI +ckH +cyT cyU aaa aaa +aht +aaa +aaa +aaa +aaa aaa aaa -cfN aaa aaa aaa @@ -80252,7 +80808,7 @@ wxb aiu xuv aoe -ajD +bGG hKX aiu apB @@ -80261,7 +80817,7 @@ aBa oTC ait aaa -abN +bBW aaa aHA aKz @@ -80306,9 +80862,9 @@ aaa aaa aaa aaa +aaa bGH bGE -bIX bKd bLp bMu @@ -80349,42 +80905,42 @@ cvj bWV cfn cvJ -cwe +cwc cjP -ckl +cxB ckD ckS -clg -clk -cwe -cwe cxB -cxJ -cxJ -cxJ -cyy +clk +cxB +gJV +cxB +odM +aaa +aaa +aaa cjp cyQ ckH +xja +ckH +ipv +mXJ +mXJ +czM ckH ckH -ckH -ckH -ckH -ckH -czW -cAg -cAt -ckH -czW -cAS +cjp +cjp cyU aht -aht -aht -cyM -cfN -cfN +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -80507,7 +81063,7 @@ aut aiu giO aDm -kJo +ujI fAx aDm aDm @@ -80563,10 +81119,10 @@ aaa aaa aaa aaa +aaa bGI bHM bHM -bNw bLq bMv bNw @@ -80605,43 +81161,43 @@ ciV cjq cgG cfn -ckE -ckT -xhj +ciR +cwc xhj +cxB cwK odM -xhj -cxn -xhj -lqy -cxC -cxK -cxX -cyl -cyz -jgr +odM +odM +odM +odM +odM +odM +aht +aht +aht +cjp cjQ -cjQ -cjQ -cjQ -cjQ -cjQ -cjQ -czL +ckH +ckH +ckH +ipv +mXJ +iEP +czM czY -cAi +ckH cAu cAC -cAJ -cAT cyU +cjp +aaa +aaa +aaa +aaa aaa aaa aaa -cfN -cfN -cfN aaa aaa aaa @@ -80764,9 +81320,9 @@ auu aiu ekU aiu -asr -tyL +aqh ajD +bGG nPA mtu aCc @@ -80821,11 +81377,11 @@ aaa aaa aaa aaa -bHN +aaa +bIY bGE -bKe bLr -bMw +bMx bNx bNw bOw @@ -80861,45 +81417,45 @@ ciE ciW cjr cgG -cvw -cvK -cwg -cjR -jFO -ckF -jFO -cxe +czW +ceJ +cwe jFO jFO -cxz -cxD -cxL -cxY -cym -cyA -vOw +cwe +cwe +cwe +cwe +cwe +cfN +aaa +aaa +aaa +aaa +aaa +cjp ijF -pXc -ckm -ckm -ckm -ckm -ckm +ckH +xja +ckH +ipv +odz +nXR czM -czZ -cAj +cAa +cAg cAv -cAD +ckH cAK -cAU +cjp cyU aaa aaa aaa +aaa cfN -cfN -cfN -cfN +aaa +aaa aaa aaa rmC @@ -81077,12 +81633,12 @@ aaa aaa aaa aaa -aht +aaa +aaa aqG bGE -cqW bKf -bMw +bMx bNy bNw bOw @@ -81119,7 +81675,7 @@ cgG cgG bWV cfn -ceP +cAU cwe cwr clm @@ -81136,7 +81692,7 @@ cxM cyB cjp cyR -ick +ckH ckH ckH ckH @@ -81150,14 +81706,14 @@ ckH cAa cAV cyU +aht +aht +aht +vHh +cfN +cfN aaa aaa -cfN -cfN -cfN -cfN -cfN -aaa aaa rmC rmC @@ -81333,11 +81889,11 @@ aaa aaa aaa aaa -aht +aaa +aaa aht aqG bGE -izF ros bMx bNz @@ -81376,44 +81932,44 @@ chn cfE cfE cvy -cfG -cwe -cwe +cCW +qAM +fWv fWv qOE ckV -qOE +fWv cln -cwe -cfN -aaa -aaa -aaa -aaa -aaa -cjp -cyS -ick -cyZ -ckH -czo -czu +fWv +cIN +ggN +nOF +xld +jzw +vrn +sKq +czD +czD +czD +czD +czD +czD czD czN -cAa -cAg +kQH +bNC cAs -ckH +dwq cAM -cjp +xEb cyU aaa aaa +aaa cfN cfN cfN -cfN -cfN +aaa aaa aaa rmC @@ -81592,11 +82148,11 @@ aaa aaa aaa aaa +aaa aqG bGE bGE bHM -bHM bNA bHM bSZ @@ -81633,40 +82189,40 @@ cho cvk cdx kXx -csS -cfm -cwe -fWv -qOE +izF +rnE +xjc mKc -qOE -cln -cwe -caS -aht -aht -aht -aht -aht -cjp +oHk +mKc +kOW +mKc +mKc +eKC +vQN +uzy +mWN +kRY +iYp +gPs cko -ick -ckH -ckH -clp +shw +czv +czv +czv czv czv czO cli -ckH +hBu cAy cAB +uTZ +vTc cyU -cjp -aht -aht -aht -cyM +aaa +aaa +aaa cfN cfN cfN @@ -81850,9 +82406,9 @@ aaa aaa aaa aaa -bIY -bIY -aht +aaa +cwR +bKe aht bNB abI @@ -81889,45 +82445,45 @@ cfm ciF cuQ cfm -cfm +chF jSa -cfm cwe +xNx ckp ckI ckX -ckI -cln +het +eeG cwe -cfN -cfN -aaa -aaa -aaa -aaa +cwe +jee +cdV +cdV +cdV +iyL cjp cyT ick -cyZ -ckH -czp ckH ckH -czP ckH ckH -cjp -cjp +ckH +ckH +hlj +cAg +cAt +ckH +hlj +lEh cyU -aht -aaa aaa aaa cfN cfN cfN cfN -aaa +cfN aaa aaa rmC @@ -82146,39 +82702,40 @@ cio chq ciX cfm +cAi +jgr +cjm +cwe +gqi +gXv +dRT +gXv +sgD +cwe cfN -cwA -cfN -cwe -cwe -cwe -cwe -cwe -cwe -cwe -caS -caS -aht -aht -aht -aht +aaa +aaa +aaa +aaa +aaa cjp -cjp -xjc +oxo +ick xja ckH czq czw -ckH +oIU czQ +hlj +cAg +cAv ckH -cyR +wnE +cjp cyU aaa aaa -aht -aaa -aaa cfN cfN cfN @@ -82186,7 +82743,6 @@ cfN cfN aaa aaa -aaa rmC rmC rmC @@ -82403,47 +82959,47 @@ cgM chr chL cfm -cfN +cAi xSd -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -aaa -aaa -aaa -aaa -aht -cjp -cyU -cjp -cyU -cjp -cjp -cyU -cjp -cyU -cjp -cyU +cjm +cwe +gqi +gXv +qYW +gXv +sgD +cwe +iye aht aht aht aht -cyM +aht +cjp +egu +ick +ckH +ckH +njI +kix +kix +xGY +oWD +ckH +nWD +cAC +cyU +cjp +aht +aht +aht +vHh cfN cfN cfN cfN aaa aaa -aaa -aaa rmC rmC rmC @@ -82660,47 +83216,47 @@ cip chs ciY cfm -cfN -cwA -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN +cAi +jgr +cjm +cwe +rRv +rSE +wDq +rSE +sgD +cwe cfN cfN aaa aaa aaa -aht -aaa -aaa -aht -aaa -aaa -aht -aaa -aht aaa +cjp +jqZ +ick +xja +ckH +vgg +ckH +ckH +rzm +ckH +ckH +cjp +cjp +cyU aht aaa aaa aaa -aaa -aaa cfN cfN -aaa cfN cfN aaa aaa aaa -aaa rmC rmC rmC @@ -82917,44 +83473,44 @@ cfm cht cfm cfm +cAi +jgr cfN -cwA -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -aaa -aaa -aaa +cwe +cwe +cwe +cwe +cwe +cwe +cwe +iye +iye aht aht aht aht +cjp +cjp +nYC +fug +ckH +dYI +lQo +ckH +wdY +ckH +cyT +cyU aaa aaa aht -aht -aht aaa -aht aaa cfN cfN -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cfN +cfN +cfN aaa aaa aaa @@ -83174,9 +83730,8 @@ ciq chu ciZ cfm -cfN -cwA -cfN +cAi +kJo cfN cfN cfN @@ -83190,27 +83745,28 @@ cfN aaa aaa aaa +aaa aht -aaa -aaa +cjp +cyU +cjp +cyU +cjp +cjp +cyU +cjp +cyU +cjp +cyU aht -cfN -cfN -cyM -cfN aht -aaa aht +aht +vHh +cfN cfN cfN cfN -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -83431,43 +83987,43 @@ cfm cfm cfm cfm +cAj +jgr +cfN +cfN +cfN +cfN +cfN +cfN +cfN cfN -cwA -cjm cfN cfN cfN aaa aaa -cfN -cfN -cfN -cfN -aaa aaa +aht aaa aaa aht aaa -cfN -cyM -cfN -cfN -cfN -cfN -cyM -cfN -cyM -cfN -cfN -cfN -cfN +aaa +aht +aaa +aht +aaa +aht aaa aaa aaa aaa aaa +cfN +cfN aaa +cfN +cfN aaa aaa aaa @@ -83679,38 +84235,20 @@ arF crO crO crO -crO -crO -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN +aaa +aaa +cjm +cjm +cjm +cxX +cyA +czl +czC +cAj iXx cjm cfN cfN -aaa -aaa -aaa -aaa -cfN -cfN -aaa -aaa -aaa -aaa -aaa -cyL -cfN -cfN -cfN -cfN -cfN -cfN cfN cfN cfN @@ -83722,13 +84260,31 @@ cfN aaa aaa aaa -rmC -rmC -rmC -rmC -rmC -rmC -rmC +aht +aht +aht +aht +aaa +aaa +aht +aht +aht +aaa +aht +aaa +cfN +cfN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa rmC rmC rmC @@ -83887,7 +84443,7 @@ aaa aaa aaa aYG -bbR +bHN bbR bnp baK @@ -83933,24 +84489,48 @@ bva bIZ bIZ bIZ -aaa -aaa -aaa -aaa -aaa -aaa -cfN -cfN -cfN -cfN -cfN -cfN -cfN -xYV +aht +aht +aht +aht +aht cjm +cvK +cjm +cxY +cyL +czp +czH +cAr +nKo +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +aaa +aaa +aaa aht aaa aaa +aht +cfN +cfN +vHh +cfN +aht +aaa +aht +cfN +cfN +cfN aaa aaa aaa @@ -83960,32 +84540,8 @@ aaa aaa aaa aaa -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN -cfN aaa aaa -aaa -rmC -rmC -rmC -rmC -rmC -rmC -rmC rmC rmC rmC @@ -84144,7 +84700,7 @@ aZx aZx aYG aYG -baK +bIU baK bnq baM @@ -84190,24 +84746,49 @@ caZ cbS ccN bIZ +xgh +xgh +xgh +xgh cjm cjm +cwg cjm -cjm -cjm -cjm -cjm -cjm +cyl +cyM +czr +czP +cAj +eNc cjm cfN cfN cfN +fon +aaa cfN -qWo -cjm -cjm +cfN +cfN +cfN +aaa +aaa +aaa +aaa aht aaa +cfN +vHh +cfN +cfN +cfN +cfN +vHh +cfN +vHh +cfN +cfN +cfN +cfN aaa aaa aaa @@ -84217,32 +84798,7 @@ aaa aaa aaa aaa -cfN -cfN -cfN -cfN -cfN -cfN -cfN aaa -aaa -cfN -cfN -cfN -cfN -cfN -cfN -cfN -aaa -aaa -aaa -rmC -rmC -rmC -rmC -rmC -rmC -rmC rmC rmC rmC @@ -84445,51 +85001,51 @@ aaa bIZ cba cbT -bDi +bRD ozO -cwA -cwA -cwA -cwA vco -cwA -cwA -cwA -cwA +vco +vco +vco +vco +vco +cxe +cjm +cym xYV bNE -xYV +czP qWo lxI xVt -cjm +qGf aht -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +aht +fon aaa aaa cfN cfN -cfN -aaa aaa aaa aaa aaa aaa +nix +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN cfN cfN cfN cfN -aaa aaa aaa aaa @@ -84701,27 +85257,28 @@ bva aaa bIZ cbb -bDi +bSq ccO bva -cjm -cjm -xgh -xgh -cjm -cjm -cjm +xgh +xgh xgh xgh cjm cjm +cxz cjm +cyy +cyP +czt +czP cjm eNc -pia +cjm cjm aht aaa +fon aaa aaa aaa @@ -84730,23 +85287,22 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN +cfN aaa aaa aaa @@ -84958,42 +85514,28 @@ bIZ aaa bva bva -bNK +ckE bva bva aht aht -fon -fon aht aht +cjm +cqW +cxD +cjm +cyz +cyY +czB +cjm +cjm +eNc +tyL +cjm +aht +aaa mau -fon -fon -aht -aht -aht -cjm -cjm -cjm -cjm -aht -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -85002,8 +85544,22 @@ aaa aaa aaa aaa +cfN +cfN +cfN +cfN +cfN +cfN +cfN aaa aaa +cfN +cfN +cfN +cfN +cfN +cfN +cfN aaa aaa aaa @@ -85216,54 +85772,54 @@ aaa aaa bIZ csy -bQl -cqX -xNx +bIZ +aht +aaa +aaa +aaa +aaa +cjm ctS -cFB -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa +cxD +cjm +cjm +cjm +cjm +cjm +eNc +eNc +ukn +cjm +aht aaa fon -fon -aht -aht -nKo aaa aaa aaa -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cfN +cfN +cfN +aaa +aaa +aaa +aaa +aaa +aaa +cfN +cfN +cfN +cfN +aaa +aaa +aaa +aaa rmC rmC rmC @@ -85475,7 +86031,33 @@ bva bSq bva bva -rnE +aaa +aaa +aaa +aaa +cjm +cjm +cxL +vco +vco +vco +vco +vco +cAD +cjm +cjm +cjm +aht +aaa +fon +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -85495,32 +86077,6 @@ aaa aaa aaa aaa -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC rmC rmC rmC @@ -85731,15 +86287,41 @@ bXa bRD bWl cdE -bIZ -rnE +ckF +aaa +aaa +aaa +aaa +aaa +cjm +cjm +cjm +cjm +cjm +cjm +cjm +cAH +cjm +aht +aht +tRZ +aht +mau +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa -nge -adR -adR -adR aaa aaa aaa @@ -85752,32 +86334,6 @@ aaa aaa aaa aaa -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC rmC rmC rmC @@ -85988,15 +86544,41 @@ bva bva bva bva +ckW bva -ukn bIZ bva bva -aht -aht -aht -aht +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cAJ +pia +vOw +pia +vOw +pia +nUc +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -86009,32 +86591,6 @@ aaa aaa aaa aaa -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC rmC rmC rmC @@ -86258,6 +86814,7 @@ aht adR aaa aaa +cFB aaa aaa aaa @@ -86328,7 +86885,6 @@ rmC rmC rmC rmC -rmC "} (92,1,1) = {" rmC @@ -86515,15 +87071,15 @@ aht nge aaa aaa -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC -rmC +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa rmC rmC rmC @@ -97182,7 +97738,7 @@ aek aek aek aeA -adF +geL afk ael afS @@ -99555,8 +100111,8 @@ aVu bat aLf bcy -qAM -aEj +aKp +kKI aEj bgC bhi @@ -99811,8 +100367,8 @@ aYp aPY bau aLf -aFi -aMA +bHK +aIp beI beI bgD @@ -100582,7 +101138,7 @@ aYs aZk bax aLf -aFi +aMA bdC beI bfx @@ -105935,7 +106491,7 @@ aaa aaa aiT akn -ajv +bFE aaF aaU aaL @@ -106735,7 +107291,7 @@ aFi aJs aFi aFi -aFi +bHI aEj aaa aaa diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 44e97ef345..8864e41ae9 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -76,3 +76,8 @@ //Chemical reaction flags, for determining reaction specialties #define REACTION_CLEAR_IMPURE (1<<0) //Convert into impure/pure on reaction completion #define REACTION_CLEAR_INVERSE (1<<1) //Convert into inverse on reaction completion when purity is low enough + +//Chemical blacklists for smartdarts +GLOBAL_LIST_INIT(blacklisted_medchems, list( + /datum/reagent/medicine/morphine, /datum/reagent/medicine/haloperidol, //harmful chemicals in medicine + )) diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 56db868a21..2f5f4a3dd4 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -154,8 +154,8 @@ if(hud?.mymob && slot_id) var/obj/item/inv_item = hud.mymob.get_item_by_slot(slot_id) if(inv_item) - if(hud?.mymob.incapacitated()) - inv_item.apply_outline(COLOR_RED_GRAY) + if(hud?.mymob.incapacitated() || (slot_id in hud?.mymob.check_obscured_slots()) || !hud?.mymob.canUnEquip(inv_item)) + inv_item.apply_outline(_size = 3) else inv_item.apply_outline() diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 91e92feee9..c79f9523c0 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -108,6 +108,7 @@ SUBSYSTEM_DEF(air) setup_atmos_machinery() setup_pipenets() gas_reactions = init_gas_reactions() + should_do_equalization = CONFIG_GET(flag/atmos_equalize_enabled) auxtools_update_reactions() return ..() diff --git a/code/datums/actions/ninja.dm b/code/datums/actions/ninja.dm deleted file mode 100644 index c0314b9c48..0000000000 --- a/code/datums/actions/ninja.dm +++ /dev/null @@ -1,51 +0,0 @@ -/datum/action/item_action/initialize_ninja_suit - name = "Toggle ninja suit" - -/datum/action/item_action/ninjasmoke - name = "Smoke Bomb" - desc = "Blind your enemies momentarily with a well-placed smoke bomb." - button_icon_state = "smoke" - icon_icon = 'icons/mob/actions/actions_spells.dmi' - -/datum/action/item_action/ninjaboost - name = "Adrenaline Boost" - desc = "Inject a secret chemical that will counteract all movement-impairing effect." - button_icon_state = "repulse" - icon_icon = 'icons/mob/actions/actions_spells.dmi' - required_mobility_flags = NONE - -/datum/action/item_action/ninjapulse - name = "EM Burst (25E)" - desc = "Disable any nearby technology with an electro-magnetic pulse." - button_icon_state = "emp" - icon_icon = 'icons/mob/actions/actions_spells.dmi' - -/datum/action/item_action/ninjastar - name = "Create Throwing Stars (1E)" - desc = "Creates some throwing stars" - button_icon_state = "throwingstar" - icon_icon = 'icons/obj/items_and_weapons.dmi' - -/datum/action/item_action/ninjanet - name = "Energy Net (20E)" - desc = "Captures a fallen opponent in a net of energy. Will teleport them to a holding facility after 30 seconds." - button_icon_state = "energynet" - icon_icon = 'icons/effects/effects.dmi' - -/datum/action/item_action/ninja_sword_recall - name = "Recall Energy Katana (Variable Cost)" - desc = "Teleports the Energy Katana linked to this suit to its wearer, cost based on distance." - button_icon_state = "energy_katana" - icon_icon = 'icons/obj/items_and_weapons.dmi' - -/datum/action/item_action/ninja_stealth - name = "Toggle Stealth" - desc = "Toggles stealth mode on and off." - button_icon_state = "ninja_cloak" - icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' - -/datum/action/item_action/toggle_glove - name = "Toggle interaction" - desc = "Switch between normal interaction and drain mode." - button_icon_state = "s-ninjan" - icon_icon = 'icons/obj/clothing/gloves.dmi' diff --git a/code/datums/brain_damage/mild.dm b/code/datums/brain_damage/mild.dm index 92c4e55699..eb5e3c0735 100644 --- a/code/datums/brain_damage/mild.dm +++ b/code/datums/brain_damage/mild.dm @@ -264,3 +264,36 @@ speak_dejavu += speech_args[SPEECH_MESSAGE] else speak_dejavu += speech_args[SPEECH_MESSAGE] + +/datum/brain_trauma/mild/redacted + name = "Confidentiality Trauma" + desc = "Patient's language neurons seem to be warped in a strange manner, resulting in them being unable to speak properly." + scan_desc = "\[REDACTED]" + gain_text = "You feel the need to \[REDACTED]" + lose_text = "You no longer feel the need to \[REDACTED]." + +/datum/brain_trauma/mild/redacted/handle_speech(datum/source, list/speech_args) + var/message = speech_args[SPEECH_MESSAGE] + if(message) + var/list/message_split = splittext(message, " ") + var/list/new_message = list() + + for(var/word in message_split) + var/suffix = "" + var/suffix_foundon = 0 + for(var/potential_suffix in list("." , "," , ";" , "!" , ":" , "?")) + suffix_foundon = findtext(word, potential_suffix, -length(potential_suffix)) + if(suffix_foundon) + suffix = potential_suffix + break + + if(suffix_foundon) + word = copytext(word, 1, suffix_foundon) + + word = html_decode(word) + + if(prob(25)) + word = pick(list("\[REDACTED]", "\[CLASSIFIED]", "\[EXPUNGED]")) + new_message += word + suffix + message = jointext(new_message, " ") + speech_args[SPEECH_MESSAGE] = trim(message) diff --git a/code/game/area/areas/ruins/_ruins.dm b/code/game/area/areas/ruins/_ruins.dm index 17ba4f7721..6699e94129 100644 --- a/code/game/area/areas/ruins/_ruins.dm +++ b/code/game/area/areas/ruins/_ruins.dm @@ -8,6 +8,7 @@ dynamic_lighting = DYNAMIC_LIGHTING_FORCED ambientsounds = RUINS sound_environment = SOUND_ENVIRONMENT_STONEROOM + var/valid_territory = FALSE // hey so what if we did not allow things like cult summons to appear on ruins /area/ruin/unpowered diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index fcfddb2788..1c6c444fb4 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -160,12 +160,14 @@ If not set, defaults to check_completion instead. Set it. It's used by cryo. /datum/objective/proc/give_special_equipment(special_equipment) var/datum/mind/receiver = pick(get_owners()) + . = list() if(receiver && receiver.current) if(ishuman(receiver.current)) var/mob/living/carbon/human/H = receiver.current var/list/slots = list("backpack" = SLOT_IN_BACKPACK) for(var/eq_path in special_equipment) var/obj/O = new eq_path + . += O H.equip_in_one_of_slots(O, slots, critical = TRUE) /datum/objective/assassinate @@ -560,6 +562,7 @@ GLOBAL_LIST_EMPTY(possible_items) name = "steal" var/datum/objective_item/targetinfo = null //Save the chosen item datum so we can access it later. var/obj/item/steal_target = null //Needed for custom objectives (they're just items, not datums). + var/list/special_items_given = list() martyr_compatible = 0 /datum/objective/steal/get_target() @@ -571,6 +574,11 @@ GLOBAL_LIST_EMPTY(possible_items) for(var/I in subtypesof(/datum/objective_item/steal)) new I +/datum/objective/steal/Destroy(force, ...) + if(length(special_items_given)) + QDEL_LIST(special_items_given) + . = ..() + /datum/objective/steal/find_target(dupe_search_range, blacklist) var/list/datum/mind/owners = get_owners() var/approved_targets = list() @@ -589,7 +597,7 @@ GLOBAL_LIST_EMPTY(possible_items) targetinfo = item steal_target = targetinfo.targetitem explanation_text = "Steal [targetinfo.name]" - give_special_equipment(targetinfo.special_equipment) + special_items_given = give_special_equipment(targetinfo.special_equipment) return steal_target else explanation_text = "Free objective" @@ -1180,6 +1188,7 @@ GLOBAL_LIST_EMPTY(possible_sabotages) /datum/objective/sabotage name = "sabotage" var/datum/sabotage_objective/targetinfo = null //composition > inheritance. + var/list/special_items_given = list() /datum/objective/sabotage/get_target() return targetinfo.sabotage_type @@ -1190,6 +1199,11 @@ GLOBAL_LIST_EMPTY(possible_sabotages) for(var/I in subtypesof(/datum/sabotage_objective)) new I +/datum/objective/sabotage/Destroy() + if(length(special_items_given)) + QDEL_LIST(special_items_given) + . = ..() + /datum/objective/sabotage/find_target(dupe_search_range, blacklist) var/list/datum/mind/owners = get_owners() var/approved_targets = list() @@ -1207,7 +1221,7 @@ GLOBAL_LIST_EMPTY(possible_sabotages) if(sabo) targetinfo = sabo explanation_text = "[targetinfo.name]" - give_special_equipment(targetinfo.special_equipment) + special_items_given = give_special_equipment(targetinfo.special_equipment) return sabo else explanation_text = "Free objective" diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 133fec28b3..e05991dd8a 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -582,3 +582,14 @@ Class Procs: /obj/machinery/rust_heretic_act() take_damage(500, BRUTE, "melee", 1) + +/** + * Alerts the AI that a hack is in progress. + * + * Sends all AIs a message that a hack is occurring. Specifically used for space ninja tampering as this proc was originally in the ninja files. + * However, the proc may also be used elsewhere. + */ +/obj/machinery/proc/AI_notify_hack() + var/alertstr = "Network Alert: Hacking attempt detected[get_area(src)?" in [get_area_name(src, TRUE)]":". Unable to pinpoint location"]." + for(var/mob/living/silicon/ai/AI in GLOB.player_list) + to_chat(AI, alertstr) diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 0a529cd395..17e58f2a49 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -6,6 +6,7 @@ anchored = FALSE density = TRUE interaction_flags_machine = INTERACT_MACHINE_WIRES_IF_OPEN | INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN + use_power = NO_POWER_USE icon = 'icons/obj/atmos.dmi' icon_state = "sheater-off" name = "space heater" @@ -72,7 +73,7 @@ on = FALSE return PROCESS_KILL - if(cell && cell.charge > 0) + if(cell && cell.charge > 1 / efficiency) var/turf/L = loc PerformHeating(L) @@ -112,7 +113,9 @@ var/requiredPower = abs(env.return_temperature() - targetTemperature) * heat_capacity requiredPower = min(requiredPower, heatingPower) - if(requiredPower < 1) + if(requiredPower < 1 || !cell.use(requiredPower / efficiency)) + on = FALSE + update_icon() return var/deltaTemperature = requiredPower / heat_capacity @@ -121,7 +124,6 @@ if(deltaTemperature) env.set_temperature(env.return_temperature() + deltaTemperature) air_update_turf() - cell.use(requiredPower / efficiency) /obj/machinery/space_heater/RefreshParts() var/laser = 2 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 7177249dbc..0d6b1231fc 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -890,8 +890,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb var/user = usr tip_timer = addtimer(CALLBACK(src, .proc/openTip, location, control, params, user), timedelay, TIMER_STOPPABLE)//timer takes delay in deciseconds, but the pref is in milliseconds. dividing by 100 converts it. var/mob/living/L = usr - if(istype(L) && L.incapacitated()) - apply_outline(COLOR_RED_GRAY) + if(istype(L) && (L.incapacitated() || (current_equipped_slot in L.check_obscured_slots()) || !L.canUnEquip(src))) + apply_outline(_size = 3) else apply_outline() @@ -905,7 +905,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb closeToolTip(usr) remove_outline() -/obj/item/proc/apply_outline(colour = null) +/obj/item/proc/apply_outline(colour = null, _size=1) if(!(item_flags & IN_INVENTORY || item_flags & IN_STORAGE) || QDELETED(src) || isobserver(usr)) return if(usr.client) @@ -920,7 +920,7 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb colour = COLOR_BLUE_GRAY if(outline_filter) filters -= outline_filter - outline_filter = filter(type="outline", size=1, color=colour) + outline_filter = filter(type="outline", size=_size, color=colour) filters += outline_filter /obj/item/proc/remove_outline() diff --git a/code/game/objects/items/devices/dogborg_sleeper.dm b/code/game/objects/items/devices/dogborg_sleeper.dm index 01970ccdbd..977029cca3 100644 --- a/code/game/objects/items/devices/dogborg_sleeper.dm +++ b/code/game/objects/items/devices/dogborg_sleeper.dm @@ -172,7 +172,7 @@ /obj/item/dogborg/sleeper/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) if(!ui) - ui = new(user, src, "dogborg_sleeper", name, 375, 550) //UI DOES NOT EXIST + ui = new(user, src, "Sleeper", name) ui.open() /obj/item/dogborg/sleeper/ui_data() diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index e62b5421d4..1f19821df6 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -13,8 +13,8 @@ * Glass sheets */ GLOBAL_LIST_INIT(glass_recipes, list ( \ - new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \ + new/datum/stack_recipe("directional window", /obj/structure/window/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \ + new/datum/stack_recipe("fulltile window", /obj/structure/window/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE), \ null, \ new/datum/stack_recipe_list("glass working bases", list( \ new/datum/stack_recipe("chem dish", /obj/item/glasswork/glass_base/dish, 10), \ @@ -95,8 +95,8 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ GLOBAL_LIST_INIT(pglass_recipes, list ( \ - new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ + new/datum/stack_recipe("directional window", /obj/structure/window/plasma/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \ + new/datum/stack_recipe("fulltile window", /obj/structure/window/plasma/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE) \ )) /obj/item/stack/sheet/plasmaglass @@ -147,10 +147,10 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ * Reinforced glass sheets */ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ - new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, on_floor = TRUE, window_checks = TRUE), \ + new/datum/stack_recipe("windoor frame", /obj/structure/windoor_assembly, 5, time = 20, on_floor = TRUE, window_checks = TRUE), \ null, \ - new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ + new/datum/stack_recipe("directional reinforced window", /obj/structure/window/reinforced/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \ + new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/reinforced/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE) \ )) @@ -198,8 +198,8 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ . += GLOB.reinforced_glass_recipes GLOBAL_LIST_INIT(prglass_recipes, list ( \ - new/datum/stack_recipe("directional reinforced window", /obj/structure/window/plasma/reinforced/unanchored, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/plasma/reinforced/fulltile/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ + new/datum/stack_recipe("directional reinforced window", /obj/structure/window/plasma/reinforced/unanchored, time = 10, on_floor = TRUE, window_checks = TRUE), \ + new/datum/stack_recipe("fulltile reinforced window", /obj/structure/window/plasma/reinforced/fulltile/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE) \ )) /obj/item/stack/sheet/plasmarglass @@ -226,7 +226,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ S.efficiency *= 1.2 GLOBAL_LIST_INIT(titaniumglass_recipes, list( - new/datum/stack_recipe("shuttle window", /obj/structure/window/shuttle/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) + new/datum/stack_recipe("shuttle window", /obj/structure/window/shuttle/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE) )) /obj/item/stack/sheet/titaniumglass @@ -250,7 +250,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list( S.efficiency *= 1.5 GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( - new/datum/stack_recipe("plastitanium window", /obj/structure/window/plastitanium/unanchored, 2, time = 0, on_floor = TRUE, window_checks = TRUE) + new/datum/stack_recipe("plastitanium window", /obj/structure/window/plastitanium/unanchored, 2, time = 20, on_floor = TRUE, window_checks = TRUE) )) /obj/item/stack/sheet/plastitaniumglass diff --git a/code/game/objects/items/storage/backpack.dm b/code/game/objects/items/storage/backpack.dm index f10167890a..8a3eedca4b 100644 --- a/code/game/objects/items/storage/backpack.dm +++ b/code/game/objects/items/storage/backpack.dm @@ -259,8 +259,8 @@ /obj/item/storage/backpack/satchel/bone name = "bone satchel" desc = "A grotesque satchel made of sinews and bones." - icon = 'icons/obj/mining.dmi' - icon_state = "goliath_saddle" + icon_state = "satchel-bone" + item_state = "satchel-bone" slot_flags = ITEM_SLOT_BACK /obj/item/storage/backpack/satchel/bone/ComponentInitialize() diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index fe63e313de..902b1eaa13 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -615,9 +615,9 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 name = "throwing star" desc = "An ancient weapon still used to this day, due to its ease of lodging itself into its victim's body parts." icon_state = "throwingstar" - item_state = "eshield0" - lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' - righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' + item_state = "throwingstar" + lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' + righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' force = 2 throwforce = 10 //10 + 2 (WEIGHT_CLASS_SMALL) * 4 (EMBEDDED_IMPACT_PAIN_MULTIPLIER) = 18 damage on hit due to guaranteed embedding throw_speed = 4 @@ -630,8 +630,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 resistance_flags = FIRE_PROOF /obj/item/throwing_star/stamina - name = "shock throwing star" + name = "energy throwing star" desc = "An aerodynamic disc designed to cause excruciating pain when stuck inside fleeing targets, hopefully without causing fatal harm." + icon_state = "energystar" + item_state = "energystar" throwforce = 5 embedding = list("pain_chance" = 5, "embed_chance" = 100, "fall_chance" = 0, "jostle_chance" = 10, "pain_stam_pct" = 0.8, "jostle_pain_mult" = 3) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 2379ee22bc..6c43d61cce 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -266,8 +266,8 @@ return TRUE /datum/admins/proc/makeSpaceNinja() - new /datum/round_event/ghost_role/ninja() - return 1 + new /datum/round_event/ghost_role/space_ninja() + return TRUE // DEATH SQUADS /datum/admins/proc/makeDeathsquad() diff --git a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm index 4b88d203d6..1e8c7242ad 100644 --- a/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm +++ b/code/modules/antagonists/clockcult/clock_effects/clock_sigils.dm @@ -111,6 +111,19 @@ sigil_name = "Sigil of Submission" var/glow_type = /obj/effect/temp_visual/ratvar/sigil/submission +/obj/effect/clockwork/sigil/submission/Crossed(atom/movable/AM) + . = ..() + if(istype(AM, /obj/item/aicard)) + var/obj/item/aicard/cardy = AM + if(!cardy.AI) + return + var/mob/living/silicon/ai/aiconvert = cardy.AI + if(aiconvert.stat > stat_affected) + return + if(is_servant_of_ratvar(aiconvert) || !(aiconvert.mind || aiconvert.has_status_effect(STATUS_EFFECT_SIGILMARK))) + return + sigil_effects(aiconvert) + /obj/effect/clockwork/sigil/submission/sigil_effects(mob/living/L) var/turf/T = get_turf(src) var/has_sigil = FALSE diff --git a/code/modules/antagonists/ninja/ninja.dm b/code/modules/antagonists/ninja/ninja.dm deleted file mode 100644 index 414f7dd6b0..0000000000 --- a/code/modules/antagonists/ninja/ninja.dm +++ /dev/null @@ -1,146 +0,0 @@ -/datum/antagonist/ninja - name = "Ninja" - antagpanel_category = "Ninja" - job_rank = ROLE_NINJA - show_name_in_check_antagonists = TRUE - show_to_ghosts = TRUE - antag_moodlet = /datum/mood_event/focused - threat = 8 - var/helping_station = FALSE - var/give_objectives = TRUE - var/give_equipment = TRUE - -/datum/antagonist/ninja/threat() - return helping_station ? -(..()) : ..() - -/datum/antagonist/ninja/apply_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - update_ninja_icons_added(M) - -/datum/antagonist/ninja/remove_innate_effects(mob/living/mob_override) - var/mob/living/M = mob_override || owner.current - update_ninja_icons_removed(M) - -/datum/antagonist/ninja/proc/equip_space_ninja(mob/living/carbon/human/H = owner.current) - return H.equipOutfit(/datum/outfit/ninja) - -/datum/antagonist/ninja/proc/addMemories() - antag_memory += "I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!
" - antag_memory += "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by clicking the initialize UI button, to use abilities like stealth)!
" - antag_memory += "Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.
" - -/datum/antagonist/ninja/proc/addObjectives(quantity = 6) - var/list/possible_targets = list() - for(var/datum/mind/M in SSticker.minds) - if(M.current && M.current.stat != DEAD) - if(ishuman(M.current)) - if(M.special_role) - possible_targets[M] = 0 //bad-guy - else if(M.assigned_role in GLOB.command_positions) - possible_targets[M] = 1 //good-guy - - var/list/possible_objectives = list(1,2,3,4) - - while(objectives.len < quantity) - switch(pick_n_take(possible_objectives)) - if(1) //research - var/datum/objective/download/O = new /datum/objective/download() - O.owner = owner - O.gen_amount_goal() - objectives += O - - if(2) //steal - var/datum/objective/steal/special/O = new /datum/objective/steal/special() - O.owner = owner - O.find_target() - objectives += O - - if(3) //protect/kill - if(!possible_targets.len) continue - var/index = rand(1,possible_targets.len) - var/datum/mind/M = possible_targets[index] - var/is_bad_guy = possible_targets[M] - possible_targets.Cut(index,index+1) - - if(is_bad_guy ^ helping_station) //kill (good-ninja + bad-guy or bad-ninja + good-guy) - var/datum/objective/assassinate/once/O = new /datum/objective/assassinate() - O.owner = owner - O.target = M - O.explanation_text = "Slay \the [M.current.real_name], the [M.assigned_role]. You may let [M.p_they()] live, if they come back from death." - objectives += O - else //protect - var/datum/objective/protect/O = new /datum/objective/protect() - O.owner = owner - O.target = M - O.explanation_text = "Protect \the [M.current.real_name], the [M.assigned_role], from harm." - objectives += O - if(4) //flavor - var/datum/objective/flavor/O = helping_station ? new /datum/objective/flavor/ninja_helping : new /datum/objective/flavor/ninja_syndie - O.owner = owner - O.forge_objective() - objectives += O - else - break - var/datum/objective/O = new /datum/objective/survive() - O.owner = owner - objectives += O - -/proc/remove_ninja(mob/living/L) - if(!L || !L.mind) - return FALSE - var/datum/antagonist/datum = L.mind.has_antag_datum(/datum/antagonist/ninja) - datum.on_removal() - return TRUE - -/proc/is_ninja(mob/living/M) - return M && M.mind && M.mind.has_antag_datum(/datum/antagonist/ninja) - - -/datum/antagonist/ninja/greet() - SEND_SOUND(owner.current, sound('sound/effects/ninja_greeting.ogg')) - to_chat(owner.current, "I am an elite mercenary assassin of the mighty Spider Clan. A SPACE NINJA!") - to_chat(owner.current, "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!") - to_chat(owner.current, "Officially, [helping_station?"Nanotrasen":"The Syndicate"] are my employer.") - owner.announce_objectives() - return - -/datum/antagonist/ninja/on_gain() - if(give_objectives) - addObjectives() - addMemories() - if(give_equipment) - equip_space_ninja(owner.current) - . = ..() - -/datum/antagonist/ninja/admin_add(datum/mind/new_owner,mob/admin) - var/adj - switch(input("What kind of ninja?", "Ninja") as null|anything in list("Random","Syndicate","Nanotrasen","No objectives")) - if("Random") - helping_station = pick(TRUE,FALSE) - adj = "" - if("Syndicate") - helping_station = FALSE - adj = "syndie" - if("Nanotrasen") - helping_station = TRUE - adj = "friendly" - if("No objectives") - give_objectives = FALSE - adj = "objectiveless" - else - return - new_owner.assigned_role = ROLE_NINJA - new_owner.special_role = ROLE_NINJA - new_owner.add_antag_datum(src) - message_admins("[key_name_admin(admin)] has [adj] ninja'ed [new_owner.current].") - log_admin("[key_name(admin)] has [adj] ninja'ed [new_owner.current].") - -/datum/antagonist/ninja/proc/update_ninja_icons_added(var/mob/living/carbon/human/ninja) - var/datum/atom_hud/antag/ninjahud = GLOB.huds[ANTAG_HUD_NINJA] - ninjahud.join_hud(ninja) - set_antag_hud(ninja, "ninja") - -/datum/antagonist/ninja/proc/update_ninja_icons_removed(var/mob/living/carbon/human/ninja) - var/datum/atom_hud/antag/ninjahud = GLOB.huds[ANTAG_HUD_NINJA] - ninjahud.leave_hud(ninja) - set_antag_hud(ninja, null) diff --git a/code/modules/antagonists/nukeop/equipment/pinpointer.dm b/code/modules/antagonists/nukeop/equipment/pinpointer.dm index d3fe235f49..5b48951ed5 100644 --- a/code/modules/antagonists/nukeop/equipment/pinpointer.dm +++ b/code/modules/antagonists/nukeop/equipment/pinpointer.dm @@ -68,6 +68,11 @@ desc = "An integrated tracking device, jury-rigged to search for living Syndicate operatives." flags_1 = NONE +/obj/item/pinpointer/spider_cyborg // Cyborg pinpointers just look for a random space ninja. + name = "cyborg spider clan pinpointer" + desc = "An integrated tracking device, jury-rigged to search for living Spider Clan members." + flags_1 = NONE + /obj/item/pinpointer/syndicate_cyborg/Initialize() . = ..() @@ -85,3 +90,20 @@ if(closest_operative) target = closest_operative ..() + +/obj/item/pinpointer/spider_cyborg/Initialize() + . = ..() + ADD_TRAIT(src, TRAIT_NODROP, CYBORG_ITEM_TRAIT) + +/obj/item/pinpointer/spider_cyborg/scan_for_target() + target = null + var/list/possible_targets = list() + var/turf/here = get_turf(src) + for(var/V in get_antag_minds(/datum/antagonist/ninja)) + var/datum/mind/M = V + if(ishuman(M.current) && M.current.stat != DEAD) + possible_targets |= M.current + var/mob/living/closest_weeaboo = get_closest_atom(/mob/living/carbon/human, possible_targets, here) + if(closest_weeaboo) + target = closest_weeaboo + ..() diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm index 55d60006cf..09e97fba06 100644 --- a/code/modules/antagonists/slaughter/slaughter.dm +++ b/code/modules/antagonists/slaughter/slaughter.dm @@ -35,9 +35,9 @@ healable = 0 environment_smash = ENVIRONMENT_SMASH_STRUCTURES obj_damage = 50 - melee_damage_lower = 22.5 // reduced from 30 to 22.5 with wounds since they get big buffs to slicing wounds - melee_damage_upper = 22.5 - wound_bonus = -10 + melee_damage_lower = 30 // buffed back to 30, the wounds don't do much + melee_damage_upper = 30 + wound_bonus = 0 bare_wound_bonus = 0 sharpness = SHARP_EDGED see_in_dark = 8 @@ -49,17 +49,13 @@ Pulling a dead or unconscious mob while you enter a pool will pull them in with you, allowing you to feast and regain your health. \ You move quickly upon leaving a pool of blood, but the material world will soon sap your strength and leave you sluggish. \ You gain strength the more attacks you land on live humanoids, though this resets when you return to the blood zone. You can also \ - launch a devastating slam attack with ctrl+shift+click, capable of smashing bones in one strike." + launch a devastating slam attack, capable of smashing bones in one strike." loot = list(/obj/effect/decal/cleanable/blood, \ /obj/effect/decal/cleanable/blood/innards, \ /obj/item/organ/heart/demon) del_on_death = 1 deathmessage = "screams in anger as it collapses into a puddle of viscera!" - // How long it takes for the alt-click slam attack to come off cooldown - var/slam_cooldown_time = 45 SECONDS - // The actual instance var for the cooldown - var/slam_cooldown = 0 // How many times we have hit humanoid targets since we last bloodcrawled, scaling wounding power var/current_hitstreak = 0 // How much both our wound_bonus and bare_wound_bonus go up per hitstreak hit @@ -70,37 +66,56 @@ var/list/consumed_mobs = list() //buffs only happen when hearts are eaten, so this needs to be kept track separately var/consumed_buff = 0 + //slam mode for action button + var/slam_mode = FALSE + var/datum/action/cooldown/slam /mob/living/simple_animal/slaughter/Initialize() ..() var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new AddSpell(bloodspell) + slam = new /datum/action/cooldown/slam + slam.Grant(src) if(istype(loc, /obj/effect/dummy/phased_mob/slaughter)) bloodspell.phased = TRUE -/mob/living/simple_animal/slaughter/CtrlShiftClickOn(atom/A) - if(!isliving(A)) - return ..() - if(slam_cooldown + slam_cooldown_time > world.time) - to_chat(src, "Your slam ability is still on cooldown!") - return - if(!isopenturf(loc)) - to_chat(src, "You need to be on open flooring to do that!") - return +/datum/action/cooldown/slam + name = "Slaughter Slam" + desc = "Launch enemies and break bones in one strike." + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + background_icon_state = "bg_demon" + button_icon_state = "slam" + cooldown_time = 45 SECONDS - face_atom(A) - var/mob/living/victim = A - victim.take_bodypart_damage(brute=20, wound_bonus=wound_bonus) // don't worry, there's more punishment when they hit something - visible_message("[src] slams into [victim] with monstrous strength!", "You slam into [victim] with monstrous strength!", ignored_mobs=victim) - to_chat(victim, "[src] slams into you with monstrous strength, sending you flying like a ragdoll!") - var/turf/yeet_target = get_edge_target_turf(victim, dir) - victim.throw_at(yeet_target, 10, 5, src) - slam_cooldown = world.time - log_combat(src, victim, "slaughter slammed") +/datum/action/cooldown/slam/Trigger() + . = ..() + if(!.) + return + var/mob/living/simple_animal/slaughter/user = owner + user.slam_mode = !user.slam_mode + to_chat(user, user.slam_mode ? "Ready to slam!" : "Maybe not now.") /mob/living/simple_animal/slaughter/UnarmedAttack(atom/A, proximity) if(iscarbon(A)) var/mob/living/carbon/target = A + if(slam_mode) + if(!isopenturf(loc)) + to_chat(src, "You need to be on open flooring to do that!") + return + face_atom(A) + var/mob/living/victim = A + var/body_pick = pick(BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_ARM, BODY_ZONE_R_LEG) + var/datum/wound/blunt/critical/wound_major = new + var/obj/item/bodypart/body_wound = victim.get_bodypart(body_pick) + wound_major.apply_wound(body_wound) + visible_message("[src] slams into [victim] with monstrous strength!", "You slam into [victim] with monstrous strength!", ignored_mobs=victim) + to_chat(victim, "[src] slams into you with monstrous strength, sending you flying like a ragdoll!") + var/turf/yeet_target = get_edge_target_turf(victim, dir) + victim.throw_at(yeet_target, 10, 14, src) + slam_mode = FALSE + slam.StartCooldown() + log_combat(src, victim, "slaughter slammed") + if(target.stat != DEAD && target.mind && current_hitstreak < wound_bonus_hitstreak_max) current_hitstreak++ wound_bonus += wound_bonus_per_hit diff --git a/code/modules/antagonists/space_ninja/space_ninja.dm b/code/modules/antagonists/space_ninja/space_ninja.dm new file mode 100644 index 0000000000..1deb37eb56 --- /dev/null +++ b/code/modules/antagonists/space_ninja/space_ninja.dm @@ -0,0 +1,131 @@ +/datum/antagonist/ninja + name = "Space Ninja" + antagpanel_category = "Space Ninja" + job_rank = ROLE_NINJA + antag_hud_type = ANTAG_HUD_NINJA + antag_hud_name = "space_ninja" + show_name_in_check_antagonists = TRUE + show_to_ghosts = TRUE + antag_moodlet = /datum/mood_event/focused + ///Whether or not this ninja will obtain objectives + var/give_objectives = TRUE + ///Whether or not this ninja receives the standard equipment + var/give_equipment = TRUE + +/proc/is_ninja(mob/living/M) + return M && M.mind && M.mind.has_antag_datum(/datum/antagonist/ninja) + +/datum/antagonist/ninja/apply_innate_effects(mob/living/mob_override) + var/mob/living/ninja = mob_override || owner.current + add_antag_hud(antag_hud_type, antag_hud_name, ninja) + +/datum/antagonist/ninja/remove_innate_effects(mob/living/mob_override) + var/mob/living/ninja = mob_override || owner.current + remove_antag_hud(antag_hud_type, ninja) + +/** + * Proc that equips the space ninja outfit on a given individual. By default this is the owner of the antagonist datum. + * + * Proc that equips the space ninja outfit on a given individual. By default this is the owner of the antagonist datum. + * Arguments: + * * ninja - The human to receive the gear + * * Returns a proc call on the given human which will equip them with all the gear. + */ +/datum/antagonist/ninja/proc/equip_space_ninja(mob/living/carbon/human/ninja = owner.current) + return ninja.equipOutfit(/datum/outfit/ninja) + +/** + * Proc that adds the proper memories to the antag datum + * + * Proc that adds the ninja starting memories to the owner of the antagonist datum. + */ +/datum/antagonist/ninja/proc/addMemories() + antag_memory += "I am an elite mercenary of the mighty Spider Clan. A SPACE NINJA!
" + antag_memory += "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by clicking the initialize UI button, to use abilities like stealth)!
" + +/datum/objective/cyborg_hijack + explanation_text = "Use your gloves to convert at least one cyborg to aide you in sabotaging the station." + +/datum/objective/door_jack + ///How many doors that need to be opened using the gloves to pass the objective + var/doors_required = 0 + +/datum/objective/plant_explosive + var/area/detonation_location + +/datum/objective/security_scramble + explanation_text = "Use your gloves on a security console to set everyone to arrest at least once. Note that the AI will be alerted once you begin!" + +/datum/objective/terror_message + explanation_text = "Use your gloves on a communication console in order to bring another threat to the station. Note that the AI will be alerted once you begin!" + +/** + * Proc that adds all the ninja's objectives to the antag datum. + * + * Proc that adds all the ninja's objectives to the antag datum. Called when the datum is gained. + */ +/datum/antagonist/ninja/proc/addObjectives() + //Cyborg Hijack: Flag set to complete in the DrainAct in ninjaDrainAct.dm + var/datum/objective/hijack = new /datum/objective/cyborg_hijack() + objectives += hijack + + //Research stealing + var/datum/objective/download/research = new /datum/objective/download() + research.owner = owner + research.gen_amount_goal() + objectives += research + + //Door jacks, flag will be set to complete on when the last door is hijacked + var/datum/objective/door_jack/doorobjective = new /datum/objective/door_jack() + doorobjective.doors_required = rand(15,40) + doorobjective.explanation_text = "Use your gloves to doorjack [doorobjective.doors_required] airlocks on the station." + objectives += doorobjective + + //Explosive plant, the bomb will register its completion on priming + var/datum/objective/plant_explosive/bombobjective = new /datum/objective/plant_explosive() + for(var/sanity in 1 to 100) // 100 checks at most. + var/area/selected_area = pick(GLOB.sortedAreas) + if(!is_station_level(selected_area.z) || !selected_area.area_flags == VALID_TERRITORY) + continue + bombobjective.detonation_location = selected_area + break + if(bombobjective.detonation_location) + bombobjective.explanation_text = "Detonate your starter bomb in [bombobjective.detonation_location]. Note that the bomb will not work anywhere else!" + objectives += bombobjective + + //Security Scramble, set to complete upon using your gloves on a security console + var/datum/objective/securityobjective = new /datum/objective/security_scramble() + objectives += securityobjective + + //Message of Terror, set to complete upon using your gloves a communication console + var/datum/objective/communicationobjective = new /datum/objective/terror_message() + objectives += communicationobjective + + //Survival until end + var/datum/objective/survival = new /datum/objective/survive() + survival.owner = owner + objectives += survival + +/datum/antagonist/ninja/greet() + SEND_SOUND(owner.current, sound('sound/effects/ninja_greeting.ogg')) + to_chat(owner.current, "I am an elite mercenary of the mighty Spider Clan. A SPACE NINJA!") + to_chat(owner.current, "Surprise is my weapon. Shadows are my armor. Without them, I am nothing. (//initialize your suit by right clicking on it, to use abilities like stealth)!") + owner.announce_objectives() + +/datum/antagonist/ninja/on_gain() + if(give_objectives) + addObjectives() + addMemories() + if(give_equipment) + equip_space_ninja(owner.current) + + owner.current.mind.assigned_role = ROLE_NINJA + owner.current.mind.special_role = ROLE_NINJA + return ..() + +/datum/antagonist/ninja/admin_add(datum/mind/new_owner,mob/admin) + new_owner.assigned_role = ROLE_NINJA + new_owner.special_role = ROLE_NINJA + new_owner.add_antag_datum(src) + message_admins("[key_name_admin(admin)] has ninja'ed [key_name_admin(new_owner)].") + log_admin("[key_name(admin)] has ninja'ed [key_name(new_owner)].") diff --git a/code/modules/clothing/glasses/phantomthief.dm b/code/modules/clothing/glasses/phantomthief.dm index 6d209ec695..ba3ea2830e 100644 --- a/code/modules/clothing/glasses/phantomthief.dm +++ b/code/modules/clothing/glasses/phantomthief.dm @@ -3,8 +3,8 @@ desc = "A cheap, Syndicate-branded paper face mask. They'll never see it coming." mob_overlay_icon = 'icons/mob/clothing/mask.dmi' icon = 'icons/obj/clothing/masks.dmi' - icon_state = "s-ninja" - item_state = "s-ninja" + icon_state = "ninjaOLD" + item_state = "ninjaOLD" /obj/item/clothing/glasses/phantomthief/ComponentInitialize() . = ..() diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 354d488703..35cb2fa1e5 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -446,6 +446,42 @@ icon_state = "flannel_brown" item_state = "flannel_brown" +/obj/item/clothing/suit/jacket/purplehoodie + name = "purple hoodie" + desc = "A soft purple hoodie with a TailorCo brand on the tag." + icon_state = "purplehoodie" + item_state = "purplehoodie" + +/obj/item/clothing/suit/jacket/bluehoodie + name = "blue hoodie" + desc = "A soft blue hoodie with a TailorCo brand on the tag." + icon_state = "bluehoodie" + item_state = "bluehoodie" + +/obj/item/clothing/suit/jacket/heartcoat + name = "heart coat" + desc = "A soft winter coat with a TailorCo brand on the tag." + icon_state = "heartcoat" + item_state = "heartcoat" + +/obj/item/clothing/suit/jacket/gothiccoat + name = "long black jacket" + desc = "A rugged looking coat with a TailorCo brand on the tag." + icon_state = "gothic_coat" + item_state = "gothic_coat" + +/obj/item/clothing/suit/jacket/gothicshirt + name = "black shirt with cuffs" + desc = "A black shirt with a collar and cuffs in a gothic style. A TailorCo brand is listed on the tag." + icon_state = "gothic_shirt" + item_state = "gothic_shirt" + +/obj/item/clothing/suit/jacket/gothicshirtcross + name = "elegant black shirt" + desc = "A black shirt with finely woven cross on the back. A TailorCo brand is listed on the tag." + icon_state = "gothic_shirtcross" + item_state = "gothic_shirtcross" + /obj/item/clothing/suit/jacket/leather name = "leather jacket" desc = "Pompadour not included." diff --git a/code/modules/events/cat_surgeon.dm b/code/modules/events/cat_surgeon.dm index 2d5651b9b1..76c72a7ec2 100644 --- a/code/modules/events/cat_surgeon.dm +++ b/code/modules/events/cat_surgeon.dm @@ -10,8 +10,28 @@ /datum/round_event/cat_surgeon/start() var/list/spawn_locs = list() + var/list/unsafe_spawn_locs = list() for(var/X in GLOB.xeno_spawn) - spawn_locs += X + if(!isfloorturf(X)) + unsafe_spawn_locs += X + continue + var/turf/open/floor/F = X + var/datum/gas_mixture/A = F.air + var/oxy_moles = A.get_moles(GAS_O2) + if((oxy_moles < 16 || oxy_moles > 50) || A.get_moles(GAS_PLASMA) || A.get_moles(GAS_CO2) >= 10) + unsafe_spawn_locs += F + continue + if((A.return_temperature() <= 270) || (A.return_temperature() >= 360)) + unsafe_spawn_locs += F + continue + var/pressure = A.return_pressure() + if((pressure <= 20) || (pressure >= 550)) + unsafe_spawn_locs += F + continue + spawn_locs += F + + if(!spawn_locs.len) + spawn_locs += unsafe_spawn_locs if(!spawn_locs.len) message_admins("No valid spawn locations found, aborting...") diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm index dc0b07b464..0801e38507 100644 --- a/code/modules/events/mass_hallucination.dm +++ b/code/modules/events/mass_hallucination.dm @@ -9,7 +9,7 @@ /datum/round_event_control/mass_hallucination/admin_setup() if(!check_rights(R_FUN)) return - + forced_hallucination = input(usr, "Choose the hallucination to apply","Send Hallucination") as null|anything in subtypesof(/datum/hallucination) /datum/round_event/mass_hallucination @@ -26,7 +26,7 @@ switch(rand(1,4)) if(1) //same sound for everyone - var/sound = pick("airlock","airlock_pry","console","explosion","far_explosion","mech","glass","alarm","beepsky","mech","wall_decon","door_hack","tesla") + var/sound = pick("airlock","airlock_pry","console","explosion","far_explosion","mech","glass","alarm","beepsky","mech","wall_decon","door_hack","tesla","seth") for(var/mob/living/carbon/C in GLOB.alive_mob_list) new /datum/hallucination/sounds(C, TRUE, sound) if(2) diff --git a/code/modules/events/space_ninja.dm b/code/modules/events/space_ninja.dm new file mode 100644 index 0000000000..0a24fecd44 --- /dev/null +++ b/code/modules/events/space_ninja.dm @@ -0,0 +1,51 @@ +/datum/round_event_control/space_ninja + name = "Spawn Space Ninja" + typepath = /datum/round_event/ghost_role/space_ninja + max_occurrences = 1 + weight = 10 + earliest_start = 20 MINUTES + min_players = 15 + +/datum/round_event/ghost_role/space_ninja + minimum_required = 1 + role_name = "Space Ninja" + +/datum/round_event/ghost_role/space_ninja/spawn_role() + var/list/spawn_locs = list() + for(var/obj/effect/landmark/carpspawn/carp_spawn in GLOB.landmarks_list) + if(!isturf(carp_spawn.loc)) + stack_trace("Carp spawn found not on a turf: [carp_spawn.type] on [isnull(carp_spawn.loc) ? "null" : carp_spawn.loc.type]") + continue + spawn_locs += carp_spawn.loc + if(!spawn_locs.len) + message_admins("No valid spawn locations found, aborting...") + return MAP_ERROR + + //selecting a candidate player + var/list/candidates = get_candidates(ROLE_NINJA, null, ROLE_NINJA) + if(!candidates.len) + return NOT_ENOUGH_PLAYERS + + var/mob/dead/selected_candidate = pick(candidates) + var/key = selected_candidate.key + + //spawn the ninja and assign the candidate + var/mob/living/carbon/human/ninja = create_space_ninja(pick(spawn_locs)) + ninja.key = key + ninja.mind.add_antag_datum(/datum/antagonist/ninja) + spawned_mobs += ninja + message_admins("[ADMIN_LOOKUPFLW(ninja)] has been made into a space ninja by an event.") + log_game("[key_name(ninja)] was spawned as a ninja by an event.") + + return SUCCESSFUL_SPAWN + + +//=======//NINJA CREATION PROCS//=======// + +/proc/create_space_ninja(spawn_loc) + var/mob/living/carbon/human/new_ninja = new(spawn_loc) + var/datum/preferences/random_human_options = new()//Randomize appearance for the ninja. + random_human_options.real_name = "[pick(GLOB.ninja_titles)] [pick(GLOB.ninja_names)]" + random_human_options.copy_to(new_ninja) + new_ninja.dna.update_dna_identity() + return new_ninja diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm index adbf48470d..5d84901e7f 100644 --- a/code/modules/flufftext/Hallucination.dm +++ b/code/modules/flufftext/Hallucination.dm @@ -778,7 +778,7 @@ GLOBAL_LIST_INIT(hallucination_list, list( ..() var/turf/source = random_far_turf() if(!sound_type) - sound_type = pick("airlock","airlock pry","console","flash","explosion","far explosion","mech","glass","alarm","beepsky","mech","wall decon","door hack") + sound_type = pick("airlock","airlock pry","console","flash","explosion","far explosion","mech","glass","alarm","beepsky","mech","wall decon","door hack","seth") feedback_details += "Type: [sound_type]" //Strange audio switch(sound_type) @@ -827,6 +827,9 @@ GLOBAL_LIST_INIT(hallucination_list, list( target.playsound_local(source, 'sound/items/screwdriver.ogg', 50, 1) sleep(rand(40,80)) target.playsound_local(source, 'sound/machines/airlockforced.ogg', 30, 1) + //funny announcement man + if("seth") + target.playsound_local(source,'sound/misc/seth.ogg', 50, 1) qdel(src) /datum/hallucination/weird_sounds diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 9c82cf34d3..38e4fcc6ff 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -226,7 +226,7 @@ var/turf/open/O = loc if(O.air) var/datum/gas_mixture/loc_air = O.air - if(loc_air.get_moles(GAS_O2) > 13) + if(loc_air.get_moles(GAS_O2) > 3) return TRUE return FALSE diff --git a/code/modules/integrated_electronics/subtypes/access.dm b/code/modules/integrated_electronics/subtypes/access.dm index 5e03ea1394..ddfed3753b 100644 --- a/code/modules/integrated_electronics/subtypes/access.dm +++ b/code/modules/integrated_electronics/subtypes/access.dm @@ -8,7 +8,6 @@ outputs = list( "registered name" = IC_PINTYPE_STRING, "assignment" = IC_PINTYPE_STRING, - "passkey" = IC_PINTYPE_STRING ) activators = list( "on read" = IC_PINTYPE_PULSE_OUT @@ -17,7 +16,6 @@ /obj/item/integrated_circuit/input/card_reader/attackby_react(obj/item/I, mob/living/user, intent) var/obj/item/card/id/card = I.GetID() var/list/access = I.GetAccess() - var/passkey = strtohex(XorEncrypt(json_encode(access), SScircuit.cipherkey)) if(assembly) assembly.access_card.access |= access @@ -33,8 +31,6 @@ else return FALSE - set_pin_data(IC_OUTPUT, 3, passkey) - push_data() activate_pin(1) return TRUE diff --git a/code/modules/jobs/job_types/prisoner.dm b/code/modules/jobs/job_types/prisoner.dm index 13c18c21ca..2ad2f32537 100644 --- a/code/modules/jobs/job_types/prisoner.dm +++ b/code/modules/jobs/job_types/prisoner.dm @@ -4,7 +4,7 @@ datum/job/prisoner department_head = list("The Security Team") department_flag = CIVILIAN faction = "Station" - total_positions = 2 + total_positions = 0 spawn_positions = 2 supervisors = "the security team" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index e3af31ae96..d13a0f1149 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -82,34 +82,6 @@ . += "" . += "Chemical Storage: [changeling.chem_charges]/[changeling.chem_storage]" . += "Absorbed DNA: [changeling.absorbedcount]" - //NINJACODE - if(istype(wear_suit, /obj/item/clothing/suit/space/space_ninja)) //Only display if actually a ninja. - var/obj/item/clothing/suit/space/space_ninja/SN = wear_suit - . += "SpiderOS Status: [SN.s_initialized ? "Initialized" : "Disabled"]" - . += "Current Time: [STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)]" - if(SN.s_initialized) - //Suit gear - . += "Energy Charge: [round(SN.cell.charge/100)]%" - . += "Smoke Bombs: \Roman [SN.s_bombs]" - //Ninja status - . += "Fingerprints: [md5(dna.uni_identity)]" - . += "Unique Identity: [dna.unique_enzymes]" - . += "Overall Status: [stat > 1 ? "dead" : "[health]% healthy"]" - . += "Nutrition Status: [nutrition]" - . += "Oxygen Loss: [getOxyLoss()]" - . += "Toxin Levels: [getToxLoss()]" - . += "Burn Severity: [getFireLoss()]" - . += "Brute Trauma: [getBruteLoss()]" - . += "Radiation Levels: [radiation] rad" - . += "Body Temperature: [bodytemperature-T0C] degrees C ([bodytemperature*1.8-459.67] degrees F)" - - //Diseases - if(length(diseases)) - . += "Viruses:" - for(var/thing in diseases) - var/datum/disease/D = thing - . += "* [D.name], Type: [D.spread_text], Stage: [D.stage]/[D.max_stages], Possible Cure: [D.cure_text]" - /mob/living/carbon/human/show_inv(mob/user) user.set_machine(src) diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index fba6ecd40c..ac25c9e021 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -807,11 +807,11 @@ /datum/species/golem/plastic/on_species_gain(mob/living/carbon/C, datum/species/old_species) . = ..() - C.AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS) + C.AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_NUDE) /datum/species/golem/plastic/on_species_loss(mob/living/carbon/C) . = ..() - C.RemoveElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS) + C.RemoveElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_NUDE) /datum/species/golem/bronze name = "Bronze Golem" diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 4e33fba208..d19ef4c16e 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -322,6 +322,17 @@ else to_chat(user, "Encryption Key ports not configured.") +/obj/item/paicard/emag_act(mob/user) // Emag to wipe the master DNA and supplemental directive + . = ..() + if(!pai) + return + to_chat(user, "You override [pai]'s directive system, clearing its master string and supplied directive.") + to_chat(pai, "Warning: System override detected, check directive sub-system for any changes.'") + log_game("[key_name(user)] emagged [key_name(pai)], wiping their master DNA and supplemental directive.") + pai.master = null + pai.master_dna = null + pai.laws.supplied[1] = "None." // Sets supplemental directive to this + /mob/living/silicon/pai/proc/short_radio() if(radio_short_timerid) deltimer(radio_short_timerid) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 3032011a1a..bd1c260bf5 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -811,6 +811,32 @@ Help the operatives secure the disk at all costs!" set_module = /obj/item/robot_module/saboteur +/mob/living/silicon/robot/modules/syndicate/spider// used for space ninja and their cyborg hacking special objective + bubble_icon = "spider" + playstyle_string = "You are a Spider Clan assault cyborg!
\ + You are armed with powerful offensive tools to aid you in your mission: obey your ninja masters by any means necessary. \ + Your cyborg LMG will slowly produce ammunition from your power supply, and your pinpointer will find and locate fellow members of the Spider Clan." + set_module = /obj/item/robot_module/syndicate/spider + +/mob/living/silicon/robot/modules/syndicate_medical/spider// ditto + bubble_icon = "spider" + var/playstyle_string = "You are a Spider Clan medical cyborg!
\ + You are armed with powerful medical tools to aid you in your mission: obey your ninja masters by any means necessary. \ + Your hypospray will produce Restorative Nanites, a wonder-drug that will heal most types of bodily damages, including clone and brain damage. It also produces morphine for offense. \ + Your defibrillator paddles can revive allies through their hardsuits, or can be used on harm intent to shock enemies! \ + Your energy saw functions as a circular saw, but can be activated to deal more damage, and your pinpointer will find and locate fellow members of the Spider Clan." + set_module = /obj/item/robot_module/syndicate_medical/spider + +/mob/living/silicon/robot/modules/saboteur/spider// ditto + bubble_icon = "spider" + var/playstyle_string = "You are a Spider Clan saboteur cyborg!
\ + You are armed with robust engineering tools to aid you in your mission: obey your ninja masters by any means necessary. \ + Your destination tagger will allow you to stealthily traverse the disposal network across the station. \ + Your welder will can be used to repair yourself or any allied silicon units, while serving as an impromptu melee weapon. \ + Your cyborg chameleon projector allows you to assume the appearance and registered name of a Nanotrasen engineering borg, and undertake covert actions on the station, \ + be aware that almost any physical contact or incidental damage will break your camouflage." + set_module = /obj/item/robot_module/saboteur/spider + /mob/living/silicon/robot/proc/notify_ai(notifytype, oldname, newname) if(!connected_ai) return diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 7ecc714b56..b9c6f4e2c4 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -1034,6 +1034,7 @@ /obj/item/extinguisher/mini, /obj/item/crowbar/cyborg, /obj/item/reagent_containers/borghypo/syndicate, + /obj/item/gripper/medical, /obj/item/shockpaddles/syndicate, /obj/item/healthanalyzer/advanced, /obj/item/surgical_drapes/advanced, @@ -1147,3 +1148,73 @@ max_energy = 30 recharge_rate = 1 name = "Wrapping Paper Storage" + +/obj/item/robot_module/syndicate/spider// used for space ninja and their cyborg hacking special objective + name = "Spider Assault" + basic_modules = list( + /obj/item/assembly/flash/cyborg, + /obj/item/extinguisher/mini, + /obj/item/crowbar/cyborg, + /obj/item/melee/transforming/energy/sword/cyborg, + /obj/item/gun/energy/printer, + /obj/item/pinpointer/spider_cyborg) + + cyborg_base_icon = "spider_sec" + +/obj/item/robot_module/syndicate_medical/spider// ditto + name = "Spider Medical" + basic_modules = list( + /obj/item/assembly/flash/cyborg, + /obj/item/extinguisher/mini, + /obj/item/crowbar/cyborg, + /obj/item/reagent_containers/borghypo/syndicate, + /obj/item/gripper/medical, + /obj/item/shockpaddles/syndicate, + /obj/item/healthanalyzer/advanced, + /obj/item/surgical_drapes/advanced, + /obj/item/retractor, + /obj/item/hemostat, + /obj/item/cautery, + /obj/item/surgicaldrill, + /obj/item/scalpel, + /obj/item/bonesetter, + /obj/item/stack/medical/bone_gel, + /obj/item/melee/transforming/energy/sword/cyborg/saw, + /obj/item/roller/robo, + /obj/item/stack/medical/gauze/cyborg, + /obj/item/gun/medbeam, + /obj/item/organ_storage, + /obj/item/pinpointer/spider_cyborg) + + cyborg_base_icon = "spider_medical" + +/obj/item/robot_module/saboteur/spider// ditto + name = "Spider Saboteur" + basic_modules = list( + /obj/item/assembly/flash/cyborg, + /obj/item/borg/sight/thermal, + /obj/item/construction/rcd/borg/syndicate, + /obj/item/pipe_dispenser, + /obj/item/restraints/handcuffs/cable/zipties, + /obj/item/extinguisher, + /obj/item/weldingtool/largetank/cyborg, + /obj/item/screwdriver/nuke, + /obj/item/wrench/cyborg, + /obj/item/crowbar/cyborg, + /obj/item/wirecutters/cyborg, + /obj/item/multitool/cyborg, + /obj/item/storage/part_replacer/cyborg, + /obj/item/holosign_creator/atmos, + /obj/item/gripper, + /obj/item/lightreplacer/cyborg, + /obj/item/stack/sheet/metal/cyborg, + /obj/item/stack/sheet/glass/cyborg, + /obj/item/stack/sheet/rglass/cyborg, + /obj/item/stack/rods/cyborg, + /obj/item/stack/tile/plasteel/cyborg, + /obj/item/destTagger/borg, + /obj/item/stack/cable_coil/cyborg, + /obj/item/borg_chameleon, + /obj/item/pinpointer/spider_cyborg) + + cyborg_base_icon = "spider_engi" diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 9fd3794520..66b4bd5e73 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -99,15 +99,17 @@ evolve() return for(var/obj/item/trash/garbage in range(1, src)) - if(prob(2)) - qdel(garbage) - evolve_plague() - return + if(is_station_level(z)) + if(prob(2)) + qdel(garbage) + evolve_plague() + return for(var/obj/effect/decal/cleanable/blood/gibs/leftovers in range(1, src)) - if(prob(2)) - qdel(leftovers) - evolve_plague() - return + if(is_station_level(z)) + if(prob(2)) + qdel(leftovers) + evolve_plague() + return /** *Checks the mouse cap, if it's above the cap, doesn't spawn a mouse. If below, spawns a mouse and adds it to cheeserats. @@ -202,4 +204,5 @@ GLOBAL_VAR(tom_existed) /mob/living/simple_animal/mouse/handle_environment(datum/gas_mixture/environment) . = ..() - miasma() + if(is_station_level(z)) + miasma() diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index b85c0ee643..ec11a3e83e 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -60,6 +60,7 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians var/magic_fluff_string = "You draw the Coder, symbolizing bugs and errors. This shouldn't happen! Submit a bug report!" var/tech_fluff_string = "BOOT SEQUENCE COMPLETE. ERROR MODULE LOADED. THIS SHOULDN'T HAPPEN. Submit a bug report!" var/carp_fluff_string = "CARP CARP CARP SOME SORT OF HORRIFIC BUG BLAME THE CODERS CARP CARP CARP" + var/customized /// sigh, fine. var/datum/song/holoparasite/music_datum @@ -142,11 +143,13 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians to_chat(src, "You are capable of manifesting or recalling to your master with the buttons on your HUD. You will also find a button to communicate with [summoner.p_them()] privately there.") to_chat(src, "While personally invincible, you will die if [summoner.real_name] does, and any damage dealt to you will have a portion passed on to [summoner.p_them()] as you feed upon [summoner.p_them()] to sustain yourself.") to_chat(src, playstyle_string) - guardiancustomize() + if(!customized) + guardiancustomize() /mob/living/simple_animal/hostile/guardian/proc/guardiancustomize() guardianrecolor() guardianrename() + customized = TRUE /mob/living/simple_animal/hostile/guardian/proc/guardianrecolor() guardiancolor = input(src,"What would you like your color to be?","Choose Your Color","#ffffff") as color|null diff --git a/code/modules/mob/living/simple_animal/hostile/plaguerat.dm b/code/modules/mob/living/simple_animal/hostile/plaguerat.dm index 331dc1eb75..2b92894317 100644 --- a/code/modules/mob/living/simple_animal/hostile/plaguerat.dm +++ b/code/modules/mob/living/simple_animal/hostile/plaguerat.dm @@ -1,3 +1,6 @@ +#define RAT_VENT_CHANCE 1.75 +GLOBAL_LIST_EMPTY(plague_rats) + /mob/living/simple_animal/hostile/plaguerat name = "plague rat" desc = "A large decaying rat. It spreads its filth and emits a putrid odor to create more of its kind." @@ -11,8 +14,8 @@ gender = NEUTER speak_chance = 1 turns_per_move = 5 - maxHealth = 15 - health = 15 + maxHealth = 100 + health = 100 see_in_dark = 6 obj_damage = 10 butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab = 1) @@ -22,8 +25,8 @@ response_disarm_simple = "skoff at" response_harm_continuous = "slashes" response_harm_simple = "slash" - melee_damage_lower = 5 - melee_damage_upper = 7 + melee_damage_lower = 6 + melee_damage_upper = 8 attack_verb_continuous = "slashes" attack_verb_simple = "slash" attack_sound = 'sound/weapons/punch1.ogg' @@ -34,27 +37,69 @@ mob_biotypes = MOB_ORGANIC|MOB_BEAST var/datum/action/cooldown/scavenge var/last_spawn_time = 0 - ///Number assigned to rats and mice, checked when determining infighting. + var/in_vent = FALSE + var/min_next_vent = 0 + var/obj/machinery/atmospherics/components/unary/entry_vent + var/obj/machinery/atmospherics/components/unary/exit_vent /mob/living/simple_animal/hostile/plaguerat/Initialize() . = ..() - SSmobs.cheeserats += src + GLOB.plague_rats += src AddComponent(/datum/component/swarming) AddElement(/datum/element/ventcrawling, given_tier = VENTCRAWLER_ALWAYS) scavenge = new /datum/action/cooldown/scavenge scavenge.Grant(src) /mob/living/simple_animal/hostile/plaguerat/Destroy() - SSmobs.cheeserats -= src + GLOB.plague_rats -= src return ..() +/mob/living/simple_animal/hostile/plaguerat/Life(seconds, times_fired) + . = ..() + //Don't try to path to one target for too long. If it takes longer than a certain amount of time, assume it can't be reached and find a new one + //Literally only here to prevent farming and that's it. + if(!client) //don't do this shit if there's a client, they're capable of ventcrawling manually + if(in_vent) + target = null + if(entry_vent && get_dist(src, entry_vent) <= 1) + var/list/vents = list() + var/datum/pipeline/entry_vent_parent = entry_vent.parents[1] + for(var/obj/machinery/atmospherics/components/unary/temp_vent in entry_vent_parent.other_atmosmch) + vents += temp_vent + if(!vents.len) + entry_vent = null + in_vent = FALSE + return + exit_vent = pick(vents) + visible_message("[src] crawls into the ventilation ducts!") + + loc = exit_vent + var/travel_time = round(get_dist(loc, exit_vent.loc) / 2) + addtimer(CALLBACK(src, .proc/exit_vents), travel_time) //come out at exit vent in 2 to 20 seconds + + + if(world.time > min_next_vent && !entry_vent && !in_vent && prob(RAT_VENT_CHANCE)) //small chance to go into a vent + for(var/obj/machinery/atmospherics/components/unary/v in view(7,src)) + if(!v.welded) + entry_vent = v + in_vent = TRUE + walk_to(src, entry_vent) + break + /mob/living/simple_animal/hostile/plaguerat/BiologicalLife(seconds, times_fired) if(!(. = ..())) return if(isopenturf(loc)) var/turf/open/T = src.loc + var/datum/gas_mixture/stank = new + var/miasma_moles = T.air.get_moles(GAS_MIASMA) + stank.set_moles(GAS_MIASMA,5) + stank.set_temperature(BODYTEMP_NORMAL) if(T.air) - T.atmos_spawn_air("miasma=5;TEMP=293.15") + if(miasma_moles < 200) + T.assume_air(stank) + T.air_update_turf() + if(prob(40)) scavenge.Trigger() if(prob(50)) @@ -66,9 +111,10 @@ playsound(src, 'sound/effects/sparks2.ogg', 100, TRUE) C.deconstruct() for(var/obj/O in range(1,src)) - if(istype(O, /obj/item/trash) || istype(O, /obj/effect/decal/cleanable/blood/gibs)) + if((world.time - last_spawn_time) > 10 SECONDS && istype(O, /obj/item/trash) || istype(O, /obj/effect/decal/cleanable/blood/gibs)) qdel(O) be_fruitful() + last_spawn_time = world.time /mob/living/simple_animal/hostile/plaguerat/CanAttack(atom/the_target) if(istype(the_target,/mob/living/simple_animal)) @@ -86,14 +132,29 @@ */ /mob/living/simple_animal/hostile/plaguerat/proc/be_fruitful() - var/cap = CONFIG_GET(number/ratcap) - if(LAZYLEN(SSmobs.cheeserats) >= cap) + var/cap = 10 + if(LAZYLEN(GLOB.plague_rats) >= cap) visible_message("[src] gnaws into its food, [cap] rats are now on the station!") return var/mob/living/newmouse = new /mob/living/simple_animal/hostile/plaguerat(loc) - SSmobs.cheeserats += newmouse visible_message("[src] gnaws into its food, attracting another rat!") +/mob/living/simple_animal/hostile/plaguerat/proc/exit_vents() + if(!exit_vent || exit_vent.welded) + loc = entry_vent + entry_vent = null + return + loc = exit_vent.loc + entry_vent = null + exit_vent = null + in_vent = FALSE + var/area/new_area = get_area(loc) + message_admins("[src] came out at [new_area][ADMIN_JMP(loc)]!") + if(new_area) + new_area.Entered(src) + visible_message("[src] climbs out of the ventilation ducts!") + min_next_vent = world.time + 900 //90 seconds between ventcrawls + /** *Creates a chance to spawn more trash or gibs to repopulate. Otherwise, spawns a corpse or dirt. */ @@ -116,16 +177,12 @@ if(1 to 3) var/pickedtrash = pick(GLOB.ratking_trash) to_chat(owner, "Excellent, you find more trash to spread your filth!") - new /obj/effect/decal/cleanable/dirt(T) new pickedtrash(T) if(4 to 6) to_chat(owner, "You find blood and gibs to feed your young!") new /obj/effect/decal/cleanable/blood/gibs(T) - new /obj/effect/decal/cleanable/blood/(T) - if(7 to 18) - to_chat(owner, "A corpse rises from the ground. Best to leave it alone.") - new /obj/effect/mob_spawn/human/corpse/assistant(T) - if(19 to 100) + if(!locate(/obj/effect/decal/cleanable/blood) in T) + new /obj/effect/decal/cleanable/blood/(T) + if(7 to 100) to_chat(owner, "Drat. Nothing.") - new /obj/effect/decal/cleanable/dirt(T) StartCooldown() diff --git a/code/modules/ninja/__ninjaDefines.dm b/code/modules/ninja/__ninjaDefines.dm index d6cdb55840..3f5db48407 100644 --- a/code/modules/ninja/__ninjaDefines.dm +++ b/code/modules/ninja/__ninjaDefines.dm @@ -1,23 +1,24 @@ - -/* - -Contents: -- Definitions, because the original Ninja code has so much magic. - -*/ - - //ninjacost() specificCheck defines #define N_STEALTH_CANCEL 1 -#define N_SMOKE_BOMB 2 -#define N_ADRENALINE 3 +#define N_ADRENALINE 2 //ninjaDrainAct() defines for non numerical returns -//While not strictly needed, it's nicer than them just returning "twat" -//Which was my original intention. #define INVALID_DRAIN "INVALID" //This one is if the drain proc needs to cancel, eg missing variables, etc, it's important. - #define DRAIN_RD_HACK_FAILED "RDHACKFAIL" #define DRAIN_MOB_SHOCK "MOBSHOCK" #define DRAIN_MOB_SHOCK_FAILED "MOBSHOCKFAIL" + + +//Tells whether or not someone is a space ninja +#define IS_SPACE_NINJA(ninja) (ninja.mind && ninja.mind.has_antag_datum(/datum/antagonist/ninja)) + +//Defines for the suit's unique abilities +#define IS_NINJA_SUIT_INITIALIZATION(action) (istype(action, /datum/action/item_action/initialize_ninja_suit)) +#define IS_NINJA_SUIT_STATUS(action) (istype(action, /datum/action/item_action/ninjastatus)) +#define IS_NINJA_SUIT_BOOST(action) (istype(action, /datum/action/item_action/ninjaboost)) +#define IS_NINJA_SUIT_EMP(action) (istype(action, /datum/action/item_action/ninjapulse)) +#define IS_NINJA_SUIT_STAR_CREATION(action) (istype(action, /datum/action/item_action/ninjastar)) +#define IS_NINJA_SUIT_NET_CREATION(action) (istype(action, /datum/action/item_action/ninjanet)) +#define IS_NINJA_SUIT_SWORD_RECALL(action) (istype(action, /datum/action/item_action/ninja_sword_recall)) +#define IS_NINJA_SUIT_STEALTH(action) (istype(action, /datum/action/item_action/ninja_stealth)) diff --git a/code/modules/ninja/energy_katana.dm b/code/modules/ninja/energy_katana.dm index 00cfa94893..cf895924b0 100644 --- a/code/modules/ninja/energy_katana.dm +++ b/code/modules/ninja/energy_katana.dm @@ -1,3 +1,14 @@ +/** + * # Energy Katana + * + * The space ninja's katana. + * + * The katana that only space ninja spawns with. Comes with 30 force and throwforce, along with a signature special jaunting system. + * Upon clicking on a tile with the dash on, the user will teleport to that tile, assuming their target was not dense. + * The katana has 3 dashes stored at maximum, and upon using the dash, it will return 20 seconds after it was used. + * It also has a special feature where if it is tossed at a space ninja who owns it (determined by the ninja suit), the ninja will catch the katana instead of being hit by it. + * + */ /obj/item/energy_katana name = "energy katana" desc = "A katana infused with strong energy." @@ -5,16 +16,16 @@ item_state = "energy_katana" lefthand_file = 'icons/mob/inhands/weapons/swords_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi' - force = 40 - throwforce = 20 + force = 30 + throwforce = 30 block_chance = 50 armour_penetration = 50 w_class = WEIGHT_CLASS_NORMAL hitsound = 'sound/weapons/bladeslice.ogg' attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") - block_chance = 50 slot_flags = ITEM_SLOT_BELT sharpness = SHARP_EDGED + obj_flags = UNIQUE_RENAME // here is a shitpost and i cannot wait for ninjas naming their sword very rude things max_integrity = 200 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/datum/effect_system/spark_spread/spark_system @@ -34,13 +45,19 @@ /obj/item/energy_katana/afterattack(atom/target, mob/user, proximity_flag, click_parameters) . = ..() - if(dash_toggled) - jaunt.Teleport(user, target) - if(proximity_flag && (isobj(target) || issilicon(target))) - spark_system.start() - playsound(user, "sparks", 50, 1) - playsound(user, 'sound/weapons/blade1.ogg', 50, 1) - target.emag_act(user) + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + var/obj/item/clothing/suit/space/space_ninja/ninja_suit = H.wear_suit + if(!istype(ninja_suit))// do you actually have a ninja suit on + to_chat(user, "ERROR: garments incompatible with carbon material jaunt. Please suit up in compatible garments.") + return + if(!dash_toggled || Adjacent(target) || target.density)// is where you are going not a wall + return + if(!ninja_suit.s_coold == 0)// are you not currently on the ability cooldown + to_chat(user, "ERROR: suit is on cooldown.") + return + jaunt.Teleport(user, target)// okay you can now go my good sir /obj/item/energy_katana/pickup(mob/living/user) . = ..() @@ -58,16 +75,30 @@ //To throw it at the ninja /obj/item/energy_katana/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(ishuman(hit_atom)) - var/mob/living/carbon/human/H = hit_atom - if(istype(H.wear_suit, /obj/item/clothing/suit/space/space_ninja)) - var/obj/item/clothing/suit/space/space_ninja/SN = H.wear_suit - if(SN.energyKatana == src) - returnToOwner(H, 0, 1) + var/mob/living/carbon/human/hit_human = hit_atom + if(istype(hit_human.wear_suit, /obj/item/clothing/suit/space/space_ninja)) + var/obj/item/clothing/suit/space/space_ninja/ninja_suit = hit_human.wear_suit + if(ninja_suit.energyKatana == src) + returnToOwner(hit_human, 0, 1) return ..() -/obj/item/energy_katana/proc/returnToOwner(mob/living/carbon/human/user, doSpark = 1, caught = 0) +/obj/item/energy_katana/Destroy() + QDEL_NULL(spark_system) + QDEL_NULL(jaunt) + return ..() + +/** + * Proc called when the katana is recalled to its space ninja. + * + * Proc called when space ninja is hit with its suit's katana or the recall ability is used. + * Arguments: + * * user - To whom the katana is returning to. + * * doSpark - whether or not the katana will spark when it returns. + * * caught - boolean for whether or not the katana was caught or was teleported back. + */ +/obj/item/energy_katana/proc/returnToOwner(mob/living/carbon/human/user, doSpark = TRUE, caught = FALSE) if(!istype(user)) return forceMove(get_turf(user)) @@ -94,13 +125,8 @@ if(msg) to_chat(user, "[msg]") - -/obj/item/energy_katana/Destroy() - QDEL_NULL(spark_system) - return ..() - /datum/action/innate/dash/ninja current_charges = 3 max_charges = 3 - charge_rate = 30 + charge_rate = 200 recharge_sound = null diff --git a/code/modules/ninja/ninja_event.dm b/code/modules/ninja/ninja_event.dm deleted file mode 100644 index b6539a6952..0000000000 --- a/code/modules/ninja/ninja_event.dm +++ /dev/null @@ -1,93 +0,0 @@ -//Note to future generations: I didn't write this god-awful code I just ported it to the event system and tried to make it less moon-speaky. -//Don't judge me D; ~Carn //Maximum judging occuring - Remie. -// Tut tut Remie, let's keep our comments constructive. - coiax - -/* - -Contents: -- The Ninja "Random" Event -- Ninja creation code -*/ - -/datum/round_event_control/ninja - name = "Space Ninja" - typepath = /datum/round_event/ghost_role/ninja - max_occurrences = 1 - earliest_start = 40 MINUTES - dynamic_should_hijack = TRUE - min_players = 15 - -/datum/round_event/ghost_role/ninja - var/success_spawn = 0 - role_name = "space ninja" - minimum_required = 1 - - var/helping_station - var/spawn_loc - var/give_objectives = TRUE - -/datum/round_event/ghost_role/ninja/setup() - helping_station = rand(0,1) - -/datum/round_event/ghost_role/ninja/kill() - if(!success_spawn && control) - control.occurrences-- - return ..() - -/datum/round_event/ghost_role/ninja/spawn_role() - //selecting a spawn_loc - if(!spawn_loc) - var/list/spawn_locs = list() - for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) - if(isturf(L.loc)) - spawn_locs += L.loc - for(var/obj/effect/landmark/loneopspawn/L in GLOB.landmarks_list) - if(isturf(L.loc)) - spawn_locs += L.loc - if(!spawn_locs.len) - return kill() - spawn_loc = pick(spawn_locs) - if(!spawn_loc) - return MAP_ERROR - - //selecting a candidate player - var/list/candidates = get_candidates(ROLE_NINJA, null, ROLE_NINJA) - if(!candidates.len) - return NOT_ENOUGH_PLAYERS - - var/mob/dead/selected_candidate = pick_n_take(candidates) - var/key = selected_candidate.key - - //Prepare ninja player mind - var/datum/mind/Mind = new /datum/mind(key) - Mind.assigned_role = ROLE_NINJA - Mind.special_role = ROLE_NINJA - Mind.active = 1 - - //spawn the ninja and assign the candidate - var/mob/living/carbon/human/Ninja = create_space_ninja(spawn_loc) - Mind.transfer_to(Ninja) - var/datum/antagonist/ninja/ninjadatum = new - ninjadatum.helping_station = pick(TRUE,FALSE) - Mind.add_antag_datum(ninjadatum) - - if(Ninja.mind != Mind) //something has gone wrong! - stack_trace("Ninja created with incorrect mind") - - spawned_mobs += Ninja - message_admins("[ADMIN_LOOKUPFLW(Ninja)] has been made into a ninja by an event.") - log_game("[key_name(Ninja)] was spawned as a ninja by an event.") - success_spawn = TRUE - - return SUCCESSFUL_SPAWN - - -//=======//NINJA CREATION PROCS//=======// - -/proc/create_space_ninja(spawn_loc) - var/mob/living/carbon/human/new_ninja = new(spawn_loc) - var/datum/preferences/A = new()//Randomize appearance for the ninja. - A.real_name = "[pick(GLOB.ninja_titles)] [pick(GLOB.ninja_names)]" - A.copy_to(new_ninja) - new_ninja.dna.update_dna_identity() - return new_ninja diff --git a/code/modules/ninja/ninja_explosive.dm b/code/modules/ninja/ninja_explosive.dm new file mode 100644 index 0000000000..e87ff2b6d6 --- /dev/null +++ b/code/modules/ninja/ninja_explosive.dm @@ -0,0 +1,45 @@ +/** + * # Spider Charge + * + * A unique version of c4 possessed only by the space ninja. Has a stronger blast radius. + * Can only be detonated by space ninjas with the bombing objective. Can only be set up where the objective says it can. + * When it primes, the space ninja responsible will have their objective set to complete. + * + */ +/obj/item/grenade/plastic/c4/ninja + name = "spider charge" + desc = "A modified C-4 charge supplied to you by the Spider Clan. Its explosive power has been juiced up, but only works in one specific area." + icon_state = "plasticspider0" + item_state = "plasticspider" + boom_sizes = list(2, 4, 6) + var/mob/detonator = null + +/obj/item/grenade/plastic/c4/ninja/afterattack(atom/movable/AM, mob/user, flag) + var/datum/antagonist/ninja/ninja_antag = user.mind.has_antag_datum(/datum/antagonist/ninja) + if(!ninja_antag) + to_chat(user, "You fiddle with the charge, but nothing happens.") + return + var/datum/objective/plant_explosive/objective = locate() in ninja_antag.objectives + if(!objective) + to_chat(user, "You can't seem to activate the charge. It's location-locked, but you don't know where to detonate it.") + return + if(objective.detonation_location != get_area(user)) + to_chat(user, "This isn't the location you're supposed to use this!") + return + detonator = user + return ..() + +/obj/item/grenade/plastic/c4/ninja/prime(mob/living/lanced_by) + . = ..() + anchored = TRUE + //Since we already did the checks in afterattack, the denonator must be a ninja with the bomb objective. + if(!detonator) + return + var/datum/antagonist/ninja/ninja_antag = detonator.mind.has_antag_datum(/datum/antagonist/ninja) + var/datum/objective/plant_explosive/objective = locate() in ninja_antag.objectives + objective.completed = TRUE + +/obj/item/grenade/plastic/c4/ninja/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/screwdriver)) + to_chat(user, "The wire panel is locked in place, clearly you aren't supposed to be opening it!") + return diff --git a/code/modules/ninja/outfit.dm b/code/modules/ninja/outfit.dm index 983ef0585a..a6faa9a3d5 100644 --- a/code/modules/ninja/outfit.dm +++ b/code/modules/ninja/outfit.dm @@ -8,10 +8,10 @@ ears = /obj/item/radio/headset shoes = /obj/item/clothing/shoes/space_ninja gloves = /obj/item/clothing/gloves/space_ninja - back = /obj/item/tank/jetpack/carbondioxide - l_pocket = /obj/item/grenade/plastic/x4 - r_pocket = /obj/item/tank/internals/emergency_oxygen - internals_slot = SLOT_R_STORE + l_pocket = /obj/item/grenade/plastic/c4/ninja + r_pocket = /obj/item/hypospray/mkii/CMO/combat + suit_store = /obj/item/tank/internals/oxygen + internals_slot = SLOT_S_STORE belt = /obj/item/energy_katana implants = list(/obj/item/implant/explosive) @@ -21,5 +21,3 @@ var/obj/item/clothing/suit/space/space_ninja/S = H.wear_suit if(istype(H.belt, belt)) S.energyKatana = H.belt - S.randomize_param() - diff --git a/code/modules/ninja/suit/gloves.dm b/code/modules/ninja/suit/gloves.dm index a06b753402..15abf0936e 100644 --- a/code/modules/ninja/suit/gloves.dm +++ b/code/modules/ninja/suit/gloves.dm @@ -1,25 +1,13 @@ - - - -/* - Dear ninja gloves - - This isn't because I like you - this is because your father is a bastard - - ... - I guess you're a little cool. - -Sayu - - - see ninjaDrainAct.dm for ninjadrain_act() - Touch() simply calls this on it's target now - Ninja's electricuting people when? - -Remie - -*/ - - +/** + * # Ninja Gloves + * + * Space ninja's gloves. Gives access to a number of special interactions. + * + * Gloves only found from space ninjas. Allows the wearer to access special interactions with various objects. + * These interactions are detailed in ninjaDrainAct.dm in the suit file. + * These interactions are toggled by an action tied to the gloves. The interactions will not activate if the user is also not wearing a ninja suit. + * + */ /obj/item/clothing/gloves/space_ninja desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance." name = "ninja gloves" @@ -32,11 +20,24 @@ max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT strip_delay = 120 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/draining = 0 - var/candrain = 0 + actions_types = list(/datum/action/item_action/toggle_glove) + var/datum/action/innate/doorjack/ninja/hack + ///Whether or not we're currently draining something + var/draining = FALSE + ///Whether or not we can currently drain something + var/candrain = FALSE + ///Minimum amount of power we can drain in a single drain action var/mindrain = 200 + ///Maximum amount of power we can drain in a single drain action var/maxdrain = 400 - + ///Whether or not the security console hack was used to set everyone to arrest + var/security_console_hack_success = FALSE + ///Whether or not the communication console hack was used to summon another antagonist + var/communication_console_hack_success = FALSE + ///How many times the gloves have been used to force open doors. + var/door_hack_counter = 0 + ///Whether or not the cyborg hack was used to syndify a cyborg + var/borg_hack_success = FALSE var/stunforce = 100 /obj/item/clothing/gloves/space_ninja/Touch(atom/A,proximity) @@ -45,9 +46,9 @@ if(!ishuman(loc)) return FALSE //Only works while worn - var/mob/living/carbon/human/H = loc + var/mob/living/carbon/human/wearer = loc - var/obj/item/clothing/suit/space/space_ninja/suit = H.wear_suit + var/obj/item/clothing/suit/space/space_ninja/suit = wearer.wear_suit if(!istype(suit)) return FALSE if(isturf(A)) @@ -56,17 +57,17 @@ if(!proximity) return FALSE - A.add_fingerprint(H) + A.add_fingerprint(wearer) draining = TRUE - . = A.ninjadrain_act(suit,H,src) + . = A.ninjadrain_act(suit,wearer,src) draining = FALSE if(isnum(.)) //Numerical values of drained handle their feedback here, Alpha values handle it themselves (Research hacking) if(.) - to_chat(H, "Gained [DisplayEnergy(.)] of energy from [A].") + to_chat(wearer, "Gained [DisplayEnergy(.)] of energy from [A].") else - to_chat(H, "\The [A] has run dry of energy, you must find another source!") + to_chat(wearer, "\The [A] has run dry of energy, you must find another source!") . = INTERRUPT_UNARMED_ATTACK else . = FALSE //as to not cancel attack_hand() @@ -75,12 +76,13 @@ . = ..() REMOVE_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) -/obj/item/clothing/gloves/space_ninja/proc/toggledrain() - var/mob/living/carbon/human/U = loc - to_chat(U, "You [candrain?"disable":"enable"] special interaction.") - candrain=!candrain - /obj/item/clothing/gloves/space_ninja/examine(mob/user) . = ..() if(HAS_TRAIT_FROM(src, TRAIT_NODROP, NINJA_SUIT_TRAIT)) . += "The energy drain mechanism is [candrain?"active":"inactive"]." + +/obj/item/clothing/gloves/space_ninja/ui_action_click(mob/user, action) + if(istype(action, /datum/action/item_action/toggle_glove)) + toggledrain() + return TRUE + return FALSE diff --git a/code/modules/ninja/suit/head.dm b/code/modules/ninja/suit/head.dm index 9a65dabc1e..99dde98f09 100644 --- a/code/modules/ninja/suit/head.dm +++ b/code/modules/ninja/suit/head.dm @@ -1,14 +1,19 @@ - - +/** + * # Ninja Hood + * + * Space ninja's hood. Provides armor and blocks AI tracking. + * + * A hood that only exists as a part of space ninja's starting kit. Provides armor equal of space ninja's suit and disallows an AI to track the wearer. + * + */ /obj/item/clothing/head/helmet/space/space_ninja desc = "What may appear to be a simple black garment is in fact a highly sophisticated nano-weave helmet. Standard issue ninja gear." name = "ninja hood" icon_state = "s-ninja" item_state = "s-ninja_mask" - armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 25, "fire" = 100, "acid" = 100) - strip_delay = 12 + armor = list("melee" = 40, "bullet" = 30, "laser" = 20,"energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100) resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - blockTracking = 1//Roughly the only unique thing about this helmet. + blockTracking = TRUE//Roughly the only unique thing about this helmet. flags_inv = HIDEEARS|HIDEEYES|HIDEFACE|HIDEHAIR|HIDEFACIALHAIR /obj/item/clothing/head/helmet/space/space_ninja/dropped(mob/user) diff --git a/code/modules/ninja/suit/mask.dm b/code/modules/ninja/suit/mask.dm index 421c13f9eb..111f76ae65 100644 --- a/code/modules/ninja/suit/mask.dm +++ b/code/modules/ninja/suit/mask.dm @@ -1,15 +1,11 @@ - -/* - -Contents: -- The Ninja Space Mask -- Ninja Space Mask speech modification - -*/ - - - - +/** + * # Ninja Mask + * + * Space ninja's mask. Makes you sound like a real anime girl. Barely able to be considered a real upside. + * + * A mask which only spawns as a part of space ninja's starting kit. Functions as a gas mask. + * + */ /obj/item/clothing/mask/gas/space_ninja name = "ninja mask" desc = "A close-fitting mask that acts both as an air filter and a post-modern fashion statement." diff --git a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm b/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm deleted file mode 100644 index c0ee68cdee..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/energy_net_nets.dm +++ /dev/null @@ -1,117 +0,0 @@ -/* -It will teleport people to a holding facility after 30 seconds. (Check the process() proc to change where teleport goes) -It is possible to destroy the net by the occupant or someone else. -*/ - -/obj/structure/energy_net - name = "energy net" - desc = "It's a net made of green energy." - icon = 'icons/effects/effects.dmi' - icon_state = "energynet" - - density = TRUE//Can't pass through. - opacity = 0//Can see through. - mouse_opacity = MOUSE_OPACITY_ICON//So you can hit it with stuff. - anchored = TRUE//Can't drag/grab the net. - layer = ABOVE_ALL_MOB_LAYER - max_integrity = 50 //How much health it has. - can_buckle = 1 - buckle_lying = 0 - buckle_prevents_pull = TRUE - var/mob/living/carbon/affecting //Who it is currently affecting, if anyone. - var/mob/living/carbon/master //Who shot web. Will let this person know if the net was successful or failed. - var/check = 15//30 seconds before teleportation. Could be extended I guess. - var/success = FALSE - - -/obj/structure/energy_net/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0) - switch(damage_type) - if(BRUTE) - playsound(src, 'sound/weapons/slash.ogg', 80, 1) - if(BURN) - playsound(src, 'sound/weapons/slash.ogg', 80, 1) - -/obj/structure/energy_net/Destroy() - if(!success) - if(!QDELETED(affecting)) - affecting.visible_message("[affecting.name] was recovered from the energy net!", "You were recovered from the energy net!", "You hear a grunt.") - if(!QDELETED(master))//As long as they still exist. - to_chat(master, "ERROR: unable to initiate transport protocol. Procedure terminated.") - return ..() - -/obj/structure/energy_net/process() - if(QDELETED(affecting)||affecting.loc!=loc) - qdel(src)//Get rid of the net. - return - - if(check>0) - check-- - return - - success = TRUE - qdel(src) - if(ishuman(affecting)) - var/mob/living/carbon/human/H = affecting - for(var/obj/item/W in H) - if(W == H.w_uniform || W == H.shoes) - continue//So all they're left with are shoes and uniform. - H.dropItemToGround(W) - H.dna.species.give_important_for_life(H) // After we remove items, at least give them what they need to live. -/* - var/datum/antagonist/antag_datum - for(var/datum/antagonist/ninja/AD in GLOB.antagonists) //Because only ninjas get capture objectives; They're not doable without the suit. - if(AD.owner == master) - antag_datum = AD - break - for(var/datum/objective/capture/capture in antag_datum) - if(istype(affecting, /mob/living/carbon/human)) //Humans. - if(affecting.stat == DEAD)//Dead folks are worth less. - capture.captured_amount+=0.5 - continue - capture.captured_amount+=1 - if(istype(affecting, /mob/living/carbon/monkey)) //Monkeys are almost worthless, you failure. - capture.captured_amount+=0.1 - if(istype(affecting, /mob/living/carbon/alien/larva)) //Larva are important for research. - if(affecting.stat == DEAD) - capture.captured_amount+=0.5 - continue - capture.captured_amount+=1 - if(istype(affecting, /mob/living/carbon/alien/humanoid)) //Aliens are worth twice as much as humans. - if(istype(affecting, /mob/living/carbon/alien/humanoid/royal/queen)) //Queens are worth three times as much as humans. - if(affecting.stat == DEAD) - capture.captured_amount+=1.5 - else - capture.captured_amount+=3 - continue - if(affecting.stat == DEAD) - capture.captured_amount+=1 - continue - capture.captured_amount+=2 -*/ - - affecting.revive(1, 1) //Basically a revive and full heal, including limbs/organs - //In case people who have been captured dead want to hang out at the holding area - - playsound(affecting, 'sound/effects/sparks4.ogg', 50, 1) - new /obj/effect/temp_visual/dir_setting/ninja/phase/out(affecting.drop_location(), affecting.dir) - - visible_message("[affecting] suddenly vanishes!") - affecting.forceMove(pick(GLOB.holdingfacility)) //Throw mob in to the holding facility. - to_chat(affecting, "You appear in a strange place!") - - if(!QDELETED(master))//As long as they still exist. - to_chat(master, "SUCCESS: transport procedure of [affecting] complete.") - do_sparks(5, FALSE, affecting) - playsound(affecting, 'sound/effects/phasein.ogg', 25, 1) - playsound(affecting, 'sound/effects/sparks2.ogg', 50, 1) - new /obj/effect/temp_visual/dir_setting/ninja/phase(affecting.drop_location(), affecting.dir) - -/obj/structure/energy_net/attack_alien(mob/living/carbon/alien/humanoid/user) - if(attack_generic(user, 15, BRUTE, "melee", 0)) //Aliens normally deal 60 damage to structures. They'd one-shot nets without this. - playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1) - -/obj/structure/energy_net/user_buckle_mob(mob/living/M, mob/living/user) - return//We only want our target to be buckled - -/obj/structure/energy_net/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user) - return//The net must be destroyed to free the target diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_adrenaline.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_adrenaline.dm deleted file mode 100644 index 89f5d20e70..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_adrenaline.dm +++ /dev/null @@ -1,19 +0,0 @@ -//Wakes the user so they are able to do their thing. Also injects a decent dose of radium. -//Movement impairing would indicate drugs and the like. -/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost() - - if(!ninjacost(0,N_ADRENALINE)) - var/mob/living/carbon/human/H = affecting - H.do_adrenaline(150, TRUE, 0, 0, TRUE, list(/datum/reagent/medicine/inaprovaline = 3, /datum/reagent/medicine/synaptizine = 10, /datum/reagent/medicine/omnizine = 10), "You feel a sudden surge of energy!") - - H.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!"), forced = "ninjaboost") - - a_boost-- - to_chat(H, "There are [a_boost] adrenaline boosts remaining.") - s_coold = 3 - addtimer(CALLBACK(src, .proc/ninjaboost_after), 70) - -/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost_after() - var/mob/living/carbon/human/H = affecting - H.reagents.add_reagent(/datum/reagent/radium, a_transfer) - to_chat(H, "You are beginning to feel the after-effect of the injection.") diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_cost_check.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_cost_check.dm deleted file mode 100644 index 12fea51815..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_cost_check.dm +++ /dev/null @@ -1,25 +0,0 @@ - - -//Cost function for suit Procs/Verbs/Abilities -/obj/item/clothing/suit/space/space_ninja/proc/ninjacost(cost = 0, specificCheck = 0) - var/mob/living/carbon/human/H = affecting - var/actualCost = cost*10 - if(cost && cell.charge < actualCost) - to_chat(H, "Not enough energy.") - return 1 - else - //This shit used to be handled individually on every proc.. why even bother with a universal check proc then? - cell.charge-=(actualCost) - - switch(specificCheck) - if(N_STEALTH_CANCEL) - cancel_stealth()//Get rid of it. - if(N_SMOKE_BOMB) - if(!s_bombs) - to_chat(H, "There are no more smoke bombs remaining.") - return 1 - if(N_ADRENALINE) - if(!a_boost) - to_chat(H, "You do not have any more adrenaline boosters.") - return 1 - return (s_coold)//Returns the value of the variable which counts down to zero. diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_empulse.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_empulse.dm deleted file mode 100644 index 29dc78e5f3..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_empulse.dm +++ /dev/null @@ -1,10 +0,0 @@ - - -//Disables nearby tech equipment. -/obj/item/clothing/suit/space/space_ninja/proc/ninjapulse() - - if(!ninjacost(250,N_STEALTH_CANCEL)) - var/mob/living/carbon/human/H = affecting - playsound(H.loc, 'sound/effects/empulse.ogg', 60, 2) - empulse_using_range(H, 9) //Procs sure are nice. Slightly weaker than wizard's disable tch. - s_coold = 2 diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm deleted file mode 100644 index 61355ca89b..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_net.dm +++ /dev/null @@ -1,44 +0,0 @@ - -//Allows the ninja to kidnap people -/obj/item/clothing/suit/space/space_ninja/proc/ninjanet() - var/mob/living/carbon/human/H = affecting - var/mob/living/carbon/C - - //If there's only one valid target, let's actually try to capture it, rather than forcing - //the user to fiddle with the dialog displaying a list of one - //Also, let's make this smarter and not list mobs you can't currently net. - var/list/candidates - for(var/mob/M in oview(H)) - if(!M.client)//Monkeys without a client can still step_to() and bypass the net. Also, netting inactive people is lame. - continue - for(var/obj/structure/energy_net/E in get_turf(M))//Check if they are already being affected by an energy net. - if(E.affecting == M) - continue - LAZYADD(candidates, M) - - if(!LAZYLEN(candidates)) - return FALSE - - if(candidates.len == 1) - C = candidates[1] - else - C = input("Select who to capture:","Capture who?",null) as null|mob in candidates - - - if(QDELETED(C)||!(C in oview(H))) - return FALSE - - if(!ninjacost(200,N_STEALTH_CANCEL)) - H.Beam(C,"n_beam",time=15) - H.say("Get over here!", forced = "ninja net") - var/obj/structure/energy_net/E = new /obj/structure/energy_net(C.drop_location()) - E.affecting = C - E.master = H - H.visible_message("[H] caught [C] with an energy net!","You caught [C] with an energy net!") - - if(C.buckled) - C.buckled.unbuckle_mob(affecting,TRUE) - E.buckle_mob(C, TRUE) //No moving for you! - //The person can still try and attack the net when inside. - - START_PROCESSING(SSobj, E) diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_smoke.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_smoke.dm deleted file mode 100644 index 3c19162048..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_smoke.dm +++ /dev/null @@ -1,14 +0,0 @@ - - -//Smoke bomb -/obj/item/clothing/suit/space/space_ninja/proc/ninjasmoke() - - if(!ninjacost(0,N_SMOKE_BOMB)) - var/mob/living/carbon/human/H = affecting - var/datum/effect_system/smoke_spread/bad/smoke = new - smoke.set_up(4, H.loc) - smoke.start() - playsound(H.loc, 'sound/effects/bamf.ogg', 50, 2) - s_bombs-- - to_chat(H, "There are [s_bombs] smoke bombs remaining.") - s_coold = 1 diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm deleted file mode 100644 index 57faad9493..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_stars.dm +++ /dev/null @@ -1,18 +0,0 @@ - - -//Creates a throwing star -/obj/item/clothing/suit/space/space_ninja/proc/ninjastar() - if(!ninjacost(10)) - var/mob/living/carbon/human/H = affecting - var/obj/item/throwing_star/ninja/N = new(H) - if(H.put_in_hands(N)) - to_chat(H, "A throwing star has been created in your hand!") - else - qdel(N) - H.throw_mode_on() //So they can quickly throw it. - - -/obj/item/throwing_star/ninja - name = "ninja throwing star" - throwforce = 20 - embedding = list("pain_mult" = 6, "embed_chance" = 100, "fall_chance" = 0, "embed_chance_turf_mod" = 15) diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm deleted file mode 100644 index 56c50078c1..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_stealth.dm +++ /dev/null @@ -1,54 +0,0 @@ - -/* - -Contents: -- Stealth Verbs - -*/ - - -/obj/item/clothing/suit/space/space_ninja/proc/toggle_stealth() - if(!affecting || stealth_cooldown > world.time) - return - if(stealth) - cancel_stealth() - else - if(cell.charge <= 0) - to_chat(affecting, "You don't have enough power to enable Stealth!") - return - stealth = TRUE - stealth_cooldown = world.time + 5 SECONDS - animate(affecting, alpha = 15, time = 3 SECONDS) - affecting.visible_message("[affecting.name] vanishes into thin air!", \ - "You are now mostly invisible to normal detection.") - addtimer(CALLBACK(src, .proc/enable_signals), 3 SECONDS) - -/obj/item/clothing/suit/space/space_ninja/proc/enable_signals() - if(!affecting) - return - RegisterSignal(affecting, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_MOB_ATTACK_RANGED, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_THROW, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_TELEPORTED, COMSIG_LIVING_GUN_PROCESS_FIRE), .proc/reduce_stealth) - RegisterSignal(affecting, COMSIG_MOVABLE_BUMP, .proc/bumping_stealth) - -/obj/item/clothing/suit/space/space_ninja/proc/reduce_stealth(datum/source) - affecting.alpha = min(affecting.alpha + 40, 100) - -/obj/item/clothing/suit/space/space_ninja/proc/bumping_stealth(datum/source, atom/A) - if(isliving(A)) - affecting.alpha = min(affecting.alpha + 20, 100) - -/obj/item/clothing/suit/space/space_ninja/proc/cancel_stealth() - if(!affecting || !stealth) - return FALSE - stealth = !stealth - stealth_cooldown = world.time + 5 SECONDS - UnregisterSignal(affecting, list(COMSIG_MOB_ITEM_ATTACK, COMSIG_MOB_ATTACK_RANGED, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, COMSIG_MOB_ATTACK_HAND, COMSIG_MOB_THROW, COMSIG_PARENT_ATTACKBY, COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_TELEPORTED, COMSIG_LIVING_GUN_PROCESS_FIRE)) - animate(affecting, alpha = 255, time = 3 SECONDS) - affecting.visible_message("[affecting.name] appears from thin air!", \ - "You are now visible.") - return TRUE - -/obj/item/clothing/suit/space/space_ninja/proc/stealth() - if(!s_busy) - toggle_stealth() - else - to_chat(affecting, "Stealth does not appear to work!") diff --git a/code/modules/ninja/suit/n_suit_verbs/ninja_sword_recall.dm b/code/modules/ninja/suit/n_suit_verbs/ninja_sword_recall.dm deleted file mode 100644 index 7a192c427c..0000000000 --- a/code/modules/ninja/suit/n_suit_verbs/ninja_sword_recall.dm +++ /dev/null @@ -1,39 +0,0 @@ - -/obj/item/clothing/suit/space/space_ninja/proc/ninja_sword_recall() - var/mob/living/carbon/human/H = affecting - - var/cost = 0 - var/inview = 1 - - if(!energyKatana) - to_chat(H, "Could not locate Energy Katana!") - return - - if(energyKatana in H) - return - - var/distance = get_dist(H,energyKatana) - - if(!(energyKatana in view(H))) - cost = distance //Actual cost is cost x 10, so 5 turfs is 50 cost. - inview = 0 - - if(!ninjacost(cost)) - if(iscarbon(energyKatana.loc)) - var/mob/living/carbon/C = energyKatana.loc - C.transferItemToLoc(energyKatana, get_turf(energyKatana), TRUE) - - //Somebody swollowed my sword, probably the clown doing a circus act. - if(energyKatana in C.stomach_contents) - C.stomach_contents -= energyKatana - else - energyKatana.forceMove(get_turf(energyKatana)) - - if(inview) //If we can see the katana, throw it towards ourselves, damaging people as we go. - energyKatana.spark_system.start() - playsound(H, "sparks", 50, 1) - H.visible_message("\the [energyKatana] flies towards [H]!","You hold out your hand and \the [energyKatana] flies towards you!") - energyKatana.throw_at(H, distance+1, energyKatana.throw_speed,H) - - else //Else just TP it to us. - energyKatana.returnToOwner(H,1) diff --git a/code/modules/ninja/suit/ninjaDrainAct.dm b/code/modules/ninja/suit/ninjaDrainAct.dm index af0ca809da..4f287fc81b 100644 --- a/code/modules/ninja/suit/ninjaDrainAct.dm +++ b/code/modules/ninja/suit/ninjaDrainAct.dm @@ -1,274 +1,326 @@ - -/* - -Contents: -- Assorted ninjadrain_act() procs -- What is Object Oriented Programming - -They *could* go in their appropriate files, but this is supposed to be modular - -*/ - - -//Needs to return the amount drained from the atom, if no drain on a power object, return FALSE, otherwise, return a define. -/atom/proc/ninjadrain_act() +/** + * Atom level proc for space ninja's glove interactions. + * + * Proc which only occurs when space ninja uses his gloves on an atom. + * Does nothing by default, but effects will vary. + * Arguments: + * * ninja_suit - The offending space ninja's suit. + * * ninja - The human mob wearing the suit. + * * ninja_gloves - The offending space ninja's gloves. + */ +/atom/proc/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) return INVALID_DRAIN - - - //APC// -/obj/machinery/power/apc/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) +/obj/machinery/power/apc/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves) return INVALID_DRAIN - var/maxcapacity = 0 //Safety check for batteries + var/maxcapacity = FALSE //Safety check for batteries var/drain = 0 //Drain amount from batteries - - . = 0 + var/drain_total = 0 if(cell && cell.charge) var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() spark_system.set_up(5, 0, loc) - while(G.candrain && cell.charge> 0 && !maxcapacity) - drain = rand(G.mindrain, G.maxdrain) + while(ninja_gloves.candrain && cell.charge> 0 && !maxcapacity) + drain = rand(ninja_gloves.mindrain, ninja_gloves.maxdrain) if(cell.charge < drain) drain = cell.charge - if(S.cell.charge + drain > S.cell.maxcharge) - drain = S.cell.maxcharge - S.cell.charge - maxcapacity = 1//Reached maximum battery capacity. + if(ninja_suit.cell.charge + drain > ninja_suit.cell.maxcharge) + drain = ninja_suit.cell.maxcharge - ninja_suit.cell.charge + maxcapacity = TRUE//Reached maximum battery capacity. - if (do_after(H,10, target = src)) + if (do_after(ninja ,10, target = src)) spark_system.start() playsound(loc, "sparks", 50, 1) cell.charge -= drain - S.cell.charge += drain - . += drain + ninja_suit.cell.charge += drain + drain_total += drain else break if(!(obj_flags & EMAGGED)) - flick("apc-spark", G) + flick("apc-spark", ninja_gloves) playsound(loc, "sparks", 50, 1) obj_flags |= EMAGGED locked = FALSE update_icon() - - - + return drain_total //SMES// -/obj/machinery/power/smes/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) +/obj/machinery/power/smes/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves) return INVALID_DRAIN var/maxcapacity = 0 //Safety check for batteries - var/drain = 0 //Drain amount from batteries - - . = 0 + var/drain = FALSE //Drain amount from batteries + var/drain_total = 0 if(charge) var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() spark_system.set_up(5, 0, loc) - while(G.candrain && charge > 0 && !maxcapacity) - drain = rand(G.mindrain, G.maxdrain) + while(ninja_gloves.candrain && charge > 0 && !maxcapacity) + drain = rand(ninja_gloves.mindrain, ninja_gloves.maxdrain) if(charge < drain) drain = charge - if(S.cell.charge + drain > S.cell.maxcharge) - drain = S.cell.maxcharge - S.cell.charge - maxcapacity = 1 + if(ninja_suit.cell.charge + drain > ninja_suit.cell.maxcharge) + drain = ninja_suit.cell.maxcharge - ninja_suit.cell.charge + maxcapacity = TRUE - if (do_after(H,10, target = src)) + if (do_after(ninja,10, target = src)) spark_system.start() playsound(loc, "sparks", 50, 1) charge -= drain - S.cell.charge += drain - . += drain + ninja_suit.cell.charge += drain + drain_total += drain else break + return drain_total //CELL// -/obj/item/stock_parts/cell/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) +/obj/item/stock_parts/cell/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves) return INVALID_DRAIN - . = 0 + var/drain_total = 0 if(charge) - if(G.candrain && do_after(H,30, target = src)) - . = charge - if(S.cell.charge + charge > S.cell.maxcharge) - S.cell.charge = S.cell.maxcharge + if(ninja_gloves.candrain && do_after(ninja,30, target = src)) + drain_total = charge + if(ninja_suit.cell.charge + charge > ninja_suit.cell.maxcharge) + ninja_suit.cell.charge = ninja_suit.cell.maxcharge else - S.cell.charge += charge + ninja_suit.cell.charge += charge charge = 0 corrupt() update_icon() -/obj/machinery/proc/AI_notify_hack() - var/turf/location = get_turf(src) - var/alertstr = "Network Alert: Hacking attempt detected[location?" in [location]":". Unable to pinpoint location"]." - for(var/mob/living/silicon/ai/AI in GLOB.player_list) - to_chat(AI, alertstr) + return drain_total //RDCONSOLE// -/obj/machinery/computer/rdconsole/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) +/obj/machinery/computer/rdconsole/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves) return INVALID_DRAIN . = DRAIN_RD_HACK_FAILED - to_chat(H, "Hacking \the [src]...") + to_chat(ninja, "Hacking \the [src]...") AI_notify_hack() if(stored_research) - to_chat(H, "Copying files...") - if(do_after(H, S.s_delay, target = src) && G.candrain && src) - stored_research.copy_research_to(S.stored_research) - to_chat(H, "Data analyzed. Process finished.") + to_chat(ninja, "Copying files...") + if(do_after(ninja, ninja_suit.s_delay, target = src) && ninja_gloves.candrain && src) + stored_research.copy_research_to( ninja_suit.stored_research) + to_chat(ninja, "Data analyzed. Process finished.") //RD SERVER// -//Shamelessly copypasted from above, since these two used to be the same proc, but with MANY colon operators -/obj/machinery/rnd/server/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) +//obj/machinery/rnd/server/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves) return INVALID_DRAIN . = DRAIN_RD_HACK_FAILED - to_chat(H, "Hacking \the [src]...") + to_chat(ninja, "Hacking \the [src]...") AI_notify_hack() if(stored_research) - to_chat(H, "Copying files...") - if(do_after(H, S.s_delay, target = src) && G.candrain && src) - stored_research.copy_research_to(S.stored_research) - to_chat(H, "Data analyzed. Process finished.") + to_chat(ninja, "Copying files...") + if(do_after(ninja, ninja_suit.s_delay, target = src) && ninja_gloves.candrain && src) + stored_research.copy_research_to(ninja_suit.stored_research) + to_chat(ninja, "Data analyzed. Process finished.") +//SECURITY CONSOLE// +/obj/machinery/computer/secure_data/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves) + return INVALID_DRAIN + if(ninja_gloves.security_console_hack_success) + return + to_chat(ninja, "Hacking \the [src]...") + AI_notify_hack() + if(do_after(ninja, ninja_suit.s_longdelay, target = src) && ninja_gloves.candrain && src) + for(var/datum/data/record/rec in sortRecord(GLOB.data_core.general, sortBy, order)) + for(var/datum/data/record/security_record in GLOB.data_core.security) + security_record.fields["criminal"] = "*Arrest*" + var/datum/antagonist/ninja/ninja_antag = ninja.mind.has_antag_datum(/datum/antagonist/ninja) + if(!ninja_antag) + return + ninja_gloves.security_console_hack_success = TRUE + var/datum/objective/security_scramble/objective = locate() in ninja_antag.objectives + if(objective) + objective.completed = TRUE + to_chat(ninja, "Security record corruption malware uploaded. Process finished; objective completed.") -//WIRE// -/obj/structure/cable/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) +//COMMUNICATIONS CONSOLE// +/obj/machinery/computer/communications/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves) + return INVALID_DRAIN + if(ninja_gloves.communication_console_hack_success) + return + to_chat(ninja, "Hacking \the [src]...") + AI_notify_hack() + if(do_after(ninja, ninja_suit.s_longdelay, target = src) && ninja_gloves.candrain && src) + var/announcement_pick = rand(0, 1) + switch(announcement_pick) + if(0) + priority_announce("Attention crew, it appears that something on your station has caused an unexpected disruption with the station's airlock network.", "[command_name()] High-Priority Update") + var/datum/round_event_control/grey_tide/greytide_event = new/datum/round_event_control/grey_tide + greytide_event.runEvent() + if(1) + priority_announce("Attention crew, it appears that something on your station has made unexpected communication with a syndicate ship in nearby space.", "[command_name()] High-Priority Update") + var/datum/round_event_control/pirates/pirate_event = new/datum/round_event_control/pirates + pirate_event.runEvent() + ninja_gloves.communication_console_hack_success = TRUE + var/datum/antagonist/ninja/ninja_antag = ninja.mind.has_antag_datum(/datum/antagonist/ninja) + if(!ninja_antag) + return + var/datum/objective/terror_message/objective = locate() in ninja_antag.objectives + if(objective) + objective.completed = TRUE + to_chat(ninja, "Signal decryption malware uploaded. Process finished; objective completed.") + +//AIRLOCK// +/obj/machinery/door/airlock/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves) return INVALID_DRAIN - var/maxcapacity = 0 //Safety check + if(!operating && density && hasPower() && !(obj_flags & EMAGGED)) + emag_act() + ninja_gloves.door_hack_counter++ + var/datum/antagonist/ninja/ninja_antag = ninja.mind.has_antag_datum(/datum/antagonist/ninja) + if(!ninja_antag) + return + var/datum/objective/door_jack/objective = locate() in ninja_antag.objectives + if(objective && objective.doors_required <= ninja_gloves.door_hack_counter) + objective.completed = TRUE + +//WIRE// +/obj/structure/cable/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves) + return INVALID_DRAIN + + var/maxcapacity = FALSE //Safety check var/drain = 0 //Drain amount - . = 0 + var/drain_total = 0 - var/datum/powernet/PN = powernet - while(G.candrain && !maxcapacity && src) - drain = (round((rand(G.mindrain, G.maxdrain))/2)) + var/datum/powernet/wire_powernet = powernet + while(ninja_gloves.candrain && !maxcapacity && src) + drain = (round((rand(ninja_gloves.mindrain, ninja_gloves.maxdrain))/2)) var/drained = 0 - if(PN && do_after(H,10, target = src)) + if(wire_powernet && do_after(ninja,10, target = src)) drained = min(drain, delayed_surplus()) add_delayedload(drained) if(drained < drain)//if no power on net, drain apcs - for(var/obj/machinery/power/terminal/T in PN.nodes) - if(istype(T.master, /obj/machinery/power/apc)) - var/obj/machinery/power/apc/AP = T.master + for(var/obj/machinery/power/terminal/affected_terminal in wire_powernet.nodes) + if(istype(affected_terminal.master, /obj/machinery/power/apc)) + var/obj/machinery/power/apc/AP = affected_terminal.master if(AP.operating && AP.cell && AP.cell.charge > 0) AP.cell.charge = max(0, AP.cell.charge - 5) drained += 5 else break - S.cell.charge += drained - if(S.cell.charge > S.cell.maxcharge) - . += (drained-(S.cell.charge - S.cell.maxcharge)) - S.cell.charge = S.cell.maxcharge - maxcapacity = 1 + ninja_suit.cell.charge += drained + if(ninja_suit.cell.charge > ninja_suit.cell.maxcharge) + . += (drained-(ninja_suit.cell.charge - ninja_suit.cell.maxcharge)) + ninja_suit.cell.charge = ninja_suit.cell.maxcharge + maxcapacity = TRUE else - . += drained - S.spark_system.start() + drain_total += drained + ninja_suit.spark_system.start() + + return drain_total //MECH// -/obj/mecha/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) +/obj/mecha/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves) return INVALID_DRAIN - var/maxcapacity = 0 //Safety check + var/maxcapacity = FALSE //Safety check var/drain = 0 //Drain amount - . = 0 + var/drain_total = 0 occupant_message("Warning: Unauthorized access through sub-route 4, block H, detected.") if(get_charge()) - while(G.candrain && cell.charge > 0 && !maxcapacity) - drain = rand(G.mindrain,G.maxdrain) + while(ninja_gloves.candrain && cell.charge > 0 && !maxcapacity) + drain = rand(ninja_gloves.mindrain, ninja_gloves.maxdrain) if(cell.charge < drain) drain = cell.charge - if(S.cell.charge + drain > S.cell.maxcharge) - drain = S.cell.maxcharge - S.cell.charge - maxcapacity = 1 - if (do_after(H,10, target = src)) + if(ninja_suit.cell.charge + drain > ninja_suit.cell.maxcharge) + drain = ninja_suit.cell.maxcharge - ninja_suit.cell.charge + maxcapacity = TRUE + if (do_after(ninja, 10, target = src)) spark_system.start() playsound(loc, "sparks", 50, 1) cell.use(drain) - S.cell.charge += drain - . += drain + ninja_suit.cell.give(drain) + drain_total += drain else break + return drain_total + //BORG// -/mob/living/silicon/robot/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) +/mob/living/silicon/robot/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves || (ROLE_NINJA in faction)) return INVALID_DRAIN + if(ninja_gloves.borg_hack_success) + return + to_chat(src, "Warni-***BZZZZZZZZZRT*** UPLOADING SPYDERPATCHER VERSION 9.5.2...") + if (do_after(ninja, 60, target = src)) + spark_system.start() + playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + to_chat(src, "UPLOAD COMPLETE. NEW CYBORG MODULE DETECTED. INSTALLING...") + faction = list(ROLE_NINJA) + bubble_icon = "syndibot" + UnlinkSelf() + ionpulse = TRUE + laws = new /datum/ai_laws/ninja_override() + module.transform_to(pick(/obj/item/robot_module/syndicate/spider, /obj/item/robot_module/syndicate_medical/spider, /obj/item/robot_module/saboteur/spider)) - var/maxcapacity = 0 //Safety check - var/drain = 0 //Drain amount - . = 0 - - to_chat(src, "Warning: Unauthorized access through sub-route 12, block C, detected.") - - if(cell && cell.charge) - while(G.candrain && cell.charge > 0 && !maxcapacity) - drain = rand(G.mindrain,G.maxdrain) - if(cell.charge < drain) - drain = cell.charge - if(S.cell.charge+drain > S.cell.maxcharge) - drain = S.cell.maxcharge - S.cell.charge - maxcapacity = 1 - if (do_after(H,10)) - spark_system.start() - playsound(loc, "sparks", 50, 1) - cell.charge -= drain - S.cell.charge += drain - . += drain - else - break - + var/datum/antagonist/ninja/ninja_antag = ninja.mind.has_antag_datum(/datum/antagonist/ninja) + if(!ninja_antag) + return + ninja_gloves.borg_hack_success = TRUE + var/datum/objective/cyborg_hijack/objective = locate() in ninja_antag.objectives + if(objective) + objective.completed = TRUE //CARBON MOBS// -/mob/living/carbon/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/S, mob/living/carbon/human/H, obj/item/clothing/gloves/space_ninja/G) - if(!S || !H || !G) +/mob/living/carbon/ninjadrain_act(obj/item/clothing/suit/space/space_ninja/ninja_suit, mob/living/carbon/human/ninja, obj/item/clothing/gloves/space_ninja/ninja_gloves) + if(!ninja_suit || !ninja || !ninja_gloves) return INVALID_DRAIN . = DRAIN_MOB_SHOCK_FAILED //Default cell = 10,000 charge, 10,000/1000 = 10 uses without charging/upgrading - if(S.cell && S.cell.charge && S.cell.use(500)) + if(ninja_suit.cell?.charge && ninja_suit.cell.use(1000)) . = DRAIN_MOB_SHOCK //Got that electric touch var/datum/effect_system/spark_spread/spark_system = new /datum/effect_system/spark_spread() spark_system.set_up(5, 0, loc) playsound(src, "sparks", 50, 1) - visible_message("[H] electrocutes [src] with [H.p_their()] touch!", "[H] electrocutes you with [H.p_their()] touch!") - electrocute_act(15, H, flags = SHOCK_NOSTUN) + visible_message("[ninja] electrocutes [src] with [ninja.p_their()] touch!", "[ninja] electrocutes you with [ninja.p_their()] touch!") + electrocute_act(15, ninja, flags = SHOCK_NOSTUN) - DefaultCombatKnockdown(G.stunforce, override_hardstun = 0) - apply_effect(EFFECT_STUTTER, G.stunforce) + DefaultCombatKnockdown(ninja_gloves.stunforce, override_hardstun = 0) + apply_effect(EFFECT_STUTTER, ninja_gloves.stunforce) SEND_SIGNAL(src, COMSIG_LIVING_MINOR_SHOCK) - - set_last_attacker(H) - log_combat(H, src, "stunned") + lastattacker = ninja.real_name + lastattackerckey = ninja.ckey + log_combat(ninja, src, "stunned") + set_last_attacker(ninja) + log_combat(ninja, src, "stunned") playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1) diff --git a/code/modules/ninja/suit/ninja_equipment_actions/energy_net_nets.dm b/code/modules/ninja/suit/ninja_equipment_actions/energy_net_nets.dm new file mode 100644 index 0000000000..bc0828242e --- /dev/null +++ b/code/modules/ninja/suit/ninja_equipment_actions/energy_net_nets.dm @@ -0,0 +1,46 @@ +/** + * # Energy Net + * + * Energy net which ensnares prey until it is destroyed. Used by space ninjas. + * + * Energy net which keeps its target from moving until it is destroyed. Used to send + * players to a holding area in which they could never leave, but such feature has since + * been removed. + */ +/obj/structure/energy_net + name = "energy net" + desc = "It's a net made of green energy." + icon = 'icons/effects/effects.dmi' + icon_state = "energynet" + + + density = TRUE//Can't pass through. + opacity = FALSE //Can see through. + mouse_opacity = MOUSE_OPACITY_ICON//So you can hit it with stuff. + anchored = TRUE//Can't drag/grab the net. + layer = ABOVE_ALL_MOB_LAYER + max_integrity = 60 //How much health it has. + can_buckle = 1 + buckle_lying = 0 + buckle_prevents_pull = TRUE + ///The creature currently caught in the net + var/mob/living/affecting + +/obj/structure/energy_net/play_attack_sound(damage, damage_type = BRUTE, damage_flag = 0) + if(damage_type == BRUTE || damage_type == BURN) + playsound(src, 'sound/weapons/slash.ogg', 80, TRUE) + +/obj/structure/energy_net/Destroy() + if(!QDELETED(affecting)) + affecting.visible_message("[affecting.name] is recovered from the energy net!", "You are recovered from the energy net!", "You hear a grunt.") + affecting = null + return ..() + +/obj/structure/energy_net/attack_paw(mob/user) + return attack_hand() + +/obj/structure/energy_net/user_buckle_mob(mob/living/M, mob/user, check_loc = TRUE) + return//We only want our target to be buckled + +/obj/structure/energy_net/user_unbuckle_mob(mob/living/buckled_mob, mob/living/user) + return//The net must be destroyed to free the target diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_adrenaline.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_adrenaline.dm new file mode 100644 index 0000000000..0b64f35f0c --- /dev/null +++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_adrenaline.dm @@ -0,0 +1,38 @@ +//Wakes the user so they are able to do their thing. Also injects a decent dose of radium. +//Movement impairing would indicate drugs and the like. + +/datum/action/item_action/ninjaboost + check_flags = NONE + name = "Adrenaline Boost" + desc = "Inject a secret chemical that will counteract all movement-impairing effect." + button_icon_state = "adrenal" + icon_icon = 'icons/obj/implants.dmi' + required_mobility_flags = NONE + +/** + * Proc called to activate space ninja's adrenaline. + * + * Proc called to use space ninja's adrenaline. Gets the ninja out of almost any stun. + * Also makes them shout MGS references when used. After a bit, it injects the user with + * radium by calling a different proc. + */ +/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost() + if(ninjacost(0,N_ADRENALINE)) + return + var/mob/living/carbon/human/ninja = affecting + ninja.do_adrenaline(150, TRUE, 0, 0, TRUE, list(/datum/reagent/medicine/epinephrine = 3, /datum/reagent/medicine/regen_jelly = 10, /datum/reagent/medicine/stimulants = 2), "You feel a sudden surge of energy!") + ninja.say(pick("A CORNERED FOX IS MORE DANGEROUS THAN A JACKAL!","HURT ME MOOORRREEE!","IMPRESSIVE!"), forced = "ninjaboost") + a_boost = FALSE + to_chat(ninja, "You have used the adrenaline boost.") + addtimer(CALLBACK(src, .proc/ninjaboost_after), 70) + +/** + * Proc called to inject the ninja with radium. + * + * Used after 7 seconds of using the ninja's adrenaline. + * Injects the user with how much radium the suit needs to refill an adrenaline boost. + */ +/obj/item/clothing/suit/space/space_ninja/proc/ninjaboost_after() + var/mob/living/carbon/human/ninja = affecting + ninja.reagents.add_reagent(/datum/reagent/radium, a_transfer * 0.25) + to_chat(ninja, "You are beginning to feel the after-effect of the injection.") diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_cost_check.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_cost_check.dm new file mode 100644 index 0000000000..7fb9d9dbf6 --- /dev/null +++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_cost_check.dm @@ -0,0 +1,28 @@ +/** + * Proc called to check if the ninja can afford an ability's cost. + * + * Proc which determine whether or not a space ninja can afford to use a specific ability. + * It can also cancel stealth if the ability requested it. + * Arguments: + * * cost - the energy cost of the ability + * * specificCheck - Determines if the check is a normal one, an adrenaline one, or a stealth cancel check. + * * Returns TRUE or the current cooldown timer if we can't perform the ability, and FALSE if we can. + */ +/obj/item/clothing/suit/space/space_ninja/proc/ninjacost(cost = 0, specificCheck = 0) + var/mob/living/carbon/human/ninja = affecting + var/actualCost = cost*10 + if(cost && cell.charge < actualCost) + to_chat(ninja, "Not enough energy!") + return TRUE + else + //This shit used to be handled individually on every proc.. why even bother with a universal check proc then? + cell.charge-=(actualCost) + + switch(specificCheck) + if(N_STEALTH_CANCEL) + cancel_stealth()//Get rid of it. + if(N_ADRENALINE) + if(!a_boost) + to_chat(ninja, "You do not have any more adrenaline boosters!") + return TRUE + return (s_coold)//Returns the value of the variable which counts down to zero. diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_empulse.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_empulse.dm new file mode 100644 index 0000000000..ea2341a132 --- /dev/null +++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_empulse.dm @@ -0,0 +1,21 @@ +//Disables nearby tech equipment. + +/datum/action/item_action/ninjapulse + name = "EM Burst (50E)" + desc = "Disable any nearby technology with an electro-magnetic pulse." + button_icon_state = "emp" + icon_icon = 'icons/mob/actions/actions_spells.dmi' + +/** + * Proc called to allow the ninja to EMP the nearby area. + * + * Proc called to allow the ninja to EMP the nearby area. By default, costs 500E, which is half of the default battery's max charge. + * Also affects the ninja as well. + */ +/obj/item/clothing/suit/space/space_ninja/proc/ninjapulse() + if(ninjacost(500,N_STEALTH_CANCEL)) + return + var/mob/living/carbon/human/H = affecting + playsound(H.loc, 'sound/effects/empulse.ogg', 60, 2) + empulse(H, 4, 6) //Procs sure are nice. Slightly weaker than wizard's disable tch. + s_coold = 4 diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_glove_toggle.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_glove_toggle.dm new file mode 100644 index 0000000000..ec5bf078a5 --- /dev/null +++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_glove_toggle.dm @@ -0,0 +1,15 @@ +/datum/action/item_action/toggle_glove + name = "Toggle interaction" + desc = "Switch between normal interaction and drain mode." + button_icon_state = "s-ninjan" + icon_icon = 'icons/obj/clothing/gloves.dmi' + +/** + * Proc called to toggle the ninja glove's special abilities. + * + * Used to toggle whether or not the ninja glove's abilities will activate on touch. + */ +/obj/item/clothing/gloves/space_ninja/proc/toggledrain() + var/mob/living/carbon/human/ninja = loc + to_chat(ninja, "You [candrain?"disable":"enable"] special interaction.") + candrain=!candrain diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_net.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_net.dm new file mode 100644 index 0000000000..ab52f3e018 --- /dev/null +++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_net.dm @@ -0,0 +1,36 @@ +/datum/action/item_action/ninjanet + name = "Energy Net (40E)" + desc = "Captures a fallen opponent in a net of energy." + button_icon_state = "energynet" + icon_icon = 'icons/effects/effects.dmi' + +/** + * Proc called to ensnare a person in a energy net. + * + * Used to ensnare a target in an energy net, preventing them from moving until the net is broken. + * Costs 40E, which is 40% of the default battery's max charge. Intended as a means of reliably locking down an opponent when ninja stars won't suffice. + */ +/obj/item/clothing/suit/space/space_ninja/proc/ninjanet() + var/mob/living/carbon/human/ninja = affecting + var/mob/living/net_target = input("Select who to capture:","Capture who?",null) as null|mob in sortNames(oview(ninja)) + + if(QDELETED(net_target)||!(net_target in oview(ninja))) + return + + if(locate(/obj/structure/energy_net) in get_turf(net_target))//Check if they are already being affected by an energy net. + to_chat(ninja, "[net_target.p_they(TRUE)] are already trapped inside an energy net!") + return + for(var/turf/between_turf in getline(get_turf(ninja), get_turf(net_target))) + if(between_turf.density)//Don't want them shooting nets through walls. It's kind of cheesy. + to_chat(ninja, "You may not use an energy net through solid obstacles!") + return + if(!ninjacost(400,N_STEALTH_CANCEL)) + ninja.Beam(net_target, "n_beam", time = 15) + ninja.say("Get over here!", forced = "ninja net") + var/obj/structure/energy_net/net = new /obj/structure/energy_net(net_target.drop_location()) + net.affecting = net_target + ninja.visible_message("[ninja] caught [net_target] with an energy net!","You caught [net_target] with an energy net!") + + if(net_target.buckled) + net_target.buckled.unbuckle_mob(affecting,TRUE) + net.buckle_mob(net_target, TRUE) //No moving for you! diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_stars.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_stars.dm new file mode 100644 index 0000000000..ef897d5bb9 --- /dev/null +++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_stars.dm @@ -0,0 +1,46 @@ +/datum/action/item_action/ninjastar + name = "Create Throwing Stars (1E)" + desc = "Creates a throwing star in your hand, if possible." + button_icon_state = "throwingstar" + icon_icon = 'icons/obj/items_and_weapons.dmi' + +/** + * Proc called to create a ninja star in the ninja's hands. + * + * Called to create a ninja star in the wearer's hand. The ninja + * star doesn't do much up-front damage, but deals stamina damage + * as the target moves around, forcing a finish or flee scenario. + */ +/obj/item/clothing/suit/space/space_ninja/proc/ninjastar() + if(ninjacost(10)) + return + var/mob/living/carbon/human/ninja = affecting + var/obj/item/throwing_star/stamina/ninja/ninja_star = new(ninja) + if(ninja.put_in_hands(ninja_star)) + to_chat(ninja, "A throwing star has been created in your hand!") + else + qdel(ninja_star) + to_chat(ninja, "You can't create a throwing star, your hands are full!") + ninja.throw_mode_on() //So they can quickly throw it. + +/** + * # Ninja Throwing Star + * + * a throwing star which specifically makes sure you know it came from a real ninja. + * + * The most important item in the entire codebase, as without it we would all cease to exist. + * Inherits everything that makes it interesting the stamina throwing star, but the most + * important change made is that its name specifically has the prefix, 'ninja' in it. + * This provides the detective role with information to play off of by ensuring that his + * assumption that a space ninja is aboard the ship to be true when he find 20 of these in + * the captain's back. Along with this, its throwforce is 10 instead of the 5 of the stamina + * throwing star, meaning it'll do a little more damage than the stamina throwing star does as well. + * Changes to this item need to be approved by all maintainers, so if you do change it, make sure + * you go through the proper channels, lest you get permabanned. Do I make myself clear? + */ +/obj/item/throwing_star/stamina/ninja + name = "ninja throwing star" + icon_state = "ninjastar" + item_state = "ninjastar" + throwforce = 10 + embedding = list("pain_chance" = 5, "embed_chance" = 100, "fall_chance" = 10, "jostle_chance" = 10, "pain_stam_pct" = 2.5, "jostle_pain_mult" = 3) diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_status_read.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_status_read.dm new file mode 100644 index 0000000000..0bedd31c72 --- /dev/null +++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_status_read.dm @@ -0,0 +1,39 @@ +/datum/action/item_action/ninjastatus + check_flags = NONE + name = "Status Readout" + desc = "Gives a detailed readout about your current status." + button_icon_state = "health" + icon_icon = 'icons/obj/device.dmi' + var/action_background_icon_state = "bg_default_on" + +/** + * Proc called to put a status readout to the ninja in chat. + * + * Called put some information about the ninja's current status into chat. + * This information used to be displayed constantly on the status tab screen + * when the suit was on, but was turned into this as to remove the code from + * human.dm + */ +/obj/item/clothing/suit/space/space_ninja/proc/ninjastatus() + var/mob/living/carbon/human/ninja = affecting + var/list/info_list = list() + info_list += "SpiderOS Status: [s_initialized ? "Initialized" : "Disabled"]\n" + //Ninja status + info_list += "Fingerprints: [md5(ninja.dna.uni_identity)]\n" + info_list += "Unique Identity: [ninja.dna.unique_enzymes]\n" + info_list += "Overall Status: [ninja.stat > 1 ? "dead" : "[ninja.health]% healthy"]\n" + info_list += "Nutrition Status: [ninja.nutrition]\n" + info_list += "Oxygen Loss: [ninja.getOxyLoss()]\n" + info_list += "Toxin Levels: [ninja.getToxLoss()]\n" + info_list += "Burn Severity: [ninja.getFireLoss()]\n" + info_list += "Brute Trauma: [ninja.getBruteLoss()]\n" + info_list += "Radiation Levels: [ninja.radiation] rad\n" + info_list += "Body Temperature: [ninja.bodytemperature-T0C] degrees C ([ninja.bodytemperature*1.8-459.67] degrees F)\n" + + //Diseases + if(length(ninja.diseases)) + info_list += "Viruses:" + for(var/datum/disease/ninja_disease in ninja.diseases) + info_list += "* [ninja_disease.name], Type: [ninja_disease.spread_text], Stage: [ninja_disease.stage]/[ninja_disease.max_stages], Possible Cure: [ninja_disease.cure_text]\n" + + to_chat(ninja, "[info_list.Join()]") diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_stealth.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_stealth.dm new file mode 100644 index 0000000000..079f0c53e9 --- /dev/null +++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_stealth.dm @@ -0,0 +1,46 @@ +/datum/action/item_action/ninja_stealth + name = "Toggle Stealth" + desc = "Toggles stealth mode on and off." + button_icon_state = "ninja_cloak" + icon_icon = 'icons/mob/actions/actions_minor_antag.dmi' + +/** + * Proc called to toggle ninja stealth. + * + * Proc called to toggle whether or not the ninja is in stealth mode. + * If cancelling, calls a separate proc in case something else needs to quickly cancel stealth. + */ +/obj/item/clothing/suit/space/space_ninja/proc/toggle_stealth() + var/mob/living/carbon/human/ninja = affecting + if(!ninja) + return + if(stealth) + cancel_stealth() + else + if(cell.charge <= 0) + to_chat(ninja, "You don't have enough power to enable Stealth!") + return + stealth = !stealth + animate(ninja, alpha = 20,time = 12) + ninja.visible_message("[ninja.name] vanishes into thin air!", \ + "You are now mostly invisible to normal detection.") + +/** + * Proc called to cancel stealth. + * + * Called to cancel the stealth effect if it is ongoing. + * Does nothing otherwise. + * Arguments: + * * Returns false if either the ninja no longer exists or is already visible, returns true if we successfully made the ninja visible. + */ +/obj/item/clothing/suit/space/space_ninja/proc/cancel_stealth() + var/mob/living/carbon/human/ninja = affecting + if(!ninja) + return FALSE + if(stealth) + stealth = !stealth + animate(ninja, alpha = 255, time = 12) + ninja.visible_message("[ninja.name] appears from thin air!", \ + "You are now visible.") + return TRUE + return FALSE diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_suit_initialisation.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_suit_initialisation.dm new file mode 100644 index 0000000000..c1a3c77814 --- /dev/null +++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_suit_initialisation.dm @@ -0,0 +1,123 @@ +#define NINJA_LOCK_PHASE 1 +#define NINJA_ICON_GENERATE_PHASE 3 +#define NINJA_COMPLETE_PHASE 6 +#define NINJA_DEINIT_LOGOFF_PHASE 1 +#define NINJA_DEINIT_STEALTH_PHASE 5 + +GLOBAL_LIST_INIT(ninja_initialize_messages, list( + "Now initializing...", + "Securing external locking mechanism...\nNeural-net established.", + "Extending neural-net interface...\nNow monitoring brain wave pattern...", + "Linking neural-net interface...\nPattern GREEN, continuing operation.", + "VOID-shift device status: ONLINE.\nCLOAK-tech device status: ONLINE.", + "Primary system status: ONLINE.\nBackup system status: ONLINE.\nCurrent energy capacity: ", + "All systems operational. Welcome to SpiderOS, " +)) + +GLOBAL_LIST_INIT(ninja_deinitialize_messages, list( + "Now de-initializing...", + "Shutting down SpiderOS.", + "Primary system status: OFFLINE.\nBackup system status: OFFLINE.", + "VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE.", + "Disconnecting neural-net interface...Success.", + "Disengaging neural-net interface... Success.", + "Unsecuring external locking mechanism...\nNeural-net abolished.\nOperation status: FINISHED." +)) + +/datum/action/item_action/initialize_ninja_suit + name = "Toggle Ninja Suit" + +/** + * Toggles the ninja suit on/off + * + * Attempts to initialize or deinitialize the ninja suit + */ +/obj/item/clothing/suit/space/space_ninja/proc/toggle_on_off() + . = TRUE + if(s_busy) + to_chat(loc, "ERROR: You cannot use this function at this time.") + return FALSE + s_busy = TRUE + if(s_initialized) + deinitialize() + else + ninitialize() + +/** + * Initializes the ninja suit + * + * Initializes the ninja suit through seven phases, each of which calls this proc with an incremented phase + * Arguments: + * * delay - The delay between each phase of initialization + * * ninja - The human who is being affected by the suit + * * phase - The phase of initialization + */ +/obj/item/clothing/suit/space/space_ninja/proc/ninitialize(delay = s_delay, mob/living/carbon/human/ninja = loc, phase = 0) + if(!ninja || !ninja.mind) + s_busy = FALSE + return + if (phase > NINJA_LOCK_PHASE && (ninja.stat == DEAD || ninja.health <= 0)) + to_chat(ninja, "FĆAL �Rr�R: 344--93#�&&21 BR��N |/|/aV� PATT$RN RED\nA-A-aB�rT�NG...") + unlock_suit(ninja) + s_busy = FALSE + return + + var/message = GLOB.ninja_initialize_messages[phase + 1] + switch(phase) + if (NINJA_LOCK_PHASE) + if(!lock_suit(ninja))//To lock the suit onto wearer. + s_busy = FALSE + return + if (NINJA_COMPLETE_PHASE - 1) + message += "[DisplayEnergy(cell.charge)]." + if (NINJA_COMPLETE_PHASE) + message += "[ninja.real_name]." + ninja.regenerate_icons() + s_initialized = TRUE + s_busy = FALSE + + to_chat(ninja, "[message]") + playsound(ninja, 'sound/effects/sparks1.ogg', 10, TRUE) + + if (phase < NINJA_COMPLETE_PHASE) + addtimer(CALLBACK(src, .proc/ninitialize, delay, ninja, phase + 1), delay) + +/** + * Deinitializes the ninja suit + * + * Deinitializes the ninja suit through eight phases, each of which calls this proc with an incremented phase + * Arguments: + * * delay - The delay between each phase of deinitialization + * * ninja - The human who is being affected by the suit + * * phase - The phase of deinitialization + */ +/obj/item/clothing/suit/space/space_ninja/proc/deinitialize(delay = s_delay, mob/living/carbon/human/ninja = affecting == loc ? affecting : null, phase = 0) + if (!ninja || !ninja.mind) + s_busy = FALSE + return + if (phase == 0 && alert("Are you certain you wish to remove the suit? This will take time and remove all abilities.",,"Yes","No") == "No") + s_busy = FALSE + return + + var/message = GLOB.ninja_deinitialize_messages[phase + 1] + switch(phase) + if(NINJA_DEINIT_LOGOFF_PHASE) + message = "Logging off, [ninja.real_name]. " + message + if(NINJA_DEINIT_STEALTH_PHASE) + cancel_stealth() + to_chat(ninja, "[message]") + playsound(ninja, 'sound/items/deconstruct.ogg', 10, TRUE) + + if (phase < NINJA_COMPLETE_PHASE) + addtimer(CALLBACK(src, .proc/deinitialize, delay, ninja, phase + 1), delay) + else + unlock_suit(ninja) + ninja.regenerate_icons() + s_initialized = FALSE + s_busy = FALSE + +#undef NINJA_LOCK_PHASE +#undef NINJA_ICON_GENERATE_PHASE +#undef NINJA_COMPLETE_PHASE +#undef NINJA_DEINIT_LOGOFF_PHASE +#undef NINJA_DEINIT_STEALTH_PHASE diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_sword_recall.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_sword_recall.dm new file mode 100644 index 0000000000..dd6ca61f88 --- /dev/null +++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_sword_recall.dm @@ -0,0 +1,48 @@ +/datum/action/item_action/ninja_sword_recall + name = "Recall Energy Katana (Variable Cost)" + desc = "Teleports the Energy Katana linked to this suit to its wearer, cost based on distance." + button_icon_state = "energy_katana" + icon_icon = 'icons/obj/items_and_weapons.dmi' + +/** + * Proc called to recall the ninja's sword. + * + * Called to summon the ninja's katana back to them + * If the katana can see the ninja, it will throw itself towards them. + * If not, the katana will teleport itself to the ninja. + */ +/obj/item/clothing/suit/space/space_ninja/proc/ninja_sword_recall() + var/mob/living/carbon/human/ninja = affecting + var/cost = 0 + var/inview = TRUE + + if(!energyKatana) + to_chat(ninja, "Could not locate Energy Katana!") + return + + if(energyKatana in ninja) + return + + var/distance = get_dist(ninja,energyKatana) + + if(!(energyKatana in view(ninja))) + cost = distance //Actual cost is cost x 10, so 5 turfs is 50 cost. + inview = FALSE + + if(!ninjacost(cost)) + if(iscarbon(energyKatana.loc)) + var/mob/living/carbon/sword_holder = energyKatana.loc + sword_holder.transferItemToLoc(energyKatana, get_turf(energyKatana), TRUE) + + else + energyKatana.forceMove(get_turf(energyKatana)) + + if(inview) //If we can see the katana, throw it towards ourselves, damaging people as we go. + energyKatana.spark_system.start() + playsound(ninja, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + ninja.visible_message("\the [energyKatana] flies towards [ninja]!","You hold out your hand and \the [energyKatana] flies towards you!") + energyKatana.throw_at(ninja, distance+1, energyKatana.throw_speed, ninja) + + else //Else just TP it to us. + energyKatana.returnToOwner(ninja, 1) + s_coold = 4 diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm index f2227b5f9f..6fba60a6ef 100644 --- a/code/modules/ninja/suit/shoes.dm +++ b/code/modules/ninja/suit/shoes.dm @@ -1,3 +1,12 @@ +/** + * # Ninja Shoes + * + * Space ninja's shoes. Gives him armor on his feet. + * + * Space ninja's ninja shoes. How mousey. Gives him slip protection and protection against attacks. + * Also are temperature resistant. + * + */ /obj/item/clothing/shoes/space_ninja name = "ninja shoes" desc = "A pair of running shoes. Excellent for running and even better for smashing skulls." @@ -5,8 +14,7 @@ permeability_coefficient = 0.01 clothing_flags = NOSLIP resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF - armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100) - strip_delay = 120 + armor = list("melee" = 40, "bullet" = 30, "laser" = 20,"energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100) cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT heat_protection = FEET diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index 15071a186f..66d9a85290 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -1,16 +1,13 @@ - -/* - -Contents: -- The Ninja Space Suit -- Ninja Space Suit Procs - -*/ - - -// /obj/item/clothing/suit/space/space_ninja - - +/** + * # Ninja Suit + * + * Space ninja's suit. Provides him with most of his powers. + * + * Space ninja's suit. Gives space ninja all his iconic powers, which are mostly kept in + * the folder ninja_equipment_actions. Has a lot of unique stuff going on, so make sure to check + * the variables. Check suit_attackby to see radium interaction, disk copying, and cell replacement. + * + */ /obj/item/clothing/suit/space/space_ninja name = "ninja suit" desc = "A unique, vacuum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins." @@ -19,12 +16,11 @@ Contents: allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals, /obj/item/stock_parts/cell) slowdown = 1 resistance_flags = LAVA_PROOF | ACID_PROOF - armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100) - strip_delay = 12 + armor = list("melee" = 40, "bullet" = 30, "laser" = 20,"energy" = 30, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100) - actions_types = list(/datum/action/item_action/initialize_ninja_suit, /datum/action/item_action/ninjasmoke, /datum/action/item_action/ninjaboost, /datum/action/item_action/ninjapulse, /datum/action/item_action/ninjastar, /datum/action/item_action/ninja_sword_recall, /datum/action/item_action/ninja_stealth, /datum/action/item_action/toggle_glove) + actions_types = list(/datum/action/item_action/initialize_ninja_suit, /datum/action/item_action/ninjastatus, /datum/action/item_action/ninjaboost, /datum/action/item_action/ninjapulse, /datum/action/item_action/ninjastar, /datum/action/item_action/ninjanet, /datum/action/item_action/ninja_sword_recall, /datum/action/item_action/ninja_stealth) - //Important parts of the suit. + ///The person wearing the suit var/mob/living/carbon/human/affecting = null var/obj/item/stock_parts/cell/cell var/datum/effect_system/spark_spread/spark_system @@ -37,28 +33,38 @@ Contents: var/obj/item/clothing/shoes/space_ninja/n_shoes var/obj/item/clothing/gloves/space_ninja/n_gloves - //Main function variables. - var/s_initialized = 0//Suit starts off. - var/s_coold = 0//If the suit is on cooldown. Can be used to attach different cooldowns to abilities. Ticks down every second based on suit ntick(). - var/s_cost = 5//Base energy cost each ntick. - var/s_acost = 25//Additional cost for additional powers active. - var/s_delay = 40//How fast the suit does certain things, lower is faster. Can be overridden in specific procs. Also determines adverse probability. - var/a_transfer = 20//How much radium is used per adrenaline boost. - var/a_maxamount = 7//Maximum number of adrenaline boosts. - var/s_maxamount = 20//Maximum number of smoke bombs. + ///The space ninja's mask. + var/obj/item/clothing/mask/gas/space_ninja/n_mask - //Support function variables. + ///Whether or not the suit is currently booted up. Starts off. + var/s_initialized = FALSE//Suit starts off. + ///The suit's current cooldown. If not 0, blocks usage of most abilities, and decrements its value by 1 every process + var/s_coold = 0 + ///How much energy the suit expends in a single process + var/s_cost = 1 + ///Additional energy cost for cloaking per process + var/s_acost = 20 + ///How fast the suit is at certain actions, like draining power from things + var/s_delay = 40 + ///How fast the suit is at certain riskier actions, like hacking communications consoles. + var/s_longdelay = 200 + ///Units of radium required to refill the adrenaline boost + var/a_transfer = 20//How much radium is required to refill the adrenaline boost. + ///Whether or not the suit is currently in stealth mode. var/stealth = FALSE//Stealth off. - var/stealth_cooldown = 0 - var/s_busy = FALSE//Is the suit busy with a process? Like AI hacking. Used for safety functions. - - //Ability function variables. - var/s_bombs = 10//Number of smoke bombs. - var/a_boost = 3//Number of adrenaline boosters. - - -/obj/item/clothing/suit/space/space_ninja/get_cell() - return cell + ///Whether or not the wearer is in the middle of an action, like hacking. + var/s_busy = FALSE + ///Whether or not the adrenaline boost ability is available + var/a_boost = TRUE +/obj/item/clothing/suit/space/space_ninja/examine(mob/user) + . = ..() + if(!s_initialized) + return + if(!user == affecting) + return + . += "All systems operational. Current energy capacity: [DisplayEnergy(cell.charge)].\n"+\ + "The CLOAK-tech device is [stealth?"active":"inactive"].\n"+\ + "[a_boost?"An adrenaline boost is available to use.":"There is no adrenaline boost available. Try refilling the suit with 20 units of radium."]" /obj/item/clothing/suit/space/space_ninja/Initialize() . = ..() @@ -77,114 +83,157 @@ Contents: cell.name = "black power cell" cell.icon_state = "bscell" -/obj/item/clothing/suit/space/space_ninja/Destroy() - if(affecting) - unlock_suit() - return ..() +/obj/item/clothing/suit/space/space_ninja/Initialize(mapload) + START_PROCESSING(SSobj, src) + return ..() -//Simply deletes all the attachments and self, killing all related procs. +/obj/item/clothing/suit/space/space_ninja/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +// Power usage +/obj/item/clothing/suit/space/space_ninja/process(delta_time) + var/mob/living/carbon/human/user = src.loc + if(!user || !ishuman(user) || !(user.wear_suit == src)) + return + + // Check for energy usage + if(s_initialized) + if(!affecting) + terminate() // Kills the suit and attached objects. + else if(cell.charge > 0) + if(s_coold > 0) + s_coold = max(s_coold - delta_time, 0) // Checks for ability s_cooldown first. + cell.charge -= s_cost * delta_time // s_cost is the default energy cost each ntick, usually 5. + if(stealth) // If stealth is active. + cell.charge -= s_acost * delta_time + else + cell.charge = 0 + cancel_stealth() + +/obj/item/clothing/suit/space/space_ninja/ui_action_click(mob/user, action) + if(IS_NINJA_SUIT_INITIALIZATION(action)) + toggle_on_off() + return TRUE + if(!s_initialized) + to_chat(user, "ERROR: suit offline. Please activate suit.") + return FALSE + if(s_coold > 0) + to_chat(user, "ERROR: suit is on cooldown.") + return FALSE + if(IS_NINJA_SUIT_STATUS(action)) + ninjastatus() + return TRUE + if(IS_NINJA_SUIT_BOOST(action)) + ninjaboost() + return TRUE + if(IS_NINJA_SUIT_EMP(action)) + ninjapulse() + return TRUE + if(IS_NINJA_SUIT_STAR_CREATION(action)) + ninjastar() + return TRUE + if(IS_NINJA_SUIT_NET_CREATION(action)) + ninjanet() + return TRUE + if(IS_NINJA_SUIT_SWORD_RECALL(action)) + ninja_sword_recall() + return TRUE + if(IS_NINJA_SUIT_STEALTH(action)) + toggle_stealth() + return TRUE + return FALSE + +/obj/item/clothing/suit/space/space_ninja/run_block(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = ATTACK_TYPE_MELEE) + . = ..() + if(stealth) + cancel_stealth() + s_coold = 5 + +/** + * Proc called to lock the important gear pieces onto space ninja's body. + * + * Called during the suit startup to lock all gear pieces onto space ninja. + * Terminates if a gear piece is not being worn. Also gives the ninja the inability to use firearms. + * If the person in the suit isn't a ninja when this is called, this proc just gibs them instead. + * Arguments: + * * ninja - The person wearing the suit. + * * Returns false if the locking fails due to lack of all suit parts, and true if it succeeds. + */ +/obj/item/clothing/suit/space/space_ninja/proc/lock_suit(mob/living/carbon/human/ninja) + if(!istype(ninja)) + return FALSE + if(!IS_SPACE_NINJA(ninja)) + to_chat(ninja, "fÄTaL ÈÈRRoR: 382200-*#00CÖDE RED\nUNAU†HORIZED USÈ DETÈC†††eD\nCoMMÈNCING SUB-R0U†IN3 13...\nTÈRMInATING U-U-USÈR...") + ninja.gib() + return FALSE + if(!istype(ninja.head, /obj/item/clothing/head/helmet/space/space_ninja)) + to_chat(ninja, "ERROR: 100113 UNABLE TO LOCATE HEAD GEAR\nABORTING...") + return FALSE + if(!istype(ninja.shoes, /obj/item/clothing/shoes/space_ninja)) + to_chat(ninja, "ERROR: 122011 UNABLE TO LOCATE FOOT GEAR\nABORTING...") + return FALSE + if(!istype(ninja.gloves, /obj/item/clothing/gloves/space_ninja)) + to_chat(ninja, "ERROR: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING...") + return FALSE + affecting = ninja + ADD_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) //colons make me go all |= + slowdown = 0 + icon_state = "s-ninjan" + n_hood = ninja.head + ADD_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT) + n_shoes = ninja.shoes + ADD_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT) + n_shoes.slowdown-- + n_gloves = ninja.gloves + ADD_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT) + n_gloves.icon_state = "s-ninjan" + n_gloves.item_state = "s-ninjan" + n_mask = ninja.wear_mask + n_mask.icon_state = "s-ninjan" + n_mask.item_state = "s-ninjan" + + ADD_TRAIT(ninja, TRAIT_NOGUNS, NINJA_SUIT_TRAIT) + return TRUE + +/** + * Proc called to unlock all the gear off space ninja's body. + * + * Proc which is essentially the opposite of lock_suit. Lets you take off all the suit parts. + * Also gets rid of the objection to using firearms from the wearer. + * Arguments: + * * ninja - The person wearing the suit. + */ +/obj/item/clothing/suit/space/space_ninja/proc/unlock_suit(mob/living/carbon/human/ninja) + affecting = null + REMOVE_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) + slowdown = 1 + icon_state = "s-ninja" + if(n_hood)//Should be attached, might not be attached. + REMOVE_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT) + n_hood.icon_state = "s-ninja" + if(n_shoes) + REMOVE_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT) + n_shoes.slowdown++ + if(n_gloves) + n_gloves.icon_state = "s-ninja" + n_gloves.item_state = "s-ninja" + REMOVE_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT) + n_gloves.candrain = FALSE + n_gloves.draining = FALSE + if(n_mask) + n_mask.icon_state = "s-ninja" + n_mask.item_state = "s-ninja" + + REMOVE_TRAIT(ninja, TRAIT_NOGUNS, NINJA_SUIT_TRAIT) + +/** + * Proc used to delete all the attachments and itself. + * + * Can be called to entire rid of the suit pieces and the suit itself. + */ /obj/item/clothing/suit/space/space_ninja/proc/terminate() qdel(n_hood) qdel(n_gloves) qdel(n_shoes) qdel(src) - -//Randomizes suit parameters. -/obj/item/clothing/suit/space/space_ninja/proc/randomize_param() - s_cost = rand(1,20) - s_acost = rand(20,100) - s_delay = rand(10,100) - s_bombs = rand(5,20) - a_boost = rand(1,7) - -//This proc prevents the suit from being taken off. -/obj/item/clothing/suit/space/space_ninja/proc/lock_suit(mob/living/carbon/human/H) - if(!istype(H)) - return FALSE - if(!is_ninja(H)) - to_chat(H, "fÄTaL ÈÈRRoR: 382200-*#00CÖDE RED\nUNAU†HORIZED USÈ DETÈC†††eD\nCoMMÈNCING SUB-R0U†IN3 13...\nTÈRMInATING U-U-USÈR...") - H.gib() - return FALSE - if(!istype(H.head, /obj/item/clothing/head/helmet/space/space_ninja)) - to_chat(H, "ERROR: 100113 UNABLE TO LOCATE HEAD GEAR\nABORTING...") - return FALSE - if(!istype(H.shoes, /obj/item/clothing/shoes/space_ninja)) - to_chat(H, "ERROR: 122011 UNABLE TO LOCATE FOOT GEAR\nABORTING...") - return FALSE - if(!istype(H.gloves, /obj/item/clothing/gloves/space_ninja)) - to_chat(H, "ERROR: 110223 UNABLE TO LOCATE HAND GEAR\nABORTING...") - return FALSE - affecting = H - ADD_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) //colons make me go all |= - n_hood = H.head - ADD_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT) - n_shoes = H.shoes - ADD_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT) - n_shoes.slowdown = -0.25 - n_gloves = H.gloves - ADD_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT) - ADD_TRAIT(affecting, TRAIT_TASED_RESISTANCE, NINJA_SUIT_TRAIT) - return TRUE - -/obj/item/clothing/suit/space/space_ninja/proc/lockIcons(mob/living/carbon/human/H) - icon_state = H.dna.features["body_model"] == FEMALE ? "s-ninjanf" : "s-ninjan" - H.gloves.icon_state = "s-ninjan" - H.gloves.item_state = "s-ninjan" - - -//This proc allows the suit to be taken off. -/obj/item/clothing/suit/space/space_ninja/proc/unlock_suit() - affecting = null - REMOVE_TRAIT(src, TRAIT_NODROP, NINJA_SUIT_TRAIT) - icon_state = "s-ninja" - if(n_hood)//Should be attached, might not be attached. - REMOVE_TRAIT(n_hood, TRAIT_NODROP, NINJA_SUIT_TRAIT) - if(n_shoes) - REMOVE_TRAIT(n_shoes, TRAIT_NODROP, NINJA_SUIT_TRAIT) - n_shoes.slowdown = 0.25 - if(n_gloves) - n_gloves.icon_state = "s-ninja" - n_gloves.item_state = "s-ninja" - REMOVE_TRAIT(n_gloves, TRAIT_NODROP, NINJA_SUIT_TRAIT) - n_gloves.candrain=0 - n_gloves.draining=0 - REMOVE_TRAIT(affecting, TRAIT_TASED_RESISTANCE, NINJA_SUIT_TRAIT) - - -/obj/item/clothing/suit/space/space_ninja/examine(mob/user) - . = ..() - if(s_initialized && user == affecting) - . += "All systems operational. Current energy capacity: [DisplayEnergy(cell.charge)].\n\ - The CLOAK-tech device is [stealth?"active":"inactive"].\n\ - There are [s_bombs] smoke bomb\s remaining.\n\ - There are [a_boost] adrenaline booster\s remaining." - -/obj/item/clothing/suit/space/space_ninja/ui_action_click(mob/user, action) - if(istype(action, /datum/action/item_action/initialize_ninja_suit)) - toggle_on_off() - return TRUE - if(!s_initialized) - to_chat(user, "ERROR: suit offline. Please activate suit.") - return FALSE - if(istype(action, /datum/action/item_action/ninjasmoke)) - ninjasmoke() - return TRUE - if(istype(action, /datum/action/item_action/ninjaboost)) - ninjaboost() - return TRUE - if(istype(action, /datum/action/item_action/ninjapulse)) - ninjapulse() - return TRUE - if(istype(action, /datum/action/item_action/ninjastar)) - ninjastar() - return TRUE - if(istype(action, /datum/action/item_action/ninja_sword_recall)) - ninja_sword_recall() - return TRUE - if(istype(action, /datum/action/item_action/ninja_stealth)) - stealth() - return TRUE - if(istype(action, /datum/action/item_action/toggle_glove)) - n_gloves.toggledrain() - return TRUE - return FALSE diff --git a/code/modules/ninja/suit/suit_attackby.dm b/code/modules/ninja/suit/suit_attackby.dm index ed920a57d1..75d438a35f 100644 --- a/code/modules/ninja/suit/suit_attackby.dm +++ b/code/modules/ninja/suit/suit_attackby.dm @@ -1,52 +1,44 @@ - - -/obj/item/clothing/suit/space/space_ninja/attackby(obj/item/I, mob/U, params) - if(U!=affecting)//Safety, in case you try doing this without wearing the suit/being the person with the suit. +/obj/item/clothing/suit/space/space_ninja/attackby(obj/item/I, mob/ninja, params) + if(ninja!=affecting)//Safety, in case you try doing this without wearing the suit/being the person with the suit. return ..() - if(istype(I, /obj/item/reagent_containers/glass))//If it's a glass beaker. - if(I.reagents.has_reagent(/datum/reagent/radium, a_transfer) && a_boost < a_maxamount) - I.reagents.remove_reagent(/datum/reagent/radium, a_transfer) - a_boost++; - to_chat(U, "There are now [a_boost] adrenaline boosts remaining.") - return - if(I.reagents.has_reagent(/datum/reagent/smoke_powder, a_transfer) && s_bombs < s_maxamount) - I.reagents.remove_reagent(/datum/reagent/smoke_powder, a_transfer) - s_bombs++; - to_chat(U, "There are now [s_bombs] smoke bombs remaining.") - return + if(istype(I, /obj/item/reagent_containers/glass) && I.reagents.has_reagent(/datum/reagent/radium, a_transfer) && a_boost != TRUE)//If it's a glass beaker, and what we're transferring is radium. + I.reagents.remove_reagent(/datum/reagent/radium, a_transfer) + a_boost = TRUE; + to_chat(ninja, "The suit's adrenaline boost is now reloaded.") + return else if(istype(I, /obj/item/stock_parts/cell)) var/obj/item/stock_parts/cell/CELL = I if(CELL.maxcharge > cell.maxcharge && n_gloves && n_gloves.candrain) - to_chat(U, "Higher maximum capacity detected.\nUpgrading...") - if (n_gloves && n_gloves.candrain && do_after(U,s_delay, target = src)) - U.transferItemToLoc(CELL, src) + to_chat(ninja, "Higher maximum capacity detected.\nUpgrading...") + if (n_gloves?.candrain && do_after(ninja,s_delay, target = src)) + ninja.transferItemToLoc(CELL, src) CELL.charge = min(CELL.charge+cell.charge, CELL.maxcharge) var/obj/item/stock_parts/cell/old_cell = cell old_cell.charge = 0 - U.put_in_hands(old_cell) - old_cell.add_fingerprint(U) + ninja.put_in_hands(old_cell) + old_cell.add_fingerprint(ninja) old_cell.corrupt() old_cell.update_icon() cell = CELL - to_chat(U, "Upgrade complete. Maximum capacity: [round(cell.maxcharge/100)]%") + to_chat(ninja, "Upgrade complete. Maximum capacity: [round(cell.maxcharge/100)]%") else - to_chat(U, "Procedure interrupted. Protocol terminated.") + to_chat(ninja, "Procedure interrupted. Protocol terminated.") return else if(istype(I, /obj/item/disk/tech_disk))//If it's a data disk, we want to copy the research on to the suit. var/obj/item/disk/tech_disk/TD = I var/has_research = 0 if(has_research)//If it has something on it. - to_chat(U, "Research information detected, processing...") - if(do_after(U,s_delay, target = src)) + to_chat(ninja, "Research information detected, processing...") + if(do_after(ninja,s_delay, target = src)) TD.stored_research.copy_research_to(stored_research) - to_chat(U, "Data analyzed and updated. Disk erased.") + to_chat(ninja, "Data analyzed and updated. Disk erased.") else - to_chat(U, "ERROR: Procedure interrupted. Process terminated.") + to_chat(ninja, "ERROR: Procedure interrupted. Process terminated.") else - to_chat(U, "No research information detected.") + to_chat(ninja, "No research information detected.") return return ..() diff --git a/code/modules/ninja/suit/suit_initialisation.dm b/code/modules/ninja/suit/suit_initialisation.dm deleted file mode 100644 index 3d80282fe7..0000000000 --- a/code/modules/ninja/suit/suit_initialisation.dm +++ /dev/null @@ -1,95 +0,0 @@ -/obj/item/clothing/suit/space/space_ninja/proc/toggle_on_off() - if(s_busy) - to_chat(loc, "ERROR: You cannot use this function at this time.") - return FALSE - if(s_initialized) - deinitialize() - else - ninitialize() - . = TRUE - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize(delay = s_delay, mob/living/carbon/human/U = loc) - if(!U.mind) - return //Not sure how this could happen. - s_busy = TRUE - to_chat(U, "Now initializing...") - addtimer(CALLBACK(src, .proc/ninitialize_two, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_two(delay, mob/living/carbon/human/U) - if(!lock_suit(U))//To lock the suit onto wearer. - s_busy = FALSE - return - to_chat(U, "Securing external locking mechanism...\nNeural-net established.") - addtimer(CALLBACK(src, .proc/ninitialize_three, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_three(delay, mob/living/carbon/human/U) - to_chat(U, "Extending neural-net interface...\nNow monitoring brain wave pattern...") - addtimer(CALLBACK(src, .proc/ninitialize_four, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_four(delay, mob/living/carbon/human/U) - if(U.stat == DEAD|| U.health <= 0) - to_chat(U, "FĆAL �Rr�R: 344--93#�&&21 BR��N |/|/aV� PATT$RN RED\nA-A-aB�rT�NG...") - unlock_suit() - s_busy = FALSE - return - lockIcons(U)//Check for icons. - U.regenerate_icons() - to_chat(U, "Linking neural-net interface...\nPattern\green GREEN, continuing operation.") - addtimer(CALLBACK(src, .proc/ninitialize_five, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_five(delay, mob/living/carbon/human/U) - to_chat(U, "VOID-shift device status: ONLINE.\nCLOAK-tech device status: ONLINE.") - addtimer(CALLBACK(src, .proc/ninitialize_six, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_six(delay, mob/living/carbon/human/U) - to_chat(U, "Primary system status: ONLINE.\nBackup system status: ONLINE.\nCurrent energy capacity: [DisplayEnergy(cell.charge)].") - addtimer(CALLBACK(src, .proc/ninitialize_seven, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/ninitialize_seven(delay, mob/living/carbon/human/U) - to_chat(U, "All systems operational. Welcome to SpiderOS, [U.real_name].") - s_initialized = TRUE - START_PROCESSING(SSprocessing, src) - s_busy = FALSE - - - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize(delay = s_delay) - if(affecting==loc) - var/mob/living/carbon/human/U = affecting - if(alert("Are you certain you wish to remove the suit? This will take time and remove all abilities.",,"Yes","No")=="No") - return - s_busy = TRUE - addtimer(CALLBACK(src, .proc/deinitialize_two, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_two(delay, mob/living/carbon/human/U) - to_chat(U, "Now de-initializing...") - addtimer(CALLBACK(src, .proc/deinitialize_three, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_three(delay, mob/living/carbon/human/U) - to_chat(U, "Logging off, [U.real_name]. Shutting down SpiderOS.") - addtimer(CALLBACK(src, .proc/deinitialize_four, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_four(delay, mob/living/carbon/human/U) - to_chat(U, "Primary system status: OFFLINE.\nBackup system status: OFFLINE.") - addtimer(CALLBACK(src, .proc/deinitialize_five, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_five(delay, mob/living/carbon/human/U) - to_chat(U, "VOID-shift device status: OFFLINE.\nCLOAK-tech device status: OFFLINE.") - cancel_stealth()//Shutdowns stealth. - addtimer(CALLBACK(src, .proc/deinitialize_six, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_six(delay, mob/living/carbon/human/U) - to_chat(U, "Disconnecting neural-net interface...\greenSuccess.") - addtimer(CALLBACK(src, .proc/deinitialize_seven, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_seven(delay, mob/living/carbon/human/U) - to_chat(U, "Disengaging neural-net interface...\greenSuccess.") - addtimer(CALLBACK(src, .proc/deinitialize_eight, delay, U), delay) - -/obj/item/clothing/suit/space/space_ninja/proc/deinitialize_eight(delay, mob/living/carbon/human/U) - to_chat(U, "Unsecuring external locking mechanism...\nNeural-net abolished.\nOperation status: FINISHED.") - unlock_suit() - U.regenerate_icons() - s_initialized = FALSE - STOP_PROCESSING(SSprocessing, src) - s_busy = FALSE diff --git a/code/modules/ninja/suit/suit_process.dm b/code/modules/ninja/suit/suit_process.dm deleted file mode 100644 index 5c1276e29a..0000000000 --- a/code/modules/ninja/suit/suit_process.dm +++ /dev/null @@ -1,17 +0,0 @@ -/obj/item/clothing/suit/space/space_ninja/process() - if(!affecting || !s_initialized) - return PROCESS_KILL - - if(cell.charge > 0) - if(s_coold) - s_coold--//Checks for ability s_cooldown first. - - cell.charge -= s_cost//s_cost is the default energy cost each tick, usually 5. - if(stealth && stealth_cooldown <= world.time)//If stealth is active. - cell.charge -= s_acost - affecting.alpha = max(affecting.alpha - 10, 15) - - else - cell.charge = 0 - if(stealth) - cancel_stealth() diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index a0509fbd41..0af16013ec 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -79,7 +79,7 @@ return 0 if(charge < amount) return 0 - charge = (charge - amount) + charge -= amount if(!istype(loc, /obj/machinery/power/apc)) SSblackbox.record_feedback("tally", "cell_used", 1, type) return 1 diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index a759523dd0..b802cc7b88 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -525,9 +525,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) temp_factor = 30 icon_state = base_icon_state + var/effective_temperature = min(removed.return_temperature(), 2500 * dynamic_heat_modifier) + //if there is more pluox and n2 then anything else, we receive no power increase from heat if(power_changes) - power = max((removed.return_temperature() * temp_factor / T0C) * gasmix_power_ratio + power, 0) + power = max((effective_temperature * temp_factor / T0C) * gasmix_power_ratio + power, 0) if(prob(50)) //(1 + (tritRad + pluoxDampen * bzDampen * o2Rad * plasmaRad / (10 - bzrads))) * freonbonus @@ -538,8 +540,6 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //Power * 0.55 * a value between 1 and 0.8 var/device_energy = power * REACTION_POWER_MODIFIER - var/effective_temperature = min(removed.return_temperature(), 2500 * dynamic_heat_modifier) - var/max_temp_increase = effective_temperature + ((device_energy * dynamic_heat_modifier) / THERMAL_RELEASE_CAP_MODIFIER) //Calculate how much gas to release //Varies based on power and gas content diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm index bc2a7c40fb..318acb66b5 100644 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm @@ -60,6 +60,8 @@ if(M.can_inject(null, FALSE, def_zone, piercing)) // Pass the hit zone to see if it can inject by whether it hit the head or the body. ..(target, blocked, TRUE) for(var/datum/reagent/medicine/R in reagents.reagent_list) //OD prevention time! + if(R.type in GLOB.blacklisted_medchems) + continue if(M.reagents.has_reagent(R.type)) if(R.overdose_threshold == 0 || emptrig == TRUE) //Is there a possible OD? M.reagents.add_reagent(R.type, R.volume) diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 9d2e4a8e31..55f44a505e 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -147,8 +147,8 @@ /obj/item/reagent_containers/hypospray/medipen/ekit name = "emergency first-aid autoinjector" desc = "An epinephrine medipen with extra coagulant and antibiotics to help stabilize bad cuts and burns." - icon_state = "firstaid" - item_state = "firstaid" + icon_state = "healthpen" + item_state = "healthpen" volume = 15 amount_per_transfer_from_this = 15 list_reagents = list(/datum/reagent/medicine/epinephrine = 12, /datum/reagent/medicine/coagulant = 2.5, /datum/reagent/medicine/spaceacillin = 0.5) diff --git a/code/modules/research/techweb/nodes/bepis_nodes.dm b/code/modules/research/techweb/nodes/bepis_nodes.dm index fa17d62e50..ec29979bdf 100644 --- a/code/modules/research/techweb/nodes/bepis_nodes.dm +++ b/code/modules/research/techweb/nodes/bepis_nodes.dm @@ -60,6 +60,16 @@ hidden = TRUE experimental = TRUE +/datum/techweb_node/nanite_storage_protocols + id = "nanite_storage_protocols" + display_name = "Nanite Storage Protocols" + description = "Advanced behaviours that allow nanites to increase their maximum volume at variable cost." + prereq_ids = list("nanite_smart") + design_ids = list("hive_nanites", "zip_nanites", "free_range_nanites", "unsafe_storage_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + hidden = TRUE + experimental = TRUE + /datum/techweb_node/interrogation id = "interrogation" display_name = "Enhanced Interrogation Technology" diff --git a/code/modules/research/xenobiology/crossbreeding/regenerative.dm b/code/modules/research/xenobiology/crossbreeding/regenerative.dm index 39877d6706..dee7b1cf45 100644 --- a/code/modules/research/xenobiology/crossbreeding/regenerative.dm +++ b/code/modules/research/xenobiology/crossbreeding/regenerative.dm @@ -14,25 +14,62 @@ Regenerative extracts: /obj/item/slimecross/regenerative/proc/core_effect_before(mob/living/carbon/human/target, mob/user) return +/obj/item/slimecross/regenerative/pre_attack(atom/A, mob/living/user, params, attackchain_flags, damage_multiplier) + if(isliving(A)) + var/mob/living/M = A + if(M.stat == DEAD) + to_chat(user, "[src] will not work on the dead!") + return TRUE //returning TRUE preemptively ends the attack chain and thus doesn't call afterattack, this is noteworthy for below as well + //inform the target that they're about to have a regenerative extract used on them + if(M != user) //targeting someone else + M.visible_message("[user] readies [src], holding it steady near [M] and guiding it to the center of [M.p_their()] mass...", + "[user] readies [src], holding it steady near you and guiding it to the center of your mass...") + if(!do_after(user, 50, target = M)) //5 seconds + return TRUE + else //targeting self + M.visible_message("[user] readies [src], holding it steady near [user.p_them()]self and guiding it to the center of [user.p_their()] mass...", + "You ready [src], holding it steady near you and guiding it to the center of your mass...") + if(!do_after(user, 10, target = M)) //1 second + return TRUE + . = ..() + else + . = ..() /obj/item/slimecross/regenerative/afterattack(atom/target,mob/user,prox) . = ..() if(!prox || !isliving(target)) return - var/mob/living/H = target - if(H.stat == DEAD) - to_chat(user, "[src] will not work on the dead!") + var/mob/living/M = target + if(M.stat == DEAD) + to_chat(user, "[M] died before you could apply [src]!") return - if(H != user) - user.visible_message("[user] crushes the [src] over [H], the milky goo quickly regenerating all of [H.p_their()] injuries!", - "You squeeze the [src], and it bursts over [H], the milky goo regenerating [H.p_their()] injuries.") + if(M != user) + user.visible_message("[user] crushes the [src] over [M], the milky goo quickly regenerating all of [M.p_their()] injuries!", + "You squeeze the [src], and it bursts over [M], the milky goo regenerating [M.p_their()] injuries.") else user.visible_message("[user] crushes the [src] over [user.p_them()]self, the milky goo quickly regenerating all of [user.p_their()] injuries!", "You squeeze the [src], and it bursts in your hand, splashing you with milky goo which quickly regenerates your injuries!") - core_effect_before(H, user) - H.revive(full_heal = 1) - core_effect(H, user) + core_effect_before(M, user) + var/new_disgust_level = 0 + if(iscarbon(M)) //simpler mobs don't have a disgust variable and we need to grab that. + var/mob/living/carbon/C = M + new_disgust_level = C.disgust + DISGUST_LEVEL_GROSS + M.revive(full_heal = 1) + M.set_disgust(new_disgust_level) + core_effect(M, user) playsound(target, 'sound/effects/splat.ogg', 40, 1) + //warn receivers of the extract about the disgust if they're carbon, making it clear that the regenerative extract is causing this. + if(iscarbon(M)) + var/obj/item/organ/stomach/S = M.getorganslot(ORGAN_SLOT_STOMACH) //for getting the stummy name + switch(new_disgust_level) + if(0 to DISGUST_LEVEL_GROSS) + to_chat(M,"While you recovered from [src], you feel a little nauseous.") + if(DISGUST_LEVEL_GROSS to DISGUST_LEVEL_VERYGROSS) + to_chat(M,"While you recovered from [src], you feel quite queasy.") + if(DISGUST_LEVEL_VERYGROSS to DISGUST_LEVEL_DISGUSTED) + to_chat(M,"While you recovered from [src], you feel like you're about to vomit!") + if(DISGUST_LEVEL_DISGUSTED to INFINITY) + to_chat(M,"You feel absolutely sick. Maybe you should lay off the regenerative extracts until your [(S ? S.name : "stomach")] settles!") qdel(src) /obj/item/slimecross/regenerative/grey diff --git a/code/modules/spells/spell_types/pointed/mind_transfer.dm b/code/modules/spells/spell_types/pointed/mind_transfer.dm index 28d646f6b6..caab6c5547 100644 --- a/code/modules/spells/spell_types/pointed/mind_transfer.dm +++ b/code/modules/spells/spell_types/pointed/mind_transfer.dm @@ -44,6 +44,13 @@ to_chat(user, "The devilish contract doesn't include the 'mind swappable' package, please try again another lifetime.") return + // lets not have people be mindswapped to/from people who have people currently in their vore bellies + if(has_vore_belly(user)) + user.release_vore_contents(include_absorbed = TRUE, silent = TRUE) + + if(has_vore_belly(victim)) + victim.release_vore_contents(include_absorbed = TRUE, silent = TRUE) + //MIND TRANSFER BEGIN var/mob/dead/observer/ghost = victim.ghostize() user.mind.transfer_to(victim) diff --git a/config/entries/general.txt b/config/entries/general.txt index f96815503b..5fc3512c60 100644 --- a/config/entries/general.txt +++ b/config/entries/general.txt @@ -500,3 +500,6 @@ PAI_CUSTOM_HOLOFORMS ## Once a typepath causes overrun from hard deletes this many times, stop hard deleting it on garbage collection failures. (set to 0 to disable) #HARD_DELETES_OVERRUN_LIMIT 0 + +## Enables monstermos/"equalization" step in atmos. +# ATMOS_EQUALIZATION_ENABLED diff --git a/html/changelog.html b/html/changelog.html index 540b62443c..dabd4e7704 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,18 @@ -->
+

18 September 2021

+

kiwedespars updated:

+
    +
  • blacklisted morphine and haloperidol from dart guns
  • +
+ +

17 September 2021

+

DeltaFire15 updated:

+
    +
  • Techweb hidden nodes should now show less weird behavior.
  • +
+

14 September 2021

Hatterhat updated:

    @@ -498,18 +510,6 @@
  • anthros can now select the cow tail
  • new quirk that allows you to eat trash
- -

18 July 2021

-

timothyteakettle updated:

-
    -
  • fixes photosynthesis stopping nutrition going past well fed from non-photosynthesis means
  • -
- -

17 July 2021

-

cadyn updated:

-
    -
  • precompile.sh updated
  • -
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index b871a65ca5..e4e1fba1c6 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -29997,3 +29997,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - balance: changeling adrenals buff - bugfix: speedups - bugfix: bread goes in mouth and not on head +2021-09-17: + DeltaFire15: + - bugfix: Techweb hidden nodes should now show less weird behavior. +2021-09-18: + kiwedespars: + - balance: blacklisted morphine and haloperidol from dart guns diff --git a/html/changelogs/AutoChangeLog-pr-14219.yml b/html/changelogs/AutoChangeLog-pr-14219.yml new file mode 100644 index 0000000000..1bef269e5a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-14219.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - balance: "The Spider Clan has recently taken up the Space Ninja project again along with the Syndicate. Space Ninjas have been drastically changed as a result, becoming much weaker and more stealth oriented. As a result of cutting costs per ninja, more ninjas were able to be hired. Expect to see them around more often." diff --git a/html/changelogs/AutoChangeLog-pr-15074.yml b/html/changelogs/AutoChangeLog-pr-15074.yml new file mode 100644 index 0000000000..5da0c10a10 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15074.yml @@ -0,0 +1,4 @@ +author: "keronshb" +delete-after: True +changes: + - rscadd: "PAIs can be emagged to reset master" diff --git a/html/changelogs/AutoChangeLog-pr-15084.yml b/html/changelogs/AutoChangeLog-pr-15084.yml new file mode 100644 index 0000000000..6c99cc159d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15084.yml @@ -0,0 +1,10 @@ +author: "keronshb" +delete-after: True +changes: + - bugfix: "Plague Rats will no longer spawn thousands of dirt decals" + - bugfix: "Plague Rats will no longer spawn thousands of corpses" + - bugfix: "Plague Rats can't spawn or transform off station z anymore" + - bugfix: "Plague Rats shouldn't explosively grow instantly" + - bugfix: "Plague Rats won't spawn infinite miasma anymore." + - balance: "Plague Rats health is now 100." + - balance: "Plague Rats can now ventcrawl through everything to prevent farming." diff --git a/html/changelogs/AutoChangeLog-pr-15094.yml b/html/changelogs/AutoChangeLog-pr-15094.yml new file mode 100644 index 0000000000..21dcf75960 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15094.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - balance: "glass has do_after" diff --git a/html/changelogs/AutoChangeLog-pr-15119.yml b/html/changelogs/AutoChangeLog-pr-15119.yml new file mode 100644 index 0000000000..ee7100fd9b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15119.yml @@ -0,0 +1,8 @@ +author: "keronshb" +delete-after: True +changes: + - bugfix: "Slaughter Demons Slam will now wound again on hit." + - balance: "Damage for demons back up to 30" + - balance: "Wound Bonus for demons now at 0. +image_add: Adds a sprite for the action bar" + - refactor: "Changed the CTRL+SHIFT Click to an action button. People can see the cooldown now too." diff --git a/html/changelogs/AutoChangeLog-pr-15133.yml b/html/changelogs/AutoChangeLog-pr-15133.yml new file mode 100644 index 0000000000..3bc023735f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15133.yml @@ -0,0 +1,5 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - rscadd: "new tips" + - rscdel: "old tips" diff --git a/html/changelogs/AutoChangeLog-pr-15134.yml b/html/changelogs/AutoChangeLog-pr-15134.yml new file mode 100644 index 0000000000..2a71bd9aa0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15134.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - rscadd: "some more brainhurt lines" diff --git a/html/changelogs/AutoChangeLog-pr-15137.yml b/html/changelogs/AutoChangeLog-pr-15137.yml new file mode 100644 index 0000000000..eef278a6ea --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15137.yml @@ -0,0 +1,4 @@ +author: "DeltaFire15" +delete-after: True +changes: + - balance: "carded AIs can now be converted by conversion sigils (clockcult)" diff --git a/html/changelogs/AutoChangeLog-pr-15139.yml b/html/changelogs/AutoChangeLog-pr-15139.yml new file mode 100644 index 0000000000..001897e223 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15139.yml @@ -0,0 +1,4 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "Catsurgeons should now spawn at more reasonable locations if possible." diff --git a/html/changelogs/AutoChangeLog-pr-15143.yml b/html/changelogs/AutoChangeLog-pr-15143.yml new file mode 100644 index 0000000000..d4e2141937 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15143.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - bugfix: "box perma has power" diff --git a/html/changelogs/AutoChangeLog-pr-15144.yml b/html/changelogs/AutoChangeLog-pr-15144.yml new file mode 100644 index 0000000000..860f1a60cc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15144.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - bugfix: "bone satchel onmob sprites" diff --git a/html/changelogs/AutoChangeLog-pr-15147.yml b/html/changelogs/AutoChangeLog-pr-15147.yml new file mode 100644 index 0000000000..09f98404fd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15147.yml @@ -0,0 +1,4 @@ +author: "Putnam3145" +delete-after: True +changes: + - config: "monstermos config added, disabled" diff --git a/html/changelogs/AutoChangeLog-pr-15154.yml b/html/changelogs/AutoChangeLog-pr-15154.yml new file mode 100644 index 0000000000..756cc2bfb7 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15154.yml @@ -0,0 +1,4 @@ +author: "qweq12yt" +delete-after: True +changes: + - bugfix: "Fixed space heaters not being able to be interacted/turned on in non powered areas" diff --git a/html/changelogs/AutoChangeLog-pr-15155.yml b/html/changelogs/AutoChangeLog-pr-15155.yml deleted file mode 100644 index 5f3a10473f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-15155.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "DeltaFire15" -delete-after: True -changes: - - bugfix: "Techweb hidden nodes should now show less weird behavior." diff --git a/html/changelogs/AutoChangeLog-pr-15156.yml b/html/changelogs/AutoChangeLog-pr-15156.yml new file mode 100644 index 0000000000..4d74820ca3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15156.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - bugfix: "missing madness mask sprites" diff --git a/html/changelogs/AutoChangeLog-pr-15157.yml b/html/changelogs/AutoChangeLog-pr-15157.yml new file mode 100644 index 0000000000..b3f0b8eaba --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15157.yml @@ -0,0 +1,4 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "There is now a way to acquire nanite storage protocols (bepis, like the other protocols), as opposed to them existing with no way to acquire them." diff --git a/html/changelogs/AutoChangeLog-pr-15160.yml b/html/changelogs/AutoChangeLog-pr-15160.yml new file mode 100644 index 0000000000..da0d68f52f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15160.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - bugfix: "removes passkey from access circuits as its not used anymore" diff --git a/html/changelogs/AutoChangeLog-pr-15162.yml b/html/changelogs/AutoChangeLog-pr-15162.yml new file mode 100644 index 0000000000..926f0898d1 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15162.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - bugfix: "prisoners cannot latejoin anymore" diff --git a/html/changelogs/AutoChangeLog-pr-15163.yml b/html/changelogs/AutoChangeLog-pr-15163.yml new file mode 100644 index 0000000000..3fe5ba69ee --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15163.yml @@ -0,0 +1,4 @@ +author: "buffyuwu" +delete-after: True +changes: + - rscadd: "Adds 4 redesigned jackets and 2 redesigned shirts to loadout" diff --git a/html/changelogs/AutoChangeLog-pr-15167.yml b/html/changelogs/AutoChangeLog-pr-15167.yml new file mode 100644 index 0000000000..1c13dfc56f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15167.yml @@ -0,0 +1,4 @@ +author: "BlueWildrose" +delete-after: True +changes: + - balance: "Slime regenerative extracts now require five seconds of wait before they are used. They add 25 disgust when used." diff --git a/html/changelogs/AutoChangeLog-pr-15168.yml b/html/changelogs/AutoChangeLog-pr-15168.yml new file mode 100644 index 0000000000..4f040b4580 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15168.yml @@ -0,0 +1,4 @@ +author: "dapnee" +delete-after: True +changes: + - bugfix: "attaches an air vent that was just there on the AI sat, changes some areas to what they'd logically be" diff --git a/html/changelogs/AutoChangeLog-pr-15169.yml b/html/changelogs/AutoChangeLog-pr-15169.yml new file mode 100644 index 0000000000..f3af23ac39 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15169.yml @@ -0,0 +1,4 @@ +author: "timothyteakettle" +delete-after: True +changes: + - rscadd: "a new mild trauma, **[REDACTED]**" diff --git a/html/changelogs/AutoChangeLog-pr-15171.yml b/html/changelogs/AutoChangeLog-pr-15171.yml new file mode 100644 index 0000000000..958d61e87c --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15171.yml @@ -0,0 +1,4 @@ +author: "DeltaFire15" +delete-after: True +changes: + - bugfix: "Plastic golems are back to ventcrawler_nude instead of ventcrawler_always" diff --git a/html/changelogs/AutoChangeLog-pr-15174.yml b/html/changelogs/AutoChangeLog-pr-15174.yml new file mode 100644 index 0000000000..79b3b9400f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15174.yml @@ -0,0 +1,4 @@ +author: "buffyuwu" +delete-after: True +changes: + - bugfix: "Holoparasites no long rename and recolor on relog" diff --git a/html/changelogs/AutoChangeLog-pr-15176.yml b/html/changelogs/AutoChangeLog-pr-15176.yml new file mode 100644 index 0000000000..3335997a85 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15176.yml @@ -0,0 +1,4 @@ +author: "buffyuwu" +delete-after: True +changes: + - bugfix: "fixed medihound sleeper ui display" diff --git a/html/changelogs/AutoChangeLog-pr-15178.yml b/html/changelogs/AutoChangeLog-pr-15178.yml new file mode 100644 index 0000000000..3f4debbc45 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-15178.yml @@ -0,0 +1,4 @@ +author: "zeroisthebiggay" +delete-after: True +changes: + - imageadd: "all medipens get inhands" diff --git a/icons/mob/actions/actions_minor_antag.dmi b/icons/mob/actions/actions_minor_antag.dmi index 3b9fe54577..6936e9e4bf 100644 Binary files a/icons/mob/actions/actions_minor_antag.dmi and b/icons/mob/actions/actions_minor_antag.dmi differ diff --git a/icons/mob/clothing/back.dmi b/icons/mob/clothing/back.dmi index ff787bc3fc..8c34b6cc4e 100644 Binary files a/icons/mob/clothing/back.dmi and b/icons/mob/clothing/back.dmi differ diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi index a40a8a72dd..2338fa37a0 100644 Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ diff --git a/icons/mob/clothing/feet.dmi b/icons/mob/clothing/feet.dmi index df40636049..4b732f13fe 100644 Binary files a/icons/mob/clothing/feet.dmi and b/icons/mob/clothing/feet.dmi differ diff --git a/icons/mob/clothing/feet_digi.dmi b/icons/mob/clothing/feet_digi.dmi index 7215875f2c..e82ae468e2 100644 Binary files a/icons/mob/clothing/feet_digi.dmi and b/icons/mob/clothing/feet_digi.dmi differ diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi index 556bc4fd9d..28f28edaca 100644 Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ diff --git a/icons/mob/clothing/head.dmi b/icons/mob/clothing/head.dmi index 1596672ac3..3b6af60828 100644 Binary files a/icons/mob/clothing/head.dmi and b/icons/mob/clothing/head.dmi differ diff --git a/icons/mob/clothing/head_muzzled.dmi b/icons/mob/clothing/head_muzzled.dmi index 2fce92ee81..d3f05135c1 100644 Binary files a/icons/mob/clothing/head_muzzled.dmi and b/icons/mob/clothing/head_muzzled.dmi differ diff --git a/icons/mob/clothing/mask.dmi b/icons/mob/clothing/mask.dmi index 60c2e34b39..17a49ea751 100644 Binary files a/icons/mob/clothing/mask.dmi and b/icons/mob/clothing/mask.dmi differ diff --git a/icons/mob/clothing/mask_muzzled.dmi b/icons/mob/clothing/mask_muzzled.dmi index 9da3545c65..9f483c8d47 100644 Binary files a/icons/mob/clothing/mask_muzzled.dmi and b/icons/mob/clothing/mask_muzzled.dmi differ diff --git a/icons/mob/clothing/suit.dmi b/icons/mob/clothing/suit.dmi index 6d7637f030..48759bf81c 100644 Binary files a/icons/mob/clothing/suit.dmi and b/icons/mob/clothing/suit.dmi differ diff --git a/icons/mob/clothing/suit_digi.dmi b/icons/mob/clothing/suit_digi.dmi index 80259e2832..13840507a6 100644 Binary files a/icons/mob/clothing/suit_digi.dmi and b/icons/mob/clothing/suit_digi.dmi differ diff --git a/icons/mob/inhands/equipment/medical_lefthand.dmi b/icons/mob/inhands/equipment/medical_lefthand.dmi index 7cbb240b93..679b6c1159 100644 Binary files a/icons/mob/inhands/equipment/medical_lefthand.dmi and b/icons/mob/inhands/equipment/medical_lefthand.dmi differ diff --git a/icons/mob/inhands/equipment/medical_righthand.dmi b/icons/mob/inhands/equipment/medical_righthand.dmi index 3b2b906404..a8f4580881 100644 Binary files a/icons/mob/inhands/equipment/medical_righthand.dmi and b/icons/mob/inhands/equipment/medical_righthand.dmi differ diff --git a/icons/mob/inhands/weapons/swords_lefthand.dmi b/icons/mob/inhands/weapons/swords_lefthand.dmi index 4be0df2300..62e48f626b 100644 Binary files a/icons/mob/inhands/weapons/swords_lefthand.dmi and b/icons/mob/inhands/weapons/swords_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/swords_righthand.dmi b/icons/mob/inhands/weapons/swords_righthand.dmi index 57308ffb76..658e7304df 100644 Binary files a/icons/mob/inhands/weapons/swords_righthand.dmi and b/icons/mob/inhands/weapons/swords_righthand.dmi differ diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi index 082bfb3c3e..21af40ff8f 100644 Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ diff --git a/icons/mob/talk.dmi b/icons/mob/talk.dmi index 0a56321037..beb38f01cc 100644 Binary files a/icons/mob/talk.dmi and b/icons/mob/talk.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index 9df096d19b..4d2ddcf6bd 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 7d4ae79957..3ebd15a511 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 532d4f5df7..b6839de219 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index e38eec35eb..ab6cea5a3b 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/grenade.dmi b/icons/obj/grenade.dmi index d6dd4c1b00..e2f06621e4 100644 Binary files a/icons/obj/grenade.dmi and b/icons/obj/grenade.dmi differ diff --git a/icons/obj/items_and_weapons.dmi b/icons/obj/items_and_weapons.dmi index 39f1845f43..454e174550 100644 Binary files a/icons/obj/items_and_weapons.dmi and b/icons/obj/items_and_weapons.dmi differ diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi index ad0b74829f..b84b195d14 100644 Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 8a17a8f448..1925834ebb 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/obj/syringe.dmi b/icons/obj/syringe.dmi index 6d0c779e92..3515545514 100644 Binary files a/icons/obj/syringe.dmi and b/icons/obj/syringe.dmi differ diff --git a/modular_citadel/code/modules/client/loadout/suit.dm b/modular_citadel/code/modules/client/loadout/suit.dm index 108bcafc19..92d94a41e8 100644 --- a/modular_citadel/code/modules/client/loadout/suit.dm +++ b/modular_citadel/code/modules/client/loadout/suit.dm @@ -97,6 +97,41 @@ name = "Brass winter coat" path = /obj/item/clothing/suit/hooded/wintercoat/ratvar/fake +/datum/gear/suit/jacketbluehoodie + name = "Blue hoodie" + path = /obj/item/clothing/suit/jacket/bluehoodie + loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION + subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS +/datum/gear/suit/jacketpurplehoodie + name = "Purple hoodie" + path = /obj/item/clothing/suit/jacket/purplehoodie + loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION + subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS + +/datum/gear/suit/jacketheartcoat + name = "Heart coat" + path = /obj/item/clothing/suit/jacket/heartcoat + loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION + subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS + +/datum/gear/suit/jacketgothiccoat + name = "Long black coat with cuffs" + path = /obj/item/clothing/suit/jacket/gothiccoat + loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION + subcategory = LOADOUT_SUBCATEGORY_SUIT_JACKETS + +/datum/gear/suit/jacketgothshirt + name = "Black shirt with cuffs" + path = /obj/item/clothing/suit/jacket/gothicshirt + loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION + subcategory = LOADOUT_SUBCATEGORY_SUIT_GENERAL + +/datum/gear/suit/jacketgothshirtcross + name = "Black shirt with cross" + path = /obj/item/clothing/suit/jacket/gothicshirtcross + loadout_flags = LOADOUT_CAN_NAME | LOADOUT_CAN_DESCRIPTION + subcategory = LOADOUT_SUBCATEGORY_SUIT_GENERAL + /datum/gear/suit/coat/polycoat name = "Polychromic winter coat" path = /obj/item/clothing/suit/hooded/wintercoat/polychromic diff --git a/sound/misc/seth.ogg b/sound/misc/seth.ogg new file mode 100644 index 0000000000..8def150775 Binary files /dev/null and b/sound/misc/seth.ogg differ diff --git a/strings/sillytips.txt b/strings/sillytips.txt index 8e28284534..ba10f80bf1 100644 --- a/strings/sillytips.txt +++ b/strings/sillytips.txt @@ -8,14 +8,14 @@ Just like real life the entropy of the game can only increase with time. If thin Completing your objectives is good practice, but the best antagonists will strive to do more than the bare minimum to really leave an impression. The more obscure and underused a game mechanic is, the less likely your victims are to be able to deal with it. Space is cold and it will quickly freeze you to death if you don't protect yourself. This isn't how thermodynamics really works but just go with it. -Blobs are weak to fire! Use a flame thrower for maximum damage! +Blobs are weak to fire! Use a flamethrower for maximum friendly fire! Cleanbot. The wizard is supposed to be extremely strong in one on one combat, stop getting mad about it. Sometimes a round will just be a bust. C'est la vie. This is a game that is constantly being developed for. Expect things to be added, removed, fixed, and broken on a daily basis. It's fun to try and predict the round type from the tip of the round message. They said the QM could never be a head, but we showed them. -The birb remembers. +The bird remembers. Your sprite represents your hitbox, so that afro makes you easier to kill. The sacrifices we make for style. Sometimes admins will just do stuff. Roll with it. The remake will never come out. @@ -32,18 +32,22 @@ There are at least 11 ways to get through plastic flaps. How many can you name? FEED ME A STRAY CAT Did you know that tossing the clown into a singularity will either increase or decrease its size by a large amount? Don't worry, you can always circlejerk your hate on the discord about furries. -Play a Vampire, they're overpowered and broken with no downsides that matter! -You can make a Beepsky with E-swords that will murder people for not wearing their IDs! -You can make a Beepsky with Toy-E-Swords if you want. It's like a cheaper Beepsky that will trip people and maybe shout on the sec channel about people its "Arresting" -There is a magic chem that turns people into Cat Girls/Boys. Its called "Felinid Mutation Toxin"! -Having Neko ears and tails or Cat ears and tails does not make you into a Felinid race! -Mhelp is basically useless, and never used correctly. Being a Mentor just means that admins will do Mhelps for you and you get to learn the round type when someone asks you a basic question regarding their antag status. -Toxins Bombs are not the only way to get RnD points. However, nobody will ever do any other method to get sci points... +You can make a Beepsky with E-swords instead of batons that will kill people for existing wrong. +You can make a Beepsky with Toy-E-Swords instead of batons that will try to kill people out of spite alone. +Do not ask about the purrbation. +Ask about the purrbation. +Mhelp is basically useless, and never used correctly. Being a Mentor just means that Admins will answer tickets for you and you get to learn the round type when someone asks a basic question regarding their antag role. +Toxins Bombs are the only way to get Research points. There's others, but we don't talk about them. Plasma men are a powerful race with many perks! No really, I swear! So what if they need an "ERP Plasma room" to fuck, who cares! -As a Cargo Tech make sure to always buy a tesla to sell back to CC. They love those those. Trust me! +As a Cargo Technician make sure to always buy a tesla to sell back to CC. They love those. Trust me! ;HELP MAINT +Help. Admins always regret meme options in their polls. Putting cat ears on securitrons makes them table people and nya. Mekhi isn't a cat, but he still goes on the table, just roll with it. As a Changeling, you can live without a head as they are merely vestigal to you, now, finally, you can be a Dullahan without it being Halloween. People actually have fictional sex between fictional characters in this game. When in doubt, take a break. A long break, preferably. If the game is wearing down your mental state and it's starting to lose any semblance of fun value, go and do something else for a month or two. By the time you come back, everything you liked will have been changed anyways. +Coders aren't real people. +MARRY AND REPRODUCE +TOUCH GRASS +Floorbot. diff --git a/strings/tips.txt b/strings/tips.txt index 5c6228769e..46dfe1d796 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -1,93 +1,97 @@ Where the space map levels connect is randomized every round, but are otherwise kept consistent within rounds. Remember that they are not necessarily bidirectional! You can catch thrown items by toggling on your throw mode with an empty hand active. -To crack the safe in the vault, have a stethoscope in one of your hands and fiddle with the tumbler or you can alternatively use several concentrated explosive charges on it. Remember that the latter may result in the contents of the safe becoming a pile of ash. +To crack the safe in the vault, have a stethoscope in one of your hands and fiddle with the tumbler or use a couple C4s on it. Remember the latter option may result in the contents of the safe becoming non-existant. You can climb onto a table by dragging yourself onto one. This takes time and drops the items in your hands on the table. Clicking on a table that someone else is climbing onto will knock them down. You can drag other players onto yourself to open the strip menu, letting you remove their equipment or force them to wear something. Note that exosuits or helmets will block your access to the clothing beneath them, and that certain items take longer to strip or put on than others. Clicking on a windoor rather then bumping into it will keep it open, you can click it again to close it. You can spray a fire extinguisher, throw items or fire a gun while floating through space to change your direction. Simply fire opposite to where you want to go. You can change the control scheme by pressing tab. One is WASD, the other is the arrow keys. Keep in mind that hotkeys are also changed with this. -All vending machines can be hacked to obtain some contraband items from them, and many may charge extra credits to give you premium items. +Most vending machines can be hacked to obtain contraband items from them. Firesuits and winter coats offer mild protection from the cold, allowing you to spend longer periods of time near breaches and space than if wearing nothing at all. +A firesuit and a hardhat make you immune to pressure damage, allowing you to spacewalk while only worrying about the cold. Glass shards can be welded to make glass, and metal rods can be welded to make metal. Ores can be welded too, but this takes a lot of fuel. If you need to drag multiple people either to safety or to space, bring a locker or crate over and stuff them all in before hauling them off. You can grab someone by clicking on them with the grab intent, then upgrade the grab by clicking on them once more. An aggressive grab can temporarily stun someone depending on their luck with resisting out of it, allowing you to slam them on a table by clicking on it, or throw them by toggling on throwing. -Holding alt and left clicking a tile will allow you to see its contents in the top right window pane, which is much faster than right clicking. +Holding alt and left clicking a tile will allow you to see its contents in the top right window pane, which is generally faster than right clicking. The resist button will allow you to resist out of handcuffs, being buckled to a chair or bed, out of locked lockers and more. Whenever you're stuck, try resisting! You can move an item out of the way by dragging it and then clicking on an adjacent tile with an empty hand. -You can recolor certain items like jumpsuits and gloves in washing machines by also throwing in a crayon. For more advanced fashion you can spray items with a spray can to tint its colors. Some items work better than others at displaying their tints, like sterile and paper masks, or darkly colored gloves. +You can recolor certain items like jumpsuits and gloves in washing machines by also throwing in a crayon. For more advanced fashion you can spray items with a spray can to change their tint, or toy with color matrixes at the ColorMate. Maintenance is full of equipment that is randomized every round. Look around and see if anything is worth using. Some roles cannot be antagonists by default, but antag selection is decided first. For instance, you can set Security Officer to High without affecting your chances of becoming an antag - the game will just assign you to your next preferred role - or in the case that you have no such preferences set, a random role entirely. There are many places around the station to hide contraband. A few for starters: linen boxes, toilet cisterns, body bags. Experiment to find more! -On all maps, you can use a machine in the vault to deposit space cash for cargo points. Otherwise, use it to steal the station's cash and get out before the alarm goes off. -As the Captain, you are one of the highest priority targets on the station. Everything from revolutions looking to thwart your rule, to nuclear operatives seeking the disk, to traitors that need to rob you of your several high value items - or your life are all things to be concerned about. +On all maps, you can use the bank terminal in the vault to deposit space cash for cargo points. On the contrary, can be used to drain the station's cash. Just remember to get out before the alarm goes off! +As the Captain, you are one of the highest priority targets on the station. Everything from revolutions looking to thwart your rule, to nuclear operatives seeking the station's destruction, or simply down-bad antagonists looking for loot. Walk with eyes behind your head at all times. As the Captain, always take the nuclear disk and pinpointer with you every shift. It's a good idea to give one of these to another head you can trust with keeping it safe, such as the Head of Personnel. As the Captain, you have absolute access and control over the station, but this does not mean that being a horrible person won't result in mutiny and a ban. As the Captain, you have a fancy pen that can be used as a holdout dagger or even as a scalpel in surgery! As the Captain, you can purchase a new emergency shuttle using a communications console. Some require credits, while others give you credits in exchange. Keep in mind that purchasing dangerous shuttles will incur the ire of your crew. -As the Chief Medical Officer, your hypospray is like the ones that your Medical Doctors can buy, except it comes in a fancy box that can hold several more hypovials than the standard, and already comes preloaded with specially-made high-capacity hypovials that hold double the reagents the standard ones do. +As the Chief Medical Officer, your hypospray is like the ones that your Medical Doctors can buy, except it comes in a fancy box that can hold several more hypovials than the standard, and already comes preloaded with special high-capacity hypovials that hold double the reagents the standard ones do. As the Chief Medical Officer, coordinate and communicate with your doctors, chemists, and paramedics during a nuclear emergency, blob infestation, or some other crisis to keep people alive and fighting. -As a Medical Doctor, pester Research for improved surgical tools. They work faster, combine the purposes of several tools in one (scalpel/saw, retractor/hemostat, drill/cautery), and don't cost many materials to boot! -As a Medical Doctor, the surgical saw and drill are both powerful weapons, the saw is sharp and can slice and dice, while the drill can quickly blind someone if aimed for the eyes. The laser scalpel is an upgraded version producible with Research's aid, and it has the highest force of most common place weapons, while still remaining sharp. -As a Medical Doctor, your belt can hold a full set of surgical tools. Using sterilizine before each attempt during surgery will reduce your failure chance on tricky steps or when using less-than-optimal equipment. -As a Medical Doctor, you can attempt to drain blood from a husk with a syringe to determine the cause. If you can extract blood, it was caused by extreme temperatures or lasers, if there is no blood to extract, you have confirmed the presence of changelings. -As a Medical Doctor, while both heal toxin damage, the difference between charcoal and antitoxin is that charcoal will actively remove all other reagents from one's body, while antitoxin only removes various toxins - but can overdose. +As a Medical Doctor, pester Research for upgraded surgical tools. They work faster and combine the purposes of several tools in one (scalpel/saw, retractor/hemostat, drill/cautery). +As a Medical Doctor, the surgical saw and drill are both powerful weapons, the saw is sharp and can cause wounds, while the drill can quickly blind someone if aimed for the eyes. The laser scalpel is an upgraded version of the saw producible with Research's aid, and it has the highest force of any printable weapon, while still remaining sharp. +As a Medical Doctor, your belt can hold up to a full set of surgical tools alongside most other medical equipment. +As a Medical Doctor, sterilizine will dramaticlaly increase the chances of consecutive surgical steps. Consider applying some during tricky surgical steps or when using less-than-optimal equipment. +As a Medical Doctor, you can attempt to drain blood from a husk with a syringe to determine the cause. If you can extract blood, it was likely caused by extreme temperatures or lasers, if there is no blood to extract, you may have confirmed the presence of changelings. +As a Medical Doctor, while both heal toxin damage, the difference between charcoal and antitoxin is that charcoal will actively remove all other reagents from one's body with no maluses, while antitoxin only removes various toxins - but can overdose. As a Medical Doctor, you can surgically implant or extract things from people's chests by performing a cavity implant. This could range from inserting a suicide bomb to embedding the nuke disk into the Captain's chest. -As a Medical Doctor, it's of utmost urgency that you tend to anyone who's been hugged by a facehugger. You only have a couple of minutes from the initial attachment to perform organ manipulation to their chest and remove the rapidly developing alien embryo before it bursts out and immediately kills your patient. +As a Medical Doctor, it's of utmost urgency that you tend to anyone who's been hugged by a facehugger. You only have a couple of minutes from the initial attachment to perform organ manipulation on their chest and remove the alien embryo before it bursts out as a dangerous alien larva. As a Medical Doctor, you must target the correct limb and be on help intent when trying to perform surgery on someone. Using disarm attempt will intentionally fail the surgery step. -As a Medical Doctor, corpses with the "...and their soul has departed" description no longer have a ghost attached to them and can't be revived. However it may prove useful to be creative in your revivification techniques with these bodies. +As a Medical Doctor, corpses with the "...and their soul has departed" description no longer have a ghost attached to them and can't be revived. However it may prove useful to keep an eye on these corpses in event their owner comes back. +As a Medical Doctor, morgue slabs will display differing colors depending on what's inside. Red is a currently-unrevivable corpse, yellow is a non-organic object, and green is a currently-revivable corpse. The latter-most will play an alarm whenever a ghost occupies the dead body. As a Medical Doctor, treating plasmamen is not impossible! Salbutamol and epinephrine stops them from suffocating due to lack of internals and showers stop them from burning alive. You can even perform surgery on them by doing the procedure on a roller bed under a shower. As a Medical Doctor, you can point your penlight at people to create a medical hologram. This lets them know that you're coming to treat them. As a Medical Doctor, you can extract implants by holding an empty implant case in your offhand while performing the extraction step. As a Medical Doctor, clone scanning people will implant them with a health tracker that displays their vitals in the clone records. Useful to check on crew members that didn't activate suit sensors! As a Medical Doctor, you can deal with patients who have absurd amounts of wounds by putting them in cryo. This will slowly treat all of their wounds simultaneously, but is much slower than direct treatment. -As a Medical Doctor, Critical Slash wounds are one of the most dangerous conditions someone can have. Apply gauze, epipens, sutures, cauteries, whatever you can, as soon as possible! +As a Medical Doctor, weeping avulsions are one of the most dangerous conditions someone can have. Apply gauze, epipens, sutures, cauteries, whatever you can, as soon as possible! As a Medical Doctor, Saline-Glucose not only acts as a temporary boost to a patient's blood level, it also speeds regeneration! Perfect for drained patients! -As a Medical Doctor, medical gauze is an incredibly underrated tool. It can be used to entirely halt a limb from bleeding or sling one that's been shattered until it can be given proper attention. This even works on the dead, too! Be sure to stop someone's bleeding whether they're in critical condition or a corpse, as dragging someone whom is bleeding will rapidly deplete them of all their blood. +As a Medical Doctor, medical gauze is an incredibly useful tool. It can be used to staunch a limb's bleeding bleeding or sling one that's been broken until it can be given proper attention. This even works on the dead, too! +As a Medical Doctor, dragging someone who is bleeding will rapidly cause their blood levels to drop into lethal levels - use fireman carrying, roller beds or even closets and crates to transport patients without giving yourself more work. As a Chemist, there are dozens of chemicals that can heal, and even more that can cause harm. See which chemicals have the best synergy, both in healing, and in harming. Experiment! As a Chemist, some chemicals can only be synthesized by heating up the contents in the chemical heater. As a Chemist, you will be expected to supply crew with certain chemicals. For example, clonexadone and mannitol for the cryo tubes, unstable mutagen and saltpetre for botany as well as healing pills and patches for the front desk. As a Chemist, you can make 100u bottles from plastic sheets. The ChemMaster can produce infinite 30u glass bottles as well. -As a Chemist, be sure to stock up some hypovials with useful chemicals for any doctors looking to heal on the go, you can also print out the deluxe hypovials at an autolathe specifically for the CMO's special hypospray. -As a Chemist, the reagent dartgun, while neutered in its ability to harm - can still be loaded up with morphine for a ghetto sedation weapon, and a quick shot of charcoal can make a slime hybrid regret their life choices in an instant. +As a Chemist, be sure to stock up some hypovials with useful chemicals for any doctors looking to heal on the go - you can also print deluxe hypovials at an autolathe for the CMO's special hypospray. +As a Chemist, the reagent dartgun, while neutered in its ability to harm - can still be loaded with morphine for a ghetto sedation weapon, and a quick shot of charcoal can make a slime hybrid regret their life choices in an instant. As a Geneticist, you can eject someone from cloning early by clicking on the cloner pod with your ID. Note that they will suffer more genetic damage and may lose vital organs from this. -As a Geneticist, becoming a hulk makes you capable of dealing high melee damage, becoming immune to most traditional stuns, and punching through walls. However, you can't fire guns, and will lose your hulk status if you take too much damage. -As the Virologist, your viruses can range from healing powers so great that you can heal out of critical status, or diseases so dangerous they can kill the entire crew with airborne spontaneous combustion. Experiment! +As a Geneticist, becoming a hulk makes you capable of dealing high melee damage, becoming immune to most traditional stuns, and punching through walls. However, you can't fire guns, and will lose your hulk status if you enter critical condition. +As the Virologist, your viruses can range from healing powers so great they heal you out of critical condition, or diseases so dangerous they can kill the entire crew with airborne spontaneous combustion. Experiment! As the Virologist, you only require small amounts of vaccine to heal a sick patient. Work with the Chemist to distribute your cures more efficiently. As the Research Director, you can take AIs out of their cores by loading them into an intelliCard, and then from there into an AI system integrity restorer computer to revive and/or repair them. As the Research Director, you can lock down cyborgs instead of blowing them up. Then you can have their laws reset or if that doesn't work, safely dismantled. As the Research Director, you can upgrade your modular console with better computer parts to speed up its functions. This can be useful when using the AI system integrity restorer. As the Research Director, your console's NTnet monitoring tool can be used to retrieve airlock passkeys, provided that someone used a door remote. -As a Scientist, you can use the mutation toxin obtained from green slimes to turn yourself into a jelly mutant. Each subspecies has unique features - for example telepathic powers, duplicating bodies or integrating slime extracts for several unique effects! +As a Scientist, you can use the mutation toxin obtained from green slimes to turn yourself into a jelly mutant. Each subspecies has unique features - from telepathic powers and duplicating bodies or integrating slime extracts for several unique effects! As a Scientist, you can maximize the number of uses you get out of a slime by feeding it slime steroid, created from purple slimes, while alive. You can then apply extract enhancer, created from cerulean slimes, on each extract. -As a Scientist, you can disable anomalies by scanning them with an analyzer, and then sending a signal on the frequency it gives you with a remote signalling device. Alternatively, you can print out anomaly defusal tools which can instantly disable an anomaly at the protolathe with some research, both of these methods will leave behind an anomaly core, which can be used to construct a Phazon mech, or be used in the destructive analyzer for a 10,000 point bonus! +As a Scientist, you can disable anomalies by scanning them with an analyzer, and then sending a signal on the frequency it gives you with a remote signalling device. Alternatively, you can print anomaly defusal tools which can instantly disable an anomaly at the protolathe with some research, both of these methods will leave behind an anomaly core, which can be used for a couple scientific boons. As a Scientist, researchable stock parts can seriously improve the efficiency and speed of machines around the station. In some cases, it can even unlock new functions. As a Scientist, you can generate research points by letting the tachyon-doppler array record increasingly large explosions. As a Scientist, getting drunk just enough will speed up research. Skol! As a Scientist, you can get points by placing slime cores into the destructive analyzer! This even works with crossbred slime cores. -As a Scientist, you can get a minuscule amount of points by sacrificing a packet of seeds from Hydroponics into the destructive analyzer! While each individual one may not yield many points per, you can quite easily amass a very large variety of seeds, which could add up over time for a couple extra minutes shaved off of maxing out RND. +As a Scientist, you can get points by placing seed packets into the destructive analyzer! This even works with mutated plants. +As a Scientist, any machine which prints things - be it your protolathe or circuit imprinters - can be used to teleport raw materials directly from the ore silo straight into your workplace. As a Roboticist, keep an ear out for anomaly announcements. If you get your hands on an anomaly core, you can build a Phazon mech! -As a Roboticist, you can repair your cyborgs with a welding tool. If they have taken burn damage from lasers, you can remove their battery, expose the wiring with a screwdriver and replace their wires with a cable coil. +As a Roboticist, you can repair a cyborg's brute damage with a welding tool. If they have taken burn damage, you can remove their battery, expose the wiring with a screwdriver and replace their wires with a cable coil. As a Roboticist, you can reset a cyborg's module by cutting and mending the reset wire with a wire cutter. -As a Roboticist, pay mind when toying with a cyborg's wires. It's best to pulse wires before immediately cutting them, as cutting them right away without knowing what they do may sever them from the AI, or disable their camera. +As a Roboticist, pay mind when toying with a cyborg's wires. It's best to pulse wires before immediately cutting them, as cutting them right away without knowing what they do may sever them from the AI or disable their camera. As a Roboticist, you can greatly help out Shaft Miners by building a Firefighter APLU equipped with a hydraulic clamp and plasma cutter. The mech is ash storm proof and can even walk across lava! -As a Roboticist, you can augment people with cyborg limbs. Augmented limbs are immune to the vacuum of space and temperatures while they can very easily be repaired with welders (brute) and cable coils (burn). -As a Roboticist, you can use your printer that is linked to the ore silo to teleport mats into your work place! +As a Roboticist, you can augment people with cyborg limbs. Augmented limbs are immune both pressure and temperature while being very easily be repaired with welders (brute) and cable coils (burn). As a Roboticist, you can upgrade cleanbots with adv mops and brooms to make them faster and better! As a Roboticist, you can upgrade medical bots with diamond-tipped syringes, hyposprays, and chemistry machine boards to make their injections pierce hardsuits, work faster, and inject higher quality medicines! As the AI, you can click on people's names when they speak over the radio to jump your eye to them. This only works if there are cameras that can see them and are not wearing anything which would obsfuscate their face or tracking capabilities. As the AI, you can quickly open and close doors by holding shift while clicking them, bolt them when holding ctrl, and even shock them while holding alt. As the AI, you can take pictures with your camera and upload them to newscasters. Cyborgs also share from this pool of pictures. As a Cyborg, choose your module carefully, as only having your reset wire cut and mended by someone capable of manipulation will let you repick it. If possible, refrain from choosing a module until a situation that requires one occurs. -As a Cyborg, you are immune to most forms of stunning, and excel at almost everything far better than humans. However, flashes and EMPs can easily stunlock you and you fall short in performing any tasks which require hands. -As a Cyborg, you are impervious to fires and heat. If you are rogue, you can release plasma fires everywhere and walk through them without a care in the world! +As a Cyborg, you are immune to most forms of stuns, and excel at almost everything far better than humans. However, both flashes and EMPs can easily stunlock you and you fall short in performing most complex tasks involving hands. +As a Cyborg, you are impervious to fires and heat. If you are feeling malfunctional, you can release plasma fires all over and walk through them without a care in the world! As a Cyborg, you are extremely vulnerable to EMPs as EMPs both stun you and damage you. The ion rifle in the armory or a traitor with an EMP kit can kill you in seconds. As a Service Cyborg, your spray can knocks people down. However, it is blocked by gas masks. -As an Engineering Cyborg, you can attach air alarm/fire alarm/APC frames to walls by placing them on the floor and using a screwdriver on them. Alternatively, you can use your in-built pseudo-hand manipulator to show those organics who's boss! It can even perform complex tasks such as removing cells from APCs, or inserting plasma canisters into radiation collectors. +As an Engineering Cyborg, you can attach air alarm/fire alarm/APC frames to walls by placing them on the floor and using a screwdriver on them. Alternatively, you can use your manipulator to show those organics who's boss to perform other basic tasks such as removing cells from APCs or inserting plasma canisters into radiation collectors. As a Medical Cyborg, you can fully perform surgery and even augment people. Best of all, they have a 0% failure chance, even if done on the floor. As a Janitor Cyborg, you are the bane of all slaughter demons and can even foil Bubblegum himself. Cleaning up blood stains will severely gimp them, although the latter may just turn you into robotic paste. As a Janitor Cyborg, you get a fancy bottle of drying agent! If you want to be nice, spray the janitor's galoshes with them to magically upgrade them to absorbent galoshes which automatically dry tiles. As the Chief Engineer, you can rename areas or create entirely new ones using your station blueprints. -As the Chief Engineer, your hardsuit is significantly better than everybody else's. It has the best features of both engineering and atmospherics hardsuits - boasting nigh-invulnerability to radiation and all atmospheric conditions. +As the Chief Engineer, your hardsuit is significantly better than everybody else's. It has the best features of both engineering and atmospherics hardsuits - boasting complete invulnerability to radiation and most atmospheric conditions. As the Chief Engineer, you can spy on and even forge PDA communications with the message monitor console! The key is in your office. As the Chief Engineer, your locker contains a jetpack upgrade that can be attached to hardsuits. As the Chief Engineer, the power flow control console in your office will show you APC infos and lets you control them remotely. @@ -104,7 +108,7 @@ As an Engineer, don't underestimate the humble P.A.C.M.A.N. generators. With upg As an Engineer, your departmental protolathe and circuit printer can manufacture the necessary circuit boards and components to build just about anything. Make extra medical machinery everywhere! Build a gibber for security! Set up an array of emitters pointing down the hall! The possibilities are endless! As an Engineer, you can pry open secure storage by disabling the engine room APC's environmental breaker. This is obviously a bad idea if the engine is running. As an Engineer, don't forget that Cargo has access to a meteor defense satellite that can be ordered BEFORE meteors hit the station. Any idle Engineers should have this on their to-do list. -As an Engineer, your RCD can be reloaded with mineral sheets instead of just compressed matter cartridges. Materials which are combined alloys of other materials (such as reinforced glass and plasteel) provide more matter per sheet to the RCD. +As an Engineer, your RCD can be reloaded with mineral sheets instead of just compressed matter cartridges. Materials which are combined alloys of other materials (such as reinforced glass and plasteel) provide significantly more matter per sheet to the RCD. As an Atmospheric Technician, you can unwrench a pipe regardless of the pressures of the gases inside, but if they're too high they can burst out and injure you! As an Atmospheric Technician, look into replacing your gas pumps with volumetric gas pumps, as those move air in flat numerical amounts, rather than percentages which leave trace gases. As an Atmospheric Technician, you are better suited to fighting fires than anyone else. As such, you have access to better firesuits, backpack firefighter tanks, and a completely heat and fire proof hardsuit. @@ -112,7 +116,8 @@ As an Atmospheric Technician, your backpack firefighter tank can launch resin. T As an Atmospheric Technician, your ATMOS holofan projectors can blocks gases and heat while allowing objects to pass through. With it, you can quickly contain gas spills, fires and hull breaches. Or, use it to create a plasmaman friendly lounge. As an Atmospheric Technician, burning a plasma/oxygen mix inside the incinerator will not only produce power, but also gases such as tritium and water vapor. As an Atmospheric Technician, you can change the layer of a pipe by clicking with it on a wrenched pipe or other atmos component of the desired layer. -As an Atmospheric Technician, you can take a few cans worth of N2/N2O and cool it down at local freezers. This is a good idea when dealing with (or preparing for) a supermatter meltdown. +As an Atmospheric Technician, you can take a few cans worth of N2 and cool it down at local freezers. This is a good idea when dealing with (or preparing for) a supermatter meltdown. +As an Atmospheric Technician, while N2O may be good at cooling the supermatter, it will quickly degrade into flammable oxygen. As the Head of Security, you are expected to coordinate your security force to handle any threat that comes to the station. Sometimes it means making use of the armory to handle a blob, sometimes it means being ruthless during a revolution or cult. As the Head of Security, you can call for executions or forced cyborgization, but may require the Captain's approval. As the Head of Security, don't let the power go to your head. You may have high access, great equipment, and a miniature army at your side, but being a terrible person without a good reason is grounds for banning. @@ -123,10 +128,10 @@ As the Warden, never underestimate the power of tech slugs! Scattershot fires a As the Warden, you can use a surgical saw on riot shotguns to shorten the barrel, making them able to fit in your backpack. Make sure to empty them prior lest you blast yourself in the face! As the Warden, you can implant criminals you suspect might re-offend with devices that will track their location and allow you to remotely inject them with disabling chemicals. As the Warden, you can use handcuffs on orange prisoner shoes to turn them into cuffed shoes, forcing prisoners to walk and potentially thwarting an escape. -As the Warden, tracker implants can be used on crewmembers. Doing this will let you track their person even without suit sensors and even instantly teleport to them at the local teleporter, although the implant will biodegrade after 5 minutes if its holder ever expires. +As the Warden, tracker implants can be used on crewmembers. Doing this will let you track their person even without suit sensors and even instantly teleport to them with the local teleporter. Keep in mind the implant will biodegrade after 5 minutes if its holder ever expires. As the Warden, cryostasis shotgun darts hold 10u of chemicals that will not react until it hits someone. -As the Warden, chemical implants can be loaded with a cocktail of healing or combat chems, perfect for the HoS or other security officers to make use of in a pinch. Be sure to keep a eye on them though, as they cannot be injected without the prisoner management console! EMPs or starvation might lead to the chemical implant going off preemptively. -As the Warden, tracker implants can be used on your security officers. Doing this will let you be able to message them when telecomms are out, or when you suspect comms are compromised. This is also good against rogue AIs as the prisoner tracker doesn't leave logs or alarms for the AI. +As the Warden, chemical implants can be used both on friends and foe alike. Give your underlings a cocktail of healing stimulants to be injected in a pinch, or give your parolees some lethal incentive to not reoffend. +As the Warden, tracking implants can be used on both friends and foe alike. Give your underlings one to keep tabs on their locations and privately message them if you suspect communications may be comprimised, or use them to keep track of your parolees and their general doings. As a Security Officer, remember that correlation does not equal causation. Someone may have just been at the wrong place at the wrong time! As a Security Officer, remember that your belt can hold more than one stun baton. As a Security Officer, remember harm beating someone in the head with a blunt object can deconvert them form a being a revolutionary! This sadly doesn't work against either cult, nor does this protect them from getting reconverted unlike a mindshield implant. @@ -138,45 +143,48 @@ As a Security Officer, examining someone while wearing your security HUDglasses As a Security Officer, you can take out the power cell on your baton to replace it with a better or fully charged one. Just use a screwdriver on your baton to remove the old cell. As a Security Officer, you can place just about any firearm on your vest slot, and this even works with other non-standard armor-substitutes like security winter coats! As the Detective, people leave fingerprints everywhere and on everything. With the exception of white latex, gloves will hide them. All is not lost, however, as gloves leave fibers specific to their kind such as black or nitrile, pointing to a general department. -As the Detective, you can use your forensics scanner from a distance. Use this to scan boxes or other storage containers. +As the Detective, you can use your forensics scanner from a distance. Use this to scan boxes or other storage containers which might vacuum up your scanner on interaction. As the Detective, your revolver can be loaded with .357 ammunition. Use a screwdriver to permanently modify your revolver into using this type of ammunition, be warned however, firing it has a decent chance to cause the revolver to misfire and shoot you in the foot. As the Lawyer, try to negotiate with the Warden if sentences seem too high for the crime. As the Lawyer, you can try to convince the Captain and Head of Security to hold trials for prisoners in the courtroom. As the Head of Personnel, you are not higher ranking than other heads of staff, even though you are expected to take the Captain's place first should he go missing. If the situation seems too rough for you, consider allowing another head to become temporary Captain. -As the Head of Personnel, you are just as large a target as the Captain because of the potential power your ID and computer can hand out and your comparative vulnerability. +As the Head of Personnel, you are just as large a target as the Captain because of the potential power your ID and computer can hand out with your comparative vulnerability. As the Mime, your invisible wall power blocks people as well as projectiles. You can use it in a pinch to delay your pursuer. As the Mime, you can use :r and :l to speak through your ventriloquist dummy. Sadly, this only works if your vow is broken, but at least you don't have to sacrifice your dignity by actually talking. As the Mime, your oath of silence is your source of power. Breaking it robs you of your powers and of your honor. -As the Mime, breaking your vow of silence is seen as incredibly dishonorable. Most people will seek to trouble and generally ignore a talking Mime. +As the Mime, breaking your vow of silence is seen as incredibly dishonorable. Most people will generally seek to trouble or even harm a talking Mime. +As the Mime, your PDA can infect others' with a virus that mutes their ringtone. Finally, peace and quiet. As the Clown, if you lose your banana peel, you can still slip people with your PDA! Honk! As the Clown, eating bananas heals you slightly. Honk! As the Clown, your Holy Grail is the mineral bananium, which can be given to the Roboticist to build you a fun and robust mech beloved by everyone. As the Clown, you can use your stamp on a sheet of flattened cardboard as the first step of making a honkbot. Fun for the whole crew! -As the Clown, your number one way to win over the crew's favor is by telling jokes and putting forth effort into being comedic. Everyone loves a good clown, but everyone despises a bad one. +As the Clown, your number one way to win over the crew's favor is by putting forth proper effort to be comedic. Everyone loves a good clown, but on a similar note everyone despises a bad one. +As the Clown, your PDA can infect others' with a virus that makes their ringtone a bike horn. You can get more charges by slipping people with your PDA! Honk! As the Chaplain, your null rod has a lot of functions: while being an incredibly powerful weapon with an array of potential utilities depending upon the skin you chose for it, it also nulls cultist and wizard magic entirely, making you immune to them both and in some cases even harming the caster so long as you keep it in a pocket or in your hands. As the Chaplain, you can bless any water container by hitting it with your bible to turn it into holy water. Holy water has a myriad of uses against both cults and large amounts of it are a great contributor to success against them. As the Chaplain, your null rod will kill clockwork marauders in two hits while actively hindering their overall combat capabilities just by being nearby to them. As the Chaplain, your bible is also a container that can store a singular small item. Depending on your God, your starting bible may come with a surprise! -As the Chaplain, you are much more likely to get a response by praying to the Gods than most people as your prayers will send a special noise cue directly to them! To further your chances of getting a response even further, pretty up your altar with crayon runes and wire art, and be sure to put a decent amount of effort into your prayers themselves. The Gods don't like lazy bums. +As the Chaplain, you are much more likely to get a response by praying to the Gods than most people as your prayers will send a special noise cue directly to them! To further your chances of getting a response even further, pretty up your altar with crayon runes and wire art, and be sure to put a decent amount of effort into your prayers themselves! The Gods always love a good ritual display. As a Botanist, you can hack the MegaSeed Vendor to get access to more exotic seeds. These seeds can alternatively be ordered from cargo. As a Botanist, you can mutate the plants growing in your hydroponics trays with unstable mutagen or, as an alternative, crude radioactives from chemistry to get special variations. As a Botanist, you should look into increasing the potency of your plants. This is shown by the size of the plant's sprite, and can increase the amount of chemicals, points gained from grinding them in the biogenerator, and lets people know you are a proficient botanist. As a Botanist, you can combine production trait chemicals and mix your own complex chemicals inside of the plants themselves using precursors. Chlorine (blumpkin) + radium and phosphorus (glowshrooms) equals unstable mutagen! As a Botanist, earthsblood is an incredibly powerful chemical found in Ambrosia Gaia, it heals all types of damages very rapidly but causes lingering brain damage and has a nasty overdose. You can combine the chemicals from watermelons (water), grass (hydrogen), and cherries (sugar) to mix mannitol in with your earthsblood to completely counteract its main drawback! -As a Botanist, Ambrosia Gaia is a plant mutated from Ambrosia Deus, which is a plant mutated from Ambrosia Vulgaris. The reagent contained within this plant known as earthsblood makes for a vastly superior fertilizer than most, giving decent stat boosts to most stats, and automatically killing weeds and pests! +As a Botanist, Ambrosia Gaia is a plant mutated from Ambrosia Deus, which in turn is mutated from Ambrosia Vulgaris. The reagent contained within this plant known as earthsblood makes for a vastly superior fertilizer than most, giving decent stat boosts to most stats, and automatically killing weeds and pests! As a Cook, you can load your food into snack vending machines. As a Cook, you can rename your custom made food with a pen. -As a Cook, any food you make will be much healthier than the junk food found in vendors. Having the crew routinely eating from you will provide minor buffs. +As a Cook, most any food you make will be much healthier than the junk food found in vendors. Having the crew routinely eating from you will provide minor buffs. As a Cook, being in the kitchen will make you remember the basics of Close Quarters Cooking (CQC). It is highly effective at removing Assistants from your workplace. -As a Cook, your Kitchenmate can vend out trays that fit on your belt slot. These trays pick up 7 food items at a time and are a quick way to transport large meals. +As a Cook, your KitchenMate can vend out trays that fit on your belt slot. These trays pick up 7 food items at a time and are a quick way to transport large meals. As a Cook, the advanced roasting stick is used to cook food at a distance, and can be used on SME, singularity, and other objects that cook food normally. As a Cook, the deep frier is a tool which can turn very large quantities of seemingly useless objects into food, albeit nutritionally poor and awful tasting food, but hey, food is food. -As the Bartender, the drinks you start with only give you the basics. If you want more advanced mixtures, look into working with chemistry, hydroponics, or even mining for things to grind up and throw in! +As the Bartender, the drinks you start with only give you the basics. If you want more advanced mixtures, look into working with chemistry, hydroponics, and even mining for things to grind up and throw in! As the Bartender, you can use a circular saw on your shotgun to make it easier to store. Make sure to empty them prior lest you blast yourself in the face! -As a Janitor, if someone steals your janicart, you can instead use your spray bottles, soap, and arsenal of slippery objects to exact your bloody revenge.. ..or just order another one from Cargo. +As a Janitor, if someone steals your janicart, you can instead use your spray bottles, soap, and arsenal of slippery objects to exact your bloody revenge... or just order another one from Cargo. As a Janitor, the trash bag can be used to hold more than trash. Tools, medical equipment, smuggled nuclear disks... You name it! As a Janitor, mousetraps can be used as bomb triggers to booby-trap containers. -As the Curator, for what it's worth, your toys and position are fairly robust. You can order a claymore, a whip, or a free space suit all at roundstart. The claymore is fairly underwhelming, however the whip is an incredibly robust weapon capable of always disarming, and that space suit is also better than the ones in EVA. +As a Janitor, you can use the cartridge preinstalled into your PDA to get coordinates of various janitorial equipments around the station, such as mops or your janicart. +As the Curator, for what it's worth, your toys and position are fairly robust. You can order a claymore, a whip, or a free space suit all at roundstart. The claymore is has decent force, while the whip is an incredibly robust weapon capable of disarming, and the space suit is better than the ones in EVA. As the Curator, be sure to keep the shelves stocked and the library clean for crew. As a Cargo Technician, you can hack MULEbots to make them faster, run over people in their way, and even let you ride them! As a Cargo Technician, you can order contraband items from the supply shuttle console by de-constructing it and using a multitool on the circuit board, the re-assembling it. @@ -187,30 +195,32 @@ As the Quartermaster, be sure to check the manifests on crates you receive to ma As the Quartermaster, you can construct an express supply console that instantly delivers crates by drop pod. The impact will cause a small explosion as well. As a Shaft Miner, the northern side of Lavaland has a lot more rare minerals than on the south. As a Shaft Miner, every monster on Lavaland has a pattern you can exploit to minimize damage from the encounters. -As a Shaft Miner, you can harvest goliath plates from goliaths and upgrade your explorer's suit, mining hardsuits as well as Firefighter APLUs with them, greatly reducing incoming melee damage. +As a Shaft Miner, you can harvest goliath plates from goliaths and upgrade your explorer suit, mining hardsuits as well as Firefighter APLUs with them, greatly reducing incoming melee damage. As a Shaft Miner, always have a GPS on you, so a fellow miner or cyborg can come to save you if you die. As a Shaft Miner, you can craft a variety of equipment from the local fauna. Bone axes, lava boats and ash drake armour are just a few of them! -As a Traitor, the cryptographic sequencer (emag) can not only open lockers, crates, APCs and more. It can also do things like hack cyborgs, and even cause bots to go berserk. Use it on the right machines, and you can even contact the Syndicate. Experiment! +As a Traitor, the cryptographic sequencer (emag) can not only open lockers, crates, APCs and more. It can also do things like hack cyborgs and cause bots to go berserk. Use it on the right machines, and you can even contact the Syndicate. Experiment! As a Traitor, subverting the AI to serve you can make it an extremely powerful ally. However, be careful of the wording in the laws you give it, as it may use your poorly written laws against you! As a Traitor, the Captain and the Head of Security are two of the most difficult to kill targets on the station. If either one is your target, plan carefully. As a Traitor, you can manufacture and recycle revolver bullets at a hacked autolathe, making the revolver an extremely powerful tool if you manage to nab an autolathe for yourself. As a Traitor, you may sometimes be assigned to hunt other traitors, and in turn be hunted by others. As a Traitor, the syndicate encryption key is very useful for coordinating plans with your fellow traitors -- or, of course, betraying them. As a Traitor, plasma can be injected into many things to sabotage them. Power cells, light bulbs, cigars and e-cigs will all explode when used. +as a Traitor, swiping another traitor's uplink against your own while it is unlocked will drain the funds from theirs, regardless of its lock status. As a Nuclear Operative, communication is key! Use :t or :h to speak to your fellow operatives and coordinate an attack plan. -As a Nuclear Operative, you should look into purchasing one of the three Syndicate cyborgs in your uplink, as they can provide useful tactical support, function as walking access machines, are immune to conventional stuns, and can easily take down the AI. +As a Nuclear Operative, you should look into purchasing one of the three Syndicate cyborgs in your uplink, as they can provide useful tactical support by opening airlocks without trouble, easily sabotaging electrical systems, and killing the AI with comical ease. As a Nuclear Operative, stick together! While your equipment is robust, your fellow operatives are much better at saving your life: they can drag you away from danger while stunned and provide cover fire. As a Nuclear Operative, you might end up in a situation where the AI has bolted you into a room. Having some spare C4 in your pocket can save your life. As a Monkey, you can crawl through air or scrubber vents by alt+left clicking them. You must drop everything you are wearing and holding to do this, however. As a Monkey, you can still wear a few human items, such as backpacks, gas masks and hats, and still have two free hands. As the Malfunctioning AI, you can shunt to an APC if the situation gets bad. This disables your doomsday device if it is active. As the Malfunctioning AI, you should either order your cyborgs to dismantle the robotics console or blow it up yourself in order to protect them. Do note that this will prevent you from hacking any cyborg made in the future. -As the Malfunctioning AI, look into flooding the station with plasma fires to kill off large portions of the crew, letting you pick off the remaining few with space suits who escaped. -Xenomorphs? Any source of burn damage severely harms them. Science can craft deadly tech shells like pulse slugs and laser scatter shot that are highly effective against any alien threat. +As the Malfunctioning AI, look into flooding the station with plasma to kill off large portions of the crew, letting you pick off the remaining few with space suits who escaped. +As the Malfunctioning AI, keep in mind that hacked cyborgs will explode violently enough to create breaches and gib bystandars when detonated as opposed to the comparatively gentle boom of the uncomprimised. +When fighting Aliens, any source of burn damage severely harms them. Science can craft deadly tech shells that are highly effective against any alien threat. When fighting Aliens, it can be a good idea to turn off the gravity due to the every caste of alien's lack of zero-gravity control, especially Hunters and Drones, which are completely and utterly helpless. -When fighting Aliens, consider a shield. A raised shield can halt their attempts to slash at you, and their disarms will always remove an item in your hand before knocking you over, always having something in your hand, no matter how small or worthless, can save your life. +When fighting Aliens, consider investing in a shield. A raised shield can halt their attempts to slash at you, and their disarms will always attempt to remove an item in your hand before knocking you over, meaing having something in your hand - no matter how small or worthless - can save your life. As an Alien, your melee prowess is unmatched, but your ranged abilities are sorely lacking. Make use of corners to force a melee confrontation! -As an Alien, you take double damage from all burn attacks, such as lasers, welding tools, and fires. Furthermore, fire can destroy your resin and eggs. Expose areas to space to starve away any flamethrower fires before they can do damage! +As an Alien, you take double damage from all burn attacks, such as lasers, welding tools, and fires. Furthermore, fire can destroy your resin and eggs. Expose areas to space to starve away any flames before they can do damage! As an Alien, resin floors not only regenerate your plasma supply, but also passively heal you. Fight on resin floors to gain a home turf advantage! As an Alien, the facehugger is by far your most powerful weapon because of its ability to instantly win a fight. Remember however that certain helmets, such as biohoods or space helmets will completely block facehugger attacks. As an Alien, you are unable to pick up or use any human items or machinery. Instead, you should focus on sabotaging APCs, computers, cameras and either stowing, spacing, or melting any weapons you find. @@ -234,9 +244,9 @@ As a Revolutionary, cargo can be your best friend or your worst nightmare. In th As a Revolutionary, your main power comes from how quickly you spread. Convert people as fast as you can and overwhelm the heads of staff before security can arm up. As a Changeling, the Extract DNA sting counts for your genome absorb objective, but does not let you respec your powers. As a Changeling, you can absorb someone by strangling them and using the Absorb verb; this gives you the ability to rechoose your powers, the DNA of whoever you absorbed, the memory of the absorbed, and some samples of things the absorbed said. -As a Changeling, absorbing someone will give you their full memory. This can include things such as a Traitor's uplink, thus absorbing one will allow you to access the Traitor uplink and buy toys for your Changeling self to abuse. -As a Changeling, absorbing another Changeling will permanently boost your chemical reserve, allow you to pick more abilities, and make the victim unable to revive. Be careful when exposing your identity to other Changelings, as they may be out of those wonderful benefits. -As a Changeling, BZ gas will dramatically slow down or even halt your natural chemical regeneration, be sure to avoid it at all costs as some lunatics may try and flood portions of the station to deal with you. +As a Changeling, absorbing someone will give you their full memory. This can include things such as a Traitor's uplink. +As a Changeling, absorbing another Changeling will permanently boost your chemical reserve, allow you to pick more abilities, and make the victim unable to revive. Be careful when exposing your identity to other Changelings, as they may be out for those wonderful benefits. +As a Changeling, BZ gas will dramatically slow down or even halt your natural chemical regeneration. As a Changeling, death is not the end for you! You can revive after 40 seconds from being dead by triggering your stasis ability, and then waiting for the prompt to resurrect yourself to show up. As a Changeling, your Regenerate Limbs power will quickly heal all of your wounds, but they'll still leave scars. Changelings can use Fleshmend to get rid of scars, or you can ingest Carpotoxin to get rid of them like a normal person. As a Cultist, do not cause too much chaos before your objective is completed. If the shuttle gets called too soon, you may not have enough time to win. @@ -293,21 +303,20 @@ You can light a cigar on a supermatter crystal. Using sticky tape on items can make them stick to people and walls! Be careful, grenades might stick to your hand during the moment of truth! In a pinch, stripping yourself naked will give you a sizeable resistance to being tackled. What do you value more, your freedom or your dignity? Wearing riot armor makes you significantly more effective at performing tackle takedowns, but will use extra stamina with each leap! It will also significantly protect you from other tackles! -Epipens contain a powerful coagulant that drastically reduces bleeding on all bleeding wounds. If you don't have time to properly treat someone with lots of slashes or piercings, stick them with a pen to buy some time! +Emergency epinephrine pens contain a powerful coagulant that drastically reduces bleeding on all bleeding wounds. If you don't have time to properly treat someone with lots of slashes or piercings, stick them with a pen to buy some time! Anything you can light a cigarette with, you can use to cauterize a bleeding wound. Technically, that includes the supermatter. -Suit storage units, when hacked, entirely purge radiation from any carbon mob put inside of them when cycling, at the cost of some horrific burns, this is a very effective strategy to clean someone up after they bathed in the engine. -Laser pointers can be upgraded by replacing its micro laser with a better one from RnD! Use a screwdriver on it to remove the old laser. Upgrading the laser pointer gives you better odds of stunning a cyborg, and even blinding people with sunglasses. -Being out of combat mode makes makes you deal less damage to people and objects when attacking. This stacks with the penalty incurred by resting. -Resting makes you deal less damage to people and objects when attacking. This stacks with the penalty incurred by being out of combat mode. -You do not regenerate as much stamina while in combat mode. Resting (being on the ground) makes you regenerate stamina faster. +Suit storage units, when hacked, entirely purge radiation from any carbon mob put inside of them when cycling, at the cost of some horrific burns, this is a very effective strategy to clean someone of radiation after an engine bath. +Laser pointers can be upgraded by replacing its micro-laser with a higher-tiered one from Research! Use a screwdriver on it to remove the old laser. Upgrading the laser pointer gives you better odds of stunning a cyborg, and even lets you blind people wear sunglasses. +Resting makes you deal less damage to people and objects when attacking. +Resting makes you regenerate stamina faster. Keybinds can be reassigned in character setup on the keybindings tab. This is extremely useful, especially if you know how to use independent binds. -If your suit sensors have been shorted out, you can use cable coil to fix them by using the coil on your suit. Your suit needs to be in proper condition, however. -Most clothing when damaged can be repaired using cloth, but there may be some clothes out there that will require different stacks of materials. +If your suit sensors have been shorted out, you can fix them by using the coil on your suit. +Most clothing damage can be repaired using cloth, but there may be some clothes out there that will require different stacks of materials. You should under no circumstances, teleport bread. Food made from upgraded machines has a higher quality. Food with a high enough quality can give good moodlets even if your species dislikes the kind of food! Frying something makes it edible, while still maintaining its original functionality. Slimepeople are damaged by most things that heal toxin damage, and healed by most things that deal it. You can recognise people with this functionality through them having a cyan coloured species name when examined! EMPs can be created by mixing uranium and iron. The power of the pulse is determined by the distance from its epicentre, and the maximum distance is determined by the volume of the reaction! -Lizards start with a disabled mutation that allows them to breath fire. This can be unlocked through the usage of genetics! -Several loadout items can be unlocked through progress in parts of the game. The progress for these can be tracked in the loadout menu. - +Some lizardpeople start with an unactivated mutation that allows them to breath fire. This can be unlocked through the usage of genetics! +Some loadout items can be unlocked through progress in parts of the game. The progress for these can be tracked in the loadout menu. +It's easy to forget that everyone else you're playing with is a real person trying to have as much fun as you are. Be nice to your fellow spacemen. diff --git a/strings/traumas.json b/strings/traumas.json index e5048d41b2..195a28364b 100644 --- a/strings/traumas.json +++ b/strings/traumas.json @@ -70,7 +70,7 @@ "NO PRED CAN eVER CATCH MI", "SCIENCE GIB SHINK RAY PLS", "KILL PUNPUN 4 FUN xDD", - "i play @pick(roles) to only ORDER not DO", + "i play @pick(importantroles) to only ORDER not DO", "CRAGO ORDER @pick(cargo) PLS", "erp?", "i want to digest u!!!", @@ -98,6 +98,7 @@ "nerf blob!1", "iM NOT A FUWRRYY!!!", "FOURTEEN INCHES SOFT!!!", + "SPLUUUUUUUUUUUUUUUUUUUUUUURTS!!!!!!!!!!", "@pick(semicolon)N-NYAAAAAA~", "@pick(bug)", "@pick(semicolon)wtf??????????? @pick(bug)", @@ -133,7 +134,10 @@ "@pick(semicolon)Assaltign a sec osficer aren't crime if ur @pick(roles)", ";SEC I SPILED MU JICE HELELPH HELPJ JLEP HELP", "@pick(semicolon) atmos is chemistyr is radation fast air is FASTER cheemsitry and FASTER RADIATION AND FASTER DEATH!!!", - "@pick(semicolon) FUC'KING MuNKEY WAch TALKN SHIT" + "@pick(semicolon) FUC'KING MuNKEY WAch TALKN SHIT", + "@pick(semicolon)How do I set up the. SHow do I set u p the Singu. how I the scrungulartiy????", + "@pick(semicolon)@pick(roles) is suSpicious!!!", + "@pick(semicolon)NOOO!!!OOOOOOO!! @pick(roles) HALP!!" ], "mutations": [ @@ -184,7 +188,11 @@ "haylo", "EEGEE", "mr terry", - "berry" + "berry", + "are pee", + "mayne", + "air ret", + "dise" ], "create_verbs": [ @@ -199,7 +207,8 @@ "treaitors", "sheadow lings", "abdoocters", - "revinent" + "revinent", + "ninja" ], "bug": [ @@ -266,20 +275,63 @@ "YOUR LIFE IS IMPORTANT. KEEP IT." ], - "roles": [ + "importantroles": [ "heds", "ceptin", "hop", - "arrdee", + "hos", + "see emo", + "cee ee", + "arr dee", + "q m", "sek" ], + "roles": [ + "ceptin", + "hop", + "hos", + "see emo", + "cee ee", + "arr dee", + "q m", + "assistent", + "cargo", + "mine r", + "bart ender", + "chef", + "botonist", + "janny", + "clon", + "mime", + "librarian", + "chap", + "ai", + "borg", + "egnineer", + "atmos", + "docter", + "paradocter", + "cheemsist", + "viroligist", + "genetocist", + "science", + "robotocist", + "wardon", + "det", + "shitcurity", + "prihsoner" + ], + "cargo": [ "GUNS", "HATS", "PIZEH", "MEMES", - "GLOWY CYSTAL" + "GLOWY CYSTAL", + "SINGLO", + "TESLO", + "NULLZ" ], "s_roles": [ @@ -289,6 +341,7 @@ "admen", "mantor", "bluh daymon", - "wizzerd" + "wizzerd", + "nookies" ] } diff --git a/tgstation.dme b/tgstation.dme index 620686af81..b4e9fcbc7a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -464,7 +464,6 @@ #include "code\datums\achievements\misc_scores.dm" #include "code\datums\achievements\skill_achievements.dm" #include "code\datums\actions\beam_rifle.dm" -#include "code\datums\actions\ninja.dm" #include "code\datums\atmosphere\_atmosphere.dm" #include "code\datums\atmosphere\planetary.dm" #include "code\datums\brain_damage\brain_trauma.dm" @@ -1742,7 +1741,6 @@ #include "code\modules\antagonists\morph\morph.dm" #include "code\modules\antagonists\morph\morph_antag.dm" #include "code\modules\antagonists\nightmare\nightmare.dm" -#include "code\modules\antagonists\ninja\ninja.dm" #include "code\modules\antagonists\nukeop\clownop.dm" #include "code\modules\antagonists\nukeop\nukeop.dm" #include "code\modules\antagonists\nukeop\equipment\borgchameleon.dm" @@ -1765,6 +1763,7 @@ #include "code\modules\antagonists\slaughter\slaughter.dm" #include "code\modules\antagonists\slaughter\slaughter_antag.dm" #include "code\modules\antagonists\slaughter\slaughterevent.dm" +#include "code\modules\antagonists\space_ninja\space_ninja.dm" #include "code\modules\antagonists\space_dragon\space_dragon.dm" #include "code\modules\antagonists\survivalist\survivalist.dm" #include "code\modules\antagonists\swarmer\swarmer.dm" @@ -2137,6 +2136,7 @@ #include "code\modules\events\radiation_storm.dm" #include "code\modules\events\sentience.dm" #include "code\modules\events\shuttle_loan.dm" +#include "code\modules\events\space_ninja.dm" #include "code\modules\events\space_dragon.dm" #include "code\modules\events\spacevine.dm" #include "code\modules\events\spider_infestation.dm" @@ -2982,7 +2982,7 @@ #include "code\modules\newscaster\wanted_message.dm" #include "code\modules\ninja\__ninjaDefines.dm" #include "code\modules\ninja\energy_katana.dm" -#include "code\modules\ninja\ninja_event.dm" +#include "code\modules\ninja\ninja_explosive.dm" #include "code\modules\ninja\outfit.dm" #include "code\modules\ninja\suit\gloves.dm" #include "code\modules\ninja\suit\head.dm" @@ -2991,17 +2991,17 @@ #include "code\modules\ninja\suit\shoes.dm" #include "code\modules\ninja\suit\suit.dm" #include "code\modules\ninja\suit\suit_attackby.dm" -#include "code\modules\ninja\suit\suit_initialisation.dm" -#include "code\modules\ninja\suit\suit_process.dm" -#include "code\modules\ninja\suit\n_suit_verbs\energy_net_nets.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_adrenaline.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_cost_check.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_empulse.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_net.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_smoke.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_stars.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_stealth.dm" -#include "code\modules\ninja\suit\n_suit_verbs\ninja_sword_recall.dm" +#include "code\modules\ninja\suit\ninja_equipment_actions\energy_net_nets.dm" +#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_adrenaline.dm" +#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_cost_check.dm" +#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_empulse.dm" +#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_glove_toggle.dm" +#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_net.dm" +#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_stars.dm" +#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_status_read.dm" +#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_stealth.dm" +#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_suit_initialisation.dm" +#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_sword_recall.dm" #include "code\modules\NTNet\netdata.dm" #include "code\modules\NTNet\network.dm" #include "code\modules\NTNet\relays.dm"