diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm index 1ea3f19c62..862c745f81 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_alien_nest.dmm @@ -70,7 +70,7 @@ /obj/structure/alien/weeds, /obj/item/clothing/mask/facehugger/impregnated, /obj/item/clothing/glasses/night, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /obj/effect/decal/cleanable/blood/old, /obj/item/clothing/under/syndicate/tacticool, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm index 2ec5b88792..b22c9787ba 100644 --- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm @@ -526,8 +526,8 @@ /obj/structure/closet/crate/secure/gear{ req_access_txt = "150" }, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, +/obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/under/syndicate/combat, /obj/item/clothing/under/syndicate/combat, /obj/item/storage/belt/military, @@ -4197,7 +4197,7 @@ "kw" = ( /obj/structure/table, /obj/effect/decal/cleanable/dirt, -/obj/item/clothing/gloves/combat{ +/obj/item/clothing/gloves/tackler/combat/insulated{ pixel_y = -6 }, /obj/item/tank/internals/emergency_oxygen{ diff --git a/_maps/RandomRuins/SpaceRuins/advancedlab.dmm b/_maps/RandomRuins/SpaceRuins/advancedlab.dmm index 66a3d4e55d..b553bb5c97 100644 --- a/_maps/RandomRuins/SpaceRuins/advancedlab.dmm +++ b/_maps/RandomRuins/SpaceRuins/advancedlab.dmm @@ -185,7 +185,7 @@ name = "Clothes" }, /obj/item/clothing/head/chameleon, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/suit/chameleon, /obj/item/clothing/under/chameleon, /obj/item/clothing/shoes/chameleon, @@ -221,7 +221,7 @@ }, /obj/item/clothing/under/rank/centcom/commander, /obj/item/clothing/head/centhat, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/suit/armor/vest, /obj/item/clothing/shoes/sneakers/brown, /turf/open/floor/wood, diff --git a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm index bf4f0dbfa6..a4c60023e8 100644 --- a/_maps/RandomRuins/SpaceRuins/deepstorage.dmm +++ b/_maps/RandomRuins/SpaceRuins/deepstorage.dmm @@ -2202,11 +2202,11 @@ /area/ruin/space/has_grav/deepstorage/armory) "eO" = ( /obj/structure/table, -/obj/item/clothing/gloves/combat{ +/obj/item/clothing/gloves/tackler/combat/insulated{ pixel_x = -3; pixel_y = 4 }, -/obj/item/clothing/gloves/combat{ +/obj/item/clothing/gloves/tackler/combat/insulated{ pixel_x = 3; pixel_y = -2 }, diff --git a/_maps/RandomRuins/SpaceRuins/oldstation.dmm b/_maps/RandomRuins/SpaceRuins/oldstation.dmm index e820b06f61..89e2c553b9 100644 --- a/_maps/RandomRuins/SpaceRuins/oldstation.dmm +++ b/_maps/RandomRuins/SpaceRuins/oldstation.dmm @@ -1651,7 +1651,7 @@ /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/ancientstation/rnd) "eD" = ( -/obj/machinery/mecha_part_fabricator, +/obj/machinery/mecha_part_fabricator/offstation, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/ancientstation/rnd) @@ -2010,12 +2010,12 @@ /turf/open/floor/plasteel, /area/ruin/space/has_grav/ancientstation/deltacorridor) "fu" = ( -/obj/machinery/rnd/production/protolathe, +/obj/machinery/rnd/production/protolathe/offstation, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/white, /area/ruin/space/has_grav/ancientstation/rnd) "fv" = ( -/obj/machinery/rnd/production/circuit_imprinter, +/obj/machinery/rnd/production/circuit_imprinter/offstation, /obj/effect/decal/cleanable/dirt, /obj/item/reagent_containers/dropper, /turf/open/floor/plasteel/white, diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm index da0a0036c5..c842479db7 100644 --- a/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm +++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_singulo.dmm @@ -6,7 +6,10 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/poddoor/shutters/radiation/preopen, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, /turf/open/floor/plasteel, /area/engine/engineering) "ab" = ( @@ -16,28 +19,40 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/machinery/door/poddoor/shutters/radiation/preopen, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, /turf/open/floor/plasteel, /area/engine/engineering) "ac" = ( /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/door/poddoor/shutters/radiation/preopen, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, /turf/open/floor/plasteel, /area/engine/engineering) "ad" = ( /obj/structure/cable{ icon_state = "2-8" }, -/obj/machinery/door/poddoor/shutters/radiation/preopen, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, /turf/open/floor/plasteel, /area/engine/engineering) "ae" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/door/poddoor/shutters/radiation/preopen, +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + id = "engsm"; + name = "Radiation Chamber Shutters" + }, /turf/open/floor/plasteel, /area/engine/engineering) "af" = ( diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm index e15eda336c..e9f314cd1a 100644 --- a/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm +++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_sm.dmm @@ -2718,7 +2718,7 @@ wt av kA qo -EL +MP MP MP Cb diff --git a/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm b/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm index 37bc2a7dde..a9c5eab318 100644 --- a/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm +++ b/_maps/RandomRuins/StationRuins/Box/Engine/engine_teg.dmm @@ -103,10 +103,6 @@ /obj/structure/window/reinforced, /turf/open/floor/plasteel, /area/engine/engineering) -"dw" = ( -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/space/nearstation) "dZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -1170,7 +1166,8 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/engine_waste{ dir = 1 }, -/turf/open/floor/plating/airless, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, /area/engine/engineering) "Hp" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -1332,7 +1329,8 @@ /area/engine/engineering) "LS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/turf/open/floor/plating/airless, +/obj/structure/lattice/catwalk, +/turf/open/space/basic, /area/engine/engineering) "Mf" = ( /obj/structure/closet/secure_closet/engineering_personal, @@ -2629,7 +2627,7 @@ EN fq LS Hn -dw +tw yf Rh yf @@ -2655,9 +2653,9 @@ XW ST Ok MP -dw -dw -dw +tw +tw +tw Rh Rh Rh diff --git a/_maps/RandomZLevels/Academy.dmm b/_maps/RandomZLevels/away_mission/Academy.dmm similarity index 99% rename from _maps/RandomZLevels/Academy.dmm rename to _maps/RandomZLevels/away_mission/Academy.dmm index 97ebb80101..de0b7cc430 100644 --- a/_maps/RandomZLevels/Academy.dmm +++ b/_maps/RandomZLevels/away_mission/Academy.dmm @@ -4322,7 +4322,7 @@ /turf/open/floor/plating/asteroid/snow, /area/awaymission/academy/academycellar) "mV" = ( -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /turf/open/floor/plating/asteroid/snow, /area/awaymission/academy/academycellar) "mW" = ( diff --git a/_maps/RandomZLevels/Cabin.dmm b/_maps/RandomZLevels/away_mission/Cabin.dmm similarity index 100% rename from _maps/RandomZLevels/Cabin.dmm rename to _maps/RandomZLevels/away_mission/Cabin.dmm diff --git a/_maps/RandomZLevels/TheBeach.dmm b/_maps/RandomZLevels/away_mission/TheBeach.dmm similarity index 100% rename from _maps/RandomZLevels/TheBeach.dmm rename to _maps/RandomZLevels/away_mission/TheBeach.dmm diff --git a/_maps/RandomZLevels/caves.dmm b/_maps/RandomZLevels/away_mission/caves.dmm similarity index 100% rename from _maps/RandomZLevels/caves.dmm rename to _maps/RandomZLevels/away_mission/caves.dmm diff --git a/_maps/RandomZLevels/challenge.dmm b/_maps/RandomZLevels/away_mission/challenge.dmm similarity index 100% rename from _maps/RandomZLevels/challenge.dmm rename to _maps/RandomZLevels/away_mission/challenge.dmm diff --git a/_maps/RandomZLevels/moonoutpost19.dmm b/_maps/RandomZLevels/away_mission/moonoutpost19.dmm similarity index 100% rename from _maps/RandomZLevels/moonoutpost19.dmm rename to _maps/RandomZLevels/away_mission/moonoutpost19.dmm diff --git a/_maps/RandomZLevels/research.dmm b/_maps/RandomZLevels/away_mission/research.dmm similarity index 100% rename from _maps/RandomZLevels/research.dmm rename to _maps/RandomZLevels/away_mission/research.dmm diff --git a/_maps/RandomZLevels/snowdin.dmm b/_maps/RandomZLevels/away_mission/snowdin.dmm similarity index 100% rename from _maps/RandomZLevels/snowdin.dmm rename to _maps/RandomZLevels/away_mission/snowdin.dmm diff --git a/_maps/RandomZLevels/spacebattle.dmm b/_maps/RandomZLevels/away_mission/spacebattle.dmm similarity index 99% rename from _maps/RandomZLevels/spacebattle.dmm rename to _maps/RandomZLevels/away_mission/spacebattle.dmm index 66d7f556b4..ca44e7d7b7 100644 --- a/_maps/RandomZLevels/spacebattle.dmm +++ b/_maps/RandomZLevels/away_mission/spacebattle.dmm @@ -243,7 +243,7 @@ /area/awaymission/spacebattle/syndicate1) "bg" = ( /obj/structure/table/reinforced, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /turf/open/floor/mineral/plastitanium/red, /area/awaymission/spacebattle/syndicate1) "bh" = ( diff --git a/_maps/RandomZLevels/undergroundoutpost45.dmm b/_maps/RandomZLevels/away_mission/undergroundoutpost45.dmm similarity index 100% rename from _maps/RandomZLevels/undergroundoutpost45.dmm rename to _maps/RandomZLevels/away_mission/undergroundoutpost45.dmm diff --git a/_maps/RandomZLevels/wildwest.dmm b/_maps/RandomZLevels/away_mission/wildwest.dmm similarity index 100% rename from _maps/RandomZLevels/wildwest.dmm rename to _maps/RandomZLevels/away_mission/wildwest.dmm diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index e0dfa2ab74..9c2a1a2883 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -5789,6 +5789,12 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/security/brig) +"akE" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel/yellowsiding{ + dir = 1 + }, +/area/crew_quarters/fitness/pool) "akF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/red, @@ -5804,6 +5810,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/security/processing) +"akH" = ( +/obj/machinery/holopad, +/turf/open/floor/wood, +/area/crew_quarters/bar) "akI" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -5823,6 +5833,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/security/brig) +"akK" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/engine, +/area/science/xenobiology) "akL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/meter, @@ -5856,6 +5870,10 @@ }, /turf/open/floor/plasteel, /area/security/main) +"akP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/engine, +/area/science/xenobiology) "akQ" = ( /obj/structure/cable{ icon_state = "4-8" @@ -5905,6 +5923,31 @@ /obj/machinery/holopad, /turf/open/floor/plasteel, /area/security/brig) +"akV" = ( +/obj/machinery/door/window/southleft{ + dir = 1; + name = "Test Chamber"; + req_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/door/poddoor/preopen{ + id = "misclab"; + name = "test chamber blast door" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/engine, +/area/science/xenobiology) +"akW" = ( +/obj/machinery/door/window/southleft{ + name = "Test Chamber"; + req_access_txt = "55" + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/science/xenobiology) "akX" = ( /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -5994,6 +6037,10 @@ }, /turf/open/floor/plasteel, /area/security/courtroom) +"alf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "alg" = ( /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -6050,6 +6097,28 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"alm" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"aln" = ( +/obj/effect/landmark/start/scientist, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/chair/comfy/black, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "alo" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -6076,6 +6145,21 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, /area/security/warden) +"alr" = ( +/obj/machinery/computer/camera_advanced/xenobio{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) "als" = ( /obj/machinery/door_timer{ id = "Cell 3"; @@ -6159,6 +6243,29 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"alx" = ( +/obj/structure/table/glass, +/obj/item/paper_bin{ + pixel_y = 4 + }, +/obj/item/folder/white{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/pen{ + pixel_x = -4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) "aly" = ( /obj/structure/cable{ icon_state = "1-2" @@ -6345,11 +6452,35 @@ "alU" = ( /turf/closed/wall, /area/maintenance/port/fore) -"alX" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ +"alV" = ( +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"alW" = ( +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"alX" = ( +/obj/machinery/button/door{ + id = "atmos"; + name = "Atmospherics Lockdown"; + pixel_x = 24; + pixel_y = 4; + req_access_txt = "24" + }, /turf/open/floor/plasteel, /area/engine/atmos) "alY" = ( @@ -6422,6 +6553,31 @@ }, /turf/open/floor/plasteel/dark, /area/security/warden) +"amh" = ( +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"ami" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "amj" = ( /obj/machinery/door_timer{ id = "Cell 2"; @@ -6442,6 +6598,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/security/brig) +"aml" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "amm" = ( /obj/structure/cable{ icon_state = "0-8" @@ -6464,6 +6626,12 @@ }, /turf/open/floor/plating, /area/security/brig) +"amo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "amp" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -6591,6 +6759,41 @@ /obj/item/coin/diamond, /turf/open/floor/plating, /area/maintenance/port/fore) +"amG" = ( +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen"; + req_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio3"; + name = "containment blast door" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"amH" = ( +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen"; + req_access_txt = "55" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) "amI" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -6663,6 +6866,31 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/security/brig) +"amP" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"amQ" = ( +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen"; + req_access_txt = "55" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) "amR" = ( /obj/structure/cable{ icon_state = "0-4" @@ -6683,6 +6911,24 @@ }, /turf/closed/wall/r_wall, /area/security/brig) +"amT" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen"; + req_access_txt = "55" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio8"; + name = "containment blast door" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "amU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 @@ -6818,6 +7064,23 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) +"ano" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"anp" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "anq" = ( /obj/structure/chair{ dir = 8 @@ -6869,6 +7132,14 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"anx" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "any" = ( /obj/effect/landmark/event_spawn, /obj/structure/cable{ @@ -7002,6 +7273,17 @@ /obj/item/bedsheet/blue, /turf/open/floor/plasteel, /area/security/brig) +"anN" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "anO" = ( /obj/docking_port/stationary{ dir = 8; @@ -7190,6 +7472,33 @@ /obj/item/circuitboard/machine/monkey_recycler, /turf/open/floor/plating, /area/maintenance/port/fore) +"aop" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/mob/living/simple_animal/slime, +/turf/open/floor/engine, +/area/science/xenobiology) +"aoq" = ( +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen"; + req_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio2"; + name = "containment blast door" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "aor" = ( /obj/structure/table, /obj/item/restraints/handcuffs, @@ -7200,6 +7509,24 @@ }, /turf/open/floor/plasteel/dark, /area/security/brig) +"aos" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen"; + req_access_txt = "55" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio7"; + name = "containment blast door" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "aot" = ( /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -7469,12 +7796,19 @@ /turf/open/floor/plating, /area/security/warden) "apa" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, /area/engine/atmos) +"apb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/mob/living/simple_animal/slime, +/turf/open/floor/engine, +/area/science/xenobiology) "apc" = ( /obj/structure/chair/office/dark, /turf/open/floor/plasteel/showroomfloor, @@ -7632,6 +7966,26 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) +"apw" = ( +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen"; + req_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio1"; + name = "containment blast door" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "apx" = ( /obj/machinery/door/airlock/atmos/abandoned{ name = "Atmospherics Maintenance"; @@ -7700,7 +8054,9 @@ /area/maintenance/starboard/fore) "apF" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 5 + }, /turf/open/floor/plating, /area/engine/atmos) "apG" = ( @@ -7729,13 +8085,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"apI" = ( -/obj/machinery/atmospherics/components/unary/relief_valve/atmos/atmos_waste{ - dir = 1 - }, -/obj/structure/lattice/catwalk, -/turf/open/space, -/area/engine/atmos) "apJ" = ( /turf/closed/wall, /area/construction/mining/aux_base) @@ -8135,6 +8484,24 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"aqB" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen"; + req_access_txt = "55" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio6"; + name = "containment blast door" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "aqC" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -8179,6 +8546,14 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"aqG" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "aqH" = ( /obj/machinery/light{ dir = 1; @@ -8267,6 +8642,11 @@ "aqR" = ( /turf/open/floor/plating, /area/maintenance/fore) +"aqS" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "aqT" = ( /obj/structure/cable{ icon_state = "1-2" @@ -8444,6 +8824,14 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"ars" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "art" = ( /obj/machinery/light/small{ dir = 1 @@ -8918,6 +9306,12 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) +"asr" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/science/xenobiology) "ass" = ( /obj/machinery/door/airlock/security/glass{ name = "Labor Camp Shuttle Airlock" @@ -8984,6 +9378,13 @@ "asB" = ( /turf/closed/wall, /area/maintenance/department/electrical) +"asC" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/components/unary/outlet_injector/on{ + dir = 1 + }, +/turf/open/floor/plating/airless, +/area/science/xenobiology) "asD" = ( /obj/structure/table/wood, /mob/living/simple_animal/pet/fox/Renault, @@ -36897,21 +37298,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine, /area/science/xenobiology) -"bJL" = ( -/obj/machinery/door/window/southleft{ - dir = 1; - name = "Test Chamber"; - req_access_txt = "55" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/door/poddoor/preopen{ - id = "misclab"; - name = "test chamber blast door" - }, -/turf/open/floor/engine, -/area/science/xenobiology) "bJM" = ( /obj/structure/cable{ icon_state = "0-8" @@ -37500,14 +37886,6 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"bLa" = ( -/obj/machinery/door/window/southleft{ - name = "Test Chamber"; - req_access_txt = "55" - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/science/xenobiology) "bLb" = ( /obj/structure/cable{ icon_state = "1-2" @@ -37755,33 +38133,38 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/turf/open/floor/plasteel/checker, +/turf/open/floor/plasteel, /area/hallway/primary/aft) "bLI" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bLJ" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/effect/turf_decal/bot, +/obj/machinery/computer/atmos_control, /turf/open/floor/plasteel, /area/engine/atmos) "bLK" = ( /turf/closed/wall/r_wall, /area/engine/atmos) "bLL" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/turf_decal/bot, +/obj/machinery/computer/station_alert, +/obj/machinery/airalarm{ + pixel_y = 23 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bLM" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/turf_decal/bot, +/obj/machinery/computer/atmos_alert, /turf/open/floor/plasteel, /area/engine/atmos) "bLN" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/obj/effect/turf_decal/bot, +/obj/machinery/button/door{ + id = "atmos"; + name = "Atmospherics Lockdown"; + pixel_x = 24; + pixel_y = 4; + req_access_txt = "24" + }, /turf/open/floor/plasteel, /area/engine/atmos) "bLO" = ( @@ -38146,25 +38529,11 @@ /turf/closed/wall, /area/engine/atmos) "bML" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/air, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bMM" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/machinery/airalarm{ - pixel_y = 23 - }, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer, /turf/open/floor/plasteel, /area/engine/atmos) "bMN" = ( -/obj/machinery/atmospherics/components/trinary/filter{ - dir = 4 - }, +/obj/machinery/atmospherics/components/unary/thermomachine/heater, /turf/open/floor/plasteel, /area/engine/atmos) "bMO" = ( @@ -38233,16 +38602,8 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"bMY" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 - }, -/turf/closed/wall/r_wall, -/area/engine/atmos) "bMZ" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 6 - }, +/obj/machinery/atmospherics/components/unary/thermomachine/heater/on, /turf/open/floor/plasteel, /area/engine/atmos) "bNb" = ( @@ -38522,18 +38883,20 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow{ +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/loading_area{ dir = 8 }, -/turf/open/floor/plasteel/dark/corner, +/turf/open/floor/plasteel, /area/hallway/primary/aft) "bNP" = ( /obj/structure/disposalpipe/segment{ - dir = 6 + dir = 4 }, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_x = -30 +/obj/effect/turf_decal/loading_area{ + dir = 4 }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -38548,9 +38911,6 @@ /obj/structure/disposalpipe/trunk{ dir = 8 }, -/obj/machinery/airalarm{ - pixel_y = 23 - }, /obj/machinery/camera{ c_tag = "Atmospherics Monitoring" }, @@ -38577,6 +38937,9 @@ /obj/machinery/light{ dir = 8 }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bNU" = ( @@ -38616,17 +38979,11 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel, /area/science/misc_lab) -"bOa" = ( +"bOb" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bOb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /turf/open/floor/plasteel, /area/engine/atmos) "bOc" = ( @@ -38634,6 +38991,9 @@ dir = 1; name = "Mix to Distro" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bOd" = ( @@ -38653,16 +39013,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/atmos) -"bOg" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Mix to Incinerator" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "bOh" = ( /obj/structure/grille, /turf/closed/wall/r_wall, @@ -38964,15 +39314,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"bOQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "bOR" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -38980,15 +39321,9 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bOS" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 }, -/obj/effect/turf_decal/loading_area{ - dir = 4 - }, /turf/open/floor/plasteel, /area/engine/atmos) "bOT" = ( @@ -39024,9 +39359,6 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bOW" = ( -/obj/machinery/computer/atmos_control{ - dir = 8 - }, /obj/machinery/requests_console{ department = "Atmospherics"; departmentType = 4; @@ -39036,8 +39368,8 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +/obj/machinery/computer/atmos_control{ + dir = 8 }, /turf/open/floor/plasteel/dark/corner, /area/engine/atmos) @@ -39086,17 +39418,19 @@ /turf/open/floor/plasteel/white, /area/science/circuit) "bPc" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Mix to Waste" }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bPd" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - name = "Waste In" +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ + dir = 8 }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -39105,19 +39439,16 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bPf" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "Air to Mix" - }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ +/obj/machinery/atmospherics/pipe/simple/purple/visible{ dir = 4 }, /turf/open/floor/plasteel, /area/engine/atmos) "bPg" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Mix Outlet Pump" +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bPh" = ( @@ -39132,7 +39463,6 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/yellow/visible, /obj/effect/turf_decal/tile/green{ dir = 1 }, @@ -39140,6 +39470,9 @@ /obj/effect/turf_decal/tile/green{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bPj" = ( @@ -39255,14 +39588,6 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"bPy" = ( -/obj/effect/landmark/start/scientist, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/chair/comfy/black, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "bPz" = ( /obj/structure/table/glass, /obj/item/storage/box/beakers{ @@ -39298,41 +39623,6 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"bPB" = ( -/obj/structure/table/glass, -/obj/item/paper_bin{ - pixel_y = 4 - }, -/obj/item/folder/white{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/pen{ - pixel_x = -4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) -"bPC" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) -"bPD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "bPE" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -39555,20 +39845,15 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/engineering) -"bQf" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/plasteel/checker, -/area/hallway/primary/aft) "bQg" = ( /turf/open/floor/plasteel, /area/hallway/primary/aft) "bQh" = ( -/obj/structure/tank_dispenser{ - pixel_x = -1 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/chair{ + dir = 8 + }, +/obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel, /area/engine/atmos) "bQi" = ( @@ -39592,15 +39877,15 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bQl" = ( -/obj/machinery/computer/atmos_control{ +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/computer/atmos_alert{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, /turf/open/floor/plasteel/dark/corner, /area/engine/atmos) "bQm" = ( @@ -39613,15 +39898,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/engine/atmos) -"bQo" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/engine/atmos) "bQp" = ( /obj/structure/cable{ @@ -39652,14 +39934,11 @@ }, /turf/open/floor/plasteel, /area/security/checkpoint/engineering) -"bQr" = ( -/obj/structure/closet/crate, -/turf/open/floor/plasteel, -/area/engine/atmos) "bQs" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/components/binary/pump{ dir = 8; - name = "Mix to Filter" + name = "Air to Waste" }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -39669,20 +39948,9 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"bQu" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "bQv" = ( -/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bQw" = ( -/obj/machinery/atmospherics/pipe/manifold/green/visible{ +/obj/machinery/atmospherics/pipe/simple/purple/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, /turf/open/floor/plasteel, @@ -39706,6 +39974,9 @@ /obj/effect/turf_decal/tile/green{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 10 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bQA" = ( @@ -39775,18 +40046,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/tcommsat/computer) -"bQL" = ( -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "bQM" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -39995,14 +40254,15 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/turf/open/floor/plasteel/dark/corner, +/turf/open/floor/plasteel, /area/hallway/primary/aft) "bRr" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/landmark/start/atmospheric_technician, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, +/obj/structure/tank_dispenser, /turf/open/floor/plasteel, /area/engine/atmos) "bRs" = ( @@ -40025,12 +40285,12 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bRu" = ( -/obj/machinery/computer/atmos_alert{ - dir = 8 - }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/computer/atmos_alert{ + dir = 8 + }, /turf/open/floor/plasteel/dark/corner, /area/engine/atmos) "bRv" = ( @@ -40044,25 +40304,20 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bRw" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, +/obj/effect/turf_decal/bot, /obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/plasteel, /area/engine/atmos) "bRx" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/engine/atmos) -"bRy" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 }, /turf/open/floor/plasteel, /area/engine/atmos) -"bRz" = ( -/obj/machinery/atmospherics/components/trinary/mixer{ - dir = 8 +"bRy" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/stripes/line{ + dir = 6 }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -40073,12 +40328,13 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bRB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 6 - }, /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Waste to Filter" + }, /turf/open/floor/plasteel, /area/engine/atmos) "bRC" = ( @@ -40106,18 +40362,8 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bRF" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bRG" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Unfiltered to Mix" - }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 +/obj/machinery/atmospherics/components/binary/pump{ + name = "Mix to Ports" }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -40136,23 +40382,25 @@ /turf/open/floor/plating, /area/engine/atmos) "bRJ" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 4; + name = "Unfiltered & Air to Mix" + }, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/effect/turf_decal/tile/green{ + dir = 8 }, /obj/effect/turf_decal/tile/green, /obj/effect/turf_decal/tile/green{ dir = 4 }, -/obj/effect/turf_decal/tile/green{ - dir = 8 - }, /turf/open/floor/plasteel, /area/engine/atmos) "bRK" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 6 }, +/obj/structure/lattice, /turf/open/space, /area/space/nearstation) "bRL" = ( @@ -40254,16 +40502,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine, /area/science/xenobiology) -"bRX" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "bRY" = ( /obj/structure/window/reinforced, /obj/structure/table/reinforced, @@ -40448,27 +40686,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"bSB" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/table, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = -8 - }, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = -8 - }, -/obj/item/clothing/mask/breath{ - pixel_x = 4 - }, -/obj/item/clothing/mask/breath{ - pixel_x = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/engine/atmos) "bSC" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -40478,114 +40695,36 @@ /turf/open/floor/plating, /area/engine/atmos) "bSD" = ( -/obj/structure/sign/plaques/atmos{ - pixel_y = -32 - }, -/obj/structure/table, -/obj/item/storage/box, -/obj/item/storage/box, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bSE" = ( -/obj/machinery/computer/station_alert{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/button/door{ - id = "atmos"; - name = "Atmospherics Lockdown"; - pixel_x = 24; - pixel_y = 4; +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Monitoring"; req_access_txt = "24" }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/corner, +/obj/machinery/door/firedoor/heavy, +/turf/open/floor/plasteel, /area/engine/atmos) "bSF" = ( -/obj/structure/table, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/clothing/head/welding{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/multitool, -/obj/item/clothing/glasses/welding, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bSG" = ( -/obj/structure/table, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/metal/fifty{ - pixel_x = 2; - pixel_y = 2 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bSH" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty, -/obj/item/storage/belt/utility, -/obj/item/t_scanner, -/obj/item/t_scanner, -/obj/item/t_scanner, +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/plasteel, /area/engine/atmos) "bSI" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bSJ" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/engine/atmos) -"bSK" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 6 }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/turf/open/floor/plasteel, /area/engine/atmos) "bSM" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/engine/atmos) -"bSN" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plating, /area/engine/atmos) "bSP" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 4 - }, /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plating, /area/engine/atmos) "bSQ" = ( @@ -40682,71 +40821,6 @@ /obj/machinery/vending/medical, /turf/open/floor/plasteel/white, /area/medical/virology) -"bTa" = ( -/obj/machinery/door/window/northleft{ - dir = 4; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/science/xenobiology) -"bTb" = ( -/obj/machinery/door/window/northleft{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio3"; - name = "containment blast door" - }, -/turf/open/floor/engine, -/area/science/xenobiology) -"bTc" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) -"bTd" = ( -/obj/machinery/door/window/northleft{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/science/xenobiology) -"bTe" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/window/northleft{ - dir = 4; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio8"; - name = "containment blast door" - }, -/turf/open/floor/engine, -/area/science/xenobiology) "bTf" = ( /obj/structure/rack, /obj/item/wrench, @@ -40989,16 +41063,23 @@ /area/engine/atmos) "bTM" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/closed/wall, -/area/engine/atmos) -"bTN" = ( -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Monitoring"; - req_access_txt = "24" +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 }, /turf/open/floor/plasteel, /area/engine/atmos) +"bTN" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/structure/closet/secure_closet/atmospherics, +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/corner{ + dir = 1 + }, +/area/engine/atmos) "bTO" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 6 @@ -41011,30 +41092,11 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"bTQ" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/obj/machinery/meter, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bTR" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bTS" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 6 - }, -/obj/machinery/meter, -/turf/open/floor/plasteel, -/area/engine/atmos) "bTT" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 8 }, +/obj/machinery/meter, /turf/open/floor/plasteel, /area/engine/atmos) "bTU" = ( @@ -41046,11 +41108,12 @@ "bTV" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; - name = "N2O Outlet Pump" + name = "N2O to Pure" }, /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel/cafeteria, /area/engine/atmos) "bTW" = ( @@ -41134,16 +41197,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine, /area/science/xenobiology) -"bUf" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "bUg" = ( /obj/structure/window/reinforced{ dir = 1 @@ -41240,7 +41293,7 @@ /area/science/circuit) "bUr" = ( /obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ +/obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 10 }, /turf/open/space, @@ -41383,6 +41436,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/decal/cleanable/oil{ + icon_state = "floor5" + }, /turf/open/floor/plasteel/dark/corner, /area/engine/atmos) "bUJ" = ( @@ -41413,31 +41469,19 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 + dir = 9 }, /turf/open/floor/plasteel, /area/engine/atmos) "bUN" = ( -/obj/item/beacon, +/obj/machinery/atmospherics/pipe/manifold/general/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bUO" = ( /obj/machinery/atmospherics/components/binary/pump{ - name = "Mix to Port" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bUP" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "Air to Port" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bUQ" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "Pure to Port" + dir = 8; + name = "Ports to External" }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -41456,11 +41500,14 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 4 + }, /turf/open/floor/plasteel/white/corner, /area/engine/atmos) "bUU" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/obj/machinery/atmospherics/miner/n2o, +/obj/effect/turf_decal/vg_decals/atmos/nitrous_oxide, /turf/open/floor/engine/n2o, /area/engine/atmos) "bUV" = ( @@ -41471,6 +41518,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/machinery/atmospherics/miner/n2o, /turf/open/floor/engine/n2o, /area/engine/atmos) "bUY" = ( @@ -41820,6 +41868,10 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/suit_storage_unit/atmos, /turf/open/floor/plasteel/dark/corner, /area/engine/atmos) "bVS" = ( @@ -41836,17 +41888,10 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"bVU" = ( -/obj/structure/reagent_dispensers/watertank/high, -/turf/open/floor/plasteel, -/area/engine/atmos) "bVV" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ - dir = 4 - }, /turf/open/floor/plasteel, /area/engine/atmos) "bVW" = ( @@ -41866,33 +41911,16 @@ /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel, /area/engine/atmos) -"bVY" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/obj/machinery/meter, -/turf/open/floor/plasteel, -/area/engine/atmos) "bVZ" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 8 }, /turf/open/floor/plasteel, /area/engine/atmos) -"bWa" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bWb" = ( +"bWc" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/n2o{ dir = 1 }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bWc" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/effect/turf_decal/tile/red{ dir = 4 }, @@ -42175,21 +42203,21 @@ }, /area/engine/atmos) "bWN" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -22 }, -/obj/machinery/door/poddoor/preopen{ - id = "atmos"; - name = "Atmospherics Blast Door" +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bWO" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ +/turf/open/floor/plasteel/dark/corner{ dir = 1 }, -/obj/machinery/meter, +/area/engine/atmos) +"bWO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 10 + }, /turf/closed/wall/r_wall, /area/engine/atmos) "bWP" = ( @@ -42213,42 +42241,15 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"bWS" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/obj/machinery/camera{ - c_tag = "Atmospherics West"; - dir = 8 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bWT" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/obj/machinery/atmospherics/components/binary/pump{ - name = "Air to Port" - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "bWU" = ( /obj/machinery/light{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix to Engine" }, +/obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bWV" = ( @@ -42335,42 +42336,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) -"bXe" = ( -/mob/living/simple_animal/slime, -/turf/open/floor/engine, -/area/science/xenobiology) -"bXf" = ( -/obj/machinery/door/window/northleft{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio2"; - name = "containment blast door" - }, -/turf/open/floor/engine, -/area/science/xenobiology) -"bXg" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/window/northleft{ - dir = 4; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio7"; - name = "containment blast door" - }, -/turf/open/floor/engine, -/area/science/xenobiology) "bXh" = ( /obj/structure/filingcabinet/chestdrawer, /turf/open/floor/plasteel, @@ -42598,23 +42563,10 @@ }, /area/engine/atmos) "bXK" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 9 - }, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible, /turf/closed/wall/r_wall, /area/engine/atmos) -"bXL" = ( -/obj/structure/sign/warning/securearea, -/turf/closed/wall/r_wall, -/area/engine/atmos) -"bXM" = ( -/obj/machinery/door/firedoor/heavy, -/obj/machinery/door/airlock/atmos{ - name = "Atmospherics"; - req_access_txt = "24" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "bXN" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -42654,29 +42606,7 @@ /obj/structure/fireaxecabinet{ pixel_x = -32 }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bXR" = ( -/obj/structure/closet/secure_closet/atmospherics, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/item/cartridge/atmos, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bXS" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bXT" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bXU" = ( @@ -42692,11 +42622,19 @@ }, /obj/machinery/atmospherics/components/binary/pump{ dir = 8; - name = "Plasma Outlet Pump" + name = "Plasma to Pure" }, +/obj/machinery/atmospherics/pipe/simple/green/visible, /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bXW" = ( @@ -42998,31 +42936,19 @@ /obj/effect/turf_decal/tile/yellow, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"bYJ" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/corner{ - dir = 1 - }, -/area/engine/break_room) -"bYK" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/plasteel/checker, -/area/engine/break_room) "bYL" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/door/firedoor/heavy, +/obj/machinery/door/airlock/atmos{ + name = "Atmospherics"; + req_access_txt = "24" + }, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, -/area/engine/break_room) +/area/engine/atmos) "bYM" = ( /obj/machinery/airalarm{ dir = 1; @@ -43040,9 +42966,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"bYN" = ( -/turf/closed/wall, -/area/security/checkpoint/engineering) "bYO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -43054,35 +42977,27 @@ /turf/closed/wall, /area/crew_quarters/bar) "bYQ" = ( -/obj/machinery/suit_storage_unit/atmos, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bYR" = ( -/obj/structure/sign/warning/nosmoking, -/turf/closed/wall, -/area/engine/atmos) -"bYS" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/engine/atmos) "bYT" = ( /obj/machinery/computer/atmos_control/tank/toxin_tank{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/effect/turf_decal/tile/purple, /turf/open/floor/plasteel, /area/engine/atmos) "bYU" = ( -/obj/machinery/portable_atmospherics/canister/toxins, -/obj/machinery/atmospherics/miner/toxins, +/obj/effect/turf_decal/vg_decals/atmos/plasma, /turf/open/floor/engine/plasma, /area/engine/atmos) "bYV" = ( @@ -43093,6 +43008,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/machinery/atmospherics/miner/toxins, /turf/open/floor/engine/plasma, /area/engine/atmos) "bYX" = ( @@ -43376,42 +43292,29 @@ /obj/structure/cable{ icon_state = "0-4" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bZG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/structure/cable{ icon_state = "1-8" }, /turf/open/floor/plasteel, /area/engine/atmos) -"bZH" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, -/obj/item/wrench, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bZI" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 - }, -/obj/machinery/meter, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bZJ" = ( +"bZK" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/plasma{ dir = 1 }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bZK" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 6 }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bZL" = ( @@ -43794,57 +43697,9 @@ }, /turf/closed/wall/r_wall, /area/security/checkpoint/engineering) -"caE" = ( -/obj/machinery/requests_console{ - department = "Atmospherics"; - departmentType = 4; - name = "Atmos RC"; - pixel_x = 30 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/machinery/light{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"caF" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Atmospherics Central"; - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump{ - name = "Port to Filter" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"caG" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"caH" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 - }, -/obj/structure/chair/stool, -/turf/open/floor/plasteel, -/area/engine/atmos) -"caI" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/aft) "caJ" = ( /obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/simple/dark/visible, /turf/open/space, /area/space/nearstation) "caK" = ( @@ -43969,38 +43824,6 @@ }, /turf/open/floor/plating, /area/maintenance/aft) -"caV" = ( -/obj/machinery/door/window/northleft{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio1"; - name = "containment blast door" - }, -/turf/open/floor/engine, -/area/science/xenobiology) -"caW" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/door/window/northleft{ - dir = 4; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio6"; - name = "containment blast door" - }, -/turf/open/floor/engine, -/area/science/xenobiology) "caX" = ( /obj/machinery/sparker{ id = "testigniter"; @@ -44284,42 +44107,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, /area/engine/atmos) -"cbB" = ( -/obj/machinery/space_heater, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"cbC" = ( -/obj/machinery/space_heater, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"cbD" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Port to Filter" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"cbE" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"cbF" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/obj/item/cigbutt, -/turf/open/floor/plasteel, -/area/engine/atmos) "cbG" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 8; - name = "CO2 Outlet Pump" + name = "CO2 to Pure" }, /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -44328,6 +44119,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel, /area/engine/atmos) "cbH" = ( @@ -44343,9 +44135,6 @@ /obj/structure/cable{ icon_state = "2-8" }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 10 - }, /turf/open/floor/plating, /area/maintenance/aft) "cbK" = ( @@ -44428,13 +44217,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/engine, /area/science/xenobiology) -"cbT" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "cbU" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -44696,24 +44478,12 @@ dir = 4; pixel_x = -24 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, /area/engine/atmos) "ccw" = ( /turf/closed/wall/r_wall, /area/engine/engineering) -"ccx" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ - dir = 1 - }, -/obj/machinery/meter, -/turf/open/floor/plasteel, -/area/engine/atmos) -"ccy" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "ccz" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 4; @@ -44729,11 +44499,11 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel, /area/engine/atmos) "ccB" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/machinery/atmospherics/miner/carbon_dioxide, +/obj/effect/turf_decal/vg_decals/atmos/carbon_dioxide, /turf/open/floor/engine/co2, /area/engine/atmos) "ccC" = ( @@ -44744,6 +44514,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/machinery/atmospherics/miner/carbon_dioxide, /turf/open/floor/engine/co2, /area/engine/atmos) "ccE" = ( @@ -44838,10 +44609,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"ccP" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "ccQ" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -45054,52 +44821,24 @@ dir = 4; pixel_x = -22 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, /area/engine/atmos) "cdx" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible, /turf/open/floor/plasteel, /area/engine/atmos) -"cdy" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/open/floor/plasteel, -/area/engine/atmos) -"cdz" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "O2 to Pure" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"cdA" = ( -/obj/machinery/atmospherics/components/trinary/mixer/airmix{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"cdB" = ( +"cdC" = ( /obj/machinery/atmospherics/components/trinary/filter/atmos/co2{ dir = 1 }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"cdC" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, /turf/open/floor/plasteel, /area/engine/atmos) "cdD" = ( @@ -45112,9 +44851,6 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 - }, /turf/open/floor/plating, /area/maintenance/aft) "cdF" = ( @@ -45441,6 +45177,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, /area/engine/atmos) "cey" = ( @@ -45464,26 +45201,19 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 9 }, /turf/open/floor/plasteel, /area/engine/atmos) -"ceC" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/turf/open/floor/plating, -/area/maintenance/aft) "ceD" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, /obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/aft) "ceE" = ( @@ -45491,6 +45221,9 @@ pixel_y = -32 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/aft) "ceF" = ( @@ -45693,21 +45426,29 @@ /turf/open/floor/plasteel, /area/engine/break_room) "cfi" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/n2, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/structure/reagent_dispensers/watertank/high, /turf/open/floor/plasteel, /area/engine/atmos) "cfj" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, /turf/closed/wall, /area/maintenance/disposal/incinerator) "cfk" = ( /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock/atmos{ name = "Turbine Access"; req_access_txt = "32" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) "cfl" = ( @@ -45922,17 +45663,8 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/engine/engineering) -"cfN" = ( -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/plasteel, -/area/engine/atmos) -"cfO" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/portable_atmospherics/pump, -/turf/open/floor/plasteel, -/area/engine/atmos) "cfP" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ +/obj/machinery/atmospherics/components/trinary/mixer/airmix/inverse{ dir = 4 }, /turf/open/floor/plasteel, @@ -45944,22 +45676,11 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel, /area/engine/atmos) -"cfR" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"cfT" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "cfU" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ +/obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/maintenance/disposal/incinerator) "cfW" = ( @@ -45969,7 +45690,6 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plating, /area/maintenance/aft) "cfX" = ( @@ -45979,7 +45699,9 @@ pixel_y = -24 }, /obj/structure/cable, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, /turf/open/floor/plating, /area/maintenance/aft) "cfY" = ( @@ -45989,14 +45711,15 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) "cfZ" = ( /obj/machinery/light_switch{ pixel_y = 26 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "cga" = ( @@ -46335,11 +46058,12 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cgW" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/tile/red{ dir = 1 }, @@ -46347,11 +46071,17 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cgX" = ( /obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel, /area/engine/atmos) "cgY" = ( @@ -46366,6 +46096,9 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cgZ" = ( @@ -46376,17 +46109,22 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cha" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ + dir = 4 }, /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/atmos) "chb" = ( @@ -46401,6 +46139,9 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "chc" = ( @@ -46410,6 +46151,9 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 9 + }, /turf/open/floor/plasteel/white/corner, /area/engine/atmos) "chd" = ( @@ -46417,6 +46161,9 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, /turf/open/floor/plasteel/cafeteria, /area/engine/atmos) "che" = ( @@ -46470,15 +46217,17 @@ /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "chk" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, /turf/closed/wall, /area/maintenance/disposal/incinerator) "chl" = ( /obj/machinery/light{ dir = 1 }, -/obj/machinery/atmospherics/components/binary/pump{ - name = "atmospherics mix pump" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) @@ -46493,16 +46242,13 @@ /obj/structure/cable/yellow{ icon_state = "0-8" }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/maintenance/disposal/incinerator) "chn" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "cho" = ( @@ -46543,13 +46289,6 @@ /obj/machinery/atmospherics/pipe/manifold/general/visible, /turf/open/floor/circuit/telecomms, /area/science/xenobiology) -"cht" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "chu" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -46926,6 +46665,9 @@ "civ" = ( /obj/machinery/atmospherics/pipe/simple/green/visible, /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/plating, /area/engine/atmos) "cix" = ( @@ -46960,12 +46702,16 @@ /obj/effect/decal/cleanable/cobweb, /obj/structure/reagent_dispensers/watertank, /obj/item/extinguisher, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4; + pixel_y = 0 + }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "ciC" = ( /obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 5 }, /turf/open/space, /area/space/nearstation) @@ -47296,35 +47042,16 @@ /turf/open/floor/plasteel, /area/construction) "cjp" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 - }, /obj/structure/reagent_dispensers/fueltank, /obj/item/storage/toolbox/emergency, -/turf/open/floor/plasteel, -/area/maintenance/disposal/incinerator) -"cjq" = ( -/obj/machinery/atmospherics/components/binary/valve{ - name = "Mix to Space" +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 4 }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "cjr" = ( /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"cjs" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/maintenance/disposal/incinerator) -"cjt" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/maintenance/disposal/incinerator) "cju" = ( /obj/machinery/atmospherics/components/binary/pump{ dir = 1; @@ -47333,9 +47060,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "cjv" = ( @@ -47345,10 +47069,6 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "cjw" = ( @@ -47361,9 +47081,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/maintenance/disposal/incinerator) "cjy" = ( @@ -47628,30 +47346,27 @@ /area/engine/atmos) "cke" = ( /obj/structure/chair/stool, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "ckf" = ( /obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) "ckg" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 - }, -/obj/machinery/meter, +/obj/machinery/atmospherics/components/binary/valve, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "ckh" = ( /obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Mix to MiniSat" - }, -/turf/open/floor/plasteel, -/area/maintenance/disposal/incinerator) -"cki" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 + dir = 4; + name = "atmospherics mix pump" }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) @@ -47662,17 +47377,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"ckk" = ( -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/components/binary/valve{ - dir = 4; - name = "Incinerator to Space" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/maintenance/disposal/incinerator) "ckl" = ( /obj/machinery/portable_atmospherics/canister, /obj/effect/decal/cleanable/cobweb, @@ -47686,11 +47390,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/aft) -"ckn" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/science/xenobiology) "cko" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, @@ -47949,7 +47648,6 @@ /area/engine/atmos) "cld" = ( /obj/effect/landmark/blobstart, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/components/binary/pump{ dir = 4; name = "Mix to Incinerator" @@ -47967,19 +47665,6 @@ /obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"clg" = ( -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = -29 - }, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/turf/open/floor/plating, -/area/maintenance/disposal/incinerator) "clh" = ( /obj/machinery/light/small, /obj/structure/extinguisher_cabinet{ @@ -48010,7 +47695,6 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "clk" = ( @@ -48265,16 +47949,14 @@ /turf/open/floor/plasteel, /area/engine/engineering) "clT" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/miner/nitrogen, +/obj/effect/turf_decal/vg_decals/atmos/nitrogen, /turf/open/floor/engine/n2, /area/engine/atmos) "clU" = ( /turf/open/floor/engine/n2, /area/engine/atmos) "clV" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/machinery/atmospherics/miner/oxygen, +/obj/effect/turf_decal/vg_decals/atmos/oxygen, /turf/open/floor/engine/o2, /area/engine/atmos) "clW" = ( @@ -48288,9 +47970,11 @@ /turf/open/floor/engine/air, /area/engine/atmos) "cmb" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ + dir = 8 + }, +/turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "cmd" = ( /turf/closed/wall/r_wall, @@ -48300,20 +47984,14 @@ /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) "cmf" = ( -/obj/effect/mapping_helpers/airlock/locked, -/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 +/obj/machinery/atmospherics/components/binary/valve{ + dir = 4; + name = "Incinerator to Space" }, -/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_atmos{ - pixel_x = 38; - pixel_y = 6 - }, -/turf/open/floor/engine, +/turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "cmg" = ( /obj/machinery/atmospherics/pipe/simple/general/hidden{ @@ -48529,10 +48207,12 @@ /area/engine/engineering) "cmU" = ( /obj/machinery/light/small, +/obj/machinery/atmospherics/miner/nitrogen, /turf/open/floor/engine/n2, /area/engine/atmos) "cmV" = ( /obj/machinery/light/small, +/obj/machinery/atmospherics/miner/oxygen, /turf/open/floor/engine/o2, /area/engine/atmos) "cmW" = ( @@ -49808,10 +49488,6 @@ }, /turf/open/space, /area/space/nearstation) -"csk" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/airless, -/area/space/nearstation) "csl" = ( /obj/structure/transit_tube/curved{ dir = 4 @@ -49867,8 +49543,8 @@ /area/ai_monitored/turret_protected/aisat_interior) "csM" = ( /obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/structure/transit_tube/crossing/horizontal, +/obj/machinery/atmospherics/pipe/simple/dark/visible, /turf/open/space, /area/space/nearstation) "csN" = ( @@ -49934,7 +49610,7 @@ /area/ai_monitored/turret_protected/aisat_interior) "ctd" = ( /obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/dark/visible, /turf/open/space, /area/space/nearstation) "ctg" = ( @@ -50199,13 +49875,6 @@ /obj/effect/landmark/start/cyborg, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) -"ctN" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 10 - }, -/obj/structure/lattice, -/turf/open/space, -/area/space/nearstation) "ctP" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -50301,8 +49970,8 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "ctY" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/dark/visible, /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/aisat/atmos) "ctZ" = ( @@ -50382,11 +50051,11 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "cuh" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, /obj/structure/rack, /obj/item/wrench, /obj/item/crowbar/red, /obj/item/clothing/head/welding, +/obj/machinery/atmospherics/pipe/simple/dark/visible, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat/atmos) "cui" = ( @@ -50419,7 +50088,7 @@ /area/ai_monitored/turret_protected/aisat/service) "cun" = ( /obj/machinery/atmospherics/components/binary/pump{ - name = "Mix to MiniSat" + name = "Incinerator to MiniSat" }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, @@ -52454,23 +52123,12 @@ /turf/open/floor/engine/vacuum, /area/science/mixing) "cBF" = ( +/obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ dir = 8 }, -/obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/engine/atmos) -"cBG" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "cBH" = ( /obj/structure/cable{ icon_state = "1-2" @@ -52483,9 +52141,6 @@ /turf/open/floor/plasteel, /area/security/checkpoint/engineering) "cBJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 9 - }, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/engine/atmos) @@ -52529,8 +52184,8 @@ /turf/open/floor/plasteel, /area/engine/engineering) "cBP" = ( -/obj/machinery/portable_atmospherics/canister/air, /obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/vg_decals/atmos/air, /turf/open/floor/engine/air, /area/engine/atmos) "cBS" = ( @@ -52660,9 +52315,7 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cCB" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plasteel, /area/engine/atmos) "cCC" = ( @@ -52672,18 +52325,16 @@ /turf/open/floor/plasteel, /area/engine/atmos) "cCD" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Mix to Engine" +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 }, /turf/open/floor/plasteel, /area/engine/atmos) "cCE" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ +/obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel, /area/engine/atmos) "cCF" = ( @@ -53178,6 +52829,10 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"cLS" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/security/vacantoffice/b) "cMC" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 @@ -53869,20 +53524,27 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel, /area/security/brig) +"daq" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/canister, +/turf/open/floor/plasteel, +/area/engine/atmos) "daI" = ( -/obj/structure/reagent_dispensers/foamtank, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ +/obj/structure/window/reinforced, +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ +/turf/open/floor/plasteel, +/area/engine/atmos) +"dbb" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/components/unary/relief_valve/atmos/atmos_waste{ dir = 1 }, -/obj/effect/turf_decal/stripes/box, -/turf/open/floor/plasteel, +/obj/structure/lattice/catwalk, +/turf/open/space, /area/engine/atmos) "dbU" = ( /obj/structure/light_construct{ @@ -53953,6 +53615,20 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"diH" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/obj/machinery/suit_storage_unit/atmos, +/obj/machinery/airalarm{ + dir = 1; + pixel_y = -22 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "dly" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -54038,6 +53714,13 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"dAe" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel, +/area/engine/atmos) "dBm" = ( /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plating, @@ -54060,6 +53743,16 @@ }, /turf/open/floor/plasteel, /area/security/range) +"dEX" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/machinery/requests_console{ + department = "Atmospherics"; + departmentType = 4; + name = "Atmos RC"; + pixel_x = -30 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "dFX" = ( /turf/closed/wall, /area/crew_quarters/fitness/pool) @@ -54082,6 +53775,13 @@ /obj/structure/chair/stool/bar, /turf/open/floor/wood, /area/maintenance/bar) +"dMj" = ( +/obj/machinery/space_heater, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "dMZ" = ( /obj/structure/sign/poster/official/random{ pixel_y = 32 @@ -54114,6 +53814,13 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"dQD" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Incinerator to MiniSat" + }, +/turf/open/floor/plasteel, +/area/maintenance/disposal/incinerator) "dTI" = ( /obj/structure/urinal{ pixel_y = 32 @@ -54193,6 +53900,13 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"eiZ" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/purple/visible{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "elh" = ( /obj/structure/chair/comfy/black{ dir = 8 @@ -54233,6 +53947,12 @@ /obj/item/assembly/signaler, /turf/open/floor/plating, /area/security/prison) +"eqq" = ( +/obj/machinery/atmospherics/pipe/manifold/orange/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "eqA" = ( /obj/machinery/shower{ dir = 8 @@ -54270,6 +53990,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/library) +"eus" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "evR" = ( /turf/open/floor/plating, /area/maintenance/bar) @@ -54298,6 +54025,24 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"eyS" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Air to Pure" + }, +/turf/open/floor/plasteel, +/area/engine/atmos) +"ezF" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "eAG" = ( /obj/item/clothing/under/misc/pj/blue, /obj/item/clothing/shoes/sneakers/white, @@ -54379,12 +54124,6 @@ /obj/effect/spawner/structure/window/shuttle, /turf/open/floor/plating/airless, /area/space/nearstation) -"eHI" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/maintenance/disposal/incinerator) "eJa" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck{ @@ -54418,6 +54157,13 @@ /obj/structure/closet/secure_closet/personal/cabinet, /turf/open/floor/carpet, /area/crew_quarters/dorms) +"eUW" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 9 + }, +/turf/open/space, +/area/space/nearstation) "eVC" = ( /obj/effect/spawner/structure/window, /obj/machinery/door/firedoor, @@ -54505,10 +54251,23 @@ dir = 4 }, /area/crew_quarters/theatre) +"fiy" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/turf/closed/wall, +/area/maintenance/disposal/incinerator) "fjS" = ( /obj/structure/closet/radiation, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"fjU" = ( +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 4 + }, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) "flc" = ( /obj/structure/table/reinforced, /obj/item/storage/fancy/donut_box, @@ -54740,6 +54499,13 @@ }, /turf/open/floor/plasteel, /area/hydroponics) +"fHi" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 10 + }, +/obj/machinery/meter, +/turf/open/floor/plasteel, +/area/engine/atmos) "fHG" = ( /turf/open/floor/plasteel, /area/crew_quarters/fitness) @@ -54764,6 +54530,12 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/science/circuit) +"fKC" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "fMp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, @@ -54784,12 +54556,20 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) -"fPL" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +"fPi" = ( +/obj/effect/decal/cleanable/oil{ + icon_state = "floor6" + }, +/obj/machinery/atmospherics/pipe/manifold/yellow/visible, +/turf/open/floor/plasteel, +/area/engine/atmos) +"fSO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, -/turf/open/floor/wood, -/area/crew_quarters/dorms) +/turf/open/floor/plasteel, +/area/engine/atmos) "fTg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -54910,6 +54690,17 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"giT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/plasteel, +/area/engine/atmos) "gjl" = ( /turf/closed/wall, /area/quartermaster/warehouse) @@ -54940,6 +54731,12 @@ }, /turf/open/floor/plating, /area/maintenance/fore/secondary) +"grr" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/closed/wall, +/area/maintenance/disposal/incinerator) "grA" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -54981,6 +54778,11 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"gxw" = ( +/obj/machinery/atmospherics/pipe/manifold/orange/visible, +/obj/machinery/meter, +/turf/closed/wall/r_wall, +/area/engine/atmos) "gyr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, @@ -54999,6 +54801,16 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/fore) +"gAu" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "External to Waste" + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "gBo" = ( /obj/structure/cable{ icon_state = "1-8" @@ -55062,6 +54874,15 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"gMD" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "gNC" = ( /obj/structure/cable{ icon_state = "1-2" @@ -55190,6 +55011,13 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plating, /area/maintenance/port) +"hgG" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "hgO" = ( /obj/structure/table, /obj/item/storage/pill_bottle/dice{ @@ -55256,6 +55084,11 @@ }, /turf/open/floor/plating, /area/space/nearstation) +"hxn" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/open/floor/plating, +/area/engine/atmos) "hzK" = ( /turf/open/floor/plasteel/yellowsiding/corner{ dir = 1 @@ -55331,6 +55164,15 @@ }, /turf/closed/wall, /area/quartermaster/warehouse) +"hQY" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "hRa" = ( /obj/structure/table/reinforced, /obj/machinery/light{ @@ -55464,6 +55306,13 @@ "ipA" = ( /turf/open/floor/plating, /area/maintenance/department/medical/morgue) +"iql" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/item/beacon, +/turf/open/floor/plasteel, +/area/engine/atmos) "itD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -55513,6 +55362,14 @@ /obj/effect/turf_decal/tile/green, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"ivJ" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/atmos) "iwB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -55556,6 +55413,14 @@ }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) +"iIS" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/turf/open/floor/plating, +/area/engine/atmos) "iLJ" = ( /obj/item/reagent_containers/glass/bucket, /mob/living/simple_animal/pet/bumbles, @@ -55618,10 +55483,15 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) -"iUK" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +"iVJ" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel, -/area/security/vacantoffice/b) +/area/engine/atmos) "iVU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -55753,6 +55623,13 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) +"jtj" = ( +/obj/machinery/space_heater, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "juG" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -55791,6 +55668,14 @@ }, /turf/open/floor/plasteel, /area/ai_monitored/security/armory) +"jzM" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/atmos) "jAD" = ( /obj/structure/grille, /turf/open/floor/plating/airless, @@ -55823,6 +55708,14 @@ }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) +"jBQ" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "Pure to Ports" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/plasteel, +/area/engine/atmos) "jCq" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -55835,6 +55728,17 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"jDr" = ( +/obj/machinery/door/poddoor/preopen{ + id = "atmos"; + name = "Atmospherics Blast Door" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "jEc" = ( /obj/machinery/vr_sleeper{ dir = 8 @@ -55856,6 +55760,12 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"jGI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/disposal/incinerator) "jGW" = ( /obj/structure/cable{ icon_state = "4-8" @@ -55888,6 +55798,11 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"jIj" = ( +/obj/machinery/portable_atmospherics/scrubber/huge, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/atmos) "jIs" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -55969,6 +55884,17 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"jVX" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/corner{ + dir = 1 + }, +/area/engine/atmos) "jZT" = ( /obj/structure/cable{ icon_state = "4-8" @@ -56004,6 +55930,11 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"kcx" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/turf/open/space/basic, +/area/space/nearstation) "kdO" = ( /obj/machinery/pool/controller, /turf/open/floor/plasteel/yellowsiding, @@ -56259,6 +56190,13 @@ /obj/effect/landmark/stationroom/box/engine, /turf/open/space/basic, /area/space) +"kGv" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "kGJ" = ( /obj/structure/cable{ icon_state = "4-8" @@ -56292,6 +56230,13 @@ }, /turf/open/floor/plasteel, /area/security/processing) +"kJE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "kMt" = ( /obj/machinery/computer/prisoner/gulag_teleporter_computer, /turf/open/floor/plasteel, @@ -56431,6 +56376,19 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"lgX" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) +"lhQ" = ( +/obj/machinery/power/floodlight, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/engine/atmos) "lip" = ( /obj/structure/closet{ name = "Suit Closet" @@ -56502,6 +56460,11 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"lzt" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, +/area/engine/atmos) "lAB" = ( /obj/structure/sign/nanotrasen, /turf/closed/wall, @@ -56557,6 +56520,12 @@ }, /turf/open/floor/plating, /area/security/main) +"lKj" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/closed/wall, +/area/maintenance/disposal/incinerator) "lMg" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -56638,6 +56607,10 @@ }, /turf/closed/wall, /area/crew_quarters/fitness/pool) +"maT" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/closed/wall, +/area/maintenance/disposal/incinerator) "mbU" = ( /obj/machinery/vr_sleeper{ dir = 8 @@ -56662,6 +56635,11 @@ /obj/structure/bed, /turf/open/floor/plasteel, /area/crew_quarters/fitness/pool) +"mfI" = ( +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/obj/structure/lattice, +/turf/open/space/basic, +/area/space/nearstation) "mgF" = ( /obj/structure/bed, /turf/open/floor/plasteel, @@ -56877,6 +56855,12 @@ }, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) +"mOG" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/closed/wall, +/area/engine/atmos) "mPk" = ( /obj/structure/bed, /obj/machinery/button/door{ @@ -56980,12 +56964,6 @@ /obj/machinery/vending/autodrobe, /turf/open/floor/wood, /area/maintenance/bar) -"nfw" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "ngs" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -57021,6 +56999,19 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"nmZ" = ( +/obj/effect/mapping_helpers/airlock/locked, +/obj/machinery/door/airlock/public/glass/incinerator/atmos_interior, +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/machinery/embedded_controller/radio/airlock_controller/incinerator_atmos{ + pixel_x = 38; + pixel_y = 6 + }, +/turf/open/floor/engine, +/area/maintenance/disposal/incinerator) "nnp" = ( /obj/structure/closet/secure_closet/medical1, /obj/effect/decal/cleanable/dirt, @@ -57076,6 +57067,12 @@ }, /turf/open/floor/plating, /area/construction) +"nzR" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/closed/wall, +/area/maintenance/disposal/incinerator) "nBI" = ( /obj/item/cigbutt/cigarbutt, /obj/effect/decal/cleanable/blood/old, @@ -57091,6 +57088,13 @@ }, /turf/open/floor/plating, /area/security/processing) +"nFj" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 10 + }, +/turf/open/space/basic, +/area/space/nearstation) "nGf" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/light{ @@ -57109,6 +57113,14 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"nJQ" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/obj/machinery/atmospherics/pipe/simple/purple/visible{ + dir = 4 + }, +/turf/open/space, +/area/space/nearstation) "nLu" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -57166,6 +57178,12 @@ }, /turf/open/floor/plasteel, /area/security/processing) +"nTU" = ( +/obj/machinery/atmospherics/components/binary/pump{ + name = "Air to Ports" + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "nUV" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -57192,6 +57210,14 @@ /obj/item/gun/ballistic/revolver/nagant, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) +"nYT" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/turf/open/space, +/area/space/nearstation) "nZE" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral, @@ -57314,6 +57340,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, /area/science/circuit) +"omk" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "omX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -57541,6 +57573,17 @@ /obj/structure/pool/ladder, /turf/open/pool, /area/crew_quarters/fitness/pool) +"oVN" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible, +/turf/open/floor/plasteel, +/area/engine/atmos) +"oXn" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/engine/atmos) "oZl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/closet/wardrobe/pjs, @@ -57589,21 +57632,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/pool) -"plm" = ( -/obj/structure/reagent_dispensers/watertank/high, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/box, -/turf/open/floor/plasteel, -/area/engine/atmos) "plC" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -57701,6 +57729,22 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"pzG" = ( +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_y = -29 + }, +/obj/structure/table, +/obj/item/paper_bin{ + pixel_x = -3; + pixel_y = 7 + }, +/obj/item/pen, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/disposal/incinerator) "pAK" = ( /obj/machinery/door/window/brigdoor/security/cell{ id = "Cell 3"; @@ -57728,6 +57772,11 @@ /obj/effect/landmark/event_spawn, /turf/closed/wall, /area/crew_quarters/fitness) +"pCj" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/turf/open/floor/plating, +/area/engine/atmos) "pDe" = ( /obj/machinery/door/window/southright{ name = "Target Storage" @@ -57849,13 +57898,6 @@ }, /turf/open/floor/plating, /area/crew_quarters/fitness) -"pRW" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) "pTB" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -57873,6 +57915,12 @@ }, /turf/open/floor/plasteel, /area/security/processing) +"pUP" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "qaY" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/tile/bar, @@ -57983,6 +58031,15 @@ /obj/structure/grille/broken, /turf/open/space/basic, /area/space/nearstation) +"qvf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/dorms) "qyj" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -58005,6 +58062,11 @@ }, /turf/open/space, /area/solar/port/aft) +"qJV" = ( +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/obj/structure/lattice, +/turf/open/space, +/area/space/nearstation) "qLR" = ( /obj/structure/mirror{ pixel_y = 32 @@ -58098,6 +58160,13 @@ }, /turf/open/floor/plasteel, /area/security/brig) +"rdl" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/turf/open/floor/plating, +/area/engine/atmos) "rdG" = ( /obj/machinery/hydroponics/constructable, /obj/item/radio/intercom{ @@ -58117,10 +58186,12 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) -"rfW" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/maintenance/disposal/incinerator) +"rgL" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/wood, +/area/crew_quarters/dorms) "rhX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, @@ -58136,6 +58207,13 @@ /obj/structure/chair/comfy/brown, /turf/open/floor/wood, /area/crew_quarters/bar) +"rmQ" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "rmX" = ( /obj/structure/table, /obj/item/reagent_containers/food/drinks/beer, @@ -58407,6 +58485,18 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"rVN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/turf/open/floor/plasteel/dark/corner{ + dir = 1 + }, +/area/engine/atmos) "rXl" = ( /obj/structure/chair/office/light, /obj/machinery/firealarm{ @@ -58494,6 +58584,13 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) +"smP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/closet/crate, +/turf/open/floor/plasteel, +/area/engine/atmos) "sqg" = ( /obj/structure/table/wood, /obj/item/clothing/under/misc/pj/red, @@ -58773,6 +58870,10 @@ "sXV" = ( /turf/closed/wall/r_wall, /area/security/range) +"sYm" = ( +/obj/effect/turf_decal/vg_decals/atmos/mix, +/turf/open/floor/engine/vacuum, +/area/engine/atmos) "sYR" = ( /obj/machinery/door/airlock{ name = "Unisex Restrooms" @@ -59045,6 +59146,13 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"tSo" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 6 + }, +/turf/open/space/basic, +/area/space/nearstation) "tWj" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -59101,12 +59209,28 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"udT" = ( +/obj/machinery/atmospherics/pipe/manifold/purple/visible, +/turf/open/floor/plasteel, +/area/engine/atmos) "uei" = ( /obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, /turf/open/floor/plating, /area/maintenance/fore/secondary) +"ueZ" = ( +/obj/item/radio/intercom{ + name = "Station Intercom (General)"; + pixel_x = -30 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/machinery/camera{ + c_tag = "Atmospherics Central"; + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "ufD" = ( /obj/machinery/vr_sleeper{ dir = 4 @@ -59122,6 +59246,12 @@ dir = 4 }, /area/crew_quarters/fitness) +"ugp" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "ugu" = ( /obj/structure/cable{ icon_state = "1-4" @@ -59316,6 +59446,24 @@ "uGI" = ( /turf/open/floor/grass, /area/security/prison) +"uHc" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/disposal/incinerator) +"uHl" = ( +/obj/machinery/portable_atmospherics/pump, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel/white/corner{ + dir = 1 + }, +/area/engine/atmos) "uHp" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, @@ -59370,13 +59518,13 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) -"uPT" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +"uQR" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "O2 to Pure" }, -/turf/closed/wall/r_wall, -/area/maintenance/disposal/incinerator) +/turf/open/floor/plasteel, +/area/engine/atmos) "uQS" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1; @@ -59442,15 +59590,6 @@ }, /turf/open/floor/plating, /area/space/nearstation) -"vaW" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/crew_quarters/dorms) "vbi" = ( /obj/structure/table, /obj/item/instrument/guitar{ @@ -59862,11 +60001,26 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, /area/maintenance/fore) +"vOC" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 5 + }, +/turf/open/space/basic, +/area/space/nearstation) "vOU" = ( /obj/structure/sign/warning/securearea, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/ai_monitored/nuke_storage) +"vOV" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/dark/visible, +/turf/open/space, +/area/space/nearstation) "vPs" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -59880,6 +60034,24 @@ }, /turf/open/floor/plasteel/white, /area/science/circuit) +"vPQ" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8; + name = "External to Pumps" + }, +/turf/open/floor/plasteel, +/area/engine/atmos) +"vQf" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Mix to External" + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "vTP" = ( /obj/machinery/door/airlock/external{ name = "Labor Camp Shuttle Airlock"; @@ -60032,6 +60204,13 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"wvg" = ( +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Ports to Incinerator" + }, +/turf/open/floor/plasteel, +/area/engine/atmos) "wvX" = ( /obj/structure/table/reinforced, /obj/machinery/light, @@ -60045,6 +60224,13 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"wyE" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "wBd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -60190,6 +60376,13 @@ /obj/item/coin/gold, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"xcl" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 6 + }, +/turf/open/space, +/area/space/nearstation) "xgk" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -60342,6 +60535,12 @@ }, /turf/open/floor/plating, /area/maintenance/fore) +"xud" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/maintenance/disposal/incinerator) "xxi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -60403,12 +60602,6 @@ /obj/structure/closet/secure_closet/personal, /turf/open/floor/plasteel, /area/crew_quarters/locker) -"xEu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/turf/closed/wall/r_wall, -/area/maintenance/disposal/incinerator) "xEB" = ( /obj/machinery/power/apc{ areastring = "/area/ai_monitored/nuke_storage"; @@ -60455,6 +60648,12 @@ /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"xJC" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/closed/wall/r_wall, +/area/maintenance/disposal/incinerator) "xJW" = ( /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -60614,6 +60813,14 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness/pool) +"yan" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/disposal/incinerator) "ycd" = ( /obj/structure/toilet/secret/low_loot{ dir = 4 @@ -86226,7 +86433,7 @@ cCi aqX arR asj -iUK +cLS ajr atY auo @@ -89880,7 +90087,6 @@ bGO bHl bHS bLI -bLI bOR bQg bQg @@ -89890,6 +90096,7 @@ bQg bQg bQg bQg +bQg bYI bDG bHP @@ -90138,17 +90345,17 @@ bKw bLH bRq bNO -bOQ -bQf -bRq +bQg bRq bTK -bUE +jVX +jVX +uHl bUE bWM bXJ -bYH -bYH +bMK +bMK bYH bYH bVg @@ -90394,17 +90601,17 @@ bJs bKy bLK bLK -bLK bOT bQi bRs bSC -bLK +oXn +gxw bUG bVO bWO bXK -bYH +bLK bZz caw bYH @@ -90650,18 +90857,18 @@ bCv bJs bKy bLJ -bLJ +bWR bNP bOS bQh bRr -bSB bTL +rVN bUF bVN bWN +jDr bLK -bYJ bRi bZy cbu @@ -90907,7 +91114,7 @@ bCv bJs bKy bLM -bLM +fKC bNQ bOV bQk @@ -90915,9 +91122,9 @@ bRt bSD bTM bUH +bRt bVQ -bWN -bXM +jDr bYL cew bTh @@ -91164,18 +91371,18 @@ bCv bJs bKy bLL -bLL +bOd bNQ bOU bQj bOd -bOd +bMK bRx bTP bVP +cbA bWP -bXL -bYK +bLK bRj bTg bUm @@ -91420,19 +91627,19 @@ bDr bCy bGP bHn -bLN +cbz bLN bNS bOX bQm bRv -bOd +bSC bTN bTP -bRA +diH +bWQ bWQ bWQ -bYN bRm bTj caA @@ -91683,8 +91890,8 @@ bNR bOW bQl bRu -bSE -bRx +bSC +bTN bUI bVR bWQ @@ -91939,9 +92146,9 @@ bMK bMK bOY bQn -bRx -bMK +bSC bMK +mOG bUJ bVS bWQ @@ -92194,8 +92401,8 @@ bKz bLK bML bNT -bOV -bQj +smP +giT bRw bSF daI @@ -92452,12 +92659,12 @@ bLK bMN bNV bOV -bQo -bRz -bSH -plm -bTP -bRA +giT +bRw +bSF +daI +bUK +bVT bWQ bWQ bWQ @@ -92652,7 +92859,7 @@ aqe arf aqo atm -fPL +rgL arf avv awu @@ -92706,29 +92913,29 @@ bHU bJv bKB bLK -bMM +bVW bOd -bOV +iql bQj -bRy -bSG -daI -bUK -bVT -bWR +bVP +cbA +fSO +kJE +ugp +ueZ bXQ -bOd +cbA bZF -bPc -bOd +ezF +hgG ccv cdw cex -bOd -cfN -cfN -bLK -aaf +dEX +cbA +bQt +bLQ +dbb bOh bOh bOh @@ -92969,20 +93176,20 @@ bJB bKV bRB bSI -bSI +vQf bUM bVV -bWS -bSI -bSI +bVV +bVV +iVJ bZG -caE -cbA -ccy bOd bOd -bQu -cfO +bOd +bOd +bOd +bOd +bOd cgW cit cph @@ -93224,22 +93431,22 @@ bMO bIF bOZ bQp -bRA +alk +gAu +eqq +pUP +bOd +bOd bOd -bTO -bUL -bVU -bMK -bXR bYQ -bXR -bMK -cbz -ccx -cbA -cbA +bOd +bOd +bOd +bOd +bOd +dMj cfi -bRH +bOd cgV bMQ aaf @@ -93480,23 +93687,23 @@ bLK bMR bIH bJF -bQr +bVX bRA -bOd bTP bOd -bVX -bMK -bMK -bYR -bMK -bMK -cbC -bRA +vPQ +bOd +bOd +bOd +bYQ +bOd +bOd +bOd +bOd +bOd +jtj +jIj bTO -cez -cez -cfQ cgY ciu bVu @@ -93680,7 +93887,7 @@ aqi arf ask atm -fPL +rgL arf awq axO @@ -93739,24 +93946,24 @@ bNY bPa bMQ bRC -bMQ -bTP +rdl +daq bUN -bVW -bMK -bXS -bXS -bXS -bMK -cbB -alk -alX -cbA -bQt +bOd +bOd +bOd +bYQ +bOd +bOd +bOd +bOd +bOd +rmQ +lzt apa cgX apF -apI +aaf bOh bOh bOh @@ -93996,21 +94203,21 @@ bOb bPd cBF bRD -bSK -bTR -bUP -bVZ -bWT -bWa -bYS -bZH -caF -bQt -cBJ -cdy +rdl +daq +bUN bOd +bOd +bOd +bYQ +bOd +bOd +bOd +cBJ +bOd +eus bRy -cfR +bTP cha civ cph @@ -94249,27 +94456,27 @@ bvd bKH bLK bMS -bOa +bTO bPc bQs -bMZ -bSJ -bTQ +cez +ceA +bOd bUO -bVY +bOd +bOd +bOd +lhQ bOd bOd bOd bOd bOd -cbD bTO -cdx -bOd -bOd -cfP +cez +bUL cgZ -bMQ +rdl aaf bQA ckX @@ -94506,27 +94713,27 @@ bvd bKJ bLR bMV -bOd -bMZ +bTP +eiZ bQv bRF bSM -bTS -bUQ -agd -bUO bVZ -bVZ -bZI -caH -cbF -ccz -cdA -cez +bUN +bOd +bOd +bOd +bOd +bOd +bOd +bOd +bOd +bOd +bTP +bTO bOe -cfQ chb -ciu +iIS bVu ckb ckZ @@ -94705,15 +94912,15 @@ aoa ajo apt aql -pRW -pRW -pRW -pRW +wyE +wyE +wyE +wyE avw awy -nfw -nfw -vaW +lgX +lgX +qvf wqF aAh aAh @@ -94764,26 +94971,26 @@ bKH bLK bMU bOc -bPe -bQu -bRE -bSJ -bPe -bOd +udT +omk +nTU +bSM +jBQ +agd cCB cCC -bXT -bXT -bXT -caG -cbE -bTU -cdz -cez -bUL -cfP bOd -bMQ +bOd +bOd +bOd +bOd +bOd +bOd +ccz +uQR +cfP +cfQ +ceA aaf bOh bOh @@ -95020,25 +95227,25 @@ bvd bKH bLK bMX -bOd +omk bPg -bQx -bRH -bSM -bTU -bUS -bUS +hQY +bRE +pCj +bPe +wvg +bOd cCD -bXU -bUS -bUS -bUS -bXU -bRF -bMW -cez -cez -cfQ +bOd +bOd +bOd +bOd +bOd +bOd +bOd +bTU +fPi +fHi chd bQy cpP @@ -95277,25 +95484,25 @@ bvd bKH bLK bMW -bOe +oVN bPf -bQw -bRG -bSN -bTT -bUR -bWb +bQx +bRH +bMQ +bTU +kGv +bUS cCE bTT +bUS +bUS +bUS +bXU +bUS +bUS +gMD +eyS bUR -bZJ -bUR -bTT -bUR -cdB -bUR -bUR -cfT chc bMQ aaf @@ -95534,11 +95741,11 @@ bvd bKH bLK bMZ -bOg +cdx bPi bQz bRJ -bSM +hxn bTV bUT bWc @@ -95546,12 +95753,12 @@ bWU bXV bYT bZK -bOd +bUR cbG ccA cdC ceB -cez +dAe cez chf cix @@ -95790,14 +95997,14 @@ bvj bvd bKH bLK -bMY +bLK bOf -bPh +ivJ bQy bRI bSP bPh -bQy +jzM bRI cCF bPh @@ -95807,8 +96014,8 @@ bQy bPh bQy bRI -ceA -bLK +bSP +bVO bLK che bLK @@ -96013,7 +96220,7 @@ aOJ oIJ unA aKR -aKR +akH aUg bFC hSZ @@ -96048,13 +96255,13 @@ bvd bKH bzs bRK -aaf -bRK -aaf -bVv -aaf -bRK -aaf +qJV +nJQ +qJV +vOV +qJV +nYT +eUW bVv cCG cCH @@ -96304,7 +96511,7 @@ bFF bvd bKH bzs -bRK +fjU bOh bPj bQA @@ -96334,8 +96541,8 @@ aaf aoV aoV aoV -aoV -aoV +aaa +aaa cCQ aoV aaa @@ -96561,7 +96768,7 @@ bFK bvd bKH bzs -bRK +fjU bOh bPl bQB @@ -96818,10 +97025,10 @@ bvj bJC bKH bzs -bRK +fjU bOh bPk -bPm +sYm bPm bOh bTW @@ -96837,7 +97044,7 @@ ccB cbH bOh aaf -aoV +aaa aoV aaf aoV @@ -96850,7 +97057,7 @@ aoV aoV aoV aoV -aaf +gXs aoV aaa aaa @@ -97075,7 +97282,7 @@ bIj bJC bKH bzs -bRK +fjU bOh bPm bQC @@ -97107,7 +97314,7 @@ aoV aoV aoV aae -aaf +gXs aoV aaa aaa @@ -97332,7 +97539,7 @@ bIi bJC bKH bzs -bRK +fjU bOh bOh bOh @@ -97350,21 +97557,21 @@ bOh bOh bOh bOh -aaf -aaf -ciC -bVu -bVu -bVu -bVu -bVu +xcl caJ +ciC +gXs +gXs +tSo +kcx +kcx +kcx +ciC aoV aoV aoV aoV -aoV -aaf +gXs aoV aaa aaa @@ -97590,52 +97797,52 @@ bJC bKH bzs bUr -bVu -bVu -bVu -bVu -bVu -bVu -bVu -bVu -bVu -bVu -bVu -bVu +qJV +qJV +qJV +qJV +qJV +qJV +qJV +qJV +qJV +qJV +qJV +qJV caJ -aaf -aaf -aaf -aaf -aaf +caJ +caJ +caJ +caJ +eUW cfj cfU -cfj -cfj +maT +maT ckf -cfj -cfj -bUr -bVu -bVu -bVu -bVu -bVu -bVu -bVu -bVu -bVu -bVu -bVu +maT +lKj +nzR +nFj +mfI +mfI +mfI +mfI +mfI +mfI +mfI +mfI +mfI +mfI csM -bVu -bVu +mfI +mfI ctd -bVu -bVu -bVu -bVu -caJ +mfI +mfI +mfI +mfI +vOC ctZ ctZ cuo @@ -97859,19 +98066,20 @@ bPn bzs bzs bPn -caI +bPn bPn bzs bzs bzs cfj -cfj +chk cjp chh ciy cke -clg -cfj +cjr +pzG +uHc aoV aoV aoV @@ -97881,7 +98089,6 @@ aoV aoV aoV aaa -aaa aaf aaa csn @@ -97892,7 +98099,7 @@ aag aaa aaa aaa -ctN +nFj ctY cuh cun @@ -98043,7 +98250,7 @@ con uSC con con -eVJ +akE wHk ewu pQp @@ -98121,14 +98328,15 @@ bAw bzs bAw caK -cfj +uHc ciB ckh chj ciA +dQD cjr clh -cfj +uHc aoV aoV aoV @@ -98138,7 +98346,6 @@ aoV aoV aoV aaa -aaa aaf aaa csn @@ -98374,18 +98581,19 @@ bzs bzs bZM cbJ -ceC -ceC +bWe +bWe cfW cfX chk chl -ciz +xud chi ciz -cjq +ciz ckg cmb +yan cpO cpQ cpQ @@ -98395,7 +98603,6 @@ czJ aaf aoV aaa -aaa aaf aaa csn @@ -98635,14 +98842,15 @@ bzs ccF cdG ceE -cfl +grr cfZ -cki +cjr cld -eHI -cjt +cjr +cjr +cjr csq -xEu +xJC wHz cmd cmd @@ -98652,7 +98860,6 @@ aag aag aag aaa -aaa aaf csD csO @@ -98894,12 +99101,13 @@ cdF ceD cfk cfY -rfW +cjr ckj -cjs +cle +cle cle cli -uPT +cme cmY cme cop @@ -98909,7 +99117,6 @@ cqs aaa aag aaa -aaa aaf csD csN @@ -99149,14 +99356,15 @@ cbL cbL cdI ceG -cfj +jGI cgb chn ciE cjv clj -ckk +clj cmf +nmZ cna cnC cor @@ -99166,7 +99374,6 @@ cqt aaa aag aaa -aaa aaf csD csU @@ -99406,12 +99613,13 @@ cbK ccG cdH ceF -cfj +jGI cga chm ciD cju clf +cle csr cme cmZ @@ -99423,7 +99631,6 @@ cqs aaa aag aaa -aaa aaf csD ctb @@ -99663,13 +99870,14 @@ bzs bzs bzs bzs -cfj -cfj -cfj -cfj +fiy +cfl +cfl +cfl cjx cfl cfl +cfl dqu tXL cmd @@ -99680,7 +99888,6 @@ aag aag aag aaa -aaa aaf csD csD @@ -103248,15 +103455,15 @@ bIP bPA bJN bRU -bEm +aml bEm bJN bRU -bXe +aop bEm bJN bRU -bEm +aml bEm bDb cgi @@ -103505,15 +103712,15 @@ bOx bPz bJN bRU -bEm +amo bEm bJN bRU -bEm +amo bEm bJN bRU -bEm +amo cBz bDb cgi @@ -103751,26 +103958,26 @@ bAB bBV bDb bEn -bEm -bEm -bEm -bJL -bLa -bMi -bNo -bPy -bPA +akK +akP +akP +akV +akW +alf +alm +aln +alr bJN bRW -bTb +amG bUe bJN bWl -bXf +aoq bYg bJN bZV -caV +apw cbS bDb cgl @@ -104016,18 +104223,18 @@ bKZ bMi bIu bIO -bPB +alx bLe bRV -bTa +amH bUd bVi bRV -bTa +amH bYf bVi bRV -bTa +amH cbR bDb cgk @@ -104273,18 +104480,18 @@ bLc bMi bNo bOx -bPD +alV bQM bMi -bMi +bOx bRZ bVj bMi -bMi +bOx bRZ bZa bMi -bMi +bOx bRZ cTY cTZ @@ -104530,24 +104737,24 @@ bLb bMk bNn bIQ -bPC -bQL -cBG -bTc -bUf -bTc -bRX -bTc -bUf -bTc -bRX -bTc -cbT -ccP -ccP -cht -ckn -csk +alW +amh +ami +amP +anp +anx +anN +amP +anp +anx +anN +amP +aqG +aqS +aqS +ars +asr +asC czQ czU czZ @@ -104790,15 +104997,15 @@ bOx bMi bQN bRZ -bMi +bOx bMi bVk bRZ -bMi +bOx bMi bZb bRZ -bMi +bOx bMi cfy cgn @@ -105047,15 +105254,15 @@ bIR bPE bLe bRY -bTd +amQ bUg bVi bWm -bTd +amQ bUg bVi bZW -bTd +amQ bUg bDb bDb @@ -105304,15 +105511,15 @@ bOx bPH bJN bSa -bTe +amT bUh bJN bWn -bXg +aos bYh bJN bZX -caW +aqB cbU bDb aaf @@ -105561,15 +105768,15 @@ bOz bPG bJN bEm -bEm +amo bRU bJN bEm -bEm +amo bRU bJN bEm -bEm +amo bRU bDb aaf @@ -105818,15 +106025,15 @@ bOx bPJ bJN bEm -bEm +ano bRU bJN bEm -bXe +apb bRU bJN bEm -bEm +ano bRU bDb aaf diff --git a/_maps/map_files/CogStation/CogStation.dmm b/_maps/map_files/CogStation/CogStation.dmm index 28eded5c85..dbc857dfd7 100644 --- a/_maps/map_files/CogStation/CogStation.dmm +++ b/_maps/map_files/CogStation/CogStation.dmm @@ -705,6 +705,7 @@ /obj/item/circuitboard/machine/vending/donksofttoyvendor, /obj/item/storage/pill_bottle/happy, /obj/effect/decal/cleanable/dirt, +/obj/item/paper/fluff/cogstation/cluwne, /turf/open/floor/plating, /area/crew_quarters/theatre/clown) "abJ" = ( @@ -800,24 +801,11 @@ /turf/closed/wall/r_wall, /area/router/aux) "abX" = ( -/obj/machinery/computer/secure_data, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/camera{ - c_tag = "Security Checkpoint"; - pixel_x = 22 - }, -/obj/machinery/newscaster/security_unit{ - pixel_y = 32 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/security/checkpoint) "abY" = ( /obj/structure/grille, @@ -1523,9 +1511,9 @@ dir = 1 }, /obj/structure/closet, -/obj/item/clothing/under/staffassistant, -/obj/item/clothing/under/staffassistant, -/obj/item/clothing/under/staffassistant, +/obj/item/clothing/under/misc/staffassistant, +/obj/item/clothing/under/misc/staffassistant, +/obj/item/clothing/under/misc/staffassistant, /turf/open/floor/plasteel, /area/crew_quarters/lounge) "adK" = ( @@ -3511,9 +3499,9 @@ c_tag = "Clown's Office"; pixel_x = 22 }, -/obj/item/clothing/under/rank/yellowclown, -/obj/item/clothing/under/rank/blueclown, -/obj/item/clothing/under/rank/greenclown, +/obj/item/clothing/under/rank/civilian/clown/yellow, +/obj/item/clothing/under/rank/civilian/clown/blue, +/obj/item/clothing/under/rank/civilian/clown/green, /obj/item/toy/crayon/spraycan/lubecan, /obj/item/megaphone/clown, /turf/open/floor/plating, @@ -4141,20 +4129,12 @@ /turf/open/floor/plasteel, /area/construction/secondary) "akd" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-4" }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel, +/obj/structure/cable, +/turf/open/floor/plating, /area/security/checkpoint) "ake" = ( /obj/machinery/firealarm{ @@ -4809,6 +4789,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/item/paper/guides/cogstation/letter_sec, /turf/open/floor/plasteel, /area/security/warden) "alG" = ( @@ -6070,8 +6051,27 @@ /turf/open/floor/plasteel/dark/corner, /area/hallway/secondary/entry) "aoy" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/obj/machinery/computer/secure_data, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Security Checkpoint"; + pixel_x = 22 + }, +/obj/machinery/newscaster/security_unit{ + pixel_y = 32 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, /area/security/checkpoint) "aoz" = ( /obj/structure/closet, @@ -7342,7 +7342,7 @@ pixel_y = 26 }, /obj/effect/landmark/start/bartender, -/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/costume/maid, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/grimy, /area/crew_quarters/bar) @@ -8418,6 +8418,7 @@ /obj/item/storage/bag/tray, /obj/item/clothing/gloves/color/white, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/item/paper/guides/cogstation/cooks, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "atP" = ( @@ -9400,12 +9401,19 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/barbershop) "avY" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" +/obj/machinery/newscaster/security_unit{ + pixel_y = 32 }, -/turf/open/floor/plating, +/obj/machinery/turretid{ + name = "AI Chamber turret control"; + pixel_x = 5; + pixel_y = -24 + }, +/obj/machinery/door/window/westleft{ + name = "AI Core Access"; + req_access_txt = "65" + }, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "avZ" = ( /obj/effect/landmark/start/cook, @@ -9528,13 +9536,15 @@ /turf/closed/wall/r_wall, /area/maintenance/solars/port) "awn" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" +/obj/machinery/light{ + dir = 1; + light_color = "#e8eaff" }, /obj/structure/disposalpipe/segment, -/turf/open/floor/plating, +/obj/machinery/ai_slipper{ + uses = 10 + }, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "awo" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -10387,11 +10397,16 @@ /turf/open/floor/plasteel, /area/hydroponics/lobby) "axZ" = ( -/obj/machinery/light{ - dir = 1; - light_color = "#e8eaff" +/obj/machinery/requests_console{ + department = "AI"; + departmentType = 5; + pixel_x = 0; + pixel_y = 28 + }, +/obj/machinery/door/window/eastright{ + name = "AI Core Access"; + req_access_txt = "65" }, -/obj/structure/disposalpipe/segment, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aya" = ( @@ -11286,9 +11301,9 @@ "azR" = ( /obj/structure/closet/secure_closet/bar, /obj/structure/disposalpipe/segment, -/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/costume/maid, /obj/item/stack/spacecash/c10, -/obj/item/clothing/under/waiter, +/obj/item/clothing/under/suit/waiter, /turf/open/floor/plasteel/grimy, /area/crew_quarters/bar) "azS" = ( @@ -11768,27 +11783,31 @@ /turf/closed/wall, /area/crew_quarters/toilet) "aAP" = ( -/obj/effect/turf_decal/tile/red, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/security/brig) +"aAQ" = ( /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "2-8" }, /turf/open/floor/plasteel, -/area/security/brig) -"aAQ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Office"; - req_access_txt = "63" - }, -/obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/security/main) +/area/security/checkpoint) "aAR" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, @@ -12361,11 +12380,20 @@ /turf/open/floor/plating, /area/security/main) "aCb" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plating, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, /area/security/brig) "aCc" = ( /obj/structure/closet/secure_closet/security/sec, @@ -12680,6 +12708,7 @@ /obj/item/stack/packageWrap, /obj/item/hand_labeler, /obj/item/book/manual/wiki/security_space_law, +/obj/item/paper/guides/cogstation/letter_sec, /turf/open/floor/carpet/red, /area/security/brig) "aCM" = ( @@ -12867,9 +12896,11 @@ /area/crew_quarters/barbershop) "aDb" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plating, -/area/security/main) +/area/security/checkpoint) "aDc" = ( /obj/machinery/firealarm{ dir = 4; @@ -12972,16 +13003,19 @@ /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) "aDm" = ( -/obj/structure/table, -/obj/machinery/recharger, +/obj/machinery/computer/security{ + dir = 1 + }, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/structure/cable{ - icon_state = "1-4" +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, /turf/open/floor/plasteel, /area/security/checkpoint) "aDn" = ( @@ -13176,19 +13210,23 @@ /area/maintenance/port/fore) "aDF" = ( /obj/structure/table, -/obj/machinery/firealarm{ - pixel_y = 26 - }, +/obj/machinery/recharger, +/obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ - dir = 4 + dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/item/paper_bin, -/obj/item/pen, /turf/open/floor/plasteel, -/area/security/main) +/area/security/checkpoint) "aDG" = ( /obj/machinery/holopad, /turf/open/floor/plasteel, @@ -13340,18 +13378,26 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "aEc" = ( -/obj/structure/closet{ - name = "Evidence Closet 5" +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Office"; + req_access_txt = "63" }, -/obj/machinery/light_switch{ - pixel_y = -24 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - dir = 8 +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" }, /turf/open/floor/plasteel, /area/security/brig) @@ -13839,7 +13885,7 @@ "aFc" = ( /obj/structure/table, /obj/item/clothing/suit/toggle/owlwings, -/obj/item/clothing/under/owl, +/obj/item/clothing/under/costume/owl, /obj/item/clothing/mask/gas/owl_mask, /turf/open/floor/plating/asteroid, /area/hydroponics/garden{ @@ -13904,12 +13950,11 @@ /turf/closed/wall/r_wall, /area/crew_quarters/heads/hos) "aFk" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red, -/turf/open/floor/plasteel, -/area/security/main) +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable, +/turf/open/floor/plating, +/area/security/checkpoint) "aFl" = ( /obj/structure/chair/sofa/right, /obj/effect/turf_decal/tile/green{ @@ -14215,10 +14260,18 @@ /turf/open/floor/plasteel, /area/storage/emergency/generic) "aFP" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/security/checkpoint) +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Office"; + req_access_txt = "63" + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel, +/area/security/main) "aFQ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -14241,11 +14294,17 @@ /turf/open/floor/plasteel, /area/storage/emergency/generic) "aFT" = ( -/obj/structure/cable{ - icon_state = "0-2"; - pixel_y = 1 +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 }, -/turf/closed/wall, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, /area/security/brig) "aFU" = ( /obj/machinery/atmospherics/components/binary/circulator/cold{ @@ -15134,17 +15193,14 @@ /turf/open/floor/plasteel/dark, /area/bridge) "aHE" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/drinkingglass{ - pixel_x = -6; - pixel_y = 2 +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/item/reagent_containers/food/drinks/drinkingglass{ - pixel_x = 6; - pixel_y = 3 +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/bridge) +/turf/open/floor/plating/airless, +/area/space/nearstation) "aHF" = ( /turf/open/floor/plasteel/dark, /area/bridge) @@ -15191,7 +15247,7 @@ }, /area/chapel/main) "aHK" = ( -/obj/structure/piano, +/obj/structure/musician/piano, /turf/open/floor/carpet{ icon_state = "carpetsymbol" }, @@ -15630,34 +15686,71 @@ /turf/open/floor/plasteel, /area/hallway/secondary/civilian) "aIC" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/security/main) "aID" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/security/main) "aIE" = ( /turf/open/floor/carpet/royalblue, /area/bridge) "aIF" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ +/obj/structure/table, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/noticeboard{ + pixel_y = 28 + }, +/obj/effect/turf_decal/tile/red{ dir = 4 }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/recharger, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/security/main) "aIG" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ +/obj/structure/table, +/obj/machinery/firealarm{ + pixel_y = 26 + }, +/obj/effect/turf_decal/tile/red{ dir = 4 }, -/turf/open/floor/plating, -/area/security/detectives_office) +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/security/main) "aIH" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 6 @@ -15752,14 +15845,42 @@ /turf/open/floor/plasteel, /area/hydroponics) "aIS" = ( +/obj/structure/disposalpipe/segment, /obj/effect/landmark/start/ai, +/obj/item/radio/intercom{ + freerange = 1; + frequency = 1447; + name = "Private Channel"; + pixel_x = 27; + pixel_y = -7 + }, +/obj/item/radio/intercom{ + freerange = 1; + name = "Common Channel"; + pixel_x = 27; + pixel_y = 5 + }, /obj/machinery/button/door{ id = "AIShutter"; layer = 3.6; name = "AI Core Shutter Control"; - pixel_x = 24 + pixel_x = 24; + pixel_y = -24 + }, +/obj/item/radio/intercom{ + freerange = 1; + listening = 0; + name = "Custom Channel"; + pixel_x = -24; + pixel_y = -8 + }, +/obj/machinery/button/door{ + id = "AIChamberShutter"; + layer = 3.6; + name = "AI Chamber Shutter Control"; + pixel_x = -24; + pixel_y = -24 }, -/obj/structure/disposalpipe/segment, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aIT" = ( @@ -15918,14 +16039,23 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "aJj" = ( -/obj/machinery/light{ - dir = 1 +/obj/structure/chair{ + dir = 4 }, -/obj/machinery/light_switch{ - pixel_y = 24 +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/open/floor/plasteel/dark, -/area/chapel/office) +/obj/machinery/power/apc{ + areastring = "/area/maintenance/aft"; + dir = 8; + name = "Chapel APC"; + pixel_x = -26 + }, +/turf/open/floor/plasteel{ + icon_state = "chapel" + }, +/area/chapel/main) "aJk" = ( /obj/structure/table/wood, /obj/item/candle, @@ -16429,11 +16559,21 @@ /turf/open/floor/carpet/red, /area/security/brig) "aKi" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, +/area/security/main) "aKj" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 6 @@ -17300,25 +17440,12 @@ /turf/open/floor/plasteel, /area/security/brig) "aLX" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/noticeboard{ - pixel_y = 28 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/recharger, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "0-2" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel, +/obj/structure/cable, +/turf/open/floor/plating, /area/security/main) "aLY" = ( /obj/effect/turf_decal/tile/red, @@ -17718,13 +17845,12 @@ /turf/open/floor/plasteel, /area/hallway/secondary/civilian) "aMN" = ( -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/security/main) "aMO" = ( @@ -17909,9 +18035,7 @@ /turf/open/floor/plasteel, /area/bridge) "aNh" = ( -/obj/structure/cable{ - icon_state = "1-8" - }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aNi" = ( @@ -17990,37 +18114,13 @@ /turf/open/floor/plasteel, /area/crew_quarters/bar) "aNo" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "AIShutter"; + name = "AI Core Shutters" }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/item/aiModule/supplied/oxygen{ - pixel_x = 2; - pixel_y = 10 - }, -/obj/item/aiModule/supplied/quarantine{ - pixel_x = 1; - pixel_y = 8 - }, -/obj/item/aiModule/zeroth/oneHuman{ - pixel_y = 4 - }, -/obj/effect/spawner/lootdrop/aimodule_harmful{ - pixel_x = -1; - pixel_y = 2 - }, -/obj/item/aiModule/supplied/protectStation{ - pixel_x = -2 - }, -/obj/structure/window/reinforced/spawner/north, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) "aNp" = ( /obj/effect/turf_decal/delivery, @@ -18038,17 +18138,11 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "aNr" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/structure/window/reinforced/spawner/north, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aNs" = ( /obj/effect/turf_decal/tile/yellow{ @@ -18119,21 +18213,10 @@ }, /area/chapel/main) "aNz" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 5 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/machinery/door/window/northleft{ - name = "AI Chamber"; - req_one_access_txt = "65" - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-8" - }, -/turf/open/floor/plasteel, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aNA" = ( /obj/machinery/door/firedoor, @@ -18407,6 +18490,9 @@ "aOe" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) "aOf" = ( @@ -18682,16 +18768,15 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aOI" = ( -/obj/structure/chair/stool, -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 10 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/machinery/flasher{ + id = "ID"; + pixel_x = 8; + pixel_y = 24 }, -/obj/structure/window/reinforced/spawner/north, -/turf/open/floor/plasteel, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aOJ" = ( /turf/closed/wall/r_wall, @@ -18784,7 +18869,7 @@ /obj/effect/turf_decal/bot, /obj/item/clothing/accessory/armband/hydro, /obj/item/encryptionkey/headset_service, -/obj/item/clothing/under/rank/vice, +/obj/item/clothing/under/misc/vice_officer, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 4 }, @@ -18859,21 +18944,13 @@ name = "Engine Room" }) "aPf" = ( -/obj/machinery/computer/upload/ai{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 6 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/structure/window/reinforced/spawner/north, -/turf/open/floor/plasteel, +/turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) "aPg" = ( /obj/structure/grille, @@ -18976,15 +19053,15 @@ }, /area/hallway/primary/central) "aPs" = ( -/obj/structure/closet/secure_closet/hop, -/obj/machinery/light{ - dir = 1; - light_color = "#e8eaff" +/obj/effect/turf_decal/tile/red{ + dir = 4 }, -/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit, -/obj/item/clothing/under/gimmick/rank/head_of_personnel/suit/skirt, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hop) +/obj/effect/turf_decal/tile/red, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/security/main) "aPt" = ( /obj/structure/table/wood, /obj/machinery/recharger, @@ -19101,6 +19178,9 @@ pixel_y = 6 }, /obj/item/clothing/glasses/meson, +/obj/machinery/status_display{ + pixel_x = -32 + }, /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "aPF" = ( @@ -19245,30 +19325,40 @@ /turf/open/floor/plasteel/white, /area/crew_quarters/fitness/cogpool) "aPT" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-02" +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/bridge) +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating/airless, +/area/space/nearstation) "aPU" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/machinery/camera{ - c_tag = "Bridge - Port Quarter"; - dir = 1 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/machinery/keycard_auth{ - pixel_y = -24 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating, /area/bridge) "aPV" = ( -/obj/machinery/photocopier, -/turf/open/floor/plasteel/dark, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, /area/bridge) "aPW" = ( -/obj/structure/reagent_dispensers/water_cooler, -/turf/open/floor/plasteel/dark, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, /area/bridge) "aPX" = ( /obj/structure/table, @@ -20551,9 +20641,20 @@ /turf/open/floor/plasteel, /area/hallway/secondary/civilian) "aSJ" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/crew_quarters/heads/captain) +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/security/glass{ + name = "Security Office"; + req_access_txt = "63" + }, +/obj/effect/turf_decal/delivery, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/security/main) "aSK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -20819,11 +20920,16 @@ /turf/open/floor/plating, /area/maintenance/department/eva) "aTo" = ( -/obj/effect/landmark/start/captain, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "0-4" }, -/area/crew_quarters/heads/captain) +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/security/detectives_office) "aTp" = ( /obj/structure/chair{ dir = 4 @@ -20856,17 +20962,24 @@ }, /area/chapel/main) "aTr" = ( -/obj/structure/table/wood, -/obj/machinery/recharger, -/turf/open/floor/carpet/blue, -/area/crew_quarters/heads/captain) +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/security/detectives_office) "aTs" = ( /turf/closed/wall, /area/maintenance/department/eva) "aTt" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/crew_quarters/heads/hop) +/obj/structure/closet/secure_closet/detective, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aTu" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -20962,14 +21075,16 @@ /turf/closed/wall, /area/router/public) "aTH" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-2" }, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/turf/open/floor/plating, +/area/bridge) "aTI" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line, @@ -20985,16 +21100,12 @@ /turf/open/floor/plasteel, /area/router/public) "aTJ" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/item/pen/fourcolor, -/obj/item/pen/fountain{ - pixel_x = 2; - pixel_y = 6 +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-4" }, -/obj/item/stamp/hop, -/turf/open/floor/carpet/green, -/area/crew_quarters/heads/hop) +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aTK" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -21551,9 +21662,13 @@ /turf/open/floor/plasteel, /area/science/mixing) "aVa" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plating, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aVb" = ( /obj/structure/pool/Rboard, @@ -22108,9 +22223,12 @@ /turf/open/floor/plasteel, /area/gateway) "aWn" = ( -/obj/structure/closet/secure_closet/detective, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "aWo" = ( @@ -22197,27 +22315,40 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aWw" = ( -/obj/structure/table/wood, -/obj/item/pinpointer/nuke, -/obj/item/card/id/captains_spare, -/obj/item/hand_tele, -/obj/item/disk/nuclear, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/captain) -"aWx" = ( -/obj/structure/table/wood, -/obj/machinery/light, -/obj/item/storage/photo_album/Captain, -/obj/item/camera{ - pixel_y = -6 +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/item/stamp/captain, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/captain) +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) +"aWx" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/security/detectives_office) "aWy" = ( -/obj/machinery/suit_storage_unit/captain, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/captain) +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aWz" = ( /obj/machinery/door/firedoor, /obj/structure/cable{ @@ -23026,9 +23157,12 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/nuke_storage) "aYm" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/ai_monitored/storage/eva) +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aYn" = ( /obj/structure/table, /obj/effect/turf_decal/stripes/line{ @@ -23188,30 +23322,40 @@ /turf/open/floor/plating, /area/maintenance/starboard/central) "aYD" = ( -/obj/structure/table, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/plus, -/turf/open/floor/plasteel, -/area/ai_monitored/storage/eva) -"aYE" = ( -/obj/item/beacon, -/turf/open/floor/plasteel, -/area/ai_monitored/storage/eva) -"aYF" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "1-2" }, -/turf/open/floor/plasteel/checker, -/area/ai_monitored/storage/eva) +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) +"aYE" = ( +/obj/structure/closet/crate/trashcart, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/structure/disposalpipe/junction, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 10 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) +"aYF" = ( +/obj/structure/table/wood, +/obj/item/storage/box/evidence, +/obj/item/hand_labeler, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "aYG" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -23229,14 +23373,17 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "aYI" = ( -/obj/machinery/light{ - dir = 4; - light_color = "#e8eaff" +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 }, -/turf/open/floor/plasteel/dark/side{ - dir = 4 +/obj/machinery/photocopier, +/obj/structure/extinguisher_cabinet{ + pixel_y = -32 }, -/area/hallway/primary/central) +/obj/item/paper/guides/cogstation/letter_sec, +/turf/open/floor/plasteel, +/area/security/main) "aYJ" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -23584,7 +23731,7 @@ /obj/effect/turf_decal/bot_white/left, /obj/item/stack/sheet/mineral/diamond, /obj/item/gun/ballistic/revolver/mateba, -/obj/item/clothing/under/soviet, +/obj/item/clothing/under/costume/soviet, /obj/item/clothing/suit/armor/vest/russian_coat, /obj/item/clothing/head/helmet/rus_helmet, /obj/machinery/light, @@ -23857,6 +24004,9 @@ /obj/item/aiModule/core/full/custom{ pixel_x = -4 }, +/obj/machinery/status_display{ + pixel_x = 32 + }, /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "aZQ" = ( @@ -23884,10 +24034,18 @@ /turf/open/floor/plasteel/dark/corner, /area/ai_monitored/storage/eva) "aZT" = ( -/obj/structure/table/wood, -/obj/item/stack/packageWrap, -/turf/open/floor/carpet/royalblue, -/area/bridge) +/obj/structure/closet/secure_closet/hos, +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" + }, +/obj/item/storage/box/deputy, +/obj/item/paper/guides/cogstation/letter_hos, +/turf/open/floor/plasteel/grimy, +/area/crew_quarters/heads/hos) "aZU" = ( /obj/structure/chair, /obj/machinery/light{ @@ -24280,8 +24438,8 @@ "baP" = ( /obj/structure/closet/secure_closet/captains, /obj/item/reagent_containers/food/drinks/flask/gold, -/obj/item/clothing/under/gimmick/rank/captain/suit, -/obj/item/clothing/under/gimmick/rank/captain/suit/skirt, +/obj/item/clothing/under/rank/captain/suit, +/obj/item/clothing/under/rank/captain/suit/skirt, /obj/machinery/airalarm{ pixel_y = 24 }, @@ -24349,11 +24507,39 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "baW" = ( -/obj/structure/grille, -/obj/structure/cable{ - icon_state = "0-2" +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/turf/open/floor/plating, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/item/aiModule/core/full/asimov{ + pixel_x = 2; + pixel_y = 10 + }, +/obj/effect/spawner/lootdrop/aimodule_neutral{ + pixel_x = 1; + pixel_y = 8 + }, +/obj/effect/spawner/lootdrop/aimodule_harmless{ + pixel_y = 6 + }, +/obj/item/aiModule/core/freeformcore{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/aiModule/supplied/freeform{ + pixel_x = -2 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "baX" = ( /obj/effect/turf_decal/tile/yellow, @@ -25772,36 +25958,12 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "beu" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/structure/grille, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/item/aiModule/core/full/asimov{ - pixel_x = 2; - pixel_y = 10 - }, -/obj/effect/spawner/lootdrop/aimodule_neutral{ - pixel_x = 1; - pixel_y = 8 - }, -/obj/effect/spawner/lootdrop/aimodule_harmless{ - pixel_y = 6 - }, -/obj/item/aiModule/core/freeformcore{ - pixel_x = -1; - pixel_y = 2 - }, -/obj/item/aiModule/supplied/freeform{ - pixel_x = -2 - }, -/turf/open/floor/plasteel, +/obj/structure/cable, +/turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) "bev" = ( /obj/structure/cable{ @@ -25943,7 +26105,11 @@ /area/security/courtroom/jury) "beQ" = ( /obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/grimy, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/closed/wall, /area/security/detectives_office) "beR" = ( /obj/structure/chair{ @@ -26304,23 +26470,19 @@ /turf/open/floor/plating, /area/quartermaster/warehouse) "bfH" = ( -/obj/structure/chair{ - dir = 4 +/obj/machinery/light{ + dir = 1 }, -/obj/structure/cable, -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/light_switch{ + pixel_y = 24 }, -/obj/machinery/power/apc{ - areastring = "/area/maintenance/aft"; - dir = 8; - name = "Chapel APC"; - pixel_x = -24 +/obj/machinery/button/crematorium{ + id = "foo"; + pixel_x = 8; + pixel_y = 24 }, -/turf/open/floor/plasteel{ - icon_state = "chapel" - }, -/area/chapel/main) +/turf/open/floor/plasteel/dark, +/area/chapel/office) "bfI" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -26349,6 +26511,10 @@ /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, +/obj/item/paper/fluff/cogstation/letter_chap{ + pixel_x = 10; + pixel_y = 2 + }, /turf/open/floor/carpet{ icon_state = "carpetsymbol" }, @@ -26549,18 +26715,13 @@ /turf/open/floor/plating, /area/quartermaster/warehouse) "bgh" = ( -/obj/machinery/conveyor_switch{ - id = "EngiCargoConveyer" +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 6 }, -/obj/structure/cable, -/obj/machinery/power/apc{ - areastring = "/area/quartermaster/sorting"; - dir = 8; - name = "Delivery Office APC"; - pixel_x = -24 - }, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) +/turf/open/space/basic, +/area/space/nearstation) "bgi" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 @@ -27190,18 +27351,15 @@ /turf/open/floor/plasteel, /area/quartermaster/sorting) "bhB" = ( -/obj/structure/closet/secure_closet/quartermaster, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/structure/table/wood, +/obj/item/stack/packageWrap, +/obj/item/paper/fluff/cogstation/bsrb, +/obj/item/paper/fluff/cogstation/survey{ + pixel_x = -4; + pixel_y = 2 }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown, -/obj/item/clothing/suit/space/eva, -/obj/item/clothing/head/helmet/space/eva, -/turf/open/floor/plasteel, -/area/quartermaster/qm) +/turf/open/floor/carpet/royalblue, +/area/bridge) "bhC" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/orange/hidden, @@ -27517,16 +27675,12 @@ /turf/open/floor/plating, /area/quartermaster/storage) "bik" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "0-2" }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating, /area/bridge) "bil" = ( /obj/effect/turf_decal/stripes/line{ @@ -27573,14 +27727,16 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "biq" = ( -/obj/machinery/computer/cargo/request{ - dir = 1 +/obj/structure/closet/secure_closet/hop, +/obj/machinery/light{ + dir = 1; + light_color = "#e8eaff" }, -/obj/machinery/keycard_auth{ - pixel_x = 24; - pixel_y = -8 +/obj/item/clothing/under/rank/civilian/head_of_personnel/suit, +/obj/item/clothing/under/rank/civilian/head_of_personnel/suit/skirt{ + name = "head of personnel's suitskirt" }, -/turf/open/floor/carpet/green, +/turf/open/floor/plasteel/dark, /area/crew_quarters/heads/hop) "bir" = ( /obj/effect/turf_decal/tile/brown{ @@ -28094,17 +28250,25 @@ /turf/open/floor/plating, /area/security/courtroom/jury) "bjw" = ( -/obj/machinery/computer/card{ - dir = 8 +/obj/item/storage/secure/safe{ + pixel_x = 4; + pixel_y = 32 }, -/obj/machinery/keycard_auth{ - pixel_x = 8; - pixel_y = -24 +/obj/structure/disposalpipe/segment{ + dir = 5 }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" +/obj/effect/decal/cleanable/cobweb{ + icon_state = "cobweb2" }, -/area/crew_quarters/heads/captain) +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plating, +/area/maintenance/starboard/central) "bjx" = ( /obj/structure/table/optable, /obj/effect/turf_decal/bot, @@ -28136,21 +28300,13 @@ /turf/open/floor/plating, /area/maintenance/department/eva) "bjB" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/item/folder/red, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) +/obj/structure/cable, +/turf/open/floor/plating, +/area/security/brig) "bjC" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -28193,9 +28349,18 @@ }, /area/engine/atmos) "bjF" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/security/checkpoint/supply) +/obj/machinery/power/apc{ + areastring = "/area/maintenance/aft"; + dir = 8; + name = "Head of Personnel APC"; + pixel_x = -24 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable, +/turf/open/floor/carpet/green, +/area/crew_quarters/heads/hop) "bjG" = ( /obj/structure/rack, /turf/open/floor/plasteel, @@ -28350,21 +28515,24 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bjV" = ( +/obj/structure/closet{ + name = "Evidence Closet 5" + }, +/obj/machinery/light_switch{ + pixel_y = -24 + }, /obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/structure/chair{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, /turf/open/floor/plasteel, -/area/security/checkpoint/supply) +/area/security/brig) "bjW" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28642,12 +28810,12 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "bkC" = ( -/obj/machinery/modular_computer/console/preset/research{ - dir = 8 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/item/reagent_containers/food/drinks/coffee, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "bkD" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -29496,13 +29664,12 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bmj" = ( -/obj/structure/closet/secure_closet/RD, -/obj/machinery/light{ - dir = 4; - light_color = "#c1caff" +/obj/machinery/vending/wardrobe/cap_wardrobe, +/obj/structure/cable{ + icon_state = "2-8" }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) +/turf/open/floor/carpet/blue, +/area/crew_quarters/heads/captain) "bmk" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, @@ -29914,6 +30081,7 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, +/obj/item/paper/guides/cogstation/cdn_chap, /turf/open/floor/plasteel/dark, /area/chapel/office) "bmY" = ( @@ -30540,9 +30708,17 @@ /turf/closed/wall/r_wall, /area/crew_quarters/fitness/cogpool) "boj" = ( -/obj/structure/rack, -/obj/item/caution, -/obj/item/caution, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/quartermaster/warehouse) "bok" = ( @@ -31307,17 +31483,10 @@ name = "Aft Air Hookup" }) "bpW" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, +/turf/closed/wall, /area/security/brig) "bpX" = ( /obj/machinery/disposal/bin, @@ -32621,12 +32790,9 @@ /turf/open/floor/plating, /area/maintenance/disposal) "bsz" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; dir = 4 }, /turf/open/space/basic, @@ -32770,15 +32936,11 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "bsT" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 10 }, -/obj/structure/transit_tube/crossing/horizontal, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible, /turf/open/space/basic, /area/space/nearstation) "bsU" = ( @@ -33505,19 +33667,25 @@ /turf/open/floor/plating, /area/maintenance/department/chapel) "buM" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/crew_quarters/heads/cmo) +/obj/structure/table/wood, +/obj/machinery/recharger, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/carpet/blue, +/area/crew_quarters/heads/captain) "buN" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/closed/wall/rust, /area/chapel/main) "buO" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/closed/wall, -/area/security/detectives_office) +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "buP" = ( /obj/item/trash/plate, /obj/item/lighter/greyscale, @@ -33535,22 +33703,15 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "buR" = ( -/obj/item/storage/secure/safe{ - pixel_x = 4; - pixel_y = 32 - }, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/decal/cleanable/cobweb{ - icon_state = "cobweb2" +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, /obj/structure/cable{ - icon_state = "2-8" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plating, -/area/maintenance/starboard/central) +/area/crew_quarters/heads/hop) "buS" = ( /turf/closed/wall/r_wall, /area/crew_quarters/heads/cmo) @@ -34517,7 +34678,7 @@ dir = 8 }, /obj/structure/table, -/obj/item/clothing/under/rank/mailman, +/obj/item/clothing/under/misc/mailman, /obj/item/clothing/head/mailman, /obj/item/wirecutters, /obj/item/stack/packageWrap, @@ -34620,8 +34781,8 @@ /obj/structure/disposalpipe/segment, /obj/item/clothing/gloves/color/purple, /obj/item/clothing/gloves/color/purple, -/obj/item/clothing/under/janimaid, -/obj/item/clothing/under/janimaid, +/obj/item/clothing/under/costume/maid, +/obj/item/clothing/under/costume/maid, /obj/structure/sign/poster/official/bless_this_spess{ pixel_x = -32 }, @@ -35067,13 +35228,19 @@ /turf/open/floor/engine/vacuum, /area/science/mixing) "byd" = ( -/obj/machinery/computer/crew, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen/fourcolor, +/obj/item/pen/fountain{ + pixel_x = 2; + pixel_y = 6 }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) +/obj/item/stamp/hop, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/carpet/green, +/area/crew_quarters/heads/hop) "bye" = ( /obj/structure/safe/floor, /obj/effect/turf_decal/tile/green, @@ -35615,19 +35782,16 @@ /turf/open/floor/plating/airless, /area/quartermaster/miningoffice) "bzw" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 9 }, -/obj/machinery/conveyor{ - dir = 4; - id = "MiningConveyer" +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ + dir = 9 }, -/obj/machinery/door/poddoor{ - id = "MiningConveyerBlastDoor"; - name = "Asteroid Mining Load Door" - }, -/turf/open/floor/plating/airless, -/area/quartermaster/miningoffice) +/obj/effect/landmark/start/cargo_technician, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "bzx" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -35701,45 +35865,10 @@ /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "bzH" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 4; - light_color = "#c1caff" - }, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stock_parts/cell/high/plus{ - pixel_y = 8 - }, -/obj/item/stock_parts/cell/high/plus{ - pixel_y = 8 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/assembly/flash{ - pixel_x = -8; - pixel_y = 4 - }, -/turf/open/floor/plasteel/dark, -/area/science/robotics/lab) +/obj/structure/disposalpipe/segment, +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/maintenance/disposal) "bzI" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -35995,17 +36124,20 @@ /turf/open/floor/plasteel, /area/router) "bAn" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 8 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark/side{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 }, -/area/gateway) +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/carpet/green, +/area/crew_quarters/heads/hop) "bAo" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -36131,12 +36263,13 @@ /area/science/mixing) "bAA" = ( /obj/structure/lattice, -/obj/structure/disposalpipe/segment, -/obj/machinery/camera{ - c_tag = "Supply - Warehouse Exterior"; - dir = 1 +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/space/basic, /area/space/nearstation) "bAB" = ( @@ -36327,16 +36460,22 @@ /turf/closed/wall, /area/hallway/secondary/exit) "bAX" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/structure/table/wood, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, -/obj/machinery/photocopier, -/obj/structure/extinguisher_cabinet{ - pixel_y = -32 +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/open/floor/plasteel, -/area/security/main) +/obj/item/paper/fluff/cogstation/letter_cap{ + pixel_x = -2; + pixel_y = 4 + }, +/obj/item/flashlight/lamp, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bAY" = ( /obj/machinery/status_display, /turf/closed/wall, @@ -36520,17 +36659,16 @@ /turf/open/floor/plasteel, /area/science/robotics/lab) "bBt" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/open/floor/carpet/green, -/area/crew_quarters/heads/hop) +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bBu" = ( /turf/open/floor/plasteel/showroomfloor, /area/medical/morgue) @@ -36827,11 +36965,14 @@ /turf/open/floor/plasteel, /area/router/eva) "bCd" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/effect/landmark/start/captain, +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/white, -/area/gateway) +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bCe" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -36996,7 +37137,7 @@ }, /obj/effect/turf_decal/tile/yellow, /obj/structure/closet/secure_closet/engineering_personal, -/obj/item/clothing/under/overalls, +/obj/item/clothing/under/misc/overalls, /obj/structure/window/reinforced/spawner/east, /turf/open/floor/plasteel, /area/storage/primary) @@ -37007,9 +37148,11 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "bCB" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposaloutlet, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/disposal) "bCC" = ( @@ -37038,8 +37181,11 @@ /turf/open/floor/plating, /area/router/eva) "bCF" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 }, /turf/open/floor/circuit, /area/ai_monitored/turret_protected/ai) @@ -37376,11 +37522,8 @@ "bDw" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 10 + id = "AIChamberShutter"; + name = "AI Chamber Shutters" }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) @@ -37580,13 +37723,11 @@ /turf/open/floor/plasteel, /area/medical/chemistry) "bDU" = ( +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 6 + id = "AIChamberShutter"; + name = "AI Chamber Shutters" }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) @@ -37594,13 +37735,16 @@ /turf/open/floor/plasteel/stairs/left, /area/crew_quarters/bar) "bDW" = ( +/obj/structure/disposalpipe/segment, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "AI Chamber"; + req_access_txt = "65" }, -/turf/open/floor/circuit, +/turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) "bDX" = ( /turf/open/floor/plasteel/stairs/right, @@ -37797,18 +37941,22 @@ /turf/closed/wall/r_wall, /area/maintenance/solars/starboard/fore) "bEq" = ( -/obj/machinery/computer/security{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-8" }, -/turf/open/floor/plasteel, -/area/security/checkpoint) +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bEr" = ( /obj/structure/cable, /obj/machinery/power/apc{ @@ -38011,23 +38159,13 @@ /turf/open/floor/plating, /area/maintenance/fore) "bEL" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Office"; - req_access_txt = "63" - }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/security/brig) +/obj/effect/decal/cleanable/dirt, +/obj/structure/grille/broken, +/turf/open/floor/plating, +/area/maintenance/disposal) "bEM" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -38178,12 +38316,12 @@ /turf/open/floor/plating, /area/router) "bEZ" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" + id = "AIChamberShutter"; + name = "AI Chamber Shutters" }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /turf/open/floor/plating, /area/ai_monitored/turret_protected/ai) "bFa" = ( @@ -38221,13 +38359,36 @@ /turf/open/floor/plating, /area/maintenance/starboard/central) "bFf" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "AIShutter"; - name = "AI Core Shutters" +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/item/aiModule/supplied/oxygen{ + pixel_x = 2; + pixel_y = 10 + }, +/obj/item/aiModule/supplied/quarantine{ + pixel_x = 1; + pixel_y = 8 + }, +/obj/item/aiModule/zeroth/oneHuman{ + pixel_y = 4 + }, +/obj/effect/spawner/lootdrop/aimodule_harmful{ + pixel_x = -1; + pixel_y = 2 + }, +/obj/item/aiModule/supplied/protectStation{ + pixel_x = -2 + }, +/turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "bFg" = ( /obj/effect/turf_decal/tile/brown, @@ -38329,8 +38490,16 @@ /turf/open/floor/plating, /area/medical/chemistry) "bFv" = ( -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/turf/open/floor/circuit, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "bFw" = ( /obj/machinery/monkey_recycler, @@ -38352,27 +38521,22 @@ /turf/open/floor/plasteel, /area/medical/chemistry) "bFy" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - areastring = "/area/maintenance/aft"; - dir = 8; - name = "Head of Personnel APC"; - pixel_x = -24 +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 }, -/turf/open/floor/carpet/green, -/area/crew_quarters/heads/hop) -"bFz" = ( /obj/structure/cable{ - icon_state = "2-8" + icon_state = "4-8" }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark/side{ - dir = 8 - }, -/area/gateway) +/area/crew_quarters/heads/captain) +"bFz" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/item/paper/guides/cogstation/janitor, +/turf/open/floor/plasteel, +/area/janitor) "bFA" = ( /obj/structure/chair/stool, /obj/effect/turf_decal/tile/neutral, @@ -38760,11 +38924,17 @@ /turf/open/floor/plasteel, /area/security/main) "bGg" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/circuit, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "bGh" = ( /obj/structure/lattice, @@ -38967,11 +39137,10 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, +/obj/structure/disposalpipe/segment, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "1-8" }, -/obj/structure/window/reinforced/spawner/north, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "bGC" = ( @@ -38991,7 +39160,6 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/structure/window/reinforced/spawner/north, /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) @@ -39103,9 +39271,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/clothing/under/staffassistant, -/obj/item/clothing/under/staffassistant, -/obj/item/clothing/under/staffassistant, +/obj/item/clothing/under/misc/staffassistant, +/obj/item/clothing/under/misc/staffassistant, +/obj/item/clothing/under/misc/staffassistant, /turf/open/floor/plasteel, /area/crew_quarters/locker) "bGS" = ( @@ -39372,7 +39540,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/clothing/under/staffassistant, +/obj/item/clothing/under/misc/staffassistant, /turf/open/floor/plasteel, /area/crew_quarters/locker) "bHw" = ( @@ -39384,7 +39552,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/clothing/under/staffassistant, +/obj/item/clothing/under/misc/staffassistant, /turf/open/floor/plasteel, /area/crew_quarters/locker) "bHx" = ( @@ -39901,17 +40069,15 @@ /turf/open/floor/plating, /area/maintenance/solars/starboard/aft) "bIC" = ( -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/conveyor/auto{ + id = "disposal" }, -/obj/machinery/power/apc{ - areastring = "/area/maintenance/aft"; - dir = 8; - name = "Aft Maintenance APC"; - pixel_x = -24 +/obj/structure/disposalpipe/segment{ + dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, -/area/maintenance/aft) +/area/maintenance/disposal) "bID" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral{ @@ -40061,16 +40227,11 @@ name = "Research Sector" }) "bIT" = ( -/obj/structure/lattice/catwalk, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible, -/obj/machinery/atmospherics/pipe/simple/violet/hidden{ - icon_state = "pipe11-2"; - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/violet/hidden, /turf/open/space/basic, /area/space/nearstation) "bIU" = ( @@ -40121,12 +40282,9 @@ /turf/open/floor/plasteel, /area/maintenance/department/chapel) "bIY" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 10 - }, -/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden, /turf/open/space/basic, -/area/space/nearstation) +/area/space) "bIZ" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -40749,16 +40907,13 @@ /turf/open/floor/plating, /area/quartermaster/miningoffice) "bKp" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/crew_quarters/heads/hop) "bKq" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -40932,12 +41087,18 @@ /turf/open/floor/engine, /area/science/xenobiology) "bKG" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/computer/cargo/request{ + dir = 1 }, -/turf/open/floor/plating, -/area/science/xenobiology) +/obj/machinery/keycard_auth{ + pixel_x = 24; + pixel_y = -8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/carpet/green, +/area/crew_quarters/heads/hop) "bKH" = ( /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 4 @@ -40952,25 +41113,23 @@ /turf/open/floor/engine, /area/science/mixing) "bKJ" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/hop) "bKK" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/crew_quarters/heads/hop) "bKL" = ( /obj/structure/cable{ icon_state = "2-4" @@ -41191,12 +41350,13 @@ /turf/open/floor/engine, /area/science/xenobiology) "bLe" = ( -/obj/machinery/door/window/westright{ - name = "Containment Pen"; - req_one_access_txt = "55" +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-8" }, -/turf/open/floor/engine, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/crew_quarters/heads/hop) "bLf" = ( /obj/machinery/door/window/eastleft{ name = "Containment Pen"; @@ -41218,8 +41378,23 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bLh" = ( -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/obj/structure/bed, +/obj/item/radio/intercom{ + name = "Station Intercom (Common)"; + pixel_y = -28 + }, +/obj/item/bedsheet/captain, +/obj/effect/landmark/start/captain, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bLi" = ( /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ @@ -41237,12 +41412,16 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bLk" = ( -/obj/machinery/door/window/eastleft{ - name = "Containment Pen"; - req_one_access_txt = "55" +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 1 }, -/turf/open/floor/engine, -/area/science/xenobiology) +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bLl" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ dir = 4 @@ -41703,11 +41882,23 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "bMh" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 +/obj/structure/cable{ + icon_state = "1-2" }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bMi" = ( /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ @@ -41731,7 +41922,7 @@ "bMm" = ( /obj/structure/table/wood, /obj/machinery/light, -/obj/item/clothing/under/assistantformal{ +/obj/item/clothing/under/misc/assistantformal{ pixel_y = 4 }, /turf/open/floor/carpet{ @@ -41979,10 +42170,14 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bMK" = ( -/obj/machinery/atmospherics/pipe/simple/violet/visible{ +/obj/structure/lattice, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; dir = 5 }, -/obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) "bML" = ( @@ -42100,9 +42295,13 @@ /turf/open/floor/plating, /area/router) "bMX" = ( -/obj/structure/lattice/catwalk, -/obj/machinery/atmospherics/pipe/simple/violet/visible, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ +/obj/structure/lattice, +/obj/structure/sign/warning{ + name = "\improper KEEP CLEAR: HIGH SPEED DELIVERIES"; + pixel_y = -32 + }, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; dir = 4 }, /turf/open/space/basic, @@ -42879,15 +43078,17 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bOJ" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel, -/area/science/xenobiology) +/mob/living/simple_animal/pet/cat/space, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bOK" = ( /obj/effect/turf_decal/delivery, /obj/machinery/door/window/northright{ @@ -42897,18 +43098,20 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bOL" = ( -/obj/structure/table/reinforced, -/obj/structure/window/reinforced{ - dir = 8; - layer = 2.9 +/obj/machinery/computer/card{ + dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/machinery/keycard_auth{ + pixel_x = 8; + pixel_y = -24 }, -/obj/item/clothing/mask/gas, -/obj/item/clothing/glasses/science, -/turf/open/floor/plasteel, -/area/science/xenobiology) +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" + }, +/area/crew_quarters/heads/captain) "bOM" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/stripes/line{ @@ -42938,22 +43141,47 @@ /turf/open/floor/plating, /area/science/xenobiology) "bOQ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/general/visible, -/turf/open/floor/plating, -/area/science/xenobiology) -"bOR" = ( -/obj/machinery/door/window/southright{ - name = "Secure Xenobiological Containment"; - req_one_access_txt = "55" +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/open/floor/engine, -/area/science/xenobiology) +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 5 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/captain) +"bOR" = ( +/obj/structure/table/wood, +/obj/item/pinpointer/nuke, +/obj/item/card/id/captains_spare, +/obj/item/hand_tele, +/obj/item/disk/nuclear, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/captain) "bOS" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/science/xenobiology) +/obj/structure/table/wood, +/obj/machinery/light, +/obj/item/storage/photo_album/Captain, +/obj/item/camera{ + pixel_y = -6 + }, +/obj/item/stamp/captain, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/captain) "bOT" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 1 @@ -43048,15 +43276,14 @@ /turf/open/floor/engine, /area/science/xenobiology) "bPh" = ( -/obj/machinery/light{ - dir = 1 +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, -/obj/machinery/portable_atmospherics/scrubber, -/turf/open/floor/engine, -/area/engine/secure_construction{ - name = "Engineering Construction Area" - }) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/space/basic, +/area/space/nearstation) "bPi" = ( /obj/structure/chair{ dir = 8 @@ -43070,8 +43297,8 @@ /area/science/xenobiology) "bPk" = ( /obj/structure/table/reinforced, -/obj/item/clothing/under/staffassistant, -/obj/item/clothing/under/staffassistant, +/obj/item/clothing/under/misc/staffassistant, +/obj/item/clothing/under/misc/staffassistant, /obj/item/clothing/suit/apron/surgical, /obj/item/clothing/suit/apron/surgical, /turf/open/floor/engine, @@ -43141,10 +43368,14 @@ /turf/open/floor/plating, /area/maintenance/disposal) "bPr" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 10 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 4 }, /turf/open/space/basic, /area/space/nearstation) @@ -43329,9 +43560,15 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bPK" = ( -/obj/structure/window/reinforced/spawner/north, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/dark, +/obj/structure/chair/stool, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai) "bPL" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -43445,18 +43682,13 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "bPX" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Engineering Foyer"; - req_one_access_txt = "10;24" +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 9 }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/break_room) +/turf/open/space/basic, +/area/space/nearstation) "bPY" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/orange/hidden, @@ -43502,7 +43734,8 @@ dir = 1; name = "AI Chamber turret control"; pixel_x = 5; - pixel_y = 24 + pixel_y = 24; + req_access_txt = "65" }, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ dir = 6 @@ -44084,11 +44317,9 @@ /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) "bRc" = ( +/obj/machinery/suit_storage_unit/captain, /obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 5 + icon_state = "4-8" }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/captain) @@ -44187,36 +44418,26 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "bRn" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering{ - name = "Engineering Foyer"; - req_one_access_txt = "10;24" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/lattice/catwalk, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/break_room) -"bRo" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/supplymain/visible, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 8 }, /turf/open/space/basic, /area/space/nearstation) +"bRo" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden, +/turf/open/space/basic, +/area/space/nearstation) "bRp" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "1-2" +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 5 }, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible, /turf/open/space/basic, /area/space/nearstation) "bRq" = ( @@ -44325,20 +44546,14 @@ /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "bRA" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Access"; - req_one_access_txt = "10;24" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ +/obj/machinery/light{ dir = 1 }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/break_room) +/obj/machinery/atmospherics/pipe/simple/supplymain/hidden, +/turf/open/floor/engine, +/area/engine/secure_construction{ + name = "Engineering Construction Area" + }) "bRB" = ( /obj/item/radio/intercom{ name = "Station Intercom (Common)"; @@ -44356,14 +44571,20 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bRD" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = -6; + pixel_y = 2 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass{ + pixel_x = 6; + pixel_y = 3 + }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "1-4" }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/turf/open/floor/plating/airless, -/area/space/nearstation) +/turf/open/floor/plasteel/dark, +/area/bridge) "bRE" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -45375,17 +45596,13 @@ /turf/open/floor/engine/plasma, /area/engine/atmos) "bTJ" = ( -/obj/effect/turf_decal/stripes/line{ +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; dir = 8 }, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 23 - }, -/turf/open/floor/plasteel, -/area/engine/secure_construction{ - name = "Engineering Construction Area" - }) +/turf/open/space/basic, +/area/space/nearstation) "bTK" = ( /turf/open/floor/engine/co2, /area/engine/atmos) @@ -45704,15 +45921,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bUt" = ( -/obj/structure/grille, -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/light{ + dir = 4; + light_color = "#e8eaff" }, -/turf/open/floor/plating, -/area/science/server{ - name = "Computer Core" - }) +/obj/structure/reagent_dispensers/watertank, +/turf/open/floor/plasteel/dark/side{ + dir = 4 + }, +/area/hallway/primary/central) "bUu" = ( /obj/structure/grille, /obj/structure/disposalpipe/segment{ @@ -45972,23 +46189,19 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "bUS" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/photocopier, -/obj/structure/disposalpipe/segment{ +/obj/structure/closet/secure_closet/quartermaster, +/obj/effect/turf_decal/tile/brown{ + dir = 1 + }, +/obj/effect/turf_decal/tile/brown{ dir = 4 }, -/obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - name = "Cargo RC"; - pixel_y = 30 - }, -/obj/machinery/camera{ - c_tag = "Supply - Delivery Office Aft"; - network = list("ss13","rd") - }, +/obj/effect/turf_decal/tile/brown, +/obj/item/clothing/suit/space/eva, +/obj/item/clothing/head/helmet/space/eva, +/obj/item/paper/fluff/cogstation/letter_qm, /turf/open/floor/plasteel, -/area/quartermaster/sorting) +/area/quartermaster/qm) "bUT" = ( /obj/effect/turf_decal/delivery, /obj/machinery/light{ @@ -46009,13 +46222,14 @@ /turf/open/floor/plasteel, /area/ai_monitored/turret_protected/ai_upload_foyer) "bUV" = ( -/obj/effect/turf_decal/stripes/white/full, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 4 +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 10 }, -/turf/open/floor/plasteel, -/area/engine/atmos) +/turf/open/space/basic, +/area/space/nearstation) "bUW" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -46032,12 +46246,13 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "bUX" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/structure/transit_tube/station/reverse/flipped{ + dir = 1 }, -/turf/open/floor/plasteel, -/area/engine/atmos) +/turf/open/floor/engine, +/area/engine/secure_construction{ + name = "Engineering Construction Area" + }) "bUY" = ( /obj/structure/cable{ icon_state = "1-2" @@ -46068,21 +46283,15 @@ /turf/open/floor/plasteel, /area/router) "bVb" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Engineering Access"; - req_one_access_txt = "10;24" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/effect/turf_decal/stripes/line, +/obj/structure/transit_tube/horizontal, /turf/open/floor/plasteel, -/area/engine/break_room) +/area/engine/secure_construction{ + name = "Engineering Construction Area" + }) "bVc" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -46157,17 +46366,12 @@ /turf/open/floor/plasteel, /area/maintenance/department/chapel) "bVj" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/conveyor/auto{ + id = "disposal" }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) +/turf/open/floor/plating, +/area/maintenance/disposal) "bVk" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ @@ -46477,9 +46681,13 @@ name = "Research Sector" }) "bVN" = ( -/obj/structure/closet/l3closet/scientist, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "bVO" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -47522,30 +47730,15 @@ /turf/open/floor/plasteel, /area/hydroponics) "bXI" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/computer/security{ - dir = 8 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, /obj/structure/cable{ icon_state = "0-8" }, -/obj/machinery/power/apc{ - areastring = "/area/security/checkpoint/supply"; - dir = 4; - name = "Cargo Security Checkpoint APC"; - pixel_x = 24 - }, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "bXJ" = ( /obj/structure/chair{ dir = 8 @@ -47769,15 +47962,13 @@ /turf/open/floor/plating, /area/router) "bYg" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/structure/cable{ - icon_state = "2-8" +/obj/machinery/door/poddoor{ + id = "toxinsdriver"; + name = "toxins launcher bay door" }, +/obj/structure/fans/tiny, /turf/open/floor/plating, -/area/maintenance/starboard/aft) +/area/science/mixing) "bYh" = ( /obj/structure/cable{ icon_state = "1-8" @@ -48328,10 +48519,11 @@ /turf/open/floor/plating, /area/quartermaster/warehouse) "bZe" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/structure/grille, /obj/structure/disposalpipe/segment, +/obj/structure/cable, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-2" }, /turf/open/floor/plating, /area/science/server{ @@ -48748,17 +48940,11 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "caf" = ( +/obj/structure/lattice, /obj/structure/disposalpipe/segment, -/obj/structure/lattice/catwalk, -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 5 }, /turf/open/space/basic, /area/space/nearstation) @@ -49168,15 +49354,16 @@ /turf/open/floor/plating, /area/science/storage) "cbi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, /obj/structure/cable{ - icon_state = "2-4" + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "cbj" = ( /obj/structure/cable{ icon_state = "1-8" @@ -49237,12 +49424,13 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "cbp" = ( +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-8" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/captain) "cbq" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -49304,20 +49492,12 @@ /turf/open/floor/engine, /area/science/explab) "cbA" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear{ - dir = 1 - }, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/ai_monitored/storage/eva) "cbB" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -49361,21 +49541,16 @@ /turf/open/space/basic, /area/space/nearstation) "cbH" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-4" }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/ai_monitored/storage/eva) "cbI" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -50097,11 +50272,16 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cda" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +/obj/structure/table, +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel/dark/corner, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/plus, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "cdb" = ( /obj/structure/disposalpipe/trunk{ @@ -50202,13 +50382,20 @@ /turf/open/floor/plasteel, /area/engine/break_room) "cdm" = ( -/obj/structure/closet/secure_closet/CMO, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/photocopier, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 5 + }, +/obj/effect/turf_decal/tile/red{ dir = 1 }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) +/obj/item/paper/guides/cogstation/disposals, +/turf/open/floor/plasteel, +/area/engine/break_room) "cdn" = ( /obj/structure/cable{ icon_state = "1-4" @@ -50233,10 +50420,14 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "cdp" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/violet/visible, -/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ - dir = 4 +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible, +/obj/machinery/atmospherics/pipe/simple/violet/hidden{ + icon_state = "pipe11-2"; + dir = 8 }, /turf/open/space/basic, /area/space/nearstation) @@ -50572,14 +50763,24 @@ /turf/closed/wall/r_wall, /area/medical/medbay/lobby) "cea" = ( -/obj/machinery/computer/cloning, -/obj/effect/turf_decal/bot, -/obj/structure/disposalpipe/segment, -/obj/item/paper/guides/jobs/medical/cloning{ - pixel_x = -4 +/obj/effect/turf_decal/delivery, +/obj/machinery/photocopier, +/obj/structure/disposalpipe/segment{ + dir = 4 }, +/obj/machinery/requests_console{ + department = "Cargo Bay"; + departmentType = 2; + name = "Cargo RC"; + pixel_y = 30 + }, +/obj/machinery/camera{ + c_tag = "Supply - Delivery Office Aft"; + network = list("ss13","rd") + }, +/obj/item/paper/guides/cogstation/disposals, /turf/open/floor/plasteel, -/area/medical/medbay/central) +/area/quartermaster/sorting) "ceb" = ( /obj/structure/table, /obj/effect/turf_decal/stripes/line, @@ -51327,10 +51528,18 @@ name = "Engineering Construction Area" }) "cfx" = ( -/obj/machinery/atmospherics/pipe/simple/orange/visible, -/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 23 + }, +/obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plasteel, -/area/engine/atmos) +/area/engine/secure_construction{ + name = "Engineering Construction Area" + }) "cfy" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -51815,18 +52024,10 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cgt" = ( -/obj/effect/landmark/start/cargo_technician, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-8" - }, +/obj/structure/rack, +/obj/item/caution, +/obj/item/caution, /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 4 - }, /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cgu" = ( @@ -52674,13 +52875,23 @@ /turf/open/floor/plating, /area/maintenance/disposal) "cij" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/structure/table/reinforced, +/obj/item/paper_bin, +/obj/item/pen, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/disposaloutlet, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/maintenance/disposal) +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/westleft{ + name = "Science Desk"; + req_access_txt = "0"; + req_one_access_txt = "29;47" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/science/lab) "cik" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -52827,17 +53038,10 @@ /turf/open/floor/plating/airless, /area/maintenance/port/fore) "ciC" = ( -/obj/structure/closet/secure_closet/hos, -/obj/machinery/light_switch{ - pixel_y = 24 - }, -/obj/machinery/light{ - dir = 4; - light_color = "#e8eaff" - }, -/obj/item/storage/box/deputy, -/turf/open/floor/plasteel/grimy, -/area/crew_quarters/heads/hos) +/obj/structure/table, +/obj/item/paper/pamphlet/gateway, +/turf/open/floor/plasteel/white, +/area/gateway) "ciD" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -52848,26 +53052,13 @@ /turf/open/floor/plasteel/dark, /area/engine/teg_cold) "ciE" = ( -/obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/structure/table, -/obj/machinery/recharger, -/obj/machinery/requests_console{ - department = "Security"; - departmentType = 5; - name = "Security RC"; - pixel_x = 32 - }, +/obj/effect/turf_decal/tile/red, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, -/area/security/checkpoint/supply) +/area/quartermaster/office) "ciF" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -53087,15 +53278,13 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cjb" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ - dir = 9 +/obj/structure/cable{ + icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/area/quartermaster/miningoffice) "cjc" = ( /obj/structure/fans/tiny, /obj/structure/plasticflaps, @@ -53196,15 +53385,16 @@ /turf/closed/wall/rust, /area/maintenance/port/central) "cjr" = ( -/obj/structure/table, -/obj/machinery/airalarm{ - pixel_y = 24 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "0-2" }, -/obj/item/hand_labeler, -/obj/item/reagent_containers/glass/bottle/formaldehyde, -/obj/item/paper/guides/jobs/medical/morgue, -/turf/open/floor/plasteel/showroomfloor, -/area/medical/morgue) +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/server{ + name = "Computer Core" + }) "cjs" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -53344,13 +53534,11 @@ /turf/open/space/basic, /area/space/nearstation) "cjG" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/window/reinforced/spawner, /turf/open/floor/plasteel, -/area/science/xenobiology) +/area/ai_monitored/storage/eva) "cjH" = ( /obj/structure/lattice, /obj/structure/sign/warning/electricshock{ @@ -53581,13 +53769,12 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) "cjZ" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/item/beacon, +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/structure/window/reinforced/spawner/north, /turf/open/floor/plasteel, -/area/science/xenobiology) +/area/ai_monitored/storage/eva) "cka" = ( /obj/item/beacon, /obj/structure/cable{ @@ -53651,22 +53838,15 @@ name = "Research Sector" }) "ckg" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8; - light_color = "#e8eaff" +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, +/obj/effect/landmark/event_spawn, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/turf/open/floor/plasteel/dark/corner, +/area/ai_monitored/storage/eva) "ckh" = ( /obj/machinery/light_switch{ pixel_x = -24 @@ -53971,7 +54151,7 @@ dir = 1 }, /obj/effect/turf_decal/tile/purple, -/obj/item/clothing/under/rank/miner, +/obj/item/clothing/under/rank/cargo/miner, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "ckL" = ( @@ -53983,7 +54163,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/purple, -/obj/item/clothing/under/rank/miner, +/obj/item/clothing/under/rank/cargo/miner, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "ckM" = ( @@ -53995,7 +54175,7 @@ dir = 8 }, /obj/effect/turf_decal/tile/purple, -/obj/item/clothing/under/rank/miner, +/obj/item/clothing/under/rank/cargo/miner, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "ckN" = ( @@ -54116,26 +54296,25 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "ckY" = ( -/obj/effect/turf_decal/tile/purple{ - dir = 1 +/obj/effect/turf_decal/tile/yellow{ + dir = 4 }, -/obj/effect/turf_decal/tile/purple{ +/obj/effect/turf_decal/tile/yellow{ dir = 8 }, /obj/structure/cable{ - icon_state = "1-2" + icon_state = "2-4" }, -/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/turf/open/floor/plasteel/checker, +/area/ai_monitored/storage/eva) "ckZ" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/ai_monitored/storage/eva) "cla" = ( /obj/structure/cable{ icon_state = "4-8" @@ -54975,12 +55154,26 @@ /turf/open/floor/plasteel, /area/medical/chemistry) "cmT" = ( -/obj/machinery/door/poddoor{ - id = "toxinsdriver"; - name = "toxins launcher bay door" +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 }, -/turf/open/floor/plating, -/area/science/mixing) +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/item/folder/red, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/machinery/door/window/northright{ + name = "Security Checkpoint"; + req_access_txt = "1" + }, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) "cmU" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -55181,12 +55374,12 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "cnm" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/turf/open/floor/plating, +/area/gateway) "cnn" = ( /obj/structure/cable{ icon_state = "2-4" @@ -55331,10 +55524,10 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/chair{ + dir = 4 }, -/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/security/checkpoint/supply) "cnC" = ( @@ -56486,19 +56679,14 @@ /turf/open/floor/plasteel, /area/engine/teg_hot) "cpM" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable{ - icon_state = "1-8" - }, -/obj/machinery/turretid{ - control_area = "area/science/server"; - icon_state = "control_stun"; - name = "Computer Core turret control"; - pixel_x = -3; - pixel_y = -23 +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/turf_decal/bot, +/obj/machinery/light{ + dir = 1; + light_color = "#e8eaff" }, /turf/open/floor/plasteel, -/area/ai_monitored/turret_protected/ai_upload_foyer) +/area/engine/atmos) "cpN" = ( /obj/structure/closet/secure_closet/atmospherics, /obj/item/cartridge/atmos, @@ -56947,24 +57135,16 @@ /turf/open/floor/plasteel, /area/engine/teg_cold) "cqB" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/bottle/absinthe, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, -/obj/effect/turf_decal/tile/red{ - dir = 4 +/obj/structure/cable{ + icon_state = "2-4" }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/computer/secure_data{ - dir = 8 - }, -/obj/machinery/newscaster/security_unit{ - pixel_x = 30 - }, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/hor) "cqC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel, @@ -57777,7 +57957,11 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/machinery/holopad, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/landmark/event_spawn, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/security/checkpoint/supply) "csi" = ( @@ -57804,15 +57988,15 @@ /turf/open/floor/plasteel, /area/science/explab) "csl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 }, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-8" }, -/obj/machinery/holopad, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) +/turf/open/floor/plating, +/area/crew_quarters/heads/hor) "csm" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -57918,37 +58102,33 @@ /turf/open/floor/plasteel, /area/engine/teg_cold) "csu" = ( -/obj/structure/table, -/obj/machinery/computer/med_data/laptop, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/effect/turf_decal/tile/yellow{ + dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/structure/cable{ icon_state = "2-4" }, -/obj/machinery/requests_console{ - announcementConsole = 1; - department = "Chief Medical Officer's Desk"; - departmentType = 5; - name = "Chief Medical Officer RC"; - pixel_y = 32 +/turf/open/floor/plasteel/dark/side{ + dir = 8 }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) +/area/gateway) "csv" = ( -/obj/machinery/computer/card/minor/cmo{ - dir = 1 +/obj/structure/table, +/obj/effect/turf_decal/tile/brown{ + dir = 8 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/effect/turf_decal/tile/brown, +/obj/item/storage/toolbox/mechanical, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/keycard_auth{ - pixel_x = -24 - }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) +/obj/item/paper/guides/cogstation/letter_supp, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "csw" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -57960,19 +58140,17 @@ /turf/open/floor/plasteel, /area/security/main) "csx" = ( -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 +/obj/structure/closet/secure_closet/RD, +/obj/machinery/light{ + dir = 4; + light_color = "#c1caff" }, -/obj/machinery/photocopier, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 5 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/engine/break_room) +/obj/item/paper/fluff/cogstation/letter_rd, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/hor) "csy" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 @@ -58325,17 +58503,22 @@ /turf/open/floor/plasteel, /area/quartermaster/sorting) "ctn" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown, -/obj/item/storage/toolbox/mechanical, -/obj/structure/disposalpipe/segment{ +/obj/structure/closet/secure_closet/engineering_chief, +/obj/effect/turf_decal/tile/yellow, +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/airalarm{ + dir = 1; + locked = 0; + pixel_y = -22 + }, +/obj/item/paper/guides/cogstation/letter_chief, /turf/open/floor/plasteel, -/area/quartermaster/sorting) +/area/crew_quarters/heads/chief) "cto" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/tile/brown, @@ -58388,14 +58571,20 @@ /area/quartermaster/sorting) "ctu" = ( /obj/structure/table, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple{ +/obj/effect/turf_decal/bot, +/obj/machinery/camera{ + c_tag = "Supply - Cargo Office"; dir = 1 }, +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, +/obj/item/storage/box/disks, /turf/open/floor/plasteel, -/area/quartermaster/miningoffice) +/area/quartermaster/office) "ctv" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/tile/brown, @@ -59209,7 +59398,9 @@ /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, -/obj/effect/landmark/event_spawn, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/white, /area/gateway) "cuR" = ( @@ -59732,13 +59923,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "cvM" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/food/drinks/bottle/absinthe, /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) +/obj/effect/landmark/event_spawn, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/white, +/area/gateway) "cvN" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -60186,20 +60379,13 @@ /turf/closed/wall/r_wall, /area/engine/atmos) "cwx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/transit_tube/station/reverse/flipped{ - dir = 1 - }, -/obj/structure/transit_tube_pod{ - dir = 8 +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 }, +/obj/effect/turf_decal/stripes/white/full, /turf/open/floor/plasteel, -/area/engine/secure_construction{ - name = "Engineering Construction Area" - }) +/area/engine/atmos) "cwy" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/transit_tube/horizontal, @@ -60238,24 +60424,19 @@ /turf/open/floor/plasteel, /area/engine/workshop) "cwF" = ( -/obj/structure/lattice, -/obj/structure/transit_tube/curved{ +/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 - }, -/turf/open/space/basic, -/area/space/nearstation) +/turf/open/floor/plasteel, +/area/engine/atmos) "cwG" = ( -/obj/structure/lattice, -/obj/structure/disposalpipe/segment, -/obj/structure/transit_tube/horizontal, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment{ + dir = 10 }, -/turf/open/space/basic, -/area/space/nearstation) +/turf/open/floor/plasteel, +/area/engine/atmos) "cwH" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden, /turf/closed/wall, @@ -60283,6 +60464,9 @@ dir = 4 }, /obj/structure/transit_tube/station/reverse/flipped, +/obj/structure/transit_tube_pod{ + dir = 8 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cwN" = ( @@ -60828,19 +61012,15 @@ /area/quartermaster/miningoffice) "cxT" = ( /obj/structure/table, -/obj/effect/turf_decal/bot, -/obj/machinery/camera{ - c_tag = "Supply - Cargo Office"; +/obj/effect/turf_decal/tile/brown{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ dir = 1 }, -/obj/machinery/newscaster{ - pixel_y = -28 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, +/obj/item/paper/guides/cogstation/letter_supp, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/miningoffice) "cxU" = ( /obj/effect/turf_decal/tile/brown{ dir = 4 @@ -60881,10 +61061,15 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "cxZ" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/effect/turf_decal/delivery, +/obj/machinery/button/door{ + id = "MiningConveyorBlastDoor"; + name = "Mining Conveyor Access"; + pixel_x = 8; + pixel_y = -24; + req_access_txt = "0"; + req_one_access_txt = "10;24;48" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "cya" = ( @@ -61497,19 +61682,19 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "czf" = ( -/obj/structure/chair/office/light{ +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 }, -/obj/effect/landmark/start/chief_medical_officer, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark/side{ dir = 4 }, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) +/area/gateway) "czg" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -61708,26 +61893,32 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit) "czz" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ - name = "CMO's Office"; - req_access_txt = "40" + name = "Gateway Chamber"; + req_access_txt = "62" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/engine, +/area/gateway) +"czA" = ( +/obj/machinery/modular_computer/console/preset/research{ + dir = 8 + }, +/obj/item/reagent_containers/food/drinks/coffee, +/obj/structure/cable{ + icon_state = "2-4" }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/white, -/area/crew_quarters/heads/cmo) -"czA" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plating, -/area/crew_quarters/heads/cmo) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/hor) "czB" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ @@ -62159,9 +62350,23 @@ /turf/open/floor/plating, /area/maintenance/disposal) "cAo" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/door/window/northright{ + name = "Medbay Desk"; + req_access_txt = "5" + }, +/obj/item/clipboard, +/obj/item/clothing/glasses/hud/health, /obj/machinery/atmospherics/pipe/simple/orange/hidden, -/turf/open/floor/plasteel, -/area/janitor) +/obj/item/paper/fluff/cogstation/sleepers, +/obj/item/pen, +/obj/item/clothing/glasses/hud/health, +/turf/open/floor/plasteel/white, +/area/medical/medbay/lobby) "cAp" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ @@ -62480,16 +62685,12 @@ /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "cAQ" = ( -/obj/structure/closet/crate/trashcart, -/obj/machinery/light/small{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" }, -/obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 10 - }, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/turf/open/floor/plating, +/area/crew_quarters/heads/hor) "cAR" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 @@ -62499,13 +62700,20 @@ }, /area/chapel/office) "cAS" = ( -/obj/structure/table/wood, -/obj/item/storage/box/evidence, -/obj/item/hand_labeler, -/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel/grimy, -/area/security/detectives_office) +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark/side{ + dir = 8 + }, +/area/gateway) "cAT" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden, @@ -62778,15 +62986,12 @@ name = "Aft Air Hookup" }) "cBt" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Office"; - req_access_txt = "63" +/obj/structure/closet/l3closet/scientist, +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/delivery, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/plasteel, -/area/security/main) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/hor) "cBu" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -63668,11 +63873,19 @@ /turf/open/floor/plasteel/stairs/left, /area/hallway/primary/central) "cCO" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 4 +/obj/structure/table, +/obj/machinery/airalarm{ + pixel_y = 24 }, -/turf/open/floor/plasteel, -/area/security/main) +/obj/item/hand_labeler, +/obj/item/reagent_containers/glass/bottle/formaldehyde, +/obj/item/paper/guides/jobs/medical/morgue, +/obj/item/paper/guides/cogstation/cdn_med{ + pixel_x = -6; + pixel_y = 1 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/morgue) "cCP" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -63832,21 +64045,19 @@ /turf/open/floor/plating, /area/quartermaster/sorting) "cDh" = ( -/obj/structure/closet/secure_closet/engineering_chief, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +/obj/machinery/computer/card/minor/cmo{ + dir = 1 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/obj/machinery/airalarm{ - dir = 1; - locked = 0; - pixel_y = -22 +/obj/machinery/keycard_auth{ + pixel_x = -24 }, -/turf/open/floor/plasteel, -/area/crew_quarters/heads/chief) +/obj/item/paper/guides/cogstation/letter_cmo, +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/cmo) "cDi" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -63861,11 +64072,18 @@ /turf/open/floor/plasteel, /area/storage/primary) "cDj" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/carpet{ + icon_state = "carpetsymbol" }, -/turf/open/floor/plating, /area/crew_quarters/heads/hor) "cDk" = ( /obj/machinery/door/firedoor, @@ -63996,9 +64214,21 @@ /turf/closed/wall/r_wall, /area/crew_quarters/heads/captain) "cDv" = ( -/obj/machinery/vending/wardrobe/cap_wardrobe, -/turf/open/floor/carpet/blue, -/area/crew_quarters/heads/captain) +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -26 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/heads/hor) "cDw" = ( /obj/structure/cable{ icon_state = "1-2" @@ -64019,35 +64249,39 @@ /turf/open/floor/carpet/blue, /area/crew_quarters/heads/captain) "cDy" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/hor) +"cDz" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/security/checkpoint/supply) +"cDA" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/computer/secure_data{ + dir = 8 + }, +/obj/machinery/newscaster/security_unit{ + pixel_x = 30 + }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ - dir = 8 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/captain) -"cDz" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/captain) -"cDA" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/captain) +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) "cDB" = ( /obj/item/storage/secure/safe{ pixel_x = -24 @@ -64072,49 +64306,64 @@ }, /area/crew_quarters/heads/captain) "cDD" = ( -/obj/structure/bed, -/obj/item/radio/intercom{ - name = "Station Intercom (Common)"; - pixel_y = -28 - }, -/obj/item/bedsheet/captain, -/obj/effect/landmark/start/captain, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/captain) -"cDE" = ( -/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ - dir = 1 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/captain) -"cDF" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" +/obj/effect/turf_decal/tile/red{ + dir = 4 }, -/area/crew_quarters/heads/captain) +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/machinery/computer/security{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/power/apc{ + areastring = "/area/security/checkpoint/supply"; + dir = 4; + name = "Cargo Security Checkpoint APC"; + pixel_x = 24 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) +"cDE" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) +"cDF" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) "cDG" = ( -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 9 +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" }, -/mob/living/simple_animal/pet/cat/space, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" }, -/area/crew_quarters/heads/captain) +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) "cDH" = ( /obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 8 @@ -64128,16 +64377,19 @@ /turf/open/floor/plasteel, /area/gateway) "cDJ" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 +/obj/machinery/computer/crew, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 +/obj/structure/cable{ + icon_state = "1-4" }, -/turf/open/floor/plasteel/dark/side{ - dir = 4 +/obj/structure/cable{ + icon_state = "4-8" }, -/area/gateway) +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/cmo) "cDK" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -64286,29 +64538,35 @@ }, /area/crew_quarters/heads/hor) "cDZ" = ( +/obj/structure/table, +/obj/machinery/computer/med_data/laptop, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/machinery/requests_console{ + announcementConsole = 1; + department = "Chief Medical Officer's Desk"; + departmentType = 5; + name = "Chief Medical Officer RC"; + pixel_y = 32 + }, /obj/structure/cable{ icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/carpet{ - icon_state = "carpetsymbol" - }, -/area/crew_quarters/heads/hor) +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/cmo) "cEa" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -26 - }, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ - icon_state = "4-8" + icon_state = "0-4" }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/heads/hor) +/obj/structure/cable, +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) "cEb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -64726,22 +64984,17 @@ /turf/open/floor/plasteel, /area/science/lab) "cEE" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin, -/obj/item/pen, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable{ + icon_state = "0-4" }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/westleft{ - name = "Science Desk"; - req_access_txt = "29;47" +/obj/machinery/power/apc{ + areastring = "/area/maintenance/aft"; + dir = 8; + name = "Aft Maintenance APC"; + pixel_x = -26 }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/science/lab) +/turf/open/floor/plating, +/area/maintenance/aft) "cEF" = ( /obj/effect/turf_decal/tile/purple{ dir = 8 @@ -66706,23 +66959,20 @@ /turf/open/floor/plasteel/white, /area/medical/genetics) "cHV" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/effect/turf_decal/tile/red{ + dir = 4 }, -/obj/machinery/power/apc{ - areastring = "/area/medical/genetics"; - dir = 8; - name = "Genetics Lab APC"; - pixel_x = -24 +/obj/effect/turf_decal/tile/red{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ - dir = 6 - }, -/turf/open/floor/plating, -/area/maintenance/aft) +/obj/machinery/holopad, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) "cHW" = ( /obj/machinery/rnd/production/circuit_imprinter, /obj/item/reagent_containers/glass/beaker, @@ -68061,21 +68311,14 @@ /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "cKj" = ( -/obj/structure/table/reinforced, +/obj/structure/closet/secure_closet/CMO, +/obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/machinery/door/window/northright{ - name = "Medbay Desk"; - req_access_txt = "5" - }, -/obj/item/clipboard, -/obj/item/pen, -/obj/item/clothing/glasses/hud/health, -/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/item/paper/guides/cogstation/letter_cmo, /turf/open/floor/plasteel/white, -/area/medical/medbay/lobby) +/area/crew_quarters/heads/cmo) "cKk" = ( /obj/structure/chair/office/light{ dir = 1; @@ -68258,20 +68501,22 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "cKC" = ( -/obj/structure/cable{ - icon_state = "4-8" +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/landmark/start/chief_medical_officer, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 }, /obj/structure/cable{ icon_state = "1-8" }, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/orange/hidden{ - dir = 9 - }, -/turf/open/floor/plasteel/dark, -/area/science/xenobiology) +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/cmo) "cKD" = ( /obj/machinery/atmospherics/pipe/manifold/orange/hidden{ dir = 8 @@ -68550,7 +68795,7 @@ dir = 8 }, /obj/structure/closet/secure_closet/engineering_personal, -/obj/item/clothing/under/overalls, +/obj/item/clothing/under/misc/overalls, /turf/open/floor/plasteel, /area/storage/primary) "cLo" = ( @@ -68633,7 +68878,7 @@ "cLz" = ( /obj/effect/turf_decal/bot, /obj/structure/closet/secure_closet/engineering_personal, -/obj/item/clothing/under/overalls, +/obj/item/clothing/under/misc/overalls, /turf/open/floor/plasteel, /area/storage/primary) "cLA" = ( @@ -70405,6 +70650,1037 @@ }, /turf/open/floor/plating, /area/maintenance/aft) +"cPz" = ( +/obj/structure/lattice, +/obj/structure/transit_tube/curved{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) +"cPA" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/obj/structure/transit_tube/horizontal, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) +"cPB" = ( +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/transit_tube/crossing/horizontal, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 8 + }, +/turf/open/space/basic, +/area/space/nearstation) +"cPC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/transit_tube/horizontal, +/turf/open/floor/plasteel, +/area/engine/atmos) +"cPD" = ( +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/engine/atmos) +"cPE" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/lattice/catwalk, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/space/basic, +/area/space/nearstation) +"cPF" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/space/basic, +/area/space/nearstation) +"cPG" = ( +/obj/structure/lattice, +/obj/structure/disposalpipe/segment, +/obj/machinery/camera{ + c_tag = "Supply - Warehouse Exterior"; + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/space/basic, +/area/space/nearstation) +"cPH" = ( +/obj/machinery/conveyor_switch{ + id = "EngiCargoConveyer" + }, +/obj/structure/cable, +/obj/machinery/power/apc{ + areastring = "/area/quartermaster/sorting"; + dir = 8; + name = "Delivery Office APC"; + pixel_x = -26 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"cPI" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Engineering Foyer"; + req_one_access_txt = "10;24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/engine/break_room) +"cPJ" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering{ + name = "Engineering Foyer"; + req_one_access_txt = "10;24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/engine/break_room) +"cPK" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Access"; + req_one_access_txt = "10;24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/engine/break_room) +"cPL" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + name = "Engineering Access"; + req_one_access_txt = "10;24" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/engine/break_room) +"cPM" = ( +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/table, +/obj/machinery/recharger, +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 5; + name = "Security RC"; + pixel_x = 32 + }, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) +"cPN" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"cPO" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"cPP" = ( +/obj/structure/table, +/obj/machinery/light{ + dir = 4; + light_color = "#c1caff" + }, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/plus, +/obj/item/stock_parts/cell/high/plus{ + pixel_y = 8 + }, +/obj/item/stock_parts/cell/high/plus{ + pixel_y = 8 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/obj/item/assembly/flash/handheld{ + pixel_x = -8; + pixel_y = 4 + }, +/turf/open/floor/plasteel/dark, +/area/science/robotics/lab) +"cPQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/machinery/power/apc{ + areastring = "/area/medical/genetics"; + dir = 8; + name = "Genetics Lab APC"; + pixel_x = -26 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 6 + }, +/turf/open/floor/plating, +/area/maintenance/aft) +"cPR" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) +"cPS" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "CMO's Office"; + req_access_txt = "40" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/white, +/area/crew_quarters/heads/cmo) +"cPT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/crew_quarters/heads/cmo) +"cPU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"cPV" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/holopad, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"cPW" = ( +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"cPX" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"cPY" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cPZ" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQa" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQb" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQc" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQd" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQe" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/button/door{ + id = "xenobio2"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQf" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQg" = ( +/obj/machinery/door/window/westright{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio1"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQh" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQi" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQj" = ( +/obj/machinery/door/window/eastleft{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio2"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQk" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQl" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/north, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/button/door{ + id = "xenobio1"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQm" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQn" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQo" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQp" = ( +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQq" = ( +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQr" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner, +/obj/machinery/button/door{ + id = "xenobio4"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQs" = ( +/obj/machinery/door/window/westright{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio3"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQt" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQu" = ( +/obj/machinery/door/window/eastleft{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio4"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQv" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/north, +/obj/machinery/button/door{ + id = "xenobio3"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQw" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8; + light_color = "#e8eaff" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQx" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/window/reinforced/spawner, +/obj/machinery/button/door{ + id = "xenobio6"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQy" = ( +/obj/machinery/door/window/westright{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio5"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQz" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/orange/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQA" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQB" = ( +/obj/machinery/door/window/eastleft{ + name = "Containment Pen"; + req_one_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio6"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQC" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/window/reinforced/spawner/north, +/obj/machinery/button/door{ + id = "xenobio5"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQD" = ( +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQE" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQF" = ( +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 9 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQG" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel/dark, +/area/science/xenobiology) +"cQH" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/button/door{ + id = "xenobio7"; + name = "Containment Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQI" = ( +/obj/structure/table/reinforced, +/obj/structure/window/reinforced{ + dir = 8; + layer = 2.9 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/clothing/mask/gas, +/obj/item/clothing/glasses/science, +/obj/structure/cable{ + icon_state = "1-2" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) +"cQJ" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQK" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQL" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQM" = ( +/obj/machinery/door/window/southright{ + name = "Secure Xenobiological Containment"; + req_one_access_txt = "55" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio7"; + name = "containment blast door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"cQN" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQO" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQP" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"cQQ" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQR" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQS" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-8" + }, +/turf/open/floor/plating, +/area/bridge) +"cQT" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-4" + }, +/turf/open/floor/plating, +/area/bridge) +"cQU" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/bridge) +"cQV" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-02" + }, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQW" = ( +/obj/structure/table/wood, +/obj/item/paper_bin, +/obj/machinery/camera{ + c_tag = "Bridge - Port Quarter"; + dir = 1 + }, +/obj/machinery/keycard_auth{ + pixel_y = -24 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQX" = ( +/obj/machinery/photocopier, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQY" = ( +/obj/structure/reagent_dispensers/water_cooler, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cQZ" = ( +/obj/structure/cable{ + icon_state = "2-4" + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel/dark, +/area/bridge) +"cRa" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/conveyor{ + dir = 4; + id = "MiningConveyer" + }, +/obj/machinery/door/poddoor{ + id = "MiningConveyorBlastDoor"; + name = "Asteroid Mining Load Door" + }, +/turf/open/floor/plating/airless, +/area/quartermaster/miningoffice) +"cRb" = ( +/obj/machinery/computer/cloning, +/obj/effect/turf_decal/bot, +/obj/structure/disposalpipe/segment, +/obj/item/paper/guides/jobs/medical/cloning{ + pixel_x = -4 + }, +/obj/item/paper/fluff/cogstation/cloner{ + pixel_x = 6 + }, +/turf/open/floor/plasteel, +/area/medical/medbay/central) +"cRc" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/door/airlock/research{ + name = "Aft Observatory"; + req_access_txt = "47" + }, +/turf/open/floor/plasteel/dark, +/area/science/misc_lab{ + name = "Research Observatory" + }) +"cRd" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/machinery/door/airlock/research{ + name = "Aft Observatory"; + req_access_txt = "47" + }, +/turf/open/floor/plasteel/dark, +/area/science/misc_lab{ + name = "Research Observatory" + }) +"cRe" = ( +/obj/machinery/computer/upload/ai{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/ai_monitored/turret_protected/ai) +"cRf" = ( +/obj/structure/window/reinforced/spawner/north, +/obj/machinery/atmospherics/pipe/simple/orange/hidden, +/obj/machinery/flasher{ + id = "ID"; + pixel_x = 24; + pixel_y = 0 + }, +/turf/open/floor/plasteel/dark, +/area/ai_monitored/turret_protected/ai) +"cRg" = ( +/obj/machinery/atmospherics/pipe/simple/supplymain/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/obj/machinery/portable_atmospherics/pump, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/white/corner, +/area/engine/atmos) +"cRh" = ( +/obj/effect/turf_decal/stripes/line, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/machinery/turretid{ + control_area = "area/science/server"; + icon_state = "control_stun"; + name = "Computer Core turret control"; + pixel_x = -3; + pixel_y = -23; + req_access_txt = "65" + }, +/turf/open/floor/plasteel, +/area/ai_monitored/turret_protected/ai_upload_foyer) "cVq" = ( /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 @@ -70697,16 +71973,6 @@ /obj/machinery/atmospherics/pipe/simple/violet/visible, /turf/open/space/basic, /area/space) -"kxL" = ( -/obj/structure/lattice, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/turf/open/space/basic, -/area/space/nearstation) "kzb" = ( /obj/machinery/atmospherics/pipe/manifold/orange/hidden{ dir = 4 @@ -70881,17 +72147,6 @@ /obj/machinery/atmospherics/pipe/simple/supplymain/visible, /turf/open/space/basic, /area/space/nearstation) -"qnM" = ( -/obj/structure/lattice, -/obj/structure/sign/warning{ - name = "\improper KEEP CLEAR: HIGH SPEED DELIVERIES"; - pixel_y = -32 - }, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/turf/open/space/basic, -/area/space/nearstation) "qvB" = ( /obj/machinery/atmospherics/components/unary/thermomachine/heater{ dir = 8 @@ -70911,14 +72166,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"rbJ" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/space/basic, -/area/space/nearstation) "rdF" = ( /obj/machinery/atmospherics/pipe/simple/dark/visible{ dir = 6 @@ -71123,13 +72370,6 @@ /obj/item/pen, /turf/open/floor/plasteel, /area/engine/atmos) -"xqa" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/violet/visible{ - dir = 5 - }, -/turf/open/space/basic, -/area/space/nearstation) "xCy" = ( /obj/machinery/atmospherics/components/binary/pump, /obj/machinery/atmospherics/pipe/simple/supplymain/hidden{ @@ -84607,7 +85847,7 @@ aaU aaa aaU aEa -aTH +aHE bab aaa aaa @@ -84864,7 +86104,7 @@ aaU aaU aaU aEb -bRD +aPT aaU aaU aye @@ -85121,7 +86361,7 @@ aaU aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -85378,7 +86618,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -85635,7 +86875,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -85892,7 +87132,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -86149,7 +87389,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -86406,7 +87646,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -86663,7 +87903,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -86920,7 +88160,7 @@ aaa aaa aaU aEb -bRD +aPT aaU aaa aaa @@ -87177,7 +88417,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -87434,7 +88674,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -87691,7 +88931,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -87948,7 +89188,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -88205,7 +89445,7 @@ aaa aaa aaU aEa -bRD +aPT aaU aaa aaa @@ -88462,19 +89702,19 @@ aaa aaa aaU aEa -bRD +aPT aaU aaU aaa aaU -aGn -aGn -aGn -aGn -aGn -aGn -aGn -aGn +aPV +bik +bik +bik +bik +bik +bik +cQT aaU aaa aaU @@ -88547,22 +89787,22 @@ bFt bJs bJV bxT -bKG -bLe -bFl +cQa +cQg +cQk bxT -bKG -bLe -bFl +cQa +cQs +cQk bxT -bKG -bLe -bFl +cQa +cQy +cQk bxT cvz cKA bOH -bFl +cQJ bxT bKM bKM @@ -88719,21 +89959,21 @@ aaU aaU aaU aEa -bRD +aPT aaU aaU -aGn -aGn -aGn +aPV +bik +cQS aIA aJe aLE aLy aMQ aNF -aGn -aGn -aGn +cQU +bik +cQT aaU aaa aaa @@ -88806,20 +90046,20 @@ bJW bxT cbo bLf -cjZ +cQl bxT cbo bLf -cjZ +cQv bxT cbo bLf -cjZ +cQC bxT ctT cKB bOI -bOQ +cQK bOT bKM bKM @@ -88976,10 +90216,10 @@ abh abh abh aEb -bRD +aPT aaU aaU -aGn +aPW aHD aIg aHF @@ -88989,8 +90229,8 @@ aHF aJn aHF aPp -aPT -aGn +cQV +cQS aaU aaa aaa @@ -89058,25 +90298,25 @@ bxT bFo bHV bYz -cbi -cbp -cbA -cbH -cjP -cjP -ckg -cjP -cjP -cjP -ckg -cjP -ckY -cjP +cPU +cPW +cPY +cQb +cQh +cQm +cQh +cQh +cQh +cQh +cQw +cQh +cQz +cQD cjP ctR -cKC -bOJ -bFl +cQF +cQH +cQL bKM bKM bKM @@ -89233,11 +90473,11 @@ aaU aaU aaU aEa -bRD +aPT aaU -aGn -aGn -aHE +aPU +aTH +bRD aHF aHF aIE @@ -89246,7 +90486,7 @@ aIE aIE csD aHF -aPU +cQW aGq aaU aaa @@ -89315,25 +90555,25 @@ bxT cdD bHW bIG -csl -bzy -bKp -bKJ -bLh -bLh -bLh -bLh -bMh -bLh -bLh -bLh -ckZ -bLh +cPV +cPX +cPZ +cQc +cQi +cQn +cQi +cQp +cQt +cQi +cQi +cQp +cQA +cQE cbF cnl cla bOK -bOR +cQM bKM bKM bPa @@ -89494,21 +90734,21 @@ aLK aGq aGq aKH -aHF +cQQ aHF aIE aJu aKA -aZT +bhB aMX aIE aHF -aPV +cQX aQW -aSJ -aSJ +bkC +bkC aQW -aSJ +bkC aQW aaU aaa @@ -89575,22 +90815,22 @@ bIH cGA bJX bKq -bKK +cQd bLi bLi bLF -bLi +cQq bMi bLi -bLF bLi +cQq bLi bLi cvV ckS -cla -bOL -bFl +cQG +cQI +cQN bKM bKM bKM @@ -89751,7 +90991,7 @@ aUz bDP aGq aGL -aHF +cQQ aHF aIH aJz @@ -89760,16 +91000,16 @@ aLI aMX aIE aHF -aPW +cQY aQW -cDv -cjQ +bmj +bBt cDB -cDD +bLh aQW aQW -aSJ -aSJ +bkC +bVN aaa aaa aaa @@ -89804,7 +91044,7 @@ aaa bcw bde bcw -cmT +bYg bcy bfp cwY @@ -89832,22 +91072,22 @@ bII cGB bFw bxT -cjG +cQe bLj ckN bxT -cjG +cQr bLj ckN bxT -cjG +cQx bLj ckN bxT bOy cla bOM -bOS +cQO bOU bKM bKM @@ -90008,7 +91248,7 @@ aZq bDQ hcR aGM -aHF +cQQ aHF aII aJu @@ -90017,16 +91257,16 @@ aRe aXS bbb aHF -aHF +cQQ aQW baP -aTo +bCd cjQ -cDE +bLk aVP cpt -aWw -aSJ +bOR +bXI aaa aaa aaa @@ -90073,7 +91313,7 @@ bAN bKH cbh clc -csR +cGJ cGJ cGO cGU @@ -90089,22 +91329,22 @@ bIJ cGC bXO bxT -bFl -bLk -bKG +cQf +cQj +cQo bxT -bFl -bLk -bKG +cQf +cQu +cQo bxT -bFl -bLk -bKG +cQf +cQB +cQo bxT ctU ckX bON -bFl +cQP bxT bKM bKM @@ -90265,7 +91505,7 @@ bdz bDR aKF aLm -aMi +cQR aMi aQh aQN @@ -90274,16 +91514,16 @@ aRl aXT bbc bbD -bik +cQZ cDt cDw -cDy +bEq cps -cDF +bMh bRb -bRc -aWx -aSJ +bOQ +bOS +cbi aaa aaa aaa @@ -90534,13 +91774,13 @@ bbG bit cDu cDx -cDz +bFy cDC -cDG +bOJ aVR bBj -aWy -aSJ +bRc +bXI aaa aaa aaa @@ -90790,14 +92030,14 @@ aSW aHM biF aQW -aTr -cDA +buM +bAX bEN -bjw +bOL aQW aQW -aSJ -aSJ +buO +cbp aaa aaa aaa @@ -90845,7 +92085,7 @@ bcy cbC cnO cnO -cnO +csR cGQ cGW cGV @@ -91047,10 +92287,10 @@ aSW aHM bju aQW -aSJ -aSJ +buO +buO aQW -aSJ +buO aQW aaU aaa @@ -91818,9 +93058,9 @@ csr aNR blf aNR -aTt -aTt -aTt +buR +bKp +bKJ aaa bdg bdg @@ -92074,10 +93314,10 @@ aGq aNR aNR bly -bFy -aTJ +bjF +byd aUB -aTt +bKK aaa bdg beN @@ -92329,12 +93569,12 @@ aKS aSW cDs aNR -aPs +biq blA bqh buG bIW -aTt +bKK aaa bdg beR @@ -92591,7 +93831,7 @@ aYR csE bvJ aUF -aTt +bKK aaa bdg beJ @@ -92832,7 +94072,7 @@ aAv aOO aCl aFj -ciC +aZT aGv bLp bEV @@ -92846,9 +94086,9 @@ bbf bsf bnI aRo -bBt -biq -aTt +bAn +bKG +bLe aaa bdg beJ @@ -93696,7 +94936,7 @@ ckT ckT ckT ckV -cHK +cRc clg ctc cua @@ -93921,8 +95161,8 @@ csN biA biA csL -cDZ -bgX +cDj +cDy bPl bXx bXT @@ -93953,7 +95193,7 @@ ckQ ckU ckQ ckW -cHL +cRd csX ctP cuk @@ -94178,8 +95418,8 @@ cve bky biA biA -cDZ -bgX +cDj +cDy bWT bXh bYa @@ -94431,11 +95671,11 @@ aaU aaU bgW biI -cvM -bkC -bVN -bmj -cEa +cqB +czA +cBt +csx +cDv bgW bWU bXl @@ -94688,8 +95928,8 @@ aaU aUk bgW bgW -cDj -bgX +csl +cAQ bgW bgW cEb @@ -96426,10 +97666,10 @@ aQg akv aew azf -bpW -aAP -aEc +aCb aFT +bjV +bpW aZO aXu aZX @@ -96487,8 +97727,8 @@ aaU aTV aVk bfu -bAn -bFz +csu +cAS cDV cDX cEg @@ -96682,9 +97922,9 @@ alU aQA aSZ aew -abS -bEL -aCb +aAP +aEc +bjB asL asL bfm @@ -96729,7 +97969,7 @@ aZy beJ bfd bjg -aYI +bUt bai baV cKF @@ -96744,7 +97984,7 @@ aaU aTV aVq bfx -bCd +cuQ cpP aTV bVR @@ -96999,9 +98239,9 @@ aaa aaa aaU aUi -aVq +ciC bzz -cuQ +cvM cts aTV bVM @@ -97258,7 +98498,7 @@ aaU aTV aYf beo -bCd +cuQ cwe aTV bVS @@ -97453,7 +98693,7 @@ awS azB aBC atc -aLX +aIF aJv aJZ aLY @@ -97515,7 +98755,7 @@ aaU aTV bHH aWp -cDJ +czf coI aTV bVT @@ -97710,10 +98950,10 @@ awT aAk cjN atc -aDF +aIG aRU aDX -bAX +aYI atc aVQ aWa @@ -97771,8 +99011,8 @@ aaa aaU aUk aUk -aUi -cDK +cnm +czz aUk aUk bWa @@ -97966,9 +99206,9 @@ bGf bHh cqd cBb -cBt +aFP +aKi aMN -cCO aQw coU atc @@ -98223,9 +99463,9 @@ avL axw cqH bhN -aDb +aIC aDP -aFk +aPs aGh csn atc @@ -98303,7 +99543,7 @@ bRJ bth bTB cek -cKj +cAo cKk cKl cKm @@ -98480,9 +99720,9 @@ avM avL csw aBK -aCa -aCa -aAQ +aID +aLX +aSJ aHZ atc atc @@ -98808,7 +100048,7 @@ cEn bWR bSH bSG -cEE +cij bSG bSC bSC @@ -100054,9 +101294,9 @@ aWB bsl cjJ aXH -aYm -aYm -aYm +cbA +cbH +ckZ aZv bRP aWB @@ -100101,9 +101341,9 @@ ceY bst cyG bst -buM -buM -buM +cDE +cDG +cEa buS buS bFX @@ -100312,7 +101552,7 @@ aWK aXo aXI aYn -aYD +cda aZj aZw bRQ @@ -100358,11 +101598,11 @@ bqm cdW cyG cdY -buM -byd -czf -csv -buM +cDF +cDJ +cKC +cDh +cPR bFJ cFa cFk @@ -100569,7 +101809,7 @@ aWM aXr aXJ aXr -aXr +cjG aXr aXr bRU @@ -100616,10 +101856,10 @@ cmU cyG cdX buS -csu +cDZ czg czt -czz +cPS czD cFb bEl @@ -100826,7 +102066,7 @@ aWO bPz bQf aYs -aYE +cjZ aYs aYs bSV @@ -100876,7 +102116,7 @@ buS bAJ czh czu -czA +cPT czE cFc bEl @@ -101083,7 +102323,7 @@ aWP aXy aXN aXy -cda +ckg aXy aXy aXy @@ -101132,7 +102372,7 @@ bqm buS caR czi -cdm +cKj buS bFY cEX @@ -101340,7 +102580,7 @@ aWQ aXz aXU aYu -aYF +ckY aZn aZx bEs @@ -102380,7 +103620,7 @@ ajO ajO ajO ajO -ajO +aQa ajO ajO aRy @@ -102633,13 +103873,13 @@ ajO aGi axI axI -axI aGi -aNo -aPE -beu ajO +bFf +aPE baW +aYZ +beu beK bTX bWI @@ -102889,10 +104129,10 @@ avv ajO bCv axI -bCF -axI -axI -aNr +aNh +aNz +bDw +bFv bHp bLm ajO @@ -103144,12 +104384,12 @@ aSt brs avv ajO -axI avY -bDw -bEZ -bFv -bGB +ajO +ajO +aOI +bDU +bGg bIF bLz bNe @@ -103193,7 +104433,7 @@ bqq cPx cFh bJe -cea +cRb cHP bKA bKV @@ -103401,12 +104641,12 @@ bns aya avy alo -axZ awn aIS -awn +aNo aJp -aNz +bDW +bGB aHq bki bPp @@ -103423,11 +104663,11 @@ cwd bYZ bZc cgQ -bUt -bUt -bUt -bUt bZe +bZe +bZe +bZe +cjr brL brL bVW @@ -103658,19 +104898,19 @@ aSt brs avv ajO -axI -avY -bDU -bFf -bGg +axZ +ajO +ajO +aPf +bEZ bGD bJk bLC -bPK +cRf bPV bQT bVq -cpM +cRh bfh cbY cdn @@ -103917,10 +105157,10 @@ avv ajO aze azJ -bDW -azJ -aNh -aOI +aNr +bCF +bDw +bPK bKx bmv ajO @@ -103958,7 +105198,7 @@ cpI csK cKi cvR -bzH +cPP bts bCY bHJ @@ -104175,9 +105415,9 @@ ajO aGi axI aIX -axI aGi -aPf +ajO +cRe aZP bmH aYZ @@ -104481,7 +105721,7 @@ bJi bDa czw byQ -cHV +cPQ cIc cIc cIp @@ -104986,7 +106226,7 @@ bpE bpE cyQ byQ -cjr +cCO czx czC czG @@ -105196,19 +106436,19 @@ bUp cci btZ aSq -rTW -kxw -kxw -tpQ -kxw -tpQ -kxw -kxw -kxw -kxw -kxw -kxw -xqa +bgh +bIY +bIY +bRo +bIY +bRo +bIY +bIY +bIY +bIY +bIY +bIY +bRp aaa aaU bWv @@ -105453,7 +106693,7 @@ bUL btT btT cjE -opd +bsz aaU aaU cdV @@ -105495,7 +106735,7 @@ bZk bZn bZq bZh -bIC +cEE bpD cmL cyS @@ -105710,7 +106950,7 @@ bUY ccj aSw aaW -opd +bsz aaa aaa aaa @@ -105967,7 +107207,7 @@ bVa btT aaU aby -opd +bsz aaa aaa aaa @@ -106224,7 +107464,7 @@ bVu bvB aaU aby -opd +bsz aaa aaa aaa @@ -106481,7 +107721,7 @@ bVA btT aaU aby -opd +bsz aaa aaa aaa @@ -106738,8 +107978,8 @@ bXp btT aaU abH -aZp -kxL +bAA +bMK aZp ceq cet @@ -106996,7 +108236,7 @@ bvB bWq acY adz -opd +bsz aaa aaU cdt @@ -107253,7 +108493,7 @@ btT btT btT cjF -qnM +bMX cdt cdt cdt @@ -107510,7 +108750,7 @@ ccn ccA ccy aTl -opd +bsz cdG cer cew @@ -107767,7 +109007,7 @@ cco ccE btZ aTl -opd +bsz cdU ces ces @@ -107792,7 +109032,7 @@ csQ cqs cqG crt -csx +cdm ctl cuL cvd @@ -108024,7 +109264,7 @@ btT btT btT cjF -qnM +bMX cdt cdt cdt @@ -108281,7 +109521,7 @@ btT aaU aVt adN -opd +bsz aaa aaU cdt @@ -108538,7 +109778,7 @@ aaU aaU aTl qeq -rbJ +bPh guK hXk hXk @@ -108742,11 +109982,11 @@ aFr aKg ahO aml -aoy -aoy +abX +akd aoA awt -aoy +aDb aqL anB alS @@ -108795,7 +110035,7 @@ cuy cuD cuG eUF -opd +bsz aej agc agT @@ -108822,12 +110062,12 @@ bwR cBx cCR cdz -bPX +cPI cdJ cdM cdJ cdO -bRA +cPK bbY cIM bZl @@ -109000,10 +110240,10 @@ apv aiF amr aqL -abX +aoy aoD aoj -bEq +aDm aqL aji aKs @@ -109052,7 +110292,7 @@ aQJ aRZ aVK cxa -bsz +bPr sVC aNH bbQ @@ -109257,11 +110497,11 @@ apv ajb amt anH -akd +aAQ aoG bvp -aDm -aFP +aDF +aFk aHh aKB aNu @@ -109309,7 +110549,7 @@ aaU aSu aYU cxb -opd +bsz aej agC aoJ @@ -109336,12 +110576,12 @@ bEW bQF cah cdA -bRn +cPJ cdL cmv cdL cdQ -bVb +cPL bUD cIV coN @@ -109563,10 +110803,10 @@ aaa aaa aaa aaa -rTW -aTl -cdp -wPS +bgh +bGQ +bIT +bPX aaU atF atF @@ -109820,7 +111060,7 @@ aaa aaa aaa aaa -opd +bsz aTl cxc aaa @@ -110077,7 +111317,7 @@ aaa aaa aaa aaa -opd +bsz aTl cxc aaa @@ -110334,7 +111574,7 @@ aaa aWR aaa aaU -opd +bsz aTl cxc atF @@ -110591,7 +111831,7 @@ cgd bwW beE bwW -opd +bsz aTl cxc atF @@ -110625,7 +111865,7 @@ biQ bXf bkG cwP -cDh +ctn bob bib bXX @@ -110824,9 +112064,9 @@ aIN aMK aOc aSA -aVa -aWn -bsR +aTo +aTt +aTJ bsR bCG bCK @@ -110848,7 +112088,7 @@ cgX chC cik bwW -bGh +bsT bGQ bHe bHA @@ -111081,9 +112321,9 @@ aKj aVy aRx aSF -aHA +aTr arH -aIC +aVa aIK aKk aTU @@ -111340,7 +112580,7 @@ aND aWH aHx asc -aID +aWn bvG aKl bCQ @@ -111597,7 +112837,7 @@ bkT aWJ aHz btb -aID +aWn bvR bCI bDJ @@ -111854,14 +113094,14 @@ aci aXQ aHy bDc -aIF -aKi +aWw +aWy +aYm +aYD +aYE +aYF beQ -cnm -cAQ -cAS -buO -buR +bjw bwu bAd aMo @@ -112111,8 +113351,8 @@ aWX aZF anK aHz -aIG -aHA +aWx +aTr boA cAF bCL @@ -112136,7 +113376,7 @@ aMD arp bCk aqk -bIT +bRn qlJ qlJ bcG @@ -112393,9 +113633,9 @@ bwW ciV bwW aaU -bIY -bHg -bMK +bsT +bRo +bRp anr bcI bgw @@ -112652,10 +113892,10 @@ bwW aaU aaa aaa -bJv +bsz cJx cJF -bPh +bRA cJJ bsX cJM @@ -112909,11 +114149,11 @@ bwW aaU aaa aaa -bJv +bsz anr bcI sdp -bgw +bUX bgw uwK bhm @@ -113166,12 +114406,12 @@ bwW aaU aaa aaa -bJv +bsz anr bcI aXp -cwx -bTJ +bVb +cfx bhs bmm bcI @@ -113397,7 +114637,7 @@ aCJ bFn bFn aJd -aJj +bfH bdq bet bmu @@ -113423,7 +114663,7 @@ bwW aaU aaa aaa -bJv +bsz anr bcI bcI @@ -113680,13 +114920,13 @@ bwW aaU aaa aaa -bJv +bsz anr aaU aaa cwz aaa -bfW +jyu aaa aaa aaU @@ -113937,13 +115177,13 @@ bwW aMD bwW aaa -bIY -bMX -tpQ -xqa +bsT +bHe +bRo +bRp aaa cwD -bfW +jyu aaa aaa aaU @@ -114197,10 +115437,10 @@ bwW aaU bdR cJr -opd +bTJ aaa aaa -cwF +cPz aaa aaa aaU @@ -114222,11 +115462,11 @@ bUR cfO cja cja -cgt +boj cxq cxv bgf -bVj +brQ cxC bgq bhX @@ -114423,7 +115663,7 @@ aNy aSd aTq aVY -bfH +aJj aJd btm bdo @@ -114454,10 +115694,10 @@ cwv bAQ bAQ cJs -bPr -bRo +bUV +caf bam -cwG +cPA bam bYl bam @@ -114479,7 +115719,7 @@ cdx cga cgq cgq -cjb +bzw cxr cxw cxx @@ -114712,9 +115952,9 @@ bsu bsx cJt sVC -bRp +cdp sVC -bsT +cPB sVC bZp sVC @@ -114738,7 +115978,7 @@ bZd cfX ciP cjB -boj +cgt bcl bfc bgs @@ -114952,7 +116192,7 @@ aMA czU czY cAe -cAo +bFz cAs cAx bhU @@ -114973,11 +116213,11 @@ bRv bsD bww bsD -caf -bsD -bsD -bsD -bAA +cPE +cPF +cPF +cPF +cPG bBL bBL bCm @@ -115003,7 +116243,7 @@ cxC bhX biJ bjQ -cxT +ctu biZ btz bPm @@ -115263,7 +116503,7 @@ cxQ cxU cxW cxX -bPm +cPN clX bZu cmM @@ -115473,7 +116713,7 @@ aMB bzn bjz cgZ -bmS +bzH bJS bmW bmW @@ -115499,7 +116739,7 @@ bbT bbT bkm brV -bgh +cPH bfU bFD bgO @@ -115988,7 +117228,7 @@ bzn bwW bxF aMD -cih +bEL bAK bjz aMI @@ -116034,7 +117274,7 @@ bGC bpQ bpQ cOa -bYg +cPO cya cya cya @@ -116245,8 +117485,8 @@ bzn bwW byW bCB -ciX -cij +bIC +bVj cip cpE aaa @@ -116502,7 +117742,7 @@ bzn aMD bzh bwW -ciV +cih aMI aMI aMI @@ -116534,7 +117774,7 @@ bLu bVr cth cje -ctn +csv bcV bby bck @@ -117044,7 +118284,7 @@ bgk bbT bkd bbT -bUS +cea bVG cgn cje @@ -117055,13 +118295,13 @@ bcA bdM bdM cNA -bhP -biv -bjB -bjV +bhb +ciE +cmT cnB csh -ciE +cHV +cPM bjn btI buc @@ -117283,8 +118523,8 @@ bMY bMY bPB xoj -cwB -cwM +cwx +cPC cww cbN cww @@ -117314,9 +118554,9 @@ bdM bdM bhP biv -bjF -cqB -bXI +cDz +cDA +cDD bnX bjn bjn @@ -117540,8 +118780,8 @@ bMZ bMZ bPC uAY -cwB -bUV +cwF +cwM cww cge cww @@ -117793,12 +119033,12 @@ aaa bJv bMp cww -bNa +cpM bNa bPJ bRC -cfx -bUX +cwG +cPD bVE cbT cww @@ -117830,7 +119070,7 @@ ccv boS boI bqZ -ctu +cxT bMH btN buy @@ -118090,7 +119330,7 @@ cxR cxV cxV cxV -cxZ +cjb cxV cyb cyc @@ -118314,7 +119554,7 @@ qgO chO cpN bWG -cJo +cRg jiZ bhI cLY @@ -118349,7 +119589,7 @@ btd btd bDy bxR -btS +cxZ boI bBA bFh @@ -118582,7 +119822,7 @@ anr aaa aaU bfC -bhB +bUS bAv bPW cBz @@ -119377,7 +120617,7 @@ boI cre cow boI -bzw +cRa boI aaa aaa diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 61ed3edba7..02e44d0a5a 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -52240,6 +52240,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/cable/white{ + icon_state = "0-4" + }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bLJ" = ( @@ -52257,6 +52260,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/cable/white{ + icon_state = "1-8" + }, /turf/open/floor/plasteel/dark, /area/engine/transit_tube) "bLK" = ( @@ -53546,9 +53552,6 @@ /turf/open/floor/plasteel/dark, /area/aisat) "bND" = ( -/obj/structure/cable/white{ - icon_state = "0-4" - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -53562,6 +53565,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/cable/white{ + icon_state = "0-4" + }, /turf/open/floor/plasteel/dark, /area/aisat) "bNE" = ( @@ -56011,27 +56017,33 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/cable/white{ + icon_state = "4-8" + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bRB" = ( -/obj/machinery/power/port_gen/pacman, -/obj/structure/cable/yellow{ - icon_state = "0-2" - }, /obj/structure/sign/warning/electricshock{ pixel_y = 32 }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/power/smes{ + charge = 5e+006 + }, +/obj/structure/cable/white{ + icon_state = "0-8" + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bRC" = ( -/obj/machinery/cell_charger, -/obj/structure/table/reinforced, -/obj/item/stock_parts/cell/high, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 +/obj/machinery/power/port_gen/pacman, +/obj/structure/cable/yellow{ + icon_state = "0-2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) @@ -57108,10 +57120,16 @@ /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bTr" = ( -/obj/structure/cable/yellow{ - icon_state = "1-8" - }, /obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "4-8" + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/yellow{ + icon_state = "0-4" + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bTs" = ( @@ -57123,6 +57141,9 @@ start_active = 1 }, /obj/effect/turf_decal/stripes/line, +/obj/structure/cable/yellow{ + icon_state = "1-8" + }, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat_interior) "bTt" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 3eaad62714..a87ea077b3 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -39,10 +39,6 @@ /obj/structure/table, /obj/item/paper_bin, /obj/item/pen, -/obj/item/mmi/posibrain{ - pixel_x = 5; - pixel_y = 8 - }, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "aae" = ( @@ -57,7 +53,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/caution/stand_clear, /obj/machinery/door/poddoor/shutters/radiation/preopen{ id = "engsm"; name = "Radiation Chamber Shutters" @@ -165,6 +160,10 @@ /obj/structure/cable{ icon_state = "0-8" }, +/mob/living/simple_animal/bot/cleanbot{ + auto_patrol = 1; + name = "Sir Cleansworth" + }, /turf/open/floor/engine, /area/ai_monitored/turret_protected/ai) "aau" = ( @@ -263,17 +262,6 @@ /area/ai_monitored/turret_protected/ai) "aaE" = ( /obj/structure/chair, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/dark, /area/medical/medbay/central) "aaF" = ( @@ -287,7 +275,6 @@ dir = 5 }, /obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/human, /turf/open/floor/engine, /area/ai_monitored/turret_protected/ai) "aaG" = ( @@ -593,9 +580,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "abd" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/structure/cable{ @@ -636,10 +620,6 @@ /turf/open/floor/plasteel/dark, /area/lawoffice) "abg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -733,6 +713,9 @@ name = "Station Intercom (Command)"; pixel_y = -28 }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/carpet, /area/crew_quarters/heads/captain) "abr" = ( @@ -873,7 +856,6 @@ pixel_x = 24 }, /obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/human, /turf/open/floor/engine, /area/ai_monitored/turret_protected/ai) "abD" = ( @@ -953,9 +935,6 @@ /turf/open/floor/engine, /area/ai_monitored/turret_protected/ai) "abM" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/structure/cable{ @@ -1132,7 +1111,6 @@ /turf/open/floor/plasteel, /area/security/warden) "acg" = ( -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/engine, @@ -1352,7 +1330,6 @@ /turf/open/space, /area/space/nearstation) "acz" = ( -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, @@ -1363,7 +1340,9 @@ /turf/open/floor/engine, /area/ai_monitored/storage/satellite) "acB" = ( -/obj/structure/cable, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/engine, /area/ai_monitored/storage/satellite) "acC" = ( @@ -1642,7 +1621,6 @@ /obj/machinery/light_switch{ pixel_y = -24 }, -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, @@ -1661,7 +1639,7 @@ dir = 4 }, /turf/open/floor/engine, -/area/ai_monitored/turret_protected/aisat_interior) +/area/space) "acY" = ( /obj/structure/cable{ icon_state = "4-8" @@ -1828,26 +1806,18 @@ id = "prisonblast"; name = "Prison Blast Door" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/security/prison) "adm" = ( /obj/structure/chair/office{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/engine, /area/ai_monitored/storage/satellite) "adn" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -1890,7 +1860,7 @@ /turf/open/floor/circuit/green{ luminosity = 2 }, -/area/ai_monitored/turret_protected/ai) +/area/space) "adr" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 4 @@ -1912,7 +1882,6 @@ id = "xeno_blastdoor"; name = "Xenobiology Containment Blast Door" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/science/xenobiology) "adt" = ( @@ -1943,10 +1912,6 @@ /turf/open/floor/plasteel/dark, /area/security/courtroom) "adv" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/effect/decal/cleanable/blood/gibs/limb, /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, @@ -1999,6 +1964,9 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/engine, /area/ai_monitored/storage/satellite) "adA" = ( @@ -2086,10 +2054,10 @@ pixel_y = 26 }, /obj/structure/cable{ - icon_state = "0-4" + icon_state = "0-8" }, /obj/structure/cable{ - icon_state = "0-8" + icon_state = "4-8" }, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat/foyer) @@ -2186,6 +2154,9 @@ /obj/structure/cable{ icon_state = "2-8" }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/engine, /area/ai_monitored/storage/satellite) "adO" = ( @@ -2212,9 +2183,12 @@ /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat/foyer) "adT" = ( -/obj/structure/sign/warning/securearea, -/turf/closed/wall/r_wall/rust, -/area/ai_monitored/turret_protected/aisat_interior) +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/science/xenobiology) "adU" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -2236,7 +2210,6 @@ pixel_y = 24; req_one_access_txt = "2" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/security/warden) "adW" = ( @@ -2348,7 +2321,6 @@ pixel_y = -24; req_one_access_txt = "2" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/security/prison) "aed" = ( @@ -2395,16 +2367,6 @@ /turf/open/floor/plating, /area/security/warden) "aej" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -2441,7 +2403,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/medical/cryo) "aeo" = ( @@ -2687,7 +2648,6 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/medical/cryo) "aeQ" = ( @@ -2800,16 +2760,6 @@ /turf/open/floor/plating, /area/security/warden) "aeY" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plasteel, @@ -3012,16 +2962,6 @@ /turf/closed/wall, /area/maintenance/port/aft) "afn" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -3510,13 +3450,16 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "afX" = ( -/obj/structure/grille/broken, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating{ - icon_state = "platingdmg1" +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 4 }, -/area/maintenance/starboard/fore) +/obj/effect/turf_decal/tile/blue, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/crew_quarters/heads/cmo) "afY" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/bot, @@ -3626,6 +3569,9 @@ name = "xenobiology camera"; network = list("ss13","rd","xeno") }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/circuit/telecomms, /area/science/xenobiology) "agg" = ( @@ -3650,6 +3596,9 @@ external_pressure_bound = 120; name = "server vent" }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/circuit/telecomms, /area/science/xenobiology) "agi" = ( @@ -3666,6 +3615,9 @@ icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plasteel/showroomfloor, /area/science/xenobiology) "agj" = ( @@ -3943,10 +3895,11 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "agF" = ( -/obj/structure/grille, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ + dir = 4 + }, +/turf/open/floor/plasteel/showroomfloor, +/area/medical/medbay/central) "agG" = ( /obj/docking_port/stationary{ dir = 2; @@ -4581,7 +4534,6 @@ pixel_x = -26 }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/science/xenobiology) "ahI" = ( @@ -4662,16 +4614,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral, -/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/structure/cable{ icon_state = "4-8" }, @@ -4680,16 +4622,6 @@ "ahQ" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1, -/obj/effect/turf_decal/tile/neutral, -/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/structure/cable{ icon_state = "4-8" }, @@ -4803,7 +4735,6 @@ /turf/open/floor/plating, /area/security/brig) "ahY" = ( -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/structure/cable{ @@ -4816,37 +4747,21 @@ /turf/open/floor/plasteel, /area/security/main) "ahZ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, /turf/open/floor/plasteel, /area/security/main) "aia" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, /turf/open/floor/plasteel, /area/security/main) "aib" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /turf/open/floor/plasteel, /area/security/main) "aic" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/effect/turf_decal/bot, /obj/machinery/holopad, /turf/open/floor/plasteel, @@ -4939,16 +4854,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral, -/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/structure/cable{ icon_state = "1-4" }, @@ -4958,9 +4863,7 @@ /turf/open/floor/plasteel, /area/security/brig) "aij" = ( -/obj/structure/flora/grass/jungle, /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/leafybush, /obj/machinery/light{ dir = 1 }, @@ -5127,10 +5030,6 @@ /turf/open/floor/plasteel, /area/construction/mining/aux_base) "aix" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/security/main) @@ -5159,16 +5058,6 @@ /area/security/main) "aiz" = ( /obj/machinery/computer/secure_data, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /turf/open/floor/plasteel, /area/security/main) "aiA" = ( @@ -5322,16 +5211,6 @@ /obj/structure/chair{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral, -/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/landmark/start/security_officer, /turf/open/floor/plasteel, /area/security/main) @@ -5399,16 +5278,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/brig) "aiR" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aiS" = ( @@ -5436,28 +5305,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/brig) -"aiU" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/fore) -"aiV" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, -/area/maintenance/port/fore) -"aiW" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, -/area/maintenance/port/fore) "aiX" = ( /obj/structure/cable{ icon_state = "0-2" @@ -5471,12 +5318,6 @@ /area/ai_monitored/turret_protected/aisat_interior) "aiY" = ( /obj/structure/chair, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 @@ -5541,12 +5382,6 @@ /area/ai_monitored/turret_protected/aisat/foyer) "ajc" = ( /obj/structure/chair, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 @@ -5582,22 +5417,11 @@ /turf/open/floor/plasteel, /area/security/main) "ajg" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/effect/decal/cleanable/blood/gibs/limb, /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/maintenance/port/fore) -"ajh" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, -/area/maintenance/port/fore) "aji" = ( /obj/structure/chair{ dir = 8 @@ -5607,13 +5431,13 @@ }, /area/maintenance/port/fore) "ajj" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating{ - icon_state = "platingdmg3" +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/effect/turf_decal/box, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/area/maintenance/fore) +/turf/open/floor/plasteel, +/area/hallway/primary/fore) "ajk" = ( /obj/effect/turf_decal/tile/brown{ dir = 1 @@ -5690,16 +5514,6 @@ color = "#c45c57"; dir = 8 }, -/obj/effect/turf_decal/tile/neutral, -/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/landmark/start/head_of_security, /turf/open/floor/plasteel, /area/security/main) @@ -5746,17 +5560,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/science/xenobiology) -"ajs" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, -/area/maintenance/port/fore) "ajt" = ( /turf/closed/wall, /area/crew_quarters/kitchen) @@ -5915,16 +5718,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) "ajJ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/hallway/primary/fore) @@ -5942,15 +5735,6 @@ }, /turf/open/floor/plasteel/dark, /area/bridge) -"ajL" = ( -/obj/machinery/door/poddoor/preopen{ - id = "Biohazard"; - name = "Emergency Research Blast Door" - }, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, -/turf/open/floor/plasteel/dark, -/area/science/research) "ajM" = ( /obj/effect/decal/cleanable/dirt, /obj/item/shard, @@ -6061,7 +5845,6 @@ /area/hallway/primary/fore) "ajX" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/science/xenobiology) "ajY" = ( @@ -6114,10 +5897,10 @@ /turf/open/floor/plasteel, /area/construction/mining/aux_base) "akd" = ( -/obj/structure/flora/tree/jungle/small, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/flora/ausbushes/ppflowers, /turf/open/floor/grass, /area/medical/genetics) "ake" = ( @@ -6323,7 +6106,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/medical/surgery) "akz" = ( @@ -6379,7 +6161,6 @@ "akF" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/medical/surgery) "akG" = ( @@ -6405,12 +6186,6 @@ /turf/open/floor/plasteel/dark, /area/chapel/office) "akI" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/effect/decal/cleanable/blood/gibs/old, /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, @@ -6613,6 +6388,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, +/obj/machinery/shieldwallgen/xenobiologyaccess, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -6766,7 +6542,6 @@ pixel_x = 28 }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/science/xenobiology) "all" = ( @@ -6961,9 +6736,6 @@ "alw" = ( /obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /turf/open/floor/plasteel/dark, /area/maintenance/port/fore) "alx" = ( @@ -7031,29 +6803,12 @@ /obj/machinery/status_display/evac{ pixel_y = 32 }, -/obj/item/gun/energy/e_gun/advtaser, /turf/open/floor/plasteel/dark, /area/security/brig) -"alA" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel/dark, -/area/maintenance/port/fore) "alB" = ( /turf/closed/wall/r_wall, /area/science/xenobiology) "alC" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, @@ -7113,13 +6868,6 @@ /obj/vehicle/ridden/secway, /turf/open/floor/plasteel/showroomfloor, /area/security/brig) -"alH" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/port/fore) "alI" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating{ @@ -7281,8 +7029,22 @@ }, /area/maintenance/fore) "alV" = ( -/turf/closed/wall/r_wall/rust, -/area/ai_monitored/turret_protected/aisat_interior) +/obj/structure/closet/crate/wooden/toy, +/obj/effect/turf_decal/bot, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23 + }, +/obj/machinery/newscaster{ + pixel_y = 30 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/crew_quarters/theatre) "alW" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating, @@ -8493,31 +8255,12 @@ /turf/open/floor/plasteel/dark, /area/maintenance/starboard) "anX" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1, /turf/open/floor/plasteel, /area/hallway/primary/fore) "anY" = ( /obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -9079,7 +8822,6 @@ /turf/open/floor/wood, /area/lawoffice) "aoT" = ( -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/box/corners{ dir = 4 @@ -9537,7 +9279,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/item/gun/energy/e_gun/advtaser, /turf/open/floor/plasteel/dark, /area/security/brig) "apI" = ( @@ -9713,28 +9454,22 @@ /turf/closed/wall/rust, /area/maintenance/central) "apY" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/structure/table/wood, +/obj/structure/mirror{ + pixel_x = -26 }, +/obj/item/reagent_containers/food/snacks/pie/cream, +/obj/item/clothing/under/costume/lobster, +/obj/item/clothing/head/lobsterhat, +/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ - dir = 8; - icon_state = "intact" - }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/theatre) "apZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ @@ -10276,18 +10011,18 @@ /turf/open/floor/plasteel/dark, /area/maintenance/port/fore) "aqQ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/structure/table/wood, +/obj/item/storage/crayons, +/obj/item/storage/crayons, +/obj/item/bikehorn/rubberducky, +/obj/structure/sign/poster/contraband/clown{ + pixel_x = -30 }, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/turf/open/floor/plasteel, -/area/bridge) +/turf/open/floor/plasteel/dark, +/area/crew_quarters/theatre) "aqR" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/delivery, @@ -10726,7 +10461,6 @@ /obj/structure/sign/warning/electricshock{ pixel_x = -32 }, -/obj/effect/turf_decal/caution/stand_clear, /obj/machinery/door/firedoor, /turf/open/floor/engine, /area/science/xenobiology) @@ -10773,10 +10507,16 @@ /turf/open/floor/plasteel/dark, /area/bridge) "arD" = ( -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/blood/old, +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple, +/obj/structure/sign/departments/science{ + pixel_x = 32 + }, /turf/open/floor/plasteel, -/area/crew_quarters/heads/hop) +/area/hallway/primary/starboard) "arE" = ( /obj/structure/table, /obj/item/clipboard, @@ -11104,28 +10844,17 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/captain) "arW" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel, /area/bridge) "arX" = ( -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, +/obj/effect/turf_decal/tile/purple, /turf/open/floor/plasteel, -/area/bridge) +/area/hallway/primary/starboard) "arY" = ( /obj/effect/turf_decal/bot, /obj/machinery/holopad, @@ -11191,16 +10920,6 @@ }, /area/maintenance/port/fore) "asd" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -11226,7 +10945,7 @@ icon_state = "4-8" }, /turf/open/floor/engine, -/area/ai_monitored/turret_protected/aisat/foyer) +/area/space) "asg" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-22" @@ -11404,7 +11123,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/item/gun/energy/e_gun/advtaser, /turf/open/floor/plasteel/dark, /area/security/brig) "asw" = ( @@ -11977,6 +11695,7 @@ dir = 4; name = "chapel camera" }, +/obj/structure/chair/stool, /turf/open/floor/plasteel/chapel{ dir = 8 }, @@ -12075,16 +11794,9 @@ /turf/open/floor/plasteel, /area/crew_quarters/heads/hop) "atF" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/plaque{ icon_state = "L14" }, @@ -12344,18 +12056,7 @@ }, /area/maintenance/starboard/fore) "aua" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1, -/obj/effect/turf_decal/box, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aub" = ( @@ -12538,16 +12239,6 @@ /turf/open/floor/plasteel/dark, /area/teleporter) "auo" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -12634,9 +12325,20 @@ /turf/closed/wall/r_wall, /area/bridge) "auz" = ( -/obj/structure/sign/warning/vacuum/external, -/turf/closed/wall/rust, -/area/maintenance/starboard) +/obj/effect/turf_decal/tile/purple, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "auA" = ( /obj/structure/cable{ icon_state = "2-8" @@ -12738,12 +12440,12 @@ }, /area/maintenance/solars/starboard/fore) "auK" = ( -/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ - dir = 8 + dir = 1 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, -/area/security/courtroom) +/area/hallway/primary/port) "auL" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible, /obj/effect/turf_decal/box/corners{ @@ -12757,16 +12459,6 @@ /turf/open/floor/plasteel/dark, /area/science/mixing) "auM" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 8 }, @@ -12910,11 +12602,21 @@ /obj/item/folder/blue, /obj/item/melee/chainofcommand, /obj/item/toy/figure/captain, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/item/card/id/captains_spare, /turf/open/floor/carpet, /area/crew_quarters/heads/captain) "ave" = ( /obj/structure/table/wood, /obj/machinery/computer/security/wooden_tv, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/carpet, /area/crew_quarters/heads/captain) "avf" = ( @@ -12982,7 +12684,6 @@ "avj" = ( /obj/structure/table/wood, /obj/item/storage/fancy/donut_box, -/obj/item/card/id/captains_spare, /turf/open/floor/carpet, /area/crew_quarters/heads/captain) "avk" = ( @@ -13023,10 +12724,6 @@ /turf/open/floor/plasteel, /area/security/courtroom) "avo" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -13055,9 +12752,6 @@ /turf/closed/wall, /area/maintenance/aft) "avr" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/box/corners, /turf/open/floor/plasteel, /area/security/courtroom) @@ -13411,12 +13105,6 @@ /turf/open/floor/plasteel/dark, /area/medical/virology) "avQ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -13426,12 +13114,6 @@ /turf/open/floor/plasteel, /area/bridge) "avR" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -13490,35 +13172,16 @@ /obj/structure/chair{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel, /area/security/courtroom) "avX" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -13677,7 +13340,6 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/item/gun/energy/e_gun/advtaser, /turf/open/floor/plasteel/dark, /area/security/brig) "awl" = ( @@ -13734,10 +13396,6 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -13764,16 +13422,6 @@ /turf/open/floor/plating, /area/storage/primary) "awr" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-8" }, @@ -13784,10 +13432,6 @@ pixel_x = -32; pixel_y = 32 }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -13915,9 +13559,6 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -14015,9 +13656,6 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -14037,20 +13675,6 @@ pixel_x = 32; pixel_y = 32 }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine{ - initial_gas_mix = "n2=100;TEMP=80"; - name = "mainframe floor" - }, -/area/tcommsat/server) -"awM" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -14227,6 +13851,7 @@ /obj/item/lighter, /obj/item/clothing/mask/cigarette/cigar/cohiba, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/suit_storage_unit/ce, /turf/open/floor/plasteel, /area/crew_quarters/heads/chief) "axi" = ( @@ -14692,7 +14317,6 @@ name = "Containment Chamber Blast Door" }, /obj/machinery/atmospherics/pipe/simple/general/hidden, -/obj/effect/turf_decal/caution/stand_clear, /obj/machinery/door/firedoor, /turf/open/floor/engine, /area/science/xenobiology) @@ -14832,7 +14456,6 @@ /area/medical/morgue) "ayi" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/security/brig) "ayj" = ( @@ -14844,16 +14467,6 @@ /turf/open/floor/plating, /area/maintenance/starboard) "ayk" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/structure/cable{ @@ -14917,7 +14530,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/bridge) "ayr" = ( @@ -15156,7 +14768,6 @@ /obj/structure/sign/warning/biohazard{ pixel_x = 32 }, -/obj/effect/turf_decal/caution/stand_clear, /obj/machinery/door/firedoor, /turf/open/floor/engine, /area/science/xenobiology) @@ -15217,7 +14828,6 @@ dir = 1; pixel_y = 32 }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) "ayP" = ( @@ -15447,7 +15057,6 @@ /obj/structure/sign/departments/evac{ pixel_y = 32 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) "azc" = ( @@ -15639,9 +15248,6 @@ /turf/open/floor/plasteel/dark, /area/ai_monitored/security/armory) "azp" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, /obj/effect/turf_decal/tile/neutral, /obj/machinery/airalarm{ dir = 4; @@ -15842,11 +15448,10 @@ }, /area/maintenance/starboard) "azE" = ( -/obj/effect/turf_decal/loading_area, /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ dir = 6 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/engine, /area/engine/engineering) "azF" = ( /obj/structure/flora/junglebush/c, @@ -16179,9 +15784,6 @@ /turf/open/floor/plating, /area/medical/chemistry) "aAd" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "External Gas to Loop" @@ -16190,7 +15792,7 @@ /obj/structure/cable{ icon_state = "1-4" }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/engine, /area/engine/engineering) "aAe" = ( /obj/machinery/door/firedoor, @@ -16211,10 +15813,6 @@ dir = 4; pixel_x = -22 }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -16227,7 +15825,6 @@ /obj/structure/cable{ icon_state = "1-4" }, -/obj/effect/turf_decal/stripes/line, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -16249,7 +15846,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/stripes/line, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -16259,10 +15855,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -16278,10 +15870,6 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -16407,7 +15995,6 @@ /turf/open/floor/grass, /area/chapel/main) "aAz" = ( -/obj/effect/decal/cleanable/blood/old, /obj/structure/cable{ icon_state = "1-2" }, @@ -16430,9 +16017,11 @@ /turf/open/floor/plasteel/showroomfloor, /area/science/robotics/lab) "aAD" = ( -/obj/structure/flora/tree/jungle/small, -/turf/open/floor/grass, -/area/chapel/main) +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "aAE" = ( /obj/machinery/light/small{ dir = 8 @@ -16553,16 +16142,6 @@ /turf/open/floor/plasteel/dark, /area/security/warden) "aAO" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, @@ -16638,7 +16217,6 @@ /obj/machinery/door/airlock/public/glass{ name = "Docking Hallway" }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) "aAV" = ( @@ -17012,7 +16590,6 @@ /area/engine/engineering) "aBw" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) "aBx" = ( @@ -17022,10 +16599,6 @@ /turf/open/floor/engine, /area/engine/engineering) "aBy" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/fernybush, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 5 @@ -17160,20 +16733,9 @@ /obj/structure/sign/departments/security{ pixel_x = -32 }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) "aBN" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -17187,7 +16749,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/fore) "aBP" = ( @@ -17324,10 +16885,6 @@ /obj/item/radio/intercom{ pixel_x = -28 }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -17335,7 +16892,6 @@ /area/tcommsat/server) "aCe" = ( /obj/structure/cable, -/obj/effect/turf_decal/stripes/line, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -17408,10 +16964,6 @@ name = "telecomms camera"; network = list("ss13","tcomms") }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -17490,7 +17042,6 @@ /obj/machinery/door/airlock/public/glass{ name = "Security Hallway" }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) "aCr" = ( @@ -17563,16 +17114,6 @@ /turf/open/floor/plasteel/dark, /area/engine/break_room) "aCy" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -17827,10 +17368,7 @@ /area/medical/cryo) "aCN" = ( /obj/structure/flora/grass/jungle/b, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/leafybush, /obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/leafybush, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/structure/extinguisher_cabinet{ pixel_x = 24 @@ -18126,7 +17664,6 @@ "aDh" = ( /obj/structure/flora/grass/jungle/b, /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/sunnybush, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/grass, /area/chapel/main) @@ -18191,7 +17728,6 @@ /turf/open/floor/plating, /area/engine/atmos) "aDs" = ( -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/engine, /area/security/nuke_storage) @@ -18305,6 +17841,7 @@ /obj/machinery/atmospherics/miner/nitrogen{ max_ext_kpa = 2500 }, +/obj/machinery/portable_atmospherics/canister/nitrogen, /turf/open/floor/engine/n2{ initial_gas_mix = "n2=1000;TEMP=293.15" }, @@ -18321,6 +17858,7 @@ /obj/machinery/atmospherics/miner/oxygen{ max_ext_kpa = 2500 }, +/obj/machinery/portable_atmospherics/canister/oxygen, /turf/open/floor/engine/o2{ initial_gas_mix = "o2=1000;TEMP=293.15" }, @@ -18799,18 +18337,13 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/structure/cable{ + icon_state = "1-2" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/turf/open/floor/plasteel/dark/corner{ + dir = 8 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, -/turf/open/floor/plasteel/dark, -/area/chapel/main) +/area/hallway/primary/port) "aEv" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -18951,7 +18484,6 @@ /turf/open/floor/plasteel/dark, /area/engine/atmos) "aEG" = ( -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -18981,7 +18513,6 @@ /turf/open/floor/engine, /area/security/nuke_storage) "aEI" = ( -/obj/effect/turf_decal/box, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -19343,6 +18874,7 @@ /obj/machinery/atmospherics/miner/carbon_dioxide{ max_ext_kpa = 2500 }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, /turf/open/floor/engine/co2{ initial_gas_mix = "co2=1000;TEMP=293.15" }, @@ -19351,6 +18883,7 @@ /obj/machinery/atmospherics/miner/toxins{ max_ext_kpa = 2500 }, +/obj/machinery/portable_atmospherics/canister/toxins, /turf/open/floor/engine/plasma{ initial_gas_mix = "plasma=1000;TEMP=293.15" }, @@ -19359,6 +18892,7 @@ /obj/machinery/atmospherics/miner/n2o{ max_ext_kpa = 2500 }, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, /turf/open/floor/engine/n2o{ initial_gas_mix = "n2o=1000;TEMP=293.15" }, @@ -19682,15 +19216,19 @@ }, /area/maintenance/port/fore) "aFY" = ( +/obj/machinery/air_sensor{ + pixel_x = -32; + pixel_y = -32 + }, /obj/structure/cable{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, /obj/machinery/igniter{ id = "Incinerator" }, -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 - }, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) "aFZ" = ( @@ -19719,16 +19257,17 @@ /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/heads/hor) "aGb" = ( -/obj/machinery/power/turbine{ - luminosity = 2 - }, -/obj/structure/cable, -/turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) -"aGc" = ( /obj/machinery/door/poddoor/incinerator_atmos_main, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) +"aGc" = ( +/obj/machinery/door/window{ + dir = 1; + name = "Captain's Desk"; + req_access_txt = "20" + }, +/turf/open/floor/carpet, +/area/crew_quarters/heads/captain) "aGd" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -20096,7 +19635,6 @@ /area/medical/genetics/cloning) "aGG" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/bridge) "aGH" = ( @@ -20419,7 +19957,6 @@ /area/security/brig) "aHq" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/fore) "aHr" = ( @@ -20866,7 +20403,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/bridge) "aHV" = ( @@ -21126,9 +20662,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-16" - }, /obj/effect/turf_decal/box/corners{ dir = 1 }, @@ -21265,9 +20798,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-10" - }, /obj/machinery/button/door{ id = "transittube_ai"; name = "Transit Tube Lockdown Toggle"; @@ -21525,16 +21055,6 @@ /turf/open/floor/plating, /area/maintenance/aft) "aIY" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/light{ dir = 8 @@ -21728,7 +21248,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/security/brig) "aJs" = ( @@ -21755,7 +21274,6 @@ /area/engine/atmos) "aJu" = ( /obj/machinery/computer/med_data, -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -21768,20 +21286,11 @@ /turf/open/floor/plasteel/dark, /area/medical/medbay/central) "aJv" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, -/turf/open/floor/plasteel/showroomfloor, -/area/medical/medbay/central) +/obj/structure/bed, +/obj/item/bedsheet/black, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood, +/area/crew_quarters/locker) "aJw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, @@ -22136,9 +21645,6 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "applebush" - }, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, @@ -22665,16 +22171,6 @@ }, /area/maintenance/port) "aKN" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/box, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 4 @@ -22964,9 +22460,6 @@ dir = 1 }, /obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, /turf/open/floor/plasteel, /area/medical/medbay/central) "aLk" = ( @@ -22988,13 +22481,6 @@ /obj/structure/chair{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel/dark, /area/medical/medbay/central) "aLn" = ( @@ -23016,16 +22502,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "aLo" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -23396,11 +22872,10 @@ /turf/open/floor/plasteel/showroomfloor, /area/science/mixing) "aMa" = ( -/obj/effect/turf_decal/loading_area, /obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/engine, /area/engine/engineering) "aMb" = ( /obj/effect/turf_decal/tile/neutral, @@ -23622,7 +23097,6 @@ dir = 4 }, /obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple, /obj/machinery/power/apc{ areastring = "/area/science/mixing/chamber"; dir = 4; @@ -23821,9 +23295,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, /turf/open/floor/plasteel, /area/medical/medbay/central) "aME" = ( @@ -24180,21 +23651,10 @@ /turf/open/floor/plasteel/dark, /area/engine/atmos) "aNi" = ( -/obj/machinery/power/compressor{ - comp_id = "incineratorturbine"; - dir = 1; +/obj/machinery/power/turbine{ luminosity = 2 }, -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/structure/cable, -/obj/machinery/camera{ - c_tag = "Turbine Chamber"; - dir = 4; - name = "turbine camera"; - network = list("turbine") - }, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) "aNj" = ( @@ -24295,7 +23755,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/fore) "aNr" = ( @@ -24695,12 +24154,7 @@ }, /turf/open/floor/plasteel/dark, /area/medical/chemistry) -"aOa" = ( -/obj/structure/flora/junglebush/b, -/turf/open/floor/grass, -/area/medical/genetics) "aOb" = ( -/obj/structure/flora/junglebush/large, /turf/open/floor/grass, /area/medical/genetics) "aOc" = ( @@ -24757,10 +24211,6 @@ /area/maintenance/port/fore) "aOh" = ( /obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 8 }, @@ -24822,10 +24272,6 @@ /area/medical/genetics) "aOn" = ( /obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, /obj/machinery/atmospherics/components/binary/valve{ dir = 8 }, @@ -24833,14 +24279,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/science/mixing/chamber) "aOo" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, -/obj/effect/turf_decal/tile/purple, /obj/machinery/atmospherics/pipe/manifold/general/visible{ dir = 4 }, @@ -25266,22 +24704,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/cmo) -"aOS" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/fore) "aOT" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -25300,16 +24722,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "aOU" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1, /obj/effect/turf_decal/box, /obj/structure/disposalpipe/sorting/mail{ @@ -25353,16 +24765,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/heads/cmo) "aOY" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/sorting/mail{ dir = 4; name = "bar sorting disposal pipe"; @@ -25490,19 +24892,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/science/research) "aPk" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25529,7 +24918,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 9 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/science/mixing/chamber) "aPn" = ( @@ -25639,16 +25027,6 @@ /turf/open/floor/plasteel/dark, /area/medical/genetics) "aPv" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -25678,18 +25056,10 @@ /turf/open/floor/plating, /area/medical/storage) "aPz" = ( -/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/effect/turf_decal/box, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -25792,16 +25162,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/science/mixing) "aPH" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/bot, /obj/machinery/holopad, /obj/structure/disposalpipe/segment{ @@ -25998,13 +25358,9 @@ /area/medical/storage) "aPV" = ( /obj/structure/table/glass, -/obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ dir = 8 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue, /obj/item/paper_bin{ pixel_x = -4; @@ -26215,23 +25571,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/medical/medbay/central) -"aQm" = ( -/obj/structure/closet/crate/wooden/toy, -/obj/effect/turf_decal/bot, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, -/obj/machinery/newscaster{ - pixel_y = 30 - }, -/obj/effect/decal/cleanable/cobweb, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/theatre) "aQn" = ( /obj/structure/closet/secure_closet/medical3, /obj/item/storage/belt/medical, @@ -26368,10 +25707,6 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/bar/atrium) "aQy" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /turf/open/floor/plasteel/showroomfloor, /area/medical/medbay/central) "aQz" = ( @@ -26629,9 +25964,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/cable{ - icon_state = "1-4" - }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment{ @@ -26642,16 +25974,14 @@ }, /area/maintenance/central) "aRc" = ( -/obj/structure/cable{ - icon_state = "0-8" +/obj/machinery/door/airlock/maintenance{ + name = "backstage maintenance"; + req_access_txt = "46" }, -/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, +/turf/open/floor/plasteel/dark, /area/maintenance/central) "aRd" = ( /obj/machinery/computer/med_data{ @@ -26700,16 +26030,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/medical/storage) "aRh" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 5 }, @@ -26726,6 +26046,9 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -27099,16 +26422,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/checkpoint/science/research) "aRB" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -27151,16 +26464,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/medical/storage) "aRE" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-8" }, @@ -27420,7 +26723,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/fore) "aRZ" = ( @@ -27629,7 +26931,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/medical/medbay/central) "aSm" = ( -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, @@ -27641,23 +26942,6 @@ }, /turf/open/floor/engine, /area/ai_monitored/turret_protected/ai_upload) -"aSn" = ( -/obj/structure/table/wood, -/obj/structure/mirror{ - pixel_x = -26 - }, -/obj/item/reagent_containers/food/snacks/pie/cream, -/obj/item/clothing/under/costume/lobster, -/obj/item/clothing/head/lobsterhat, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/theatre) "aSo" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; @@ -27811,25 +27095,21 @@ /turf/open/floor/plasteel/dark, /area/medical/chemistry) "aSx" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/structure/chair, +/obj/machinery/light{ + dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/obj/item/clipboard, -/obj/item/storage/firstaid/regular, +/obj/effect/landmark/start/assistant, /turf/open/floor/plasteel/dark, /area/medical/medbay/central) "aSy" = ( /obj/structure/table, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/item/stack/medical/gauze, /obj/item/stack/medical/ointment, /obj/item/stack/medical/bruise_pack{ pixel_x = 4 }, +/obj/item/storage/firstaid/regular, /turf/open/floor/plasteel/dark, /area/medical/medbay/central) "aSz" = ( @@ -27910,10 +27190,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/science/lab) "aSE" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/showroomfloor, /area/medical/medbay/central) @@ -28098,16 +27374,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/science/mixing) "aST" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, @@ -28146,11 +27412,12 @@ }, /area/maintenance/starboard) "aSW" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral, -/obj/item/crowbar/red, -/obj/item/healthanalyzer, -/turf/open/floor/plasteel/dark, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "cmoprivacy"; + name = "Office Privacy Shutters" + }, +/turf/open/floor/plating, /area/medical/medbay/central) "aSX" = ( /obj/machinery/status_display/evac, @@ -28267,7 +27534,6 @@ /turf/open/floor/grass, /area/medical/virology) "aTi" = ( -/obj/structure/flora/junglebush/large, /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/grass, /area/medical/virology) @@ -28725,9 +27991,6 @@ /obj/effect/turf_decal/tile/purple{ dir = 4 }, -/obj/effect/turf_decal/tile/purple{ - dir = 8 - }, /obj/effect/turf_decal/tile/purple, /obj/structure/disposalpipe/segment{ dir = 4 @@ -28904,7 +28167,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/port/fore) "aUc" = ( -/obj/effect/turf_decal/loading_area, /obj/effect/turf_decal/tile/purple{ dir = 1 }, @@ -29330,9 +28592,6 @@ dir = 1 }, /obj/effect/turf_decal/tile/blue, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-18" - }, /turf/open/floor/plasteel/showroomfloor, /area/medical/storage) "aUG" = ( @@ -29711,7 +28970,6 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) "aVc" = ( -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/structure/cable{ @@ -29751,9 +29009,6 @@ /obj/effect/turf_decal/tile/purple{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-18" - }, /obj/machinery/light_switch{ pixel_x = -24; pixel_y = -6 @@ -29872,16 +29127,12 @@ dir = 1 }, /obj/effect/turf_decal/tile/purple, -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 1 }, /turf/open/floor/plasteel/showroomfloor, /area/science/storage) "aVm" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ dir = 8 @@ -29956,9 +29207,7 @@ /area/crew_quarters/kitchen) "aVr" = ( /obj/structure/flora/grass/jungle/b, -/obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/brflowers, -/obj/structure/flora/ausbushes/leafybush, /obj/structure/window/reinforced{ dir = 4 }, @@ -30142,7 +29391,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/effect/decal/cleanable/blood/old, /obj/structure/cable{ icon_state = "1-8" }, @@ -30154,7 +29402,6 @@ pixel_x = -6; pixel_y = 8 }, -/obj/item/restraints/handcuffs, /obj/item/pen, /turf/open/floor/plasteel/dark, /area/medical/virology) @@ -30226,7 +29473,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/turf/closed/wall/rust, +/turf/closed/wall, /area/janitor) "aVN" = ( /obj/structure/chair{ @@ -30649,10 +29896,7 @@ /area/security/checkpoint/medical) "aWs" = ( /obj/structure/flora/grass/jungle/b, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/genericbush, /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/sunnybush, /obj/structure/window/reinforced{ dir = 8 }, @@ -30666,10 +29910,6 @@ /turf/open/floor/grass, /area/hallway/secondary/exit/departure_lounge) "aWt" = ( -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -30893,22 +30133,18 @@ "aWQ" = ( /obj/machinery/door/firedoor, /obj/effect/decal/cleanable/blood/old, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/quartermaster/storage) "aWR" = ( /turf/closed/wall, /area/science/xenobiology) "aWS" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/machinery/newscaster{ + pixel_x = 30 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/bar) +/turf/open/floor/wood, +/area/crew_quarters/locker) "aWT" = ( /obj/structure/closet/secure_closet/chemical, /obj/structure/window/reinforced{ @@ -31061,6 +30297,7 @@ /obj/item/radio/intercom{ pixel_y = 22 }, +/obj/item/mmi/posibrain, /turf/open/floor/plasteel/dark, /area/science/robotics/lab) "aXh" = ( @@ -31070,7 +30307,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/quartermaster/storage) "aXi" = ( @@ -31122,6 +30358,8 @@ pixel_y = 4 }, /obj/item/stock_parts/cell/high, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, /turf/open/floor/plasteel/dark, /area/science/lab) "aXo" = ( @@ -31226,20 +30464,14 @@ /turf/open/floor/plasteel/dark, /area/maintenance/central) "aXw" = ( -/obj/structure/table, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/folder, -/obj/item/nanite_scanner{ - pixel_x = -4; - pixel_y = 4 - }, -/obj/item/nanite_remote, /obj/machinery/light{ dir = 4 }, +/obj/machinery/computer/nanite_cloud_controller, /turf/open/floor/plasteel/dark, /area/science/research) "aXx" = ( @@ -31303,7 +30535,6 @@ /turf/open/floor/mech_bay_recharge_floor, /area/science/robotics/mechbay) "aXD" = ( -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -31325,17 +30556,18 @@ /turf/open/floor/engine, /area/ai_monitored/turret_protected/ai_upload) "aXE" = ( -/obj/machinery/nanite_chamber, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Cabin_4Privacy"; + name = "Cabin 4 Privacy Shutter" }, -/turf/open/floor/plasteel/dark, -/area/science/research) +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/crew_quarters/locker) "aXF" = ( /obj/effect/turf_decal/bot, -/obj/machinery/computer/nanite_chamber_control, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -31351,6 +30583,7 @@ name = "science camera"; network = list("ss13","rd") }, +/obj/machinery/computer/nanite_chamber_control, /turf/open/floor/plasteel/dark, /area/science/research) "aXG" = ( @@ -31428,11 +30661,6 @@ /area/tcommsat/server) "aXN" = ( /obj/machinery/igniter/incinerator_toxmix, -/mob/living/simple_animal/chicken{ - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 1, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0); - desc = "A timeless classic."; - name = "Kentucky" - }, /turf/open/floor/engine/vacuum, /area/science/mixing/chamber) "aXO" = ( @@ -31531,13 +30759,9 @@ /area/maintenance/starboard/fore) "aXX" = ( /obj/structure/chair/office/light{ - dir = 1; - pixel_y = 3 + dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/box/red, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -31886,7 +31110,6 @@ id = "emmd"; name = "Emergency Medical Lockdown Shutters" }, -/obj/effect/turf_decal/caution/stand_clear, /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, /area/medical/medbay/central) @@ -32013,20 +31236,9 @@ /turf/open/floor/plasteel/showroomfloor, /area/medical/chemistry) "aYM" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /turf/open/floor/plasteel, /area/hallway/primary/port) "aYN" = ( -/obj/machinery/nanite_program_hub, /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -32038,6 +31250,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/table/reinforced, +/obj/item/nanite_scanner, +/obj/item/nanite_remote, /turf/open/floor/plasteel/dark, /area/science/research) "aYO" = ( @@ -32064,14 +31279,16 @@ /turf/open/floor/plasteel/grimy, /area/crew_quarters/bar) "aYR" = ( -/obj/machinery/computer/nanite_cloud_controller, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + id = "Cabin_3Privacy"; + name = "Cabin 3 Privacy Shutter" }, -/turf/open/floor/plasteel/dark, -/area/science/research) +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, +/area/crew_quarters/locker) "aYS" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -32086,7 +31303,6 @@ /turf/open/floor/plasteel/dark, /area/science/research) "aYT" = ( -/obj/machinery/nanite_programmer, /obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -32098,6 +31314,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/machinery/modular_computer/console/preset/civilian{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/science/research) "aYV" = ( @@ -32137,10 +31356,20 @@ /turf/open/floor/engine, /area/ai_monitored/turret_protected/ai_upload) "aYZ" = ( -/obj/effect/turf_decal/box, -/obj/effect/decal/cleanable/blood/old, -/turf/open/floor/engine, -/area/ai_monitored/turret_protected/ai_upload) +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plating/airless{ + initial_gas_mix = "o2=14;n2=23;TEMP=300" + }, +/area/maintenance/port/aft) "aZa" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral, @@ -32204,24 +31433,31 @@ /turf/open/floor/plasteel/dark, /area/science/lab) "aZf" = ( -/obj/machinery/door/airlock/maintenance{ - name = "backstage maintenance"; - req_access_txt = "46" +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/maintenance/central) +/turf/open/floor/plasteel/showroomfloor, +/area/crew_quarters/theatre) "aZg" = ( -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/bot, /obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plasteel/dark, -/area/science/lab) +/turf/open/floor/plasteel, +/area/hallway/primary/central) "aZh" = ( /obj/machinery/porta_turret/ai, /obj/machinery/light/small{ @@ -32238,25 +31474,10 @@ /turf/closed/wall, /area/science/lab) "aZj" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/item/clipboard, -/obj/item/reagent_containers/glass/beaker/large{ - pixel_x = -6 - }, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 6 - }, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/structure/extinguisher_cabinet{ - pixel_y = -30 - }, -/turf/open/floor/plasteel/dark, -/area/science/lab) +/obj/effect/turf_decal/bot, +/obj/machinery/holopad, +/turf/open/floor/plasteel, +/area/hallway/secondary/exit/departure_lounge) "aZk" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral{ @@ -32268,9 +31489,6 @@ /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/glass/fifty, /obj/item/clothing/glasses/welding, -/obj/item/radio/intercom{ - pixel_x = 28 - }, /turf/open/floor/plasteel/dark, /area/science/lab) "aZl" = ( @@ -32649,7 +31867,6 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/fore) "aZP" = ( @@ -33001,7 +32218,6 @@ /obj/structure/sign/warning/vacuum{ pixel_x = 32 }, -/obj/effect/decal/cleanable/blood/old, /turf/open/floor/engine/vacuum, /area/science/mixing/chamber) "bar" = ( @@ -33117,9 +32333,6 @@ /turf/open/floor/plasteel/dark, /area/medical/surgery) "baz" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ dir = 8 @@ -33346,16 +32559,6 @@ /turf/open/floor/circuit/green/telecomms/mainframe, /area/science/server) "baQ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -33722,7 +32925,6 @@ /area/science/mixing) "bbt" = ( /obj/machinery/air_sensor/atmos/toxins_mixing_tank, -/obj/effect/decal/cleanable/blood/old, /turf/open/floor/engine/vacuum, /area/science/mixing/chamber) "bbv" = ( @@ -33762,16 +32964,6 @@ /turf/closed/wall/r_wall, /area/science/mixing/chamber) "bbz" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, @@ -33852,8 +33044,6 @@ /turf/open/floor/engine, /area/ai_monitored/turret_protected/ai_upload) "bbH" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple, /obj/structure/cable{ icon_state = "1-2" }, @@ -33919,16 +33109,9 @@ dir = 4 }, /obj/item/clipboard, -/obj/item/nanite_remote{ - pixel_x = -4; - pixel_y = 4 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/item/nanite_scanner{ - pixel_x = 4 - }, /obj/machinery/light{ dir = 1 }, @@ -34072,7 +33255,6 @@ /turf/closed/wall/r_wall, /area/science/mixing/chamber) "bbY" = ( -/obj/effect/decal/cleanable/blood/old, /obj/structure/cable{ icon_state = "1-4" }, @@ -34432,8 +33614,12 @@ }, /area/maintenance/port) "bcD" = ( -/turf/closed/wall/r_wall/rust, -/area/science/mixing) +/obj/effect/turf_decal/box, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/aft) "bcE" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -34767,7 +33953,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/hydroponics) "bcY" = ( /obj/structure/grille/broken, @@ -34805,7 +33991,6 @@ /area/crew_quarters/kitchen) "bda" = ( /obj/machinery/door/firedoor/heavy, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/science/mixing/chamber) "bdb" = ( @@ -34855,7 +34040,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/fore) "bdg" = ( @@ -35360,12 +34544,6 @@ /turf/open/floor/plating, /area/maintenance/starboard) "bdO" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -35482,7 +34660,6 @@ pixel_x = 32; pixel_y = -8 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/fore) "bdV" = ( @@ -35855,7 +35032,6 @@ pixel_x = -32; pixel_y = -8 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/fore) "bev" = ( @@ -35934,7 +35110,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/medical/medbay/central) "beC" = ( @@ -35953,6 +35128,7 @@ dir = 4 }, /obj/effect/landmark/event_spawn, +/obj/machinery/nanite_program_hub, /turf/open/floor/plasteel/dark, /area/science/research) "beE" = ( @@ -35977,7 +35153,6 @@ "beF" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/medical/medbay/central) "beG" = ( @@ -36398,6 +35573,7 @@ /obj/machinery/light{ dir = 1 }, +/obj/machinery/shieldwallgen/xenobiologyaccess, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -36747,7 +35923,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/port) "bfT" = ( @@ -36802,7 +35977,6 @@ "bfX" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/port) "bfY" = ( @@ -36825,6 +35999,9 @@ /obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ name = "euthanization chamber freezer" }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) "bga" = ( @@ -36926,7 +36103,6 @@ pixel_x = 32; pixel_y = -8 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/port) "bgi" = ( @@ -37305,16 +36481,6 @@ /turf/open/floor/plasteel/dark, /area/science/xenobiology) "bgK" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -37393,10 +36559,6 @@ /turf/open/floor/grass, /area/medical/virology) "bgP" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -37412,7 +36574,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plasteel/dark/corner, +/turf/open/floor/plasteel, /area/hallway/primary/starboard) "bgQ" = ( /obj/structure/cable{ @@ -38090,16 +37252,6 @@ /turf/open/floor/plating, /area/quartermaster/office) "bhY" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bhZ" = ( @@ -38153,16 +37305,6 @@ }, /area/maintenance/port) "bie" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -38458,16 +37600,6 @@ /turf/open/floor/plasteel/dark, /area/security/checkpoint/science/research) "biC" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/junction, /turf/open/floor/plasteel, /area/hallway/primary/starboard) @@ -38782,16 +37914,6 @@ /turf/open/floor/plasteel, /area/security/checkpoint/supply) "biX" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/bot, /obj/machinery/holopad, /turf/open/floor/plasteel, @@ -38850,7 +37972,6 @@ dir = 1 }, /obj/effect/turf_decal/loading_area, -/obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, /area/quartermaster/storage) @@ -38866,7 +37987,6 @@ }, /obj/effect/turf_decal/loading_area, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/old, /turf/open/floor/plasteel, /area/quartermaster/storage) "bjd" = ( @@ -39030,16 +38150,6 @@ /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "bjp" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, @@ -39084,16 +38194,6 @@ /turf/open/floor/plasteel/dark, /area/medical/surgery) "bjt" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -39113,7 +38213,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/tank/internals/oxygen/yellow, /turf/open/floor/plasteel/dark, /area/quartermaster/miningoffice) "bjv" = ( @@ -39124,7 +38223,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/tank/internals/oxygen/yellow, /obj/machinery/firealarm{ dir = 4; pixel_x = -24 @@ -39176,7 +38274,6 @@ dir = 1; pixel_y = 3 }, -/obj/effect/decal/cleanable/blood/old, /obj/structure/cable{ icon_state = "1-4" }, @@ -39197,7 +38294,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 5 }, -/obj/effect/decal/cleanable/blood/old, /obj/structure/cable{ icon_state = "4-8" }, @@ -39369,16 +38465,6 @@ /turf/open/floor/plating, /area/maintenance/central) "bjN" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -39424,22 +38510,12 @@ /obj/effect/turf_decal/tile/brown{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, -/obj/effect/turf_decal/box/corners{ - dir = 4 - }, /turf/open/floor/plasteel, /area/quartermaster/storage) "bjS" = ( @@ -39679,16 +38755,6 @@ /turf/open/floor/plasteel/dark, /area/quartermaster/office) "bks" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /turf/open/floor/plasteel, /area/quartermaster/storage) "bkt" = ( @@ -39787,16 +38853,6 @@ /area/quartermaster/sorting) "bkA" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -39821,7 +38877,6 @@ /obj/effect/turf_decal/tile/brown, /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/arrows, -/obj/effect/decal/cleanable/blood/old, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -39930,7 +38985,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/tank/internals/oxygen/yellow, /obj/machinery/light, /obj/machinery/requests_console{ department = "Mining"; @@ -40125,16 +39179,6 @@ /turf/open/floor/plating, /area/maintenance/port) "blb" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -40208,16 +39252,6 @@ /turf/open/floor/plasteel/dark, /area/quartermaster/miningoffice) "bli" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -40227,16 +39261,6 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "blj" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/landmark/event_spawn, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, @@ -40331,16 +39355,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/medical/virology) "blq" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, @@ -40348,16 +39362,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "blr" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, @@ -40435,16 +39439,6 @@ /area/quartermaster/storage) "blz" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 8 }, @@ -40474,36 +39468,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/showroomfloor, /area/library) -"blC" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "blD" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -40582,16 +39547,6 @@ /turf/open/floor/plasteel, /area/quartermaster/qm) "blK" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, @@ -40600,16 +39555,6 @@ /area/quartermaster/storage) "blL" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -40840,7 +39785,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/hydroponics) "bmf" = ( /obj/effect/turf_decal/tile/brown{ @@ -41214,7 +40159,6 @@ }, /obj/effect/turf_decal/arrows, /obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/old, /obj/machinery/firealarm{ dir = 4; pixel_x = -24 @@ -41231,7 +40175,7 @@ dir = 8 }, /obj/effect/decal/cleanable/cobweb, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/hydroponics) "bmF" = ( /obj/machinery/status_display/evac, @@ -41246,7 +40190,7 @@ /obj/machinery/plantgenes{ pixel_y = 5 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/hydroponics) "bmH" = ( /obj/effect/turf_decal/tile/red{ @@ -41274,16 +40218,6 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "bmJ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/port) @@ -41403,7 +40337,7 @@ /area/crew_quarters/kitchen) "bmU" = ( /obj/structure/lattice, -/turf/closed/wall/r_wall/rust, +/turf/closed/wall/r_wall, /area/security/prison) "bmV" = ( /obj/effect/turf_decal/tile/neutral, @@ -41508,7 +40442,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 6 }, -/obj/effect/decal/cleanable/blood/old, /obj/structure/cable{ icon_state = "4-8" }, @@ -41667,10 +40600,6 @@ /area/crew_quarters/locker) "bnq" = ( /obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/genericbush, -/obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/sunnybush, /obj/structure/window/reinforced{ dir = 4 }, @@ -41766,17 +40695,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/library) -"bny" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel/dark, -/area/hydroponics) "bnz" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -41832,31 +40750,7 @@ }, /turf/open/floor/plasteel/dark, /area/hydroponics) -"bnD" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/structure/extinguisher_cabinet{ - pixel_x = -26 - }, -/turf/open/floor/plasteel/dark, -/area/hydroponics) "bnE" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/sorting/mail{ name = "kitchen sorting disposal pipe"; sortType = 20 @@ -41898,9 +40792,7 @@ /area/bridge) "bnH" = ( /obj/structure/flora/grass/jungle/b, -/obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/brflowers, -/obj/structure/flora/ausbushes/leafybush, /obj/structure/window/reinforced{ dir = 4 }, @@ -41973,20 +40865,6 @@ /obj/item/toy/figure/chef, /turf/open/floor/plating, /area/crew_quarters/kitchen) -"bnM" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple, -/obj/structure/sign/departments/science{ - pixel_x = 32 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) "bnN" = ( /obj/effect/turf_decal/tile/green{ dir = 1 @@ -42035,11 +40913,7 @@ /turf/open/floor/plasteel/dark, /area/bridge) "bnR" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/genericbush, /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/sunnybush, /obj/structure/window/reinforced{ dir = 4 }, @@ -42048,17 +40922,6 @@ }, /turf/open/floor/grass, /area/hydroponics) -"bnS" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/bot, -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/sign/poster/official/fruit_bowl{ - pixel_x = -32 - }, -/turf/open/floor/plasteel/dark, -/area/hydroponics) "bnT" = ( /obj/structure/flora/grass/jungle/b, /obj/structure/flora/ausbushes/ppflowers, @@ -42152,10 +41015,7 @@ /area/security/courtroom) "boa" = ( /obj/structure/flora/grass/jungle/b, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/genericbush, /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/sunnybush, /obj/structure/window/reinforced{ dir = 8 }, @@ -42165,25 +41025,13 @@ /turf/open/floor/grass, /area/hydroponics) "bob" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/brflowers, -/obj/structure/flora/ausbushes/leafybush, /obj/structure/window/reinforced{ dir = 4 }, /obj/structure/window/reinforced, /turf/open/floor/grass, /area/hydroponics) -"boc" = ( -/obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel/dark, -/area/hydroponics) "bod" = ( /obj/effect/turf_decal/tile/brown{ dir = 4 @@ -42267,10 +41115,7 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "boh" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/brflowers, -/obj/structure/flora/ausbushes/leafybush, /obj/structure/window/reinforced{ dir = 8 }, @@ -42941,12 +41786,9 @@ /area/crew_quarters/kitchen) "bpi" = ( /obj/structure/flora/grass/jungle/b, -/obj/structure/flora/junglebush/b, /obj/item/radio/intercom{ pixel_y = -28 }, -/obj/effect/decal/remains/human, -/obj/effect/decal/cleanable/blood/old, /turf/open/floor/grass, /area/hydroponics) "bpj" = ( @@ -43159,10 +42001,6 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43181,10 +42019,6 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43223,10 +42057,6 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -43234,9 +42064,6 @@ dir = 8 }, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, /turf/open/floor/plasteel, /area/quartermaster/storage) "bpE" = ( @@ -43272,7 +42099,7 @@ /area/quartermaster/storage) "bpF" = ( /obj/structure/sign/departments/cargo, -/turf/closed/wall/rust, +/turf/closed/wall, /area/hallway/primary/starboard) "bpG" = ( /obj/effect/turf_decal/tile/neutral, @@ -43366,16 +42193,6 @@ /turf/open/floor/plasteel/dark, /area/hallway/primary/port) "bpN" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 8 }, @@ -43454,24 +42271,6 @@ /obj/structure/sign/departments/botany, /turf/closed/wall, /area/hallway/primary/starboard) -"bpW" = ( -/obj/effect/turf_decal/tile/purple, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, -/obj/effect/turf_decal/tile/purple, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) "bpX" = ( /obj/machinery/door/poddoor/preopen{ id = "brigfrontdoor"; @@ -43480,7 +42279,6 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 28 }, -/obj/effect/turf_decal/caution/stand_clear, /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, /area/security/brig) @@ -43528,7 +42326,7 @@ /area/bridge) "bqb" = ( /obj/structure/sign/departments/custodian, -/turf/closed/wall/rust, +/turf/closed/wall, /area/maintenance/central) "bqc" = ( /obj/effect/turf_decal/bot, @@ -43551,10 +42349,6 @@ /turf/open/floor/plasteel, /area/crew_quarters/kitchen) "bqe" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -43577,9 +42371,6 @@ /turf/open/floor/plasteel/dark, /area/teleporter) "bqg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/cable{ icon_state = "1-8" }, @@ -43601,7 +42392,7 @@ /obj/item/radio/intercom{ pixel_y = 22 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/hydroponics) "bqj" = ( /obj/effect/turf_decal/tile/red, @@ -43652,8 +42443,13 @@ /area/crew_quarters/kitchen) "bqm" = ( /obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plasteel, -/area/bridge) +/area/security/warden) "bqn" = ( /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ @@ -43676,16 +42472,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "bqp" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 9 }, @@ -43707,17 +42493,15 @@ }, /area/maintenance/central) "bqs" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/open/floor/plasteel, -/area/bridge) +/area/security/main) "bqt" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, @@ -43808,8 +42592,6 @@ "bqA" = ( /obj/structure/table, /obj/item/folder/white, -/obj/item/restraints/handcuffs, -/obj/item/wirerod, /obj/item/pen, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -43981,16 +42763,6 @@ /turf/open/floor/plasteel, /area/hydroponics) "bqN" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 4 }, @@ -44091,16 +42863,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bqT" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -44111,18 +42873,17 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bqU" = ( -/obj/structure/table/wood, -/obj/item/clothing/gloves/color/rainbow/clown, -/obj/item/storage/crayons, -/obj/item/storage/crayons, -/obj/item/bikehorn/rubberducky, -/obj/structure/sign/poster/contraband/clown{ - pixel_x = -30 +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/tile/blue{ dir = 4 }, -/turf/open/floor/plasteel/dark, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/theatre) "bqV" = ( /obj/effect/turf_decal/bot, @@ -44300,16 +43061,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/starboard) "bri" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 10 }, @@ -44361,7 +43112,9 @@ dir = 1 }, /obj/machinery/portable_atmospherics/canister, -/obj/effect/turf_decal/box, +/obj/effect/turf_decal/bot{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/engine/engineering) "bro" = ( @@ -44370,7 +43123,9 @@ }, /obj/machinery/portable_atmospherics/canister, /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/box, +/obj/effect/turf_decal/bot{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/engine/engineering) "brp" = ( @@ -44487,7 +43242,6 @@ dir = 4; pixel_x = -26 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) "brA" = ( @@ -44665,22 +43419,7 @@ /area/crew_quarters/bar/atrium) "brN" = ( /obj/machinery/hydroponics/constructable, -/obj/effect/turf_decal/bot, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = 28 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/hydroponics) "brO" = ( /obj/machinery/hydroponics/constructable, @@ -44689,7 +43428,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/hydroponics) "brP" = ( /obj/structure/table, @@ -44953,19 +43692,10 @@ }, /area/maintenance/central/secondary) "bsm" = ( -/turf/closed/wall/rust, -/area/chapel/office) +/obj/machinery/status_display/evac, +/turf/open/floor/plasteel, +/area/engine/supermatter) "bsn" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -45023,9 +43753,6 @@ /turf/open/floor/carpet, /area/lawoffice) "bss" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -45049,16 +43776,6 @@ }, /area/hallway/primary/port) "bst" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -45083,16 +43800,6 @@ /turf/open/floor/plasteel/dark/corner, /area/hallway/primary/port) "bsv" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/sorting/mail/flip{ dir = 2; name = "cargo sorting disposal pipe"; @@ -45186,12 +43893,6 @@ /turf/open/floor/plasteel, /area/security/courtroom) "bsC" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -45207,13 +43908,6 @@ "bsE" = ( /turf/open/floor/plasteel, /area/bridge) -"bsF" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/bridge) "bsG" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -45334,10 +44028,7 @@ /area/library) "bsN" = ( /obj/structure/flora/grass/jungle/b, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/genericbush, /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/sunnybush, /obj/structure/window/reinforced{ dir = 8 }, @@ -45348,10 +44039,7 @@ /turf/open/floor/grass, /area/crew_quarters/heads/hop) "bsO" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/brflowers, -/obj/structure/flora/ausbushes/leafybush, /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 1 @@ -45359,11 +44047,7 @@ /turf/open/floor/grass, /area/crew_quarters/heads/hop) "bsP" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/genericbush, /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/sunnybush, /obj/structure/window/reinforced{ dir = 4 }, @@ -45535,12 +44219,6 @@ name = "off ramp"; pixel_y = 5 }, -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, /turf/open/floor/plasteel, /area/quartermaster/storage) "btc" = ( @@ -45755,7 +44433,6 @@ "btt" = ( /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) "btu" = ( @@ -45896,8 +44573,6 @@ "btH" = ( /obj/structure/flora/grass/jungle/b, /obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/brflowers, -/obj/structure/flora/ausbushes/leafybush, /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 1 @@ -45913,10 +44588,7 @@ /area/crew_quarters/bar) "btI" = ( /obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/genericbush, /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/sunnybush, /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 1 @@ -46038,17 +44710,7 @@ /obj/structure/bookcase/random/reference, /turf/open/floor/wood, /area/crew_quarters/bar) -"btU" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, -/turf/open/floor/wood, -/area/crew_quarters/bar) "btV" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -46112,11 +44774,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-17"; - pixel_x = 8; - pixel_y = 3 - }, /obj/machinery/light_switch{ pixel_x = 24; pixel_y = 40 @@ -46130,17 +44787,6 @@ }, /turf/open/floor/plasteel/dark, /area/crew_quarters/bar) -"bub" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-02"; - pixel_y = 3 - }, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/bar) "buc" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -46255,12 +44901,6 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/bar) "buk" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -46331,10 +44971,6 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/bar) "bur" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, @@ -47069,7 +45705,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/starboard) "bvC" = ( @@ -47184,7 +45819,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) "bvL" = ( @@ -47255,16 +45889,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/toilet/restrooms) "bvQ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -47313,10 +45937,6 @@ /turf/open/floor/plasteel/dark, /area/library) "bvV" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-16" }, @@ -47385,7 +46005,6 @@ /area/crew_quarters/heads/captain) "bwc" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) "bwd" = ( @@ -47410,9 +46029,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-16" - }, /obj/structure/extinguisher_cabinet{ pixel_x = 24 }, @@ -47688,16 +46304,6 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/captain) "bwF" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, @@ -47879,10 +46485,6 @@ /obj/structure/flora/ausbushes/ywflowers, /turf/open/floor/grass, /area/chapel/main) -"bwU" = ( -/obj/structure/flora/grass/jungle, -/turf/open/floor/grass, -/area/chapel/main) "bwV" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -47917,11 +46519,13 @@ /turf/open/floor/plasteel/dark, /area/security/checkpoint/supply) "bwY" = ( +/obj/structure/chair/stool, /turf/open/floor/plasteel/chapel{ dir = 8 }, /area/chapel/main) "bwZ" = ( +/obj/structure/chair/stool, /turf/open/floor/plasteel/chapel, /area/chapel/main) "bxa" = ( @@ -48016,10 +46620,7 @@ /area/chapel/main) "bxh" = ( /obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/genericbush, /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/sunnybush, /obj/structure/window/reinforced{ dir = 4 }, @@ -48141,10 +46742,7 @@ /area/quartermaster/storage) "bxt" = ( /obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/genericbush, /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/sunnybush, /obj/structure/window/reinforced{ dir = 4 }, @@ -48479,10 +47077,6 @@ /turf/open/floor/plasteel/dark, /area/medical/virology) "bxW" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-4" }, @@ -48550,9 +47144,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-22" - }, /obj/machinery/light, /obj/machinery/airalarm{ dir = 1; @@ -48829,16 +47420,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) "byv" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -48919,7 +47500,6 @@ /obj/structure/cable{ icon_state = "2-4" }, -/obj/effect/turf_decal/caution/stand_clear, /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, /area/security/brig) @@ -49759,6 +48339,9 @@ /obj/machinery/newscaster/security_unit{ pixel_x = 28 }, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/captain) "bzQ" = ( @@ -50499,12 +49082,6 @@ name = "on ramp"; pixel_y = 6 }, -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/obj/effect/turf_decal/box/corners{ - dir = 4 - }, /turf/open/floor/plasteel, /area/quartermaster/storage) "bAV" = ( @@ -50560,7 +49137,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/decal/cleanable/blood/old, /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/machinery/airalarm{ pixel_y = 22 @@ -50598,14 +49174,10 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "bBc" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, -/turf/open/floor/plasteel/dark/corner, +/turf/open/floor/plasteel, /area/hallway/primary/starboard) "bBd" = ( /obj/machinery/vending/tool, @@ -50633,19 +49205,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plasteel, /area/hallway/primary/aft) -"bBf" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "bBg" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -50697,7 +49256,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) "bBk" = ( @@ -51120,16 +49678,6 @@ /turf/open/floor/plasteel/dark, /area/storage/primary) "bBS" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "2-8" }, @@ -51192,16 +49740,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bBV" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 8 }, @@ -51209,16 +49747,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bBW" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -51267,16 +49795,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bCa" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/hallway/primary/starboard) @@ -51617,14 +50135,11 @@ /turf/open/floor/plasteel/dark, /area/hydroponics) "bCG" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, /obj/machinery/atmospherics/components/binary/pump{ dir = 1; name = "External Gas to Loop" }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/engine, /area/engine/engineering) "bCH" = ( /obj/effect/turf_decal/tile/blue{ @@ -52514,19 +51029,6 @@ luminosity = 2 }, /area/storage/tech) -"bEa" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/emcloset/anchored, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plasteel/dark, -/area/maintenance/port/aft) "bEb" = ( /obj/structure/cable{ icon_state = "0-4" @@ -52838,16 +51340,6 @@ }, /area/maintenance/port/aft) "bEA" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -52857,16 +51349,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{ dir = 8 @@ -52874,32 +51356,12 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bEC" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bED" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/box, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 8 @@ -52922,16 +51384,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bEG" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/box, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -53202,7 +51654,9 @@ dir = 1 }, /obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/turf_decal/box, +/obj/effect/turf_decal/bot{ + dir = 1 + }, /turf/open/floor/plasteel/dark, /area/engine/engineering) "bFi" = ( @@ -53308,6 +51762,9 @@ }, /obj/machinery/atmospherics/components/unary/vent_pump/on, /obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small{ + dir = 4 + }, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -54287,10 +52744,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) "bGS" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/effect/turf_decal/bot, /obj/machinery/holopad, /turf/open/floor/plasteel, @@ -54321,15 +52774,6 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) -"bGW" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) "bGX" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -54625,21 +53069,6 @@ /obj/item/bedsheet/brown, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"bHv" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "bHw" = ( /obj/structure/table, /obj/effect/turf_decal/tile/red{ @@ -54678,16 +53107,6 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) "bHy" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/box, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 1 @@ -54952,16 +53371,6 @@ }, /area/hallway/primary/central) "bHP" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/effect/decal/cleanable/dirt, @@ -54974,9 +53383,6 @@ "bHS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /turf/open/floor/plasteel, /area/security/processing) "bHT" = ( @@ -55510,16 +53916,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bIO" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/bot, /obj/machinery/holopad, /turf/open/floor/plasteel, @@ -55531,12 +53927,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /turf/open/floor/plasteel, /area/security/processing) "bIQ" = ( @@ -55808,13 +54198,7 @@ pixel_x = 6 }, /obj/item/pen, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, @@ -55827,12 +54211,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/item/storage/toolbox/mechanical{ pixel_x = 2; pixel_y = 4 @@ -55891,16 +54269,6 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "bJs" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 1 }, @@ -56249,13 +54617,6 @@ /turf/open/floor/wood, /area/crew_quarters/locker) "bJT" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/tile/blue{ dir = 4 }, @@ -56276,7 +54637,7 @@ dir = 1 }, /turf/open/floor/wood{ - icon_state = "wood-broken6" + icon_state = "wood-broken5" }, /area/crew_quarters/locker) "bJV" = ( @@ -56312,9 +54673,9 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "bJY" = ( -/obj/structure/bed, -/obj/item/bedsheet/black, -/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/structure/table/wood, +/obj/item/folder/red, +/obj/item/lighter, /obj/machinery/button/door{ id = "Cabin_2"; name = "Cabin 2 Privacy Lock"; @@ -56322,14 +54683,7 @@ pixel_y = 24; specialfunctions = 4 }, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/landmark/start/assistant, -/turf/open/floor/wood{ - icon_state = "wood-broken3" - }, +/turf/open/floor/wood, /area/crew_quarters/locker) "bJZ" = ( /obj/machinery/light/small{ @@ -56338,9 +54692,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, -/turf/open/floor/wood{ - icon_state = "wood-broken" - }, +/turf/open/floor/wood, /area/crew_quarters/locker) "bKa" = ( /obj/effect/turf_decal/tile/neutral{ @@ -56369,56 +54721,32 @@ }, /turf/open/floor/wood, /area/crew_quarters/locker) -"bKc" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/machinery/newscaster{ - pixel_x = -30 - }, -/obj/machinery/button/door{ - id = "Cabin_4Privacy"; - name = "Cabin 4 Privacy Toggle"; - pixel_x = -24; - pixel_y = -24 - }, -/turf/open/floor/wood{ - icon_state = "wood-broken4" - }, -/area/crew_quarters/locker) "bKd" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/machinery/newscaster{ - pixel_x = -30 - }, -/obj/machinery/button/door{ - id = "Cabin_3Privacy"; - name = "Cabin 3 Privacy Toggle"; - pixel_x = -24; - pixel_y = -24 - }, /turf/open/floor/wood{ - icon_state = "wood-broken5" + icon_state = "wood-broken6" }, /area/crew_quarters/locker) -"bKe" = ( -/obj/structure/dresser, -/turf/open/floor/wood, -/area/crew_quarters/locker) "bKf" = ( /obj/structure/sign/poster/contraband/revolver, /turf/closed/wall, /area/crew_quarters/locker) "bKg" = ( -/obj/structure/table/wood, -/obj/item/folder/red, -/obj/item/lighter, -/turf/open/floor/wood, +/turf/open/floor/wood{ + icon_state = "wood-broken3" + }, /area/crew_quarters/locker) "bKh" = ( -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/machinery/newscaster{ - pixel_x = 30 +/obj/structure/bed, +/obj/item/bedsheet/black, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/effect/landmark/start/assistant, +/turf/open/floor/wood{ + icon_state = "wood-broken3" }, -/turf/open/floor/wood, /area/crew_quarters/locker) "bKi" = ( /obj/effect/turf_decal/tile/blue{ @@ -56438,12 +54766,19 @@ /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/locker) "bKk" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "Cabin_4Privacy"; - name = "Cabin 4 Privacy Shutter" +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/machinery/newscaster{ + pixel_x = -30 + }, +/obj/machinery/button/door{ + id = "Cabin_4Privacy"; + name = "Cabin 4 Privacy Toggle"; + pixel_x = -24; + pixel_y = -24 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken4" }, -/turf/open/floor/plating, /area/crew_quarters/locker) "bKl" = ( /obj/structure/flora/rock/pile, @@ -56845,9 +55180,6 @@ /turf/open/floor/plasteel/dark, /area/hallway/primary/central) "bKP" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, @@ -56944,9 +55276,6 @@ /area/crew_quarters/toilet/restrooms) "bKU" = ( /obj/effect/turf_decal/box, -//obj/structure/toilet/secret/low_loot{ - dir = 8 - }, /obj/structure/mirror{ pixel_x = -28 }, @@ -57282,18 +55611,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"bLr" = ( -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/storage/primary) "bLs" = ( /obj/structure/table, /obj/effect/decal/cleanable/cobweb, @@ -57334,16 +55651,6 @@ /turf/open/floor/plasteel/dark, /area/janitor) "bLt" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -57351,7 +55658,8 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bLu" = ( -/turf/closed/wall/rust, +/obj/structure/dresser, +/turf/open/floor/wood, /area/crew_quarters/locker) "bLv" = ( /obj/effect/turf_decal/tile/purple{ @@ -57542,16 +55850,6 @@ /turf/open/floor/grass, /area/security/prison) "bLI" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 @@ -57609,11 +55907,6 @@ pixel_y = 22; prison_radio = 1 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-17"; - pixel_x = -8; - pixel_y = 3 - }, /turf/open/floor/plasteel/showroomfloor, /area/security/prison) "bLO" = ( @@ -57673,16 +55966,6 @@ /turf/open/floor/plasteel, /area/crew_quarters/fitness/recreation) "bLS" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, @@ -57761,16 +56044,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/prison) "bLY" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/landmark/event_spawn, /obj/structure/disposalpipe/segment{ dir = 4 @@ -57778,16 +56051,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bLZ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -57947,16 +56210,6 @@ /turf/open/floor/plasteel, /area/security/warden) "bMm" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -58045,7 +56298,6 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, /obj/structure/cable{ icon_state = "2-4" }, @@ -58057,12 +56309,6 @@ }, /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/storage/primary) @@ -58466,10 +56712,6 @@ /turf/open/floor/mech_bay_recharge_floor, /area/maintenance/port/aft) "bMY" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /turf/open/floor/plasteel, /area/security/warden) "bMZ" = ( @@ -58570,9 +56812,7 @@ "bNi" = ( /obj/structure/flora/grass/jungle/b, /obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/leafybush, /obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/leafybush, /obj/structure/cable{ icon_state = "4-8" }, @@ -58614,9 +56854,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -58758,7 +56995,6 @@ dir = 8; pixel_y = -24 }, -/obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -58836,8 +57072,6 @@ /turf/open/floor/plasteel/dark, /area/security/warden) "bNH" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/grassybush, /obj/structure/flora/ausbushes/ppflowers, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 5 @@ -59196,10 +57430,6 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -59215,9 +57445,6 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1, /turf/open/floor/plasteel, /area/storage/primary) @@ -59280,7 +57507,6 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/storage/primary) @@ -59454,16 +57680,6 @@ /turf/closed/wall/rust, /area/maintenance/starboard/aft) "bOD" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{ dir = 4 @@ -59471,48 +57687,18 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bOE" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 6 }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bOF" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bOG" = ( -/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/event_spawn, /obj/structure/cable{ icon_state = "1-2" @@ -59524,17 +57710,6 @@ /turf/closed/wall, /area/janitor) "bOI" = ( -/obj/effect/turf_decal/box/corners, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -59542,16 +57717,6 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "bOJ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/landmark/event_spawn, /obj/structure/disposalpipe/segment{ dir = 4 @@ -59559,16 +57724,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bOK" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/starboard) @@ -59592,16 +57747,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "bOM" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/effect/decal/cleanable/dirt, @@ -59627,16 +57772,6 @@ /turf/open/floor/plasteel/dark, /area/security/main) "bOP" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bOQ" = ( @@ -59669,16 +57804,6 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "bOS" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -59755,22 +57880,12 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "bOY" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ +/obj/structure/disposalpipe/segment{ dir = 4 }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bOZ" = ( @@ -59857,10 +57972,6 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "bPh" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/ausbushes/fernybush, /turf/open/floor/grass, /area/security/prison) "bPi" = ( @@ -59984,7 +58095,7 @@ /area/hallway/primary/central) "bPp" = ( /obj/machinery/status_display/shuttle, -/turf/closed/wall/rust, +/turf/closed/wall, /area/security/courtroom) "bPq" = ( /obj/machinery/door/airlock/maintenance{ @@ -60133,7 +58244,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, -/turf/closed/wall/rust, +/turf/closed/wall, /area/maintenance/starboard/aft) "bPA" = ( /obj/effect/turf_decal/tile/red, @@ -60157,16 +58268,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/prison) "bPB" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -60269,16 +58370,6 @@ }, /area/hallway/secondary/entry) "bPL" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/sorting/mail{ dir = 8; name = "HoP sorting disposal pipe"; @@ -60369,10 +58460,6 @@ }, /area/maintenance/port/aft) "bPR" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60516,16 +58603,6 @@ }, /area/space/nearstation) "bQd" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/structure/disposalpipe/segment{ @@ -60572,15 +58649,6 @@ /area/hallway/primary/starboard) "bQh" = ( /obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/junction/flip{ dir = 8 }, @@ -60616,7 +58684,6 @@ /obj/machinery/door/airlock/public/glass{ name = "Engineering Hallway" }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) "bQl" = ( @@ -60750,16 +58817,6 @@ /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) "bQv" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, @@ -60820,10 +58877,6 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -60841,9 +58894,6 @@ }, /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -60869,9 +58919,6 @@ }, /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, @@ -61305,10 +59352,6 @@ "bRf" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/red, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-02"; - pixel_y = 3 - }, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, @@ -61361,16 +59404,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bRj" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plasteel, @@ -61520,19 +59553,6 @@ /obj/machinery/holopad, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"bRt" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit/departure_lounge) "bRu" = ( /obj/effect/turf_decal/bot, /obj/structure/rack, @@ -61849,16 +59869,6 @@ }, /area/maintenance/aft) "bRU" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -61871,16 +59881,6 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "bRV" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -61926,16 +59926,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bRZ" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -61955,16 +59945,6 @@ /turf/open/floor/engine, /area/storage/tech) "bSb" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -61975,16 +59955,6 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "bSc" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, @@ -61996,9 +59966,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"bSd" = ( -/turf/closed/wall/rust, -/area/hallway/secondary/entry) "bSe" = ( /obj/structure/table/reinforced, /obj/effect/turf_decal/delivery, @@ -62104,9 +60071,6 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -62120,17 +60084,11 @@ }, /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/disposalpipe/junction/flip, /turf/open/floor/plasteel, /area/storage/primary) "bSn" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/brflowers, -/obj/structure/flora/ausbushes/leafybush, /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 1 @@ -62450,19 +60408,9 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) -"bSQ" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/closed/wall, -/area/hallway/secondary/exit/departure_lounge) "bSR" = ( /obj/machinery/shower{ dir = 8; @@ -62591,7 +60539,6 @@ /obj/structure/sign/departments/engineering{ pixel_x = 32 }, -/obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) @@ -62656,16 +60603,6 @@ /turf/open/floor/engine, /area/storage/tech) "bTe" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/airalarm{ dir = 4; @@ -62787,12 +60724,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bTr" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/power/apc{ areastring = "/area/hallway/secondary/entry"; dir = 0; @@ -62875,16 +60806,6 @@ /turf/closed/wall/rust, /area/hallway/secondary/exit/departure_lounge) "bTy" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/structure/cable{ @@ -62904,9 +60825,6 @@ dir = 4; pixel_x = -22 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, /turf/open/floor/plasteel/dark, /area/security/prison) "bTA" = ( @@ -63272,9 +61190,6 @@ /turf/closed/wall, /area/hallway/secondary/entry) "bUa" = ( -/obj/structure/bed, -/obj/item/bedsheet/black, -/obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/crew_quarters/locker) "bUb" = ( @@ -63340,15 +61255,6 @@ /area/hallway/secondary/entry) "bUg" = ( /obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "4-8" }, @@ -63418,9 +61324,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) -"bUl" = ( -/turf/closed/wall, -/area/security/vacantoffice) "bUm" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/public/glass{ @@ -63466,7 +61369,7 @@ dir = 10 }, /turf/open/floor/plasteel, -/area/security/warden) +/area/space) "bUs" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -63698,6 +61601,7 @@ /area/security/processing) "bUQ" = ( /obj/machinery/light/floor, +/obj/machinery/portable_atmospherics/canister/air, /turf/open/floor/engine/air, /area/engine/atmos) "bUR" = ( @@ -63777,16 +61681,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bVa" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/junction/flip{ dir = 8 }, @@ -64290,13 +62184,6 @@ }, /area/maintenance/central/secondary) "bVL" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/tile/neutral{ dir = 4 }, @@ -64309,10 +62196,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ - dir = 8; - icon_state = "intact" - }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "bVM" = ( @@ -65329,10 +63212,6 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) -"bXo" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit/departure_lounge) "bXp" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -65388,16 +63267,6 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "bXu" = ( -/obj/effect/turf_decal/tile/neutral, -/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/box/corners{ dir = 1 }, @@ -65441,20 +63310,6 @@ /obj/structure/sign/departments/evac, /turf/closed/wall, /area/hallway/secondary/exit/departure_lounge) -"bXy" = ( -/obj/effect/turf_decal/tile/neutral, -/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/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/hallway/secondary/exit/departure_lounge) "bXz" = ( /obj/effect/turf_decal/bot, /obj/effect/decal/cleanable/cobweb/cobweb2, @@ -65484,16 +63339,6 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "bXC" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -65518,16 +63363,6 @@ /area/hallway/secondary/exit/departure_lounge) "bXE" = ( /obj/effect/turf_decal/box/corners, -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plasteel, @@ -65611,7 +63446,6 @@ /obj/structure/cable{ icon_state = "1-2" }, -/obj/effect/turf_decal/caution/stand_clear, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) @@ -66138,12 +63972,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bYw" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plasteel, @@ -66485,31 +64313,6 @@ }, /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) -"bYS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/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/structure/cable{ - icon_state = "1-4" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, -/area/security/brig) "bYT" = ( /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/security/prison"; @@ -66585,13 +64388,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bYZ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-10" - }, /turf/open/floor/plasteel, /area/hallway/primary/aft) "bZa" = ( @@ -66730,10 +64526,6 @@ /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bZk" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "bZl" = ( @@ -66835,16 +64627,6 @@ /turf/open/floor/plasteel/dark, /area/engine/engineering) "bZr" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "2-4" }, @@ -66956,20 +64738,8 @@ dir = 1 }, /area/hallway/primary/starboard) -"bZA" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, -/turf/open/floor/plasteel, -/area/hallway/primary/starboard) "bZB" = ( /obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -66984,16 +64754,6 @@ /turf/open/floor/plasteel/dark, /area/hallway/secondary/exit/departure_lounge) "bZD" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plasteel, @@ -67078,25 +64838,15 @@ }, /area/hallway/primary/starboard) "bZJ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{ - dir = 4 - }, /obj/structure/cable{ icon_state = "2-4" }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bZK" = ( @@ -67143,24 +64893,14 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bZN" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 +/obj/structure/cable{ + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{ dir = 8 }, -/obj/structure/cable{ - icon_state = "1-2" +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) @@ -67201,16 +64941,6 @@ /turf/open/floor/plasteel/dark, /area/janitor) "bZR" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 5 }, @@ -67369,16 +65099,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "cad" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 4 }, @@ -67454,16 +65174,9 @@ /turf/open/floor/plasteel, /area/engine/break_room) "cak" = ( -/obj/effect/turf_decal/tile/neutral, /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/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -67482,16 +65195,6 @@ /turf/open/floor/plasteel, /area/hallway/secondary/exit/departure_lounge) "cal" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -67564,16 +65267,6 @@ /turf/open/floor/plasteel/dark, /area/storage/primary) "car" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "2-8" }, @@ -67622,10 +65315,6 @@ /turf/open/floor/plasteel, /area/engine/break_room) "cau" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/structure/cable{ @@ -67746,7 +65435,6 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) "caE" = ( @@ -68022,10 +65710,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/central) "cbb" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/structure/cable{ @@ -68236,9 +65920,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 10 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, /turf/open/floor/plasteel, /area/hallway/primary/port) "cbw" = ( @@ -68304,7 +65985,6 @@ /area/maintenance/starboard) "cbA" = ( /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) "cbB" = ( @@ -68406,16 +66086,6 @@ }, /area/hallway/primary/port) "cbH" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 1 }, @@ -68431,24 +66101,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plasteel/dark/corner, /area/hallway/primary/port) -"cbJ" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable{ - icon_state = "1-4" - }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, -/turf/open/floor/plasteel/dark/corner{ - dir = 8 - }, -/area/hallway/primary/port) "cbM" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -68548,10 +66200,6 @@ }, /area/maintenance/port/aft) "cbT" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, @@ -68723,10 +66371,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "cci" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -68742,10 +66386,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ - dir = 8; - icon_state = "intact" - }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "ccj" = ( @@ -68992,10 +66632,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) "ccM" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -69042,9 +66678,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/brig) "ccR" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -69101,7 +66734,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/crew_quarters/locker) "ccX" = ( @@ -69217,28 +66849,14 @@ /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) "cdg" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/effect/turf_decal/plaque{ icon_state = "L6" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ - dir = 8; - icon_state = "intact" +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{ + dir = 1 }, /turf/open/floor/plasteel, /area/hallway/primary/fore) @@ -69254,20 +66872,9 @@ /area/maintenance/aft) "cdi" = ( /obj/structure/flora/grass/jungle/b, -/obj/structure/flora/ausbushes/sparsegrass, /turf/open/floor/grass, /area/security/prison) "cdj" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/item/beacon, /turf/open/floor/plasteel, /area/hallway/primary/aft) @@ -69664,9 +67271,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/brig) -"cdY" = ( -/turf/closed/wall/r_wall/rust, -/area/maintenance/central) "cdZ" = ( /turf/closed/wall/r_wall, /area/maintenance/central) @@ -69706,7 +67310,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/crew_quarters/locker) "ced" = ( @@ -69798,6 +67401,7 @@ pixel_x = 4; req_access_txt = "16" }, +/obj/item/toy/talking/AI, /turf/open/floor/circuit/red, /area/ai_monitored/turret_protected/ai) "ceg" = ( @@ -69952,6 +67556,7 @@ pixel_x = -3; req_access_txt = "16" }, +/obj/item/toy/talking/AI, /turf/open/floor/circuit/red, /area/ai_monitored/turret_protected/ai) "cep" = ( @@ -70031,12 +67636,6 @@ /turf/open/floor/plasteel, /area/engine/break_room) "ceu" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ dir = 8 }, @@ -70066,12 +67665,6 @@ /turf/open/floor/circuit/red/telecomms, /area/tcommsat/server) "cex" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden/layer1{ dir = 8 }, @@ -70088,12 +67681,6 @@ /turf/open/floor/plasteel, /area/engine/break_room) "cey" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -70196,9 +67783,6 @@ "ceF" = ( /turf/closed/wall/r_wall, /area/ai_monitored/turret_protected/aisat/atmos) -"ceG" = ( -/turf/closed/wall/r_wall/rust, -/area/ai_monitored/turret_protected/aisat/atmos) "ceH" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -70970,9 +68554,6 @@ "cfY" = ( /turf/closed/wall/r_wall, /area/ai_monitored/storage/satellite) -"cga" = ( -/turf/closed/wall/r_wall/rust, -/area/ai_monitored/storage/satellite) "cgb" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/dirt, @@ -71002,7 +68583,7 @@ "cgg" = ( /obj/structure/sign/warning/docking, /turf/closed/wall/rust, -/area/hallway/secondary/entry) +/area/hallway/secondary/exit/departure_lounge) "cgi" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -71191,9 +68772,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-05" - }, /obj/effect/turf_decal/tile/red{ dir = 1 }, @@ -71470,16 +69048,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "cgV" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, @@ -71651,10 +69219,6 @@ /turf/closed/wall, /area/maintenance/fore) "chk" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -71700,10 +69264,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/brig) "chm" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -72172,9 +69732,6 @@ /obj/structure/lattice/catwalk, /turf/open/floor/plating/airless, /area/solar/port/aft) -"chV" = ( -/turf/closed/wall/rust, -/area/ai_monitored/turret_protected/aisat_interior) "chW" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/hatch{ @@ -72805,7 +70362,6 @@ name = "Engine Access Shutters" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, @@ -73236,21 +70792,6 @@ /obj/structure/sign/warning/securearea, /turf/closed/wall, /area/engine/gravity_generator) -"cjC" = ( -/obj/effect/turf_decal/box/corners{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/plasteel/dark, -/area/engine/gravity_generator) "cjD" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -73270,33 +70811,6 @@ icon_state = "panelscorched" }, /area/maintenance/starboard/aft) -"cjF" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/machinery/status_display/ai{ - pixel_y = 32 - }, -/obj/effect/decal/cleanable/greenglow, -/turf/open/floor/plasteel/dark, -/area/engine/gravity_generator) -"cjG" = ( -/obj/effect/turf_decal/box/corners{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/turf/open/floor/plasteel/dark, -/area/engine/gravity_generator) "cjH" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering{ @@ -73312,7 +70826,6 @@ /turf/open/floor/plasteel/dark, /area/engine/engineering) "cjI" = ( -/obj/effect/turf_decal/box, /obj/machinery/shower{ dir = 4; name = "emergency shower" @@ -73535,7 +71048,6 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, -/obj/effect/turf_decal/box, /obj/machinery/shower{ dir = 4; name = "emergency shower" @@ -74089,16 +71601,6 @@ icon_state = "platingdmg1" }, /area/engine/engineering) -"clg" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/greenglow, -/turf/open/floor/plasteel/dark, -/area/engine/gravity_generator) "clh" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1, /turf/open/floor/plasteel, @@ -74413,14 +71915,6 @@ luminosity = 2 }, /area/engine/gravity_generator) -"clF" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/decal/cleanable/greenglow, -/turf/open/floor/plasteel/dark, -/area/engine/gravity_generator) "clG" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -74533,37 +72027,11 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/maintenance/solars/port/aft) -"clP" = ( -/obj/effect/turf_decal/box/corners{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/open/floor/plasteel/dark, -/area/engine/gravity_generator) "clQ" = ( /obj/machinery/gravity_generator/main/station, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/decal/cleanable/greenglow, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "clR" = ( -/obj/effect/turf_decal/box/corners, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "clS" = ( @@ -74596,7 +72064,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, -/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/security/processing) "clY" = ( @@ -74665,9 +72132,6 @@ /area/engine/atmos) "cmc" = ( /obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -74923,7 +72387,6 @@ dir = 8; pixel_x = 24 }, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "cmt" = ( @@ -75058,16 +72521,6 @@ /turf/open/floor/plasteel, /area/engine/atmos) "cmD" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /turf/open/floor/plasteel, @@ -75087,7 +72540,6 @@ dir = 8 }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "cmF" = ( @@ -75187,7 +72639,6 @@ }, /obj/machinery/light/small, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/engine/gravity_generator) "cmR" = ( @@ -75448,7 +72899,6 @@ dir = 4; pixel_x = -26 }, -/obj/item/gun/energy/e_gun/advtaser, /turf/open/floor/plasteel/dark, /area/security/brig) "cnn" = ( @@ -76060,6 +73510,10 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/mob/living/simple_animal/bot/cleanbot{ + auto_patrol = 1; + name = "\imprper Cleaner Bot" + }, /turf/open/floor/plasteel/showroomfloor, /area/security/prison) "coI" = ( @@ -76244,16 +73698,6 @@ /turf/open/floor/plasteel, /area/engine/atmos) "cpd" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel, /area/hallway/primary/aft) @@ -76553,16 +73997,6 @@ /turf/open/floor/plasteel/dark, /area/engine/atmos) "cpu" = ( -/obj/effect/turf_decal/tile/neutral, -/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/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /obj/item/beacon, @@ -76673,7 +74107,7 @@ /obj/structure/cable{ icon_state = "2-8" }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plasteel, /area/engine/engineering) "cpF" = ( /obj/structure/flora/rock/pile, @@ -76782,16 +74216,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/port/aft) "cpP" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/cable{ icon_state = "1-2" }, @@ -76799,16 +74223,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "cpQ" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/item/beacon, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, @@ -78380,16 +75794,6 @@ /obj/structure/cable{ icon_state = "4-8" }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, @@ -79516,7 +76920,6 @@ id = "xeno_blastdoor"; name = "Xenobiology Containment Blast Door" }, -/obj/effect/turf_decal/caution/stand_clear, /obj/structure/disposalpipe/junction{ dir = 4 }, @@ -81324,16 +78727,6 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/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/structure/cable{ icon_state = "2-8" }, @@ -81662,10 +79055,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/port/fore) "cyY" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral, /obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel/dark, /area/maintenance/port/fore) @@ -82334,7 +79723,6 @@ name = "Emergency Research Blast Door" }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/science/research) "cAY" = ( @@ -82465,7 +79853,6 @@ /obj/machinery/light{ dir = 8 }, -/obj/item/gun/energy/e_gun/advtaser, /turf/open/floor/plasteel/dark, /area/security/brig) "cBp" = ( @@ -82665,12 +80052,19 @@ /turf/open/floor/plasteel/dark, /area/maintenance/central) "cBW" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - id = "Cabin_3Privacy"; - name = "Cabin 3 Privacy Shutter" +/obj/structure/closet/secure_closet/personal/cabinet, +/obj/machinery/newscaster{ + pixel_x = -30 + }, +/obj/machinery/button/door{ + id = "Cabin_3Privacy"; + name = "Cabin 3 Privacy Toggle"; + pixel_x = -24; + pixel_y = -24 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken5" }, -/turf/open/floor/plating, /area/crew_quarters/locker) "cBX" = ( /obj/effect/spawner/structure/window/reinforced, @@ -82705,6 +80099,9 @@ }, /obj/structure/flora/grass/jungle/b, /obj/machinery/light, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plating/asteroid/airless{ initial_gas_mix = "o2=14;n2=23;TEMP=300" }, @@ -82718,6 +80115,9 @@ }, /obj/structure/flora/ausbushes/palebush, /obj/machinery/light/small, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plating/asteroid/airless{ initial_gas_mix = "o2=14;n2=23;TEMP=300" }, @@ -82933,7 +80333,6 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/structure/barricade/wooden/crude, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -83150,9 +80549,6 @@ /turf/open/floor/plasteel/dark, /area/maintenance/fore) "cDr" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-02"; pixel_y = 3 @@ -83572,16 +80968,6 @@ /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) -"cEl" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/remains/human, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/fore) "cEm" = ( /obj/machinery/atmospherics/components/trinary/filter/flipped, /obj/machinery/button/ignition{ @@ -84065,7 +81451,6 @@ dir = 4 }, /obj/machinery/door/firedoor, -/obj/effect/turf_decal/caution/stand_clear, /turf/open/floor/plasteel/dark, /area/hallway/primary/aft) "cFC" = ( @@ -84097,7 +81482,6 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/structure/barricade/wooden/crude, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) "cFJ" = ( @@ -84332,11 +81716,7 @@ /turf/open/floor/engine/vacuum, /area/science/test_area) "cGz" = ( -/obj/structure/flora/grass/jungle, -/obj/structure/flora/ausbushes/grassybush, -/obj/structure/flora/ausbushes/genericbush, /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/ausbushes/sunnybush, /obj/structure/window/reinforced{ dir = 4 }, @@ -84694,20 +82074,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/dark, /area/security/brig) -"cHC" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/hallway/primary/aft) "cHD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -84833,16 +82199,6 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/heads/chief) "cHS" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/effect/landmark/event_spawn, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, @@ -84895,9 +82251,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -84922,15 +82275,6 @@ icon_state = "platingdmg3" }, /area/maintenance/aft) -"cIe" = ( -/obj/machinery/door/airlock/research{ - glass = 1; - name = "Slime Euthanization Chamber"; - opacity = 0; - req_access_txt = "55" - }, -/turf/open/floor/plasteel/dark, -/area/maintenance/starboard/fore) "cIf" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/on{ dir = 4 @@ -85091,16 +82435,6 @@ /turf/open/floor/plasteel/dark, /area/storage/tcom) "cIw" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -85259,9 +82593,6 @@ dir = 1 }, /obj/machinery/light, -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-21" - }, /obj/structure/sign/warning/electricshock{ pixel_y = -32 }, @@ -85681,16 +83012,6 @@ /turf/open/floor/plasteel/dark, /area/engine/break_room) "cKa" = ( -/obj/effect/turf_decal/tile/neutral{ - 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/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, @@ -85709,16 +83030,6 @@ /turf/open/floor/plasteel, /area/engine/break_room) "cKb" = ( -/obj/effect/turf_decal/tile/neutral{ - 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/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, @@ -86540,7 +83851,6 @@ /turf/open/floor/plating, /area/maintenance/department/electrical) "cMG" = ( -/obj/structure/girder, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/cobweb, /turf/open/floor/plating{ @@ -87036,15 +84346,6 @@ /area/science/mixing/chamber) "cOW" = ( /obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/bridge) @@ -87066,12 +84367,6 @@ /turf/open/floor/plasteel/dark, /area/security/prison) "cPb" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/bridge) @@ -87264,9 +84559,6 @@ icon_state = "wood-broken" }, /area/security/vacantoffice) -"dis" = ( -/turf/closed/wall/r_wall/rust, -/area/bridge) "dlg" = ( /obj/machinery/light, /turf/open/floor/wood, @@ -87333,16 +84625,6 @@ /obj/item/twohanded/required/kirbyplants/dead, /turf/open/floor/wood, /area/security/vacantoffice) -"elZ" = ( -/obj/machinery/status_display/evac, -/turf/closed/wall/rust, -/area/crew_quarters/bar) -"emD" = ( -/turf/closed/wall/rust, -/area/quartermaster/miningoffice) -"erN" = ( -/turf/closed/wall/rust, -/area/hallway/primary/starboard) "esR" = ( /obj/effect/decal/cleanable/cobweb, /turf/open/floor/wood{ @@ -87350,10 +84632,6 @@ }, /area/maintenance/port/fore) "evx" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /turf/open/floor/engine{ initial_gas_mix = "n2=100;TEMP=80"; name = "mainframe floor" @@ -87376,9 +84654,6 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel/showroomfloor, /area/security/prison) -"ezp" = ( -/turf/closed/wall/rust, -/area/hydroponics) "eBN" = ( /obj/structure/window/reinforced{ dir = 8 @@ -87419,9 +84694,6 @@ /obj/machinery/status_display/evac, /turf/closed/wall/rust, /area/security/prison) -"eVT" = ( -/turf/closed/wall/rust, -/area/science/explab) "fcv" = ( /obj/structure/sign/warning/fire{ pixel_x = 32 @@ -87441,9 +84713,6 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/closed/mineral/random/labormineral, /area/space/nearstation) -"fAH" = ( -/turf/closed/wall/r_wall/rust, -/area/security/main) "fXq" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -87535,9 +84804,6 @@ }, /turf/open/floor/wood, /area/security/vacantoffice) -"gMU" = ( -/turf/closed/wall/r_wall/rust, -/area/ai_monitored/turret_protected/ai_upload) "gPA" = ( /turf/open/floor/wood{ icon_state = "wood-broken3" @@ -87549,21 +84815,9 @@ /obj/effect/decal/cleanable/generic, /turf/open/floor/wood, /area/maintenance/port/fore) -"hqv" = ( -/turf/closed/wall/rust, -/area/crew_quarters/kitchen) -"hvb" = ( -/turf/closed/wall/r_wall/rust, -/area/tcommsat/computer) "hxn" = ( /turf/open/space/basic, /area/hallway/secondary/entry) -"hzY" = ( -/turf/closed/wall/rust, -/area/gateway) -"hAb" = ( -/turf/closed/wall/r_wall/rust, -/area/security/courtroom) "hDh" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, /obj/structure/closet/cardboard, @@ -87574,16 +84828,6 @@ /turf/closed/wall/r_wall/rust, /area/security/prison) "ice" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -87595,26 +84839,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"ieA" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/hostile/cat_butcherer, -/turf/open/floor/plating{ - icon_state = "platingdmg3" - }, -/area/maintenance/fore) -"iiA" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine{ - initial_gas_mix = "n2=100;TEMP=80"; - name = "mainframe floor" - }, -/area/tcommsat/server) "ikw" = ( /obj/machinery/camera{ c_tag = "Xenobiology Cell 4"; @@ -87627,13 +84851,6 @@ }, /turf/open/floor/engine, /area/science/xenobiology) -"ivg" = ( -/obj/structure/lattice/catwalk, -/turf/open/space/basic, -/area/space) -"iwR" = ( -/turf/closed/wall/r_wall/rust, -/area/science/server) "iBL" = ( /obj/machinery/camera{ c_tag = "Laser Room Starboard"; @@ -87670,9 +84887,6 @@ }, /turf/open/floor/engine, /area/science/xenobiology) -"iRL" = ( -/turf/closed/wall/rust, -/area/hallway/primary/aft) "iSg" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ @@ -87682,9 +84896,6 @@ /mob/living/simple_animal/hostile/retaliate/ghost, /turf/open/floor/plasteel/dark, /area/maintenance/starboard/fore) -"iYW" = ( -/turf/closed/wall/r_wall/rust, -/area/crew_quarters/heads/captain) "iZo" = ( /turf/closed/wall/r_wall/rust, /area/medical/virology) @@ -87738,9 +84949,6 @@ }, /turf/open/floor/engine, /area/science/xenobiology) -"jxc" = ( -/turf/closed/wall/rust, -/area/hallway/primary/fore) "jAT" = ( /obj/structure/lattice/catwalk, /obj/machinery/light, @@ -87748,21 +84956,6 @@ initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/hallway/secondary/entry) -"jCp" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/engine{ - initial_gas_mix = "n2=100;TEMP=80"; - name = "mainframe floor" - }, -/area/tcommsat/server) -"jDv" = ( -/turf/closed/wall/rust, -/area/quartermaster/storage) "jHJ" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 9 @@ -87906,15 +85099,20 @@ /turf/closed/wall/rust, /area/hallway/secondary/exit/departure_lounge) "ktv" = ( -/obj/machinery/air_sensor{ - pixel_x = -32; - pixel_y = -32 +/obj/machinery/power/compressor{ + comp_id = "incineratorturbine"; + dir = 1; + luminosity = 2 }, /obj/structure/cable{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 5 +/obj/structure/cable, +/obj/machinery/camera{ + c_tag = "Turbine Chamber"; + dir = 4; + name = "turbine camera"; + network = list("turbine") }, /turf/open/floor/engine/vacuum, /area/maintenance/disposal/incinerator) @@ -87934,6 +85132,21 @@ icon_state = "wood-broken7" }, /area/maintenance/port/fore) +"kRh" = ( +/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/effect/turf_decal/bot, +/obj/machinery/nanite_chamber, +/turf/open/floor/plasteel/dark, +/area/science/research) "kSc" = ( /obj/structure/sign/nanotrasen, /turf/closed/wall, @@ -87951,7 +85164,7 @@ /area/maintenance/port/fore) "llm" = ( /obj/structure/sign/poster/ripped, -/turf/closed/wall/rust, +/turf/closed/wall, /area/crew_quarters/fitness/recreation) "lKu" = ( /obj/structure/table/wood, @@ -87961,12 +85174,9 @@ icon_state = "wood-broken4" }, /area/maintenance/port/fore) -"lSJ" = ( -/turf/open/floor/engine/vacuum, -/area/maintenance/disposal/incinerator) "lVk" = ( /obj/machinery/status_display/evac, -/turf/closed/wall/rust, +/turf/closed/wall, /area/security/warden) "mbs" = ( /obj/machinery/atmospherics/pipe/heat_exchanging/simple, @@ -87986,16 +85196,6 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/prison) "mIt" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=SE CPH"; @@ -88038,13 +85238,6 @@ /obj/effect/decal/cleanable/dirt, /turf/closed/mineral/random/labormineral, /area/space/nearstation) -"mPm" = ( -/turf/closed/wall/rust, -/area/security/checkpoint/supply) -"nDw" = ( -/obj/machinery/status_display/evac, -/turf/closed/wall/rust, -/area/crew_quarters/heads/hor) "nJw" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -88057,15 +85250,6 @@ "nNA" = ( /turf/closed/wall/rust, /area/bridge) -"nNV" = ( -/turf/closed/wall/rust, -/area/science/lab) -"nSz" = ( -/turf/closed/wall/rust, -/area/medical/cryo) -"nVt" = ( -/turf/closed/wall/rust, -/area/storage/tech) "nXu" = ( /obj/structure/cable{ icon_state = "4-8" @@ -88134,9 +85318,6 @@ icon_state = "wood-broken4" }, /area/maintenance/port/fore) -"pQf" = ( -/turf/closed/wall/r_wall/rust, -/area/science/xenobiology) "qfZ" = ( /obj/structure/cable{ icon_state = "1-8" @@ -88150,23 +85331,7 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/prison) -"qtv" = ( -/turf/closed/wall/r_wall/rust, -/area/tcommsat/server) -"qtS" = ( -/turf/closed/wall/rust, -/area/medical/genetics/cloning) "qvS" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=W CPH"; dir = 8; @@ -88246,6 +85411,14 @@ initial_gas_mix = "o2=14;n2=23;TEMP=300" }, /area/hallway/secondary/entry) +"sfp" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/effect/turf_decal/tile/neutral{ + dir = 4 + }, +/obj/machinery/nanite_programmer, +/turf/open/floor/plasteel/dark, +/area/science/research) "swG" = ( /obj/item/reagent_containers/food/drinks/drinkingglass{ pixel_x = 4; @@ -88275,35 +85448,12 @@ /obj/structure/sign/warning, /turf/closed/wall/rust, /area/space/nearstation) -"sPG" = ( -/turf/closed/wall/rust, -/area/crew_quarters/heads/hor) -"tgw" = ( -/obj/structure/sign/warning/electricshock, -/turf/closed/wall/r_wall/rust, -/area/security/prison) -"tqw" = ( -/turf/closed/wall/rust, -/area/lawoffice) -"tyb" = ( -/turf/closed/wall/rust, -/area/hallway/primary/central) "tCi" = ( /obj/effect/decal/cleanable/glass, /turf/open/floor/wood{ icon_state = "wood-broken3" }, /area/maintenance/port/fore) -"tEC" = ( -/turf/closed/wall/rust, -/area/crew_quarters/bar) -"tGU" = ( -/obj/structure/sign/warning/securearea, -/turf/closed/wall/rust, -/area/gateway) -"tYn" = ( -/turf/closed/wall/rust, -/area/janitor) "uda" = ( /turf/closed/wall/rust, /area/security/warden) @@ -88335,16 +85485,6 @@ /turf/open/floor/plasteel/dark, /area/hallway/primary/port) "unX" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=E CPH"; dir = 8; @@ -88373,9 +85513,6 @@ "uRM" = ( /turf/open/floor/wood, /area/security/vacantoffice) -"uWo" = ( -/turf/closed/wall/rust, -/area/security/checkpoint/medical) "vle" = ( /obj/structure/festivus, /turf/open/floor/wood, @@ -88389,9 +85526,6 @@ /obj/item/instrument/guitar, /turf/open/floor/plasteel/dark, /area/crew_quarters/bar) -"whw" = ( -/turf/closed/wall/rust, -/area/medical/surgery) "whZ" = ( /obj/effect/turf_decal/tile/green{ dir = 8 @@ -88409,24 +85543,6 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/wood, /area/security/vacantoffice) -"wmX" = ( -/turf/closed/wall/rust, -/area/quartermaster/qm) -"wvq" = ( -/turf/closed/wall/rust, -/area/security/courtroom) -"wCy" = ( -/turf/closed/wall/rust, -/area/hallway/primary/port) -"wDP" = ( -/turf/closed/wall/rust, -/area/crew_quarters/fitness/recreation) -"wQL" = ( -/turf/closed/wall/rust, -/area/security/execution/education) -"xei" = ( -/turf/closed/wall/r_wall/rust, -/area/teleporter) "xqv" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/drinkingglass{ @@ -88436,9 +85552,6 @@ /obj/item/reagent_containers/food/drinks/drinkingglass, /turf/open/floor/wood, /area/maintenance/port/fore) -"xqL" = ( -/turf/closed/wall/rust, -/area/quartermaster/office) "xse" = ( /obj/machinery/cryopod, /obj/effect/decal/cleanable/dirt, @@ -88447,10 +85560,6 @@ }, /turf/open/floor/plasteel/showroomfloor, /area/security/prison) -"xBI" = ( -/obj/machinery/status_display/evac, -/turf/closed/wall/rust, -/area/chapel/office) "xJY" = ( /obj/structure/rack, /obj/item/storage/backpack, @@ -98953,7 +96062,7 @@ bmU ruL ruL ruL -hNk +aav aeu aeu aap @@ -99206,11 +96315,11 @@ cqG cov cpx bLM -hNk +aav mmZ ewj qfZ -hNk +aav aeu aeu aeU @@ -99463,11 +96572,11 @@ cIA coD cqt aeu -hNk +aav xse nXu qPY -hNk +aav aeu aeu aUz @@ -99718,14 +96827,14 @@ cqI cqP afm bVx -hNk -hNk -hNk +aav +aav +aav cxV ydo eBN -tgw -hNk +asO +aav aeu aeu aeu @@ -99975,7 +97084,7 @@ bGl bGV bIi cpv -hNk +aav awn bTz czR @@ -99983,7 +97092,7 @@ cFN cIm cJC aav -hNk +aav aeu aeu aeU @@ -100240,7 +97349,7 @@ bNi bPa caX cJG -hNk +aav aeu aeU aUz @@ -100746,7 +97855,7 @@ ajd cof ajd ajd -hNk +aav btd bVV bMe @@ -100754,7 +97863,7 @@ bNH bTu ciF cIQ -hNk +aav aeu aUz aeU @@ -101003,7 +98112,7 @@ ajd bHc bIo ajd -hNk +aav bLN bMQ bPk @@ -101011,7 +98120,7 @@ bRa bSR bTF bVm -hNk +aav aeu aeu coy @@ -101773,7 +98882,7 @@ ajd ajd ajd ajd -hNk +aav bKv bLX eQS @@ -102031,7 +99140,7 @@ ajd aeu aeu aav -hNk +aav bJB abp abp @@ -102545,7 +99654,7 @@ coA bHj adf aeu -hNk +aav bJF bJN cuS @@ -102802,7 +99911,7 @@ coA bHo aeE agK -hNk +aav bLj bYc cDG @@ -102810,7 +99919,7 @@ aaG aez cIj aeB -wQL +cZm aez aez cko @@ -105381,13 +102490,13 @@ bSW bUd bVO aey -fAH -fAH +aey +aey aey aey byu aey -fAH +aey aey aey clr @@ -105611,7 +102720,7 @@ amA amR amA cFW -wDP +awD bKD bLg bLm @@ -105901,7 +103010,7 @@ ahZ aiL aiL aiL -cDB +bqs ajS bOO bBG @@ -106392,7 +103501,7 @@ bxE byS bGI bMg -wDP +awD bDt bDV bFn @@ -106639,7 +103748,7 @@ csG bid bjx csQ -wDP +awD bKn bLc bMi @@ -106649,7 +103758,7 @@ bLT bEK bGT bMx -wDP +awD afz adZ ajd @@ -106664,7 +103773,7 @@ aej aeY afn aeY -aeY +bqm ahg bXO bYO @@ -106867,7 +103976,7 @@ apF aqP asb aNG -aOa +aOb akd aOC aOm @@ -106896,8 +104005,8 @@ aqu bif bjz csR -wDP -wDP +awD +awD bLo bLp btz @@ -107133,7 +104242,7 @@ abo agk agI agL -abl +afX ahc aPx aPx @@ -107371,7 +104480,7 @@ aeu cwp cwq cyL -aiV +alw cyY adv alw @@ -107628,10 +104737,10 @@ aeu cwp abu cyM -aiW +cyY cyZ czl -alA +cyY czp bgN cwp @@ -107915,8 +105024,8 @@ aQJ aTc aUL aWr -uWo -whw +aQI +aQN bxr aQN aQN @@ -108142,10 +105251,10 @@ cwq cyE ahL cyO -ajh -ajs +cyY +alw akI -alH +cyY czr ans czK @@ -108172,7 +105281,7 @@ aQI aQJ aQf aQJ -uWo +aQI baB bcS bek @@ -108185,7 +105294,7 @@ aUJ aUJ afe brD -bLn +brD bvO bKF bza @@ -108419,8 +105528,8 @@ aCL aPh aGp aNW -aJv -aQk +aJC +agF aSE aQy aWt @@ -108455,7 +105564,7 @@ cBT aef aef lVk -uda +aef aef ani anm @@ -108703,11 +105812,11 @@ btD bvP bxQ bzg -bLu -bLu bIV bIV -csS +bIV +bIV +bIV bFp aah bHz @@ -108932,7 +106041,7 @@ aBq aCP aEo aGt -nSz +aNQ aJB aQo aTO @@ -108955,17 +106064,17 @@ aoV bxV aoV afe -bLu +bIV bFb akv bzZ bKL -bLu +bIV bJQ -bKc +bLu bKk -cBv -bFp +aXE +aYZ aah bHA aaA @@ -108980,7 +106089,7 @@ cqg ajw agV bXT -bYS +bYQ bYm ama aiQ @@ -109188,8 +106297,8 @@ aNH aVH aNO aso -qtS -qtS +aNL +aNL aQd aQC aNn @@ -109220,11 +106329,11 @@ bzh aoL bJU bUa -bKk -csS +aJv +aXE cCa -uda -uda +aef +aef bJC aef aef @@ -109235,7 +106344,7 @@ bWr coN cqh bVW -uda +aef ayi aJr ayi @@ -109477,8 +106586,8 @@ bzi bIV bIV bIV -bLu -cBI +bIV +bIV bFp aah bHC @@ -109735,8 +106844,8 @@ bIV bJS bKd cBW -cBv -bFp +aYR +aYZ aah bHA aff @@ -109990,14 +107099,14 @@ bAL bzh apV bJZ -bKe -cBW -cBy +bUa +bLu +aYR cCb -uda +aef aef lVk -uda +aef uda bXr bNq @@ -110245,11 +107354,11 @@ bGA bJp bAQ bIV -bLu +bIV bIV bKf bIV -csN +bIV bFq aah bHD @@ -110506,7 +107615,7 @@ arf bKb bKg bLu -cBw +bIV bFq aah bHu @@ -110762,8 +107871,8 @@ bzp bIV bJY bKh +aWS bIV -afz ayy agX agX @@ -111017,10 +108126,10 @@ bKC bAy bzu bIV -bLu bIV bIV -bEa +bIV +ajd bFr bBI bHH @@ -111227,7 +108336,7 @@ aeu aWG aWG aWG -bsm +aWG aWG aWG cAN @@ -111260,8 +108369,8 @@ aSg aAc aSg bAN -aPf -aPf +bAN +bAN bAN bAN bAN @@ -111481,7 +108590,7 @@ aaa aeu aeu aeu -bsm +aWG acE cgY cAi @@ -111764,7 +108873,7 @@ aJQ aLn aMN aOD -aiU +bdf aYx aSe aYx @@ -111784,7 +108893,7 @@ boU bfS bss btV -bZH +aEu bxW bzx bKq @@ -111995,7 +109104,7 @@ aeu aeu aeu aeu -bsm +aWG aWG czG cAk @@ -112020,7 +109129,7 @@ aMX aJR aOP aAO -anY +aNy aHq aYM aST @@ -112037,7 +109146,7 @@ bmJ bmJ bqp bri -bmJ +auK bfX bst bvQ @@ -112253,8 +109362,8 @@ aeu aeu aeu aeu -bsm -bsm +aWG +aWG aWG aWG aWG @@ -112265,7 +109374,7 @@ bsZ aWG aWG avY -bsm +aWG beG bwC bxe @@ -112275,7 +109384,7 @@ bwY aGM bxJ ahF -aOS +aPk aBN aOF bdU @@ -112321,7 +109430,7 @@ arq bEo bEF bGX -bBf +bYZ aKC all alX @@ -112522,7 +109631,7 @@ bta btC atL avK -xBI +btg aob azS aAu @@ -112532,7 +109641,7 @@ bwZ bxF bxJ ahF -aOS +aPk aJi aOG btE @@ -112542,7 +109651,7 @@ btE aPK aLU btE -cJc +buC buC aRF aSP @@ -112575,14 +109684,14 @@ ajd bRP bBr cdj -bBf +bYZ bEG -bBf -bBf +bYZ +bYZ bVa -cHC +bUZ cHS -cHC +bUZ aKN cfp baF @@ -112768,7 +109877,7 @@ aeu aeu aeu adH -ajj +alc ajz adQ cAF @@ -112779,7 +109888,7 @@ aWG aWG bvT avL -bsm +aWG btA cBh btA @@ -112789,12 +109898,12 @@ bxu bwP btA bsx -aOS +aPk aaJ -tEC -tEC +btE +btE bvi -bub +aTe buu bvf aTe @@ -112805,14 +109914,14 @@ bvn bfv bvU bvu -cJc +buC blx bnx boY buC bsy aoh -tqw +aoh bCn aoh aoA @@ -112822,8 +109931,8 @@ cbC cbH cbM cbP -aer -aer +ajd +ajd czw bWQ czU @@ -112835,7 +109944,7 @@ cCh cCh cCo bGY -bHv +bYw bVc cbc cch @@ -113048,7 +110157,7 @@ btA ahF aOT cfa -tEC +btE aTB btT buc @@ -113080,7 +110189,7 @@ aYM aYM cbM cbw -aer +ajd ajd ajd czW @@ -113092,7 +110201,7 @@ bBk aaY aaY bGZ -bBf +bYZ bVd bHU aMA @@ -113299,15 +110408,15 @@ azW bwR bye bxi -aEu +aEx bxH bxJ ahF -aOS +aPk cfa btF aqg -btU +aqg buy buJ bvq @@ -113323,7 +110432,7 @@ bjH blB bAS buC -cJc +buC bps aoh aok @@ -113337,7 +110446,7 @@ cbI cbN aYM cbR -cbJ +cbw ajd bKA bBG @@ -113349,7 +110458,7 @@ aci bWc aaY bHk -bBf +bYZ bVd bXV ccj @@ -113846,9 +110955,9 @@ aoS aoX adc aoh -wCy -wCy -wCy +boC +boC +boC bvJ bwc bBj @@ -113863,7 +110972,7 @@ ack bWe bBk bHk -bBf +bYZ cFA axF axF @@ -114056,7 +111165,7 @@ adQ cAr cAy cAC -adQ +adH bsf cCI cBc @@ -114067,14 +111176,14 @@ cBc btA bwK btB -bwU +btB bxD -aAD +btB aEx bxJ aIl ahF -aOS +aPk cfa btF aRM @@ -114105,7 +111214,7 @@ asF asF aos bEd -wvq +asF bGq bOP bIt @@ -114120,7 +111229,7 @@ acl bCd bBk bHk -bBf +bYZ cHk bFa bGf @@ -114317,7 +111426,7 @@ adH anb anU apG -adQ +adH aoc atO awh @@ -114352,7 +111461,7 @@ bpH bsh buC boW -wvq +asF adu bwk byi @@ -114588,7 +111697,7 @@ aEC bxJ aIo ahF -aOS +aPk cfa btE aXm @@ -114602,14 +111711,14 @@ btE btE bey btE -tEC -cJc -cJc +btE +buC +buC buC buC buC bpn -wvq +asF aow arB atc @@ -114634,7 +111743,7 @@ bws aaY aaY bHk -bBf +bYZ cac bFa cnz @@ -114845,7 +111954,7 @@ btA btA ago aaZ -aOS +aPk cfa btH aXp @@ -114853,7 +111962,7 @@ btY bvk bvE bvH -aWS +aTe buA bbk bcW @@ -114866,7 +111975,7 @@ bqr brs bsk btO -wvq +asF asY ask aaV @@ -114891,7 +112000,7 @@ bUz bWg axF bYn -bBf +bYZ cae bVo cck @@ -115090,7 +112199,7 @@ cCM cCR bsf ajv -adQ +adH cDc cCU cDh @@ -115102,7 +112211,7 @@ aaI aGN cDq aJS -aOS +aPk cfa btI aXr @@ -115121,14 +112230,14 @@ aLD bpn asF asF -wvq +asF asF asF asF asu auI atf -auK +byi avW ccR apa @@ -115320,7 +112429,7 @@ aeu ceF ceF ceF -ceG +ceF ceF ceF ceF @@ -115341,10 +112450,10 @@ aeU aUz aeu adH -adQ adH adH -adQ +adH +adH adH cCU cDy @@ -115361,7 +112470,7 @@ ago aBO aNq aRY -elZ +btK btE buf aSh @@ -115395,8 +112504,8 @@ auP bQx bOP bRh -tyb -iRL +bOU +axF cag cbh bRX @@ -115435,7 +112544,6 @@ aFH aFN cwz aaa -acm aaa aaa acm @@ -115495,6 +112603,7 @@ aaa aaa aaa aaa +aaa "} (106,1,1) = {" aaa @@ -115567,20 +112676,20 @@ aeu aeu asZ asZ -aAg asZ asZ -aAg -aAg asZ asZ -ceG +asZ +asZ +asZ +ceF ceF akN aac adr adA -ceG +ceF ceF ceF ceF @@ -115616,7 +112725,7 @@ cdD cdD ago aJT -aOS +aPk aMU aOI btE @@ -115624,8 +112733,8 @@ btE btE aOy btE -tEC -tEC +btE +btE bbr aTe aTe @@ -115693,7 +112802,6 @@ aIL aFI aFW aFI -aFI cko cko aaa @@ -115752,6 +112860,7 @@ aaa aaa aaa aaa +aaa "} (107,1,1) = {" aaa @@ -115821,16 +112930,16 @@ aUz aeu aeu aeu -aAg -asZ -asZ -asZ -aAg asZ asZ asZ asZ -aAg +asZ +asZ +asZ +asZ +asZ +asZ ceF axB acn @@ -115882,7 +112991,7 @@ aPQ aTu bpq aXa -tEC +btE btE aTL aOy @@ -115919,7 +113028,7 @@ bCe bVg bCe bHl -bBf +bYZ cHj bFa bFS @@ -115949,7 +113058,6 @@ aFO cwc aFO cwA -lSJ aFI aFI aFI @@ -116009,6 +113117,7 @@ aaa aaa aaa aaa +aaa "} (108,1,1) = {" aaa @@ -116079,14 +113188,14 @@ aeu aeu asZ asZ -aAg -aAg +asZ +asZ asZ asZ cef asZ asZ -aAg +asZ asZ ceF acJ @@ -116157,7 +113266,7 @@ asF asF arn arn -hAb +arn arn aur arn @@ -116169,14 +113278,14 @@ bOP bJy aCq cbA -bBf +bYZ byv -bBE -bBf -bBf -bBf -bBf -bBf +bcD +bYZ +bYZ +bYZ +bYZ +bYZ cHk bFa bFa @@ -116209,7 +113318,7 @@ aFY ktv aNi aGb -aGc +aaa aaa aaa aaa @@ -116387,14 +113496,14 @@ aEH ceZ aIs aiA -aOS +aPk cgq aXu aox aMi aMc aTz -apX +aox arA akM aox @@ -116463,7 +113572,6 @@ aFU cwd jHJ cwH -cwH aFI aFI aFI @@ -116523,6 +113631,7 @@ aaa aaa aaa aaa +aaa "} (110,1,1) = {" aaa @@ -116591,7 +113700,7 @@ aeu aeu aeu asZ -aAg +asZ asZ aam aaF @@ -116602,7 +113711,7 @@ ceD cel abR atB -adT +chX aHw ace acM @@ -116721,7 +113830,6 @@ aJl aFI aFI aFI -aFI cko cko aaa @@ -116780,6 +113888,7 @@ aaa aaa aaa aaa +aaa "} (111,1,1) = {" aaa @@ -116847,7 +113956,7 @@ aaa aeU ciQ aeu -aAg +asZ asZ aak aan @@ -116863,7 +113972,7 @@ adg ace acp acW -alV +adg adG adR adU @@ -116902,7 +114011,7 @@ ago aIz ajW ajJ -aOS +aPk fXq aIV aox @@ -116920,13 +114029,13 @@ cBV aox atT atT -dis -dis -dis -dis +atT +atT +atT +atT ajK atT -dis +atT atj apN awj @@ -117190,7 +114299,7 @@ asA apf atr auG -arD +ark bsP bQx bOF @@ -117362,7 +114471,7 @@ aeU anH aeu asZ -aAg +asZ aal aaw aaU @@ -117417,7 +114526,7 @@ aIB aba cgw aRk -apY +aNy oPf aLV aHz @@ -117426,8 +114535,8 @@ arl arl byV bzc -gMU -gMU +arl +arl bfJ abk aqb @@ -117436,8 +114545,8 @@ atT aqz aoW bqe -aqQ -aqQ +bsE +bsE avQ byn bzI @@ -117630,7 +114739,7 @@ cdH ceB abZ atB -adT +chX aZh acz ada @@ -117663,15 +114772,15 @@ ciZ ahh ahh ahh -qtv -qtv -qtv -qtv -qtv +ahh +ahh +ahh +ahh +ahh +cfM +cfM cfM cfM -hvb -hvb cfM aRl bVL @@ -117709,7 +114818,7 @@ atG bQx bOF bYW -nVt +bCM bDp bQn bSf @@ -117877,7 +114986,7 @@ aeu aeu aeu asZ -aAg +asZ apn ceE cfJ @@ -117887,10 +114996,10 @@ abC abL aca asZ -alV +adg azv chB -chV +azv adg ciN ciM @@ -117917,7 +115026,7 @@ aoM adH adH ahh -qtv +ahh awo cdn cdJ @@ -117933,7 +115042,7 @@ cfM aRm cci aKP -gMU +arl arl arl byN @@ -117959,7 +115068,7 @@ atj atj bHI atj -nNA +atj atT atT atT @@ -118133,15 +115242,15 @@ aeu aeu aeu aeu -aAg asZ asZ asZ -aAg +asZ +asZ asZ ceo asZ -aAg +asZ asZ asZ cfY @@ -118192,10 +115301,10 @@ cdg aQh bwp ciX -gMU +arl byq aXz -aYZ +aZc bbU bzm bzc @@ -118392,14 +115501,14 @@ aeu aeu aeu asZ -aAg -aAg asZ asZ -aAg asZ asZ -aAg +asZ +asZ +asZ +asZ asZ cfY acj @@ -118408,7 +115517,7 @@ adm adz adN ciB -cga +cfY acm aeo aaa @@ -118650,15 +115759,15 @@ aeu aeu aeu asZ -aAg -aAg asZ asZ -aAg asZ -aAg asZ -cga +asZ +asZ +asZ +asZ +cfY cfY cde chG @@ -118687,7 +115796,7 @@ adH adQ abX cBc -qtv +ahh cew awI cdq @@ -118916,11 +116025,11 @@ aeu aeu aeu cfY -cga cfY cfY cfY -cga +cfY +cfY cfY acm acm @@ -118937,21 +116046,21 @@ aeu adQ cCr cED -ieA +anJ ale alT cEW aoZ cFg agC -qtv +ahh atU -jCp +awJ awJ awJ aAj cff -iiA +awJ cfE cfR cge @@ -118963,7 +116072,7 @@ chm aLg arl arl -gMU +arl bAw aXH aZl @@ -118977,8 +116086,8 @@ awg blT bnI bpe -bqm -bsF +bsE +bsE bur atj aHU @@ -118986,9 +116095,9 @@ auc atj atj aug -nNA -nNA -nNA +atj +atj +atj atT atT bIz @@ -119220,7 +116329,7 @@ atF aLk aLV aLW -gMU +arl arl byM aZn @@ -119234,10 +116343,10 @@ aqh aqk att aqG -bqs +bsE arY auM -arX +bsE byt afT atj @@ -119249,7 +116358,7 @@ arw avF aus bIJ -bOY +aZg bKZ bmP bNZ @@ -119460,7 +116569,7 @@ cFh cFj ahh ahh -awM +evx cdC ceJ aAl @@ -119493,7 +116602,7 @@ atD aqG bqt cOW -cOW +cPb cPb byw ard @@ -119719,13 +116828,13 @@ cAF ahh ahh ahh -qtv ahh -qtv -qtv +ahh +ahh +ahh ahh cfM -hvb +cfM cfM cfM cgz @@ -119983,13 +117092,13 @@ cvM awE aEN aGQ -hzY -jxc +aUa +ago avw aRB aJi aLE -apX +aox aOk aox aox @@ -120252,8 +117361,8 @@ akw aox aox aox -apX -apX +aox +aox aox aox aox @@ -120277,7 +117386,7 @@ bqf cjy aus bIJ -bOY +aZg bLi bmc bmc @@ -120497,7 +117606,7 @@ cvO cvU aEQ aGS -tGU +cvW aJY awr aRX @@ -120530,8 +117639,8 @@ aui aui avb aui -xei -xei +aui +aui aui bCH bQd @@ -120759,10 +117868,10 @@ aKi cIw cKd aox -aox +aGh aRc -bzN -akM +aGh +aGh ajt ajt aZq @@ -120770,7 +117879,7 @@ aZq ajt ajt aQO -apX +aox cCk bka blW @@ -120795,11 +117904,11 @@ bOF bJy aCq cbA -bBf -bBf -bBf +bYZ +bYZ +bYZ bBE -bBf +bYZ bEN ane aBS @@ -120999,7 +118108,7 @@ cIX khA cDT iSg -cEl +cEb cJD atV cEg @@ -121013,13 +118122,13 @@ aES aHv aUa aKl -aPz +ajj aNl aGh -aGh +alV aZf -aGh -aGh +apY +aqQ ajt aBc bmH @@ -121028,10 +118137,10 @@ bcZ ajt bgf aox -apX aox aox -cdY +aox +cdZ cdZ ahy asx @@ -121273,9 +118382,9 @@ aHq aNq aZO aGh -aQm +bqU aRi -aSn +bqU bqU ajt aXV @@ -121291,7 +118400,7 @@ blZ bpq bpg aYO -iYW +asx bwb arz bDc @@ -121313,7 +118422,7 @@ bQy bBn axF bCr -bBf +bYZ cpW bYu aCc @@ -121541,7 +118650,7 @@ bqc bdo bqz bgo -apX +aox bqb cba aIN @@ -121552,10 +118661,10 @@ asx bwd bzA bLe -auT +aGc auT arF -iYW +asx bAb bQR aYO @@ -121812,7 +118921,7 @@ byE bzP arV brU -iYW +asx bAp bQS aox @@ -121827,7 +118936,7 @@ bBR bCl bCA bCr -bBf +bYZ csC bYw aIb @@ -122056,9 +119165,9 @@ bdy ajt ajt blc -hqv -ezp -ezp +ajt +aZd +aZd aZd auj aZd @@ -122066,10 +119175,10 @@ asx asx asx asx -iYW -iYW asx -iYW +asx +asx +asx bMu bRr aox @@ -122310,7 +119419,7 @@ ajt boI ajt bqy -hqv +ajt bgr bhd biJ @@ -122318,9 +119427,9 @@ bjn bmE bns bpk -bnD -bnS -boc +brN +brN +brN bwG bso bpi @@ -122831,11 +119940,11 @@ boV bjn bmG bnK -bny +brN bqH -bny +brN buB -bny +brN bzt bAs bBQ @@ -122855,7 +119964,7 @@ bQC bCx awq bUY -bBf +bYZ cud cyb btG @@ -123088,11 +120197,11 @@ bqP bmF bcX bnN -bny +brN bqH -bny +brN buB -bny +brN bzC boS bCF @@ -123105,7 +120214,7 @@ bZM bhY bIT bQI -bLr +bMt bMt bMt bMt @@ -123345,9 +120454,9 @@ bpb bjn bme bnK -bny +brN bqH -bny +brN buB bwM byG @@ -123355,7 +120464,7 @@ bof bFJ bFX bqQ -ezp +aZd aZd bBU bXv @@ -123602,7 +120711,7 @@ bhd bol bmg bnO -bny +brN bqI bsR buD @@ -123611,8 +120720,8 @@ bAl bAu bFV bGk -ezp -ezp +aZd +aZd bGh bZI bhY @@ -123850,7 +120959,7 @@ bsb brq brF brG -hqv +ajt boQ boH bqo @@ -124107,7 +121216,7 @@ brr aVd brJ brI -hqv +ajt ajt bmA bph @@ -124126,7 +121235,7 @@ bob bRc bZy bZp -bZA +bZD bZD bZJ bZN @@ -124328,14 +121437,14 @@ bfq iMq bbx alB -afX -agF +arx +arx +alB +alB +alB alB alB alB -pQf -pQf -pQf alB alB alB @@ -124585,7 +121694,7 @@ aWJ ayv aWJ alB -cIe +bdp bhl alB bfq @@ -124629,8 +121738,8 @@ bAX bnz bBZ bqS -bGW -bGW +bZD +aAD bqX brz buO @@ -124672,7 +121781,7 @@ clM axW cnk coo -axU +ayn aLH aLx aLz @@ -124837,7 +121946,7 @@ aeu aeu aeu aeu -pQf +alB bfs aWJ bft @@ -125093,8 +122202,8 @@ alB alB alB alB -pQf -pQf +alB +alB bfM bfM bfM @@ -125132,10 +122241,10 @@ bdf bpC bkG bbH -bnM -bpC -bpC -bpW +bBc +bBc +bBc +bBc bgP bBc bBp @@ -125149,7 +122258,7 @@ bqY bvB buR bPx -erN +bnv bjX bkz bOv @@ -125192,7 +122301,7 @@ aLF aag aag aag -aLF +bsm cuA cuW bYI @@ -125356,7 +122465,7 @@ aeV bfl bfV aWR -aWP +adT adx aWR bgC @@ -125382,17 +122491,17 @@ aXP bai aZS aZr -ajL -ajL +cAX +cAX cAX aJJ aRs aSB aTP -aYd -aYK -aYK -aYd +arD +arX +arX +auz bdO beO bpF @@ -125406,14 +122515,14 @@ blf blf blg blf -mPm +blf blQ bAC bBL bkQ bjW bAv -bOC +bEg bGM bHP bJc @@ -125623,7 +122732,7 @@ cqw bgM bgn bVA -pQf +alB ctJ cxP aWY @@ -125633,7 +122742,7 @@ ayx bdc bdR aAZ -eVT +aZv aEE aFp aHJ @@ -125647,12 +122756,12 @@ aYK aZL bch aYd -aZg -aZj +aYK +aYK aYd bhe cLt -xqL +bhI bhX bhs biM @@ -125909,7 +123018,7 @@ aZQ aYd bdP beP -xqL +bhI bhy ats bko @@ -125972,10 +123081,10 @@ ckk aEg cnu cnu -cnd +bOc cnd cnu -cnd +bOc cnu alm aaa @@ -126406,9 +123515,9 @@ bgk aBd aZv aXw -aXE +kRh aXI -aYR +sfp beD bbj aNF @@ -126430,7 +123539,7 @@ aKA bjh bjy bpw -mPm +blf bsV buS bxl @@ -126484,13 +123593,13 @@ cmH cvE cmR cwe -cnd +krJ cwN cqQ csq cnu cuL -cnd +cnu acm aaa aaa @@ -126655,7 +123764,7 @@ alB cOb cps cMW -iwR +aZF aZF ami aZF @@ -126687,7 +123796,7 @@ bkr bmx bod bpx -mPm +blf blg bBo blg @@ -126706,7 +123815,7 @@ bNM bOo cgd bNM -tYn +bNM aVM bNx bWx @@ -126736,7 +123845,7 @@ cms cmE cmQ cju -bOC +bEg cnV cmh bOb @@ -126955,7 +124064,7 @@ bIm bHR bNg bAF -bOC +bEg bQe bLZ bkE @@ -127004,7 +124113,7 @@ cwZ cxi cnu cnu -cnd +cnu alm aaa aaa @@ -127149,7 +124258,7 @@ alB alB alB alB -pQf +alB alB bfQ bfQ @@ -127169,7 +124278,7 @@ alB cby cMP ajO -iwR +aZF aXf aeG aik @@ -127184,8 +124293,8 @@ beE mIG aNM bgW -nNV -nNV +aDI +aDI biB aYg aDI @@ -127255,11 +124364,11 @@ bEg cvG cvL cwm -cnd +bOc cpb crf -cnd -cnd +cnu +cnu cko aeu aeu @@ -127450,7 +124559,7 @@ bbb bdz cby clA -wmX +aCb bjJ blJ biV @@ -127470,7 +124579,7 @@ bCc bOw bAT bOC -erN +bnv bHT bJh bJK @@ -127694,7 +124803,7 @@ aZY aJF aWX aVJ -nDw +anx bbM aNT aPo @@ -127707,7 +124816,7 @@ bbb bdE cbz cLt -wmX +aCb bhO aqH biI @@ -127720,7 +124829,7 @@ bkA bke blr bkY -blC +blD bls bPj bmo @@ -127737,7 +124846,7 @@ bTk bXL bXx bPe -bUt +bWx hDh uRM uRM @@ -127934,7 +125043,7 @@ alB alB alB alB -pQf +alB alB alB cng @@ -127951,7 +125060,7 @@ aGa aKu aMe bfB -sPG +amV bfr bex aTU @@ -127994,9 +125103,9 @@ bOG bQU bUs bTv -krJ -krJ -krJ +bOc +bOc +bOc bOc bWn bWx @@ -128227,7 +125336,7 @@ big big bom aCb -jDv +bhQ bpB bkl bli @@ -128247,7 +125356,7 @@ bQo bJM bPe bMF -bRs +aZj bQV bPe bTw @@ -128273,9 +125382,9 @@ bUN cke aeu bzG -cjC -clg -clP +clR +clR +clR ctU bzG aeu @@ -128530,7 +125639,7 @@ jAT aeu aeu bzG -cjF +clR clE clQ ctW @@ -128787,8 +125896,8 @@ bUN aeu aeu bzG -cjG -clF +clR +clR clR ctX bzG @@ -128997,7 +126106,7 @@ bhH bhW bmN boK -emD +bhH bhH bjV bkh @@ -129020,7 +126129,7 @@ bLE bMN bON bQY -bSQ +bOc bPe bOc bWz @@ -129538,7 +126647,7 @@ cmr aWs crl bXC -bXo +bON bYg bZk bTO @@ -129739,7 +126848,7 @@ cME cMr cLs bkd -ava +bkd bkd bkd azD @@ -130051,7 +127160,7 @@ bRV bNz bSn crl -bRt +bON bXw bWM bPe @@ -130059,7 +127168,7 @@ bZC bPe bOc bSr -bSd +krJ cgg hxn hxn @@ -130274,7 +127383,7 @@ aSM aUn baC aYp -bcD +awi bgi bkd bhH @@ -130308,7 +127417,7 @@ bRZ cmr bRA crl -bXy +bON bXA bXN bTG @@ -130565,7 +127674,7 @@ bSb cmr cGz cro -bRt +bON bXA cFE bTt @@ -131043,7 +128152,7 @@ awi awi baC baC -bcD +awi aYs cdc cna @@ -131554,7 +128663,7 @@ axO cOm cbj aio -auz +cbm aSZ cOo aVt @@ -131603,13 +128712,13 @@ aeu aeu aUz acm -cmJ -ivg -ivg -cmJ -ivg -ivg -cmJ +acm +acK +acK +acm +acK +acK +acm acm aeU aeU @@ -131804,14 +128913,14 @@ bkd aze aAG cbj -cLt +cbk aJn cLg aMq ava bkd bkd -ava +bkd avA avA bkd @@ -132061,7 +129170,7 @@ bkd ava ava bkd -ava +bkd avA crw avA @@ -132322,7 +129431,7 @@ bkd cLK cLK afJ -ava +bkd aeu alm acm @@ -132575,7 +129684,7 @@ aeu aeu aeu aeu -ava +bkd agy cLR agy @@ -132832,7 +129941,7 @@ aeu aeu aeu aeu -beK +bhq aaa aaa aaa diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index e6eddb2777..75af28d174 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -8268,6 +8268,9 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "apf" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -37512,12 +37515,12 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bvb" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 - }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, /turf/open/floor/plasteel/dark/corner, /area/hallway/primary/starboard) "bvc" = ( @@ -37581,10 +37584,10 @@ /turf/open/floor/circuit/green, /area/ai_monitored/turret_protected/ai) "bvg" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/landmark/blobstart, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/starboard) "bvh" = ( @@ -38444,33 +38447,36 @@ dir = 4; pixel_x = -23 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, /area/hallway/primary/starboard) "bxa" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 10 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bxb" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 27 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, /obj/machinery/light{ dir = 4 }, @@ -38498,8 +38504,8 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bxf" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 }, /turf/closed/wall, /area/engine/atmos) @@ -39190,6 +39196,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 4 + }, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, @@ -39198,6 +39207,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark/corner, /area/hallway/primary/starboard) "byR" = ( @@ -39205,21 +39217,19 @@ name = "Station Intercom (General)"; pixel_x = -30 }, -/obj/item/crowbar/red, -/obj/item/wrench, -/obj/item/clothing/mask/gas, /obj/machinery/airalarm{ pixel_y = 23 }, -/obj/structure/table, -/obj/item/storage/box, -/obj/item/storage/box, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/computer/atmos_alert, +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, @@ -39231,10 +39241,13 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/computer/atmos_alert, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/computer/station_alert, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, @@ -39248,10 +39261,13 @@ /obj/machinery/camera{ c_tag = "Atmospherics - Control Room" }, -/obj/machinery/computer/station_alert, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/structure/closet/secure_closet/atmospherics, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, @@ -39265,54 +39281,44 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/structure/closet/secure_closet/atmospherics, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, /area/engine/atmos) "byV" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/obj/machinery/firealarm{ + pixel_y = 24 + }, +/obj/machinery/computer/atmos_control, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/checker, +/area/engine/atmos) +"byW" = ( /obj/structure/sign/plaques/atmos{ pixel_y = 32 }, -/obj/item/phone{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/cigbutt/cigarbutt{ - pixel_x = 5; - pixel_y = -1 - }, -/obj/structure/table, /obj/machinery/light_switch{ pixel_x = 26 }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/computer/atmos_control, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel/checker, /area/engine/atmos) -"byW" = ( -/obj/structure/table, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/clothing/head/welding{ - pixel_x = -5; - pixel_y = 3 - }, -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/obj/machinery/light_switch{ - pixel_x = -26 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/corner{ - dir = 1 - }, -/area/engine/atmos) "byX" = ( /obj/machinery/power/apc/highcap/ten_k{ areastring = "/area/engine/atmos"; @@ -39323,8 +39329,12 @@ /obj/structure/cable/yellow{ icon_state = "0-2" }, -/obj/machinery/camera{ - c_tag = "Atmospherics - Entrance" +/obj/machinery/light_switch{ + pixel_x = -26 + }, +/obj/machinery/pipedispenser/disposal/transit_tube, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -39333,16 +39343,27 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "byZ" = ( -/obj/machinery/space_heater, /obj/machinery/firealarm{ pixel_y = 24 }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/pipedispenser, +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Atmospherics - Entrance"; + dir = 8 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bza" = ( @@ -40077,42 +40098,24 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bAE" = ( +/obj/effect/turf_decal/tile/yellow{ + dir = 4 + }, +/turf/open/floor/plasteel/dark/corner, +/area/engine/atmos) +"bAF" = ( /obj/structure/chair/office/dark{ dir = 4 }, /obj/effect/landmark/start/atmospheric_technician, /turf/open/floor/plasteel, /area/engine/atmos) -"bAF" = ( -/obj/machinery/computer/atmos_control{ - dir = 8 - }, -/obj/machinery/requests_console{ - department = "Atmospherics"; - departmentType = 4; - name = "Atmos RC"; - pixel_x = 30 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/plasteel/dark/corner, -/area/engine/atmos) "bAG" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/structure/table, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/metal/fifty, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/item/grenade/chem_grenade/smart_metal_foam, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/corner{ - dir = 1 +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Monitoring"; + req_access_txt = "24" }, +/turf/open/floor/plasteel, /area/engine/atmos) "bAH" = ( /obj/structure/cable/yellow{ @@ -40131,10 +40134,11 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bAJ" = ( -/obj/machinery/space_heater, /obj/effect/turf_decal/stripes/line{ dir = 8 }, +/obj/machinery/pipedispenser/disposal, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/engine/atmos) "bAK" = ( @@ -40172,9 +40176,7 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bAQ" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold4w/cyan/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bAR" = ( @@ -40841,12 +40843,12 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bCj" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, /obj/structure/cable/yellow{ icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bCk" = ( @@ -40856,39 +40858,50 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bCl" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/computer/atmos_control{ +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ dir = 8 }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/turf/open/floor/plasteel/dark/corner, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/machinery/button/door{ + id = "atmos"; + name = "Atmospherics Lockdown"; + pixel_x = 26; + pixel_y = -26; + req_access_txt = "24" + }, +/turf/open/floor/plasteel, /area/engine/atmos) "bCm" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/engine/atmos) -"bCn" = ( -/obj/structure/table, -/obj/item/storage/belt/utility, -/obj/item/t_scanner, -/obj/item/t_scanner, -/obj/item/t_scanner, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/effect/turf_decal/tile/yellow{ - dir = 8 + dir = 4 }, -/turf/open/floor/plasteel/dark/corner{ - dir = 1 +/obj/machinery/requests_console{ + department = "Atmospherics"; + departmentType = 4; + name = "Atmos RC"; + pixel_x = 30 }, +/obj/machinery/vending/wardrobe/atmos_wardrobe, +/turf/open/floor/plasteel/dark/corner, +/area/engine/atmos) +"bCn" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/suit_storage_unit/atmos, +/turf/open/floor/plasteel, /area/engine/atmos) "bCo" = ( /obj/structure/cable/yellow{ @@ -40897,25 +40910,27 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/closed/wall, /area/engine/atmos) "bCp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Monitoring"; + req_access_txt = "24" + }, /turf/open/floor/plasteel, /area/engine/atmos) "bCq" = ( -/obj/machinery/space_heater, -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, /obj/effect/turf_decal/stripes/line{ dir = 10 }, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall, /area/engine/atmos) "bCr" = ( /obj/machinery/atmospherics/components/binary/pump/on{ @@ -40965,7 +40980,8 @@ /area/engine/atmos) "bCy" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/purple/visible{ +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/layer_manifold{ dir = 4 }, /turf/open/floor/plating, @@ -41608,35 +41624,22 @@ /area/engine/atmos) "bDP" = ( /obj/machinery/holopad, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable/yellow{ icon_state = "1-4" }, /turf/open/floor/plasteel, /area/engine/atmos) "bDQ" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/open/floor/plasteel/dark/corner, -/area/engine/atmos) -"bDR" = ( -/obj/machinery/door/airlock/atmos/glass{ - name = "Atmospherics Monitoring"; - req_access_txt = "24" - }, -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/turf/open/floor/plasteel, +/turf/closed/wall/r_wall, /area/engine/atmos) "bDS" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, @@ -41658,6 +41661,9 @@ "bDV" = ( /obj/structure/closet/crate, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/camera{ + c_tag = "Atmospherics - Entrance" + }, /turf/open/floor/plasteel, /area/engine/atmos) "bDW" = ( @@ -42622,6 +42628,9 @@ name = "Atmospherics Blast Door" }, /obj/effect/turf_decal/delivery, +/obj/machinery/door/window/westleft{ + req_access_txt = "24" + }, /turf/open/floor/plasteel, /area/engine/atmos) "bFG" = ( @@ -42640,51 +42649,17 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bFI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall, /area/engine/atmos) "bFJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/plasteel/dark/corner, -/area/engine/atmos) -"bFK" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/button/door{ - id = "atmos"; - name = "Atmospherics Lockdown"; - pixel_x = 26; - pixel_y = -26; - req_access_txt = "24" - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/corner, -/area/engine/atmos) -"bFL" = ( -/obj/machinery/holopad, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/corner{ +/obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, +/turf/open/floor/plasteel/dark/corner, /area/engine/atmos) "bFM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ @@ -42717,6 +42692,7 @@ name = "Distribution Loop"; req_access_txt = "24" }, +/obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bFQ" = ( @@ -42777,6 +42753,7 @@ /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plating, /area/engine/atmos) "bFY" = ( @@ -43320,52 +43297,33 @@ /turf/open/floor/plasteel/dark/corner, /area/hallway/primary/starboard) "bHp" = ( -/obj/machinery/portable_atmospherics/canister/air, /obj/machinery/light/small{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/atmos) "bHq" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/atmos) "bHr" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/structure/cable/yellow{ + icon_state = "1-2" }, -/obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/manifold/orange/hidden, /turf/open/floor/plasteel, -/area/engine/atmos) +/area/hallway/primary/starboard) "bHs" = ( -/obj/machinery/portable_atmospherics/canister/nitrous_oxide, -/obj/machinery/light/small{ +/obj/machinery/atmospherics/pipe/simple/orange/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bHt" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/corner{ - dir = 1 - }, +/turf/closed/wall/r_wall, /area/engine/atmos) "bHu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, @@ -43418,8 +43376,8 @@ /area/engine/atmos) "bHB" = ( /obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 9 }, /turf/open/floor/plating, /area/engine/atmos) @@ -43991,13 +43949,13 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bIH" = ( @@ -44034,8 +43992,10 @@ /area/engine/atmos) "bIK" = ( /obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/turf_decal/bot, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bIL" = ( @@ -44046,53 +44006,27 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/engine/atmos) -"bIM" = ( +"bIN" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, -/turf/closed/wall/r_wall, +/obj/machinery/suit_storage_unit/atmos, +/turf/open/floor/plasteel, /area/engine/atmos) -"bIN" = ( -/obj/structure/table, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/rods/fifty, -/obj/item/stack/rods/fifty, +"bIO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/turf/open/floor/plasteel{ - dir = 1 - }, -/area/engine/atmos) -"bIO" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 8; - name = "Air to External Air Ports" - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/corner{ - dir = 1 - }, +/turf/closed/wall/r_wall, /area/engine/atmos) "bIP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bIQ" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 1 +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 8; + name = "Air to External Air Ports" }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -44100,13 +44034,16 @@ /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, /turf/open/floor/plasteel, /area/engine/atmos) "bIS" = ( /obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, +/obj/item/beacon, /turf/open/floor/plasteel, /area/engine/atmos) "bIT" = ( @@ -44155,20 +44092,12 @@ /turf/open/floor/plasteel/cafeteria, /area/engine/atmos) "bIZ" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/machinery/atmospherics/components/binary/pump{ dir = 8; name = "N2O to Pure" }, /turf/open/floor/plasteel/dark, /area/engine/atmos) -"bJa" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/plating, -/area/engine/atmos) "bJb" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/yellow/visible{ @@ -44846,7 +44775,6 @@ /area/storage/tcom) "bKt" = ( /obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock/engineering{ name = "Telecomms Storage"; req_access_txt = "61" @@ -44858,69 +44786,43 @@ /turf/open/floor/plasteel, /area/storage/tcom) "bKu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, +/obj/effect/turf_decal/bot, /turf/closed/wall/r_wall, /area/engine/atmos) -"bKv" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "External Waste Ports to Filter" - }, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/corner{ - dir = 1 - }, -/area/engine/atmos) "bKw" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ - dir = 4 - }, /obj/structure/cable/yellow{ icon_state = "1-2" }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bKx" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bKy" = ( -/obj/item/beacon, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 4 }, -/turf/open/floor/plasteel, +/turf/closed/wall/r_wall, /area/engine/atmos) "bKz" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/orange/visible{ + dir = 10 }, -/turf/open/floor/plasteel, +/turf/closed/wall, /area/engine/atmos) "bKA" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "Air to Ports" - }, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/closed/wall, /area/engine/atmos) "bKB" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "Mix to Ports" +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 10 }, -/turf/open/floor/plasteel, +/turf/closed/wall/r_wall, /area/engine/atmos) "bKC" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "Pure to Ports" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/engine/atmos) "bKD" = ( @@ -44935,17 +44837,21 @@ /obj/machinery/computer/atmos_control/tank/nitrous_tank{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/green/visible, /obj/structure/window/reinforced{ dir = 4 }, /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 5 + }, /turf/open/floor/plasteel/white/corner, /area/engine/atmos) "bKG" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 10 + }, /turf/open/floor/plasteel/dark, /area/engine/atmos) "bKH" = ( @@ -45556,6 +45462,9 @@ /area/crew_quarters/theatre) "bLS" = ( /obj/machinery/vending/autodrobe, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, /turf/open/floor/wood, /area/crew_quarters/theatre) "bLT" = ( @@ -45573,14 +45482,19 @@ c_tag = "Telecomms - Storage"; dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/storage/tcom) "bLV" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/holopad, /obj/structure/cable/yellow{ icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, /turf/open/floor/plasteel/dark, /area/storage/tcom) "bLW" = ( @@ -45608,9 +45522,6 @@ /turf/open/floor/plating, /area/maintenance/starboard) "bMa" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, /obj/machinery/portable_atmospherics/pump, /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -45621,82 +45532,62 @@ /turf/open/floor/plasteel/cafeteria, /area/engine/atmos) "bMb" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 1 - }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 0; + name = "External to Filter" + }, /turf/open/floor/plasteel/white/corner{ dir = 1 }, /area/engine/atmos) -"bMc" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "bMd" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 9 +/obj/structure/cable/yellow{ + icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/engine/atmos) "bMe" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = -26 - }, -/obj/machinery/camera{ - c_tag = "Atmospherics - Central"; - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/orange/visible, +/turf/open/floor/plating, /area/engine/atmos) "bMf" = ( -/obj/structure/rack, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/suit/hazardvest, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/gloves/color/black, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1; + name = "Mix to External" + }, /turf/open/floor/plasteel, /area/engine/atmos) "bMg" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 }, -/turf/open/floor/plasteel, +/turf/closed/wall/r_wall, /area/engine/atmos) "bMh" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/obj/machinery/meter, -/turf/open/floor/plasteel, -/area/engine/atmos) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall, +/area/crew_quarters/theatre) "bMi" = ( -/obj/machinery/atmospherics/pipe/manifold4w/general/visible, -/turf/open/floor/plasteel, -/area/engine/atmos) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/closed/wall/r_wall, +/area/storage/tcom) "bMj" = ( /obj/machinery/holopad, /turf/open/floor/plasteel, /area/engine/atmos) "bMk" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o{ - dir = 1 - }, /obj/structure/window/reinforced{ dir = 4 }, @@ -45707,13 +45598,16 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 10 + }, +/obj/machinery/portable_atmospherics/canister, /turf/open/floor/plasteel/white/corner, /area/engine/atmos) "bMl" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos) "bMm" = ( @@ -46538,57 +46432,41 @@ /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/plating, /area/maintenance/starboard) -"bNP" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 9 +"bNQ" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible, +/turf/open/floor/plasteel, +/area/engine/atmos) +"bNR" = ( +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/engine/atmos) +"bNS" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ + dir = 8 + }, /turf/open/floor/plasteel/white/corner{ dir = 1 }, /area/engine/atmos) -"bNQ" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bNR" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, -/area/engine/atmos) -"bNS" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/obj/machinery/atmospherics/components/binary/pump{ - name = "Port Mix to West Ports" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "bNU" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "Port Mix to East Ports" - }, -/obj/item/crowbar, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/turf/open/floor/plasteel/dark, /area/engine/atmos) "bNV" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/door/window/northleft{ dir = 8; name = "Inner Pipe Access"; req_access_txt = "24" }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos) "bNW" = ( @@ -47227,9 +47105,6 @@ /turf/open/floor/plating, /area/maintenance/starboard) "bPo" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, /obj/machinery/portable_atmospherics/scrubber, /obj/effect/turf_decal/tile/red{ dir = 1 @@ -47244,12 +47119,7 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bPp" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel/white/corner{ dir = 1 }, @@ -47258,57 +47128,41 @@ /obj/structure/cable/yellow{ icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ - dir = 4 - }, /turf/open/floor/plasteel, /area/engine/atmos) "bPr" = ( -/obj/structure/closet/secure_closet/atmospherics, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma{ + dir = 1 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/engine/atmos) "bPs" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 }, -/obj/machinery/portable_atmospherics/canister, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/turf/open/floor/plasteel{ - dir = 1 - }, -/area/engine/atmos) +/turf/closed/wall, +/area/maintenance/starboard) "bPt" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 +/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{ + dir = 1 }, -/obj/machinery/meter, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/engine/atmos) "bPu" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 8 - }, -/obj/machinery/portable_atmospherics/canister, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/turf/open/floor/plasteel{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/turf/closed/wall/r_wall, /area/engine/atmos) "bPv" = ( -/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ - dir = 8 +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1; + name = "O2 to Airmix" }, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, /area/engine/atmos) "bPw" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, /obj/structure/window/reinforced{ dir = 4 }, @@ -47326,8 +47180,8 @@ /obj/effect/turf_decal/tile/purple{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 8 }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -47921,33 +47775,40 @@ /turf/open/floor/plating, /area/maintenance/starboard) "bQS" = ( -/obj/machinery/suit_storage_unit/atmos, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/engine/atmos) "bQT" = ( -/obj/structure/sign/warning/nosmoking, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 5 + }, +/turf/closed/wall/r_wall, /area/engine/atmos) "bQU" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos, -/turf/open/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, +/turf/closed/wall/r_wall, /area/engine/atmos) "bQV" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 8 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 4 }, -/obj/machinery/meter, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/engine/atmos) "bQW" = ( /obj/machinery/computer/atmos_control/tank/toxin_tank{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/green/visible, /obj/structure/window/reinforced{ dir = 4 }, @@ -47961,6 +47822,7 @@ /obj/effect/turf_decal/tile/purple{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel, /area/engine/atmos) "bQX" = ( @@ -48571,38 +48433,24 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, /area/engine/atmos) "bSh" = ( -/obj/machinery/atmospherics/components/unary/portables_connector/visible{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister, -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -23 - }, -/obj/effect/turf_decal/bot{ - dir = 1 - }, -/turf/open/floor/plasteel{ - dir = 1 +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 9 }, +/turf/open/floor/plating, /area/engine/atmos) "bSi" = ( -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, -/obj/machinery/meter, -/obj/item/wrench, -/turf/open/floor/plasteel, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/layer_manifold, +/turf/open/floor/plating, /area/engine/atmos) "bSj" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma{ - dir = 1 - }, /obj/structure/window/reinforced{ dir = 4 }, @@ -48617,6 +48465,8 @@ /obj/effect/turf_decal/tile/purple{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/space_heater, /turf/open/floor/plasteel, /area/engine/atmos) "bSk" = ( @@ -48634,15 +48484,15 @@ /area/engine/atmos) "bSn" = ( /obj/effect/turf_decal/stripes/line, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, /obj/structure/cable/yellow{ icon_state = "1-2" }, /obj/structure/cable/yellow{ icon_state = "1-4" }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, /turf/open/floor/plating, /area/maintenance/port) "bSo" = ( @@ -49026,6 +48876,9 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/starboard) "bTe" = ( @@ -49059,41 +48912,18 @@ /obj/machinery/vending/wardrobe/atmos_wardrobe, /turf/open/floor/plasteel/dark, /area/engine/atmos) -"bTj" = ( -/obj/machinery/requests_console{ - department = "Atmospherics"; - departmentType = 4; - name = "Atmos RC"; - pixel_x = 30 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/obj/machinery/shower{ - dir = 8; - name = "emergency shower" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "bTk" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "Port to Filter" - }, -/obj/machinery/light/small{ +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 8 }, -/obj/machinery/camera{ - c_tag = "Atmospherics - Starboard"; - dir = 4 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/engine/atmos) "bTl" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 }, -/turf/open/floor/plasteel, +/turf/closed/wall/r_wall, /area/engine/atmos) "bTm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -49720,61 +49550,19 @@ /turf/open/floor/plasteel/dark, /area/engine/atmos) "bUA" = ( -/obj/machinery/pipedispenser, -/obj/effect/turf_decal/stripes/line{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 9 }, -/turf/open/floor/plasteel, +/turf/closed/wall/r_wall, /area/engine/atmos) "bUB" = ( -/obj/machinery/light{ +/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{ dir = 1 }, -/obj/machinery/light_switch{ - pixel_y = 28 - }, -/obj/machinery/pipedispenser/disposal, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bUC" = ( -/obj/item/radio/intercom{ - name = "Station Intercom (General)"; - pixel_y = 28 - }, -/obj/machinery/pipedispenser/disposal/transit_tube, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bUD" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Port to Filter" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bUE" = ( -/obj/item/cigbutt, -/obj/machinery/atmospherics/pipe/manifold/general/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bUF" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/heater/on{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bUG" = ( -/obj/machinery/atmospherics/pipe/manifold4w/yellow/visible, -/turf/open/floor/plasteel, +/obj/structure/lattice/catwalk, +/turf/open/space, /area/engine/atmos) "bUH" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, /obj/structure/window/reinforced{ dir = 4 }, @@ -49792,8 +49580,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ + dir = 8 }, /turf/open/floor/plasteel/dark, /area/engine/atmos) @@ -50227,7 +50015,6 @@ /turf/closed/wall, /area/hallway/secondary/service) "bVA" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock{ name = "Service Hall"; req_access_txt = "null"; @@ -50290,17 +50077,20 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 + }, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, /area/engine/atmos) "bVG" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ - dir = 1 - }, /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 4 + }, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, @@ -50318,38 +50108,15 @@ }, /area/engine/atmos) "bVI" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, /area/engine/atmos) -"bVJ" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible, -/obj/machinery/meter, -/obj/structure/cable/yellow{ - icon_state = "1-2" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bVK" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bVL" = ( -/obj/machinery/atmospherics/components/binary/pump{ - name = "Port to Fuel Pipe" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "bVM" = ( /obj/machinery/computer/atmos_control/tank/carbon_tank{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/green/visible, /obj/structure/window/reinforced{ dir = 4 }, @@ -50363,6 +50130,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos) "bVN" = ( @@ -51030,6 +50798,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/starboard) "bXe" = ( @@ -51076,9 +50845,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 5 - }, /turf/open/floor/plasteel, /area/engine/atmos) "bXh" = ( @@ -51088,76 +50854,15 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Fuel Pipe to Filter" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bXi" = ( -/obj/structure/cable/yellow{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/dark/visible{ - dir = 1 - }, /turf/open/floor/plasteel, /area/engine/atmos) "bXj" = ( /obj/structure/cable/yellow{ icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bXk" = ( -/obj/effect/landmark/start/atmospheric_technician, -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bXl" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bXm" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bXn" = ( -/obj/machinery/atmospherics/pipe/manifold/dark/visible, -/obj/machinery/meter{ - color = "" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bXo" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 8; - name = "Pure to Fuel Pipe" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bXp" = ( -/obj/machinery/atmospherics/pipe/manifold/yellow/visible{ - dir = 4 - }, /turf/open/floor/plasteel, /area/engine/atmos) "bXq" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/co2{ - dir = 1 - }, /obj/structure/window/reinforced{ dir = 4 }, @@ -51172,6 +50877,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/space_heater, /turf/open/floor/plasteel/dark, /area/engine/atmos) "bXr" = ( @@ -51626,8 +51333,8 @@ /turf/open/floor/plating, /area/maintenance/starboard) "bYt" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 }, /turf/open/floor/plating, /area/maintenance/starboard) @@ -51638,6 +51345,9 @@ icon_state = "1-2" }, /obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/starboard) "bYv" = ( @@ -51664,36 +51374,11 @@ /obj/machinery/atmospherics/pipe/simple/dark/visible, /turf/open/floor/plasteel, /area/engine/atmos) -"bYx" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bYy" = ( -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 4; - name = "N2 to Airmix" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bYz" = ( -/obj/machinery/atmospherics/components/trinary/mixer/airmix{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"bYA" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "bYB" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/machinery/light{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos) "bYC" = ( @@ -52199,9 +51884,6 @@ /turf/closed/wall, /area/maintenance/disposal/incinerator) "bZF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 5 - }, /obj/item/radio/intercom{ name = "Station Intercom (General)"; pixel_x = -30 @@ -52209,20 +51891,14 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /turf/open/floor/plasteel/dark/corner{ dir = 1 }, /area/engine/atmos) -"bZG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "bZH" = ( -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "N2 to Pure" +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 6 }, /turf/open/floor/plasteel, /area/engine/atmos) @@ -52232,13 +51908,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"bZJ" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/machinery/atmospherics/pipe/simple/yellow/visible{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "bZK" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ dir = 1 @@ -52247,7 +51916,7 @@ /area/engine/atmos) "bZL" = ( /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ - dir = 4 + dir = 1 }, /obj/machinery/meter, /turf/open/floor/plasteel, @@ -52257,7 +51926,6 @@ dir = 4 }, /obj/structure/table, -/obj/machinery/atmospherics/pipe/simple/green/visible, /obj/item/paper_bin{ pixel_x = -2; pixel_y = 8 @@ -52269,6 +51937,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible{ + dir = 9 + }, /turf/open/floor/plasteel/dark/corner, /area/engine/atmos) "bZN" = ( @@ -53039,6 +52710,9 @@ name = "Inner Pipe Access"; req_access_txt = "24" }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ + dir = 8 + }, /turf/open/floor/plasteel/dark, /area/engine/atmos) "cbc" = ( @@ -53048,15 +52722,12 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/visible{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 10 }, /turf/open/floor/plasteel/dark, /area/engine/atmos) "cbd" = ( -/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{ - dir = 4 - }, /obj/structure/window/reinforced, /obj/effect/turf_decal/tile/red{ dir = 1 @@ -53068,6 +52739,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/reagent_dispensers/watertank/high, /turf/open/floor/plasteel, /area/engine/atmos) "cbe" = ( @@ -53075,9 +52747,6 @@ /obj/machinery/computer/atmos_control/tank/nitrogen_tank{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/dark/visible, /obj/effect/turf_decal/tile/red{ dir = 1 @@ -53093,13 +52762,6 @@ /area/engine/atmos) "cbf" = ( /obj/structure/window/reinforced, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "Nitrogen Outlet" - }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/effect/turf_decal/tile/red{ dir = 1 }, @@ -53110,6 +52772,10 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 6 + }, +/obj/machinery/portable_atmospherics/canister, /turf/open/floor/plasteel, /area/engine/atmos) "cbg" = ( @@ -53123,16 +52789,14 @@ name = "Inner Pipe Access"; req_access_txt = "24" }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, /turf/open/floor/plasteel/dark, /area/engine/atmos) "cbh" = ( /obj/structure/window/reinforced, -/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -53143,6 +52807,10 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, +/obj/structure/reagent_dispensers/fueltank, /turf/open/floor/plasteel, /area/engine/atmos) "cbi" = ( @@ -53150,9 +52818,6 @@ /obj/machinery/computer/atmos_control/tank/oxygen_tank{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -53163,17 +52828,13 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cbj" = ( /obj/structure/window/reinforced, -/obj/machinery/atmospherics/components/binary/pump/on{ - dir = 1; - name = "O2 to Airmix" - }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -53184,6 +52845,9 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/components/trinary/mixer/airmix{ + dir = 4 + }, /turf/open/floor/plasteel, /area/engine/atmos) "cbk" = ( @@ -53197,41 +52861,35 @@ name = "Inner Pipe Access"; req_access_txt = "24" }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ +/obj/machinery/atmospherics/pipe/simple/yellow/visible, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos) "cbl" = ( /obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/cyan/visible, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 4 }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible{ + dir = 10 + }, +/obj/machinery/portable_atmospherics/canister, /turf/open/floor/plasteel/cafeteria, /area/engine/atmos) "cbn" = ( /obj/structure/window/reinforced, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 1; - name = "Air to Pure" - }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 4 }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel/cafeteria, /area/engine/atmos) "cbo" = ( @@ -53239,15 +52897,21 @@ dir = 4 }, /obj/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 9 - }, /obj/effect/turf_decal/tile/blue{ dir = 4 }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/structure/rack, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/suit/hazardvest, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, /turf/open/floor/plasteel/cafeteria, /area/engine/atmos) "cbp" = ( @@ -54005,64 +53669,81 @@ /area/maintenance/disposal/incinerator) "ccL" = ( /obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 + dir = 10 }, /turf/closed/wall/r_wall, /area/engine/atmos) "ccM" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 +/obj/machinery/atmospherics/components/binary/valve/digital{ + name = "Waste Release" }, /turf/open/floor/plasteel/dark, /area/engine/atmos) "ccN" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/obj/machinery/atmospherics/pipe/simple/dark/visible{ +/obj/machinery/atmospherics/components/trinary/filter/atmos/n2{ dir = 4 }, /turf/open/floor/plasteel/dark, /area/engine/atmos) "ccO" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 9 +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + name = "Mix to Fuel Pipe" }, /turf/open/floor/plasteel/dark, /area/engine/atmos) "ccP" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/turf/open/floor/plasteel/dark, -/area/engine/atmos) -"ccQ" = ( -/turf/open/floor/plasteel/dark, -/area/engine/atmos) -"ccR" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, -/turf/open/floor/plasteel/dark, -/area/engine/atmos) -"ccS" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/dark, -/area/engine/atmos) -"ccT" = ( -/obj/machinery/atmospherics/pipe/manifold/cyan/visible{ - dir = 8 +/obj/machinery/atmospherics/components/binary/pump/on{ + dir = 1; + name = "Nitrogen Outlet" }, -/turf/open/floor/plasteel/dark, -/area/engine/atmos) -"ccU" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ +/obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 4 }, /turf/open/floor/plasteel/dark, /area/engine/atmos) -"ccV" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible{ - dir = 9 +"ccQ" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "N2 to Pure" + }, +/turf/open/floor/plasteel/dark, +/area/engine/atmos) +"ccR" = ( +/obj/machinery/atmospherics/components/trinary/filter/atmos/o2{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/engine/atmos) +"ccS" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, +/area/engine/atmos) +"ccT" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 1; + name = "Air to Pure" + }, +/turf/open/floor/plasteel/dark, +/area/engine/atmos) +"ccV" = ( /obj/machinery/camera{ c_tag = "Atmospherics - Starboard Aft"; dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 9 + }, /turf/open/floor/plasteel/dark, /area/engine/atmos) "ccW" = ( @@ -54072,6 +53753,7 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plating, /area/engine/atmos) "ccX" = ( @@ -55339,11 +55021,6 @@ /obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/space, /area/space/nearstation) -"cfv" = ( -/obj/structure/lattice, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/turf/open/space, -/area/space/nearstation) "cfw" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/manifold/yellow/visible{ @@ -76309,11 +75986,8 @@ /turf/open/floor/plasteel/white, /area/science/xenobiology) "cUR" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 - }, -/obj/machinery/atmospherics/components/binary/valve/digital{ - name = "Waste Release" +/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{ + dir = 5 }, /turf/open/floor/plasteel/dark, /area/engine/atmos) @@ -76424,16 +76098,11 @@ /turf/open/space/basic, /area/space) "cVy" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/visible, /obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/engine/atmos) -"cVz" = ( -/obj/machinery/atmospherics/components/unary/outlet_injector/atmos/atmos_waste{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/dark/visible{ + dir = 4 }, -/obj/structure/lattice/catwalk, -/turf/open/space, +/turf/open/floor/plating, /area/engine/atmos) "cVC" = ( /mob/living/simple_animal/sloth/citrus, @@ -76449,9 +76118,6 @@ /obj/machinery/computer/atmos_control/tank/air_tank{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/green/visible{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 4 }, @@ -79116,43 +78782,24 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible, /turf/open/space, /area/space/nearstation) -"dhe" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"dhg" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/engine/atmos) -"dhh" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/obj/machinery/atmospherics/components/binary/pump{ - dir = 4; - name = "Mix to Engine" - }, -/turf/open/floor/plasteel, -/area/engine/atmos) "dhi" = ( -/obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/door/window/northleft{ dir = 8; name = "Inner Pipe Access"; req_access_txt = "24" }, -/obj/machinery/atmospherics/pipe/simple/orange/visible{ - dir = 4 +/obj/machinery/atmospherics/components/binary/pump{ + dir = 4; + name = "Mix to Engine" }, +/obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos) "dhj" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos) "dhk" = ( @@ -79160,6 +78807,7 @@ /obj/machinery/atmospherics/pipe/simple/orange/visible{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/cyan/visible, /turf/open/floor/plating, /area/engine/atmos) "dhl" = ( @@ -79737,12 +79385,12 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, /obj/structure/sign/poster/contraband/clown{ pixel_x = 32 }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/wood, /area/crew_quarters/theatre) "din" = ( @@ -80972,15 +80620,14 @@ /turf/open/floor/plating, /area/engine/atmos) "dBM" = ( +/obj/machinery/door/airlock/atmos/glass{ + name = "Atmospherics Monitoring"; + req_access_txt = "24" + }, /obj/structure/cable/yellow{ icon_state = "4-8" }, -/obj/effect/turf_decal/tile/yellow{ - dir = 8 - }, -/turf/open/floor/plasteel/dark/corner{ - dir = 1 - }, +/turf/open/floor/plasteel, /area/engine/atmos) "dBN" = ( /obj/effect/spawner/structure/window/reinforced, @@ -81429,13 +81076,6 @@ }, /turf/open/floor/plasteel, /area/hydroponics) -"dDm" = ( -/obj/machinery/atmospherics/pipe/simple/dark/visible{ - dir = 4 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel, -/area/engine/atmos) "dDo" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/white, @@ -81663,6 +81303,12 @@ }, /turf/open/floor/plating, /area/maintenance/starboard) +"dOR" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/closed/wall, +/area/maintenance/starboard) "dYu" = ( /obj/machinery/door/airlock/external{ name = "Auxiliary Airlock" @@ -81737,10 +81383,10 @@ /turf/open/floor/plating, /area/crew_quarters/cryopod) "eJq" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, +/obj/machinery/atmospherics/pipe/simple/green/visible, /obj/machinery/atmospherics/components/binary/pump{ dir = 8; - name = "CO2 to Pure" + name = "CO2 Outlet Pump" }, /turf/open/floor/plasteel/dark, /area/engine/atmos) @@ -81998,6 +81644,14 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"jsc" = ( +/obj/machinery/atmospherics/pipe/simple/green/visible, +/obj/machinery/camera{ + c_tag = "Atmospherics - Aft"; + dir = 8 + }, +/turf/open/floor/plasteel/dark, +/area/engine/atmos) "jwW" = ( /turf/closed/wall/mineral/plastitanium, /area/crew_quarters/fitness/recreation) @@ -82136,6 +81790,9 @@ dir = 1; name = "O2 to Pure" }, +/obj/machinery/atmospherics/pipe/simple/green/visible{ + dir = 4 + }, /turf/open/floor/plasteel/dark, /area/engine/atmos) "kOt" = ( @@ -82362,11 +82019,11 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "njd" = ( -/obj/machinery/atmospherics/pipe/simple/cyan/visible, /obj/machinery/atmospherics/components/binary/pump{ dir = 8; name = "Plasma to Pure" }, +/obj/machinery/atmospherics/pipe/simple/green/visible, /turf/open/floor/plasteel/dark, /area/engine/atmos) "nnK" = ( @@ -82419,6 +82076,15 @@ }, /turf/open/floor/plasteel, /area/construction/storage/wing) +"nLT" = ( +/obj/structure/cable/yellow{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/starboard) "nWb" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -121521,7 +121187,7 @@ bFA byN byN byN -byN +bMh byN bPf byN @@ -121769,7 +121435,7 @@ bpc dhQ btw buX -bwY +nLT bGp btw dCV @@ -122026,7 +121692,7 @@ alq alq alq buY -alq +dOR alq alq alq @@ -122035,7 +121701,7 @@ alq alq alq bKr -bKr +bMi bKr bKr bKr @@ -122541,7 +122207,7 @@ bry bry bva bxa -bry +bHr bAy bAy bDN @@ -123055,7 +122721,7 @@ bhT bhT bvc bxc -bxc +bHs bAA bCg dBK @@ -123329,7 +122995,7 @@ bTh bUx aut bXc -apc +bZz bZE caZ ccJ @@ -123584,7 +123250,7 @@ apc aqq apc bUy -alq +bPs bXd apf bZE @@ -123830,8 +123496,8 @@ byT bAD bCj bDP -bFI -bHr +bFH +bHq bIK bBt atm @@ -123841,13 +123507,13 @@ apc bSf apc bxc -bxc +bxg bXe bxc bxc bxc ccL -bxl +bQT cft pOP pOP @@ -124082,13 +123748,13 @@ bph brD bep bvg -bxd +bFI byU -bAE -bCk -dBJ +bDU +bKC +bMd bFJ -bHs +bHq bIL cVD atm @@ -124104,8 +123770,8 @@ bYv bZF cbb ccM -bxc -aaf +bQU +bUB aaf aaf aaf @@ -124342,11 +124008,11 @@ bvh bxd byV bAF -bCl -bDQ -bFK -bxk -bIM +bCk +dBJ +bFH +bHq +bCk bKu bxc bxc @@ -124358,11 +124024,11 @@ bxc bVG bXg bAO -bZG +bCi cbc cUR cVy -cVz +aaf bAR bAR bAR @@ -124597,14 +124263,14 @@ brF bep bvi bxc -bxc -bxc +byW +bAE bCm -bDR -bza -bxl +dBJ +bCl +bCn bIN -bxg +bDQ bMa bMa bPo @@ -124618,7 +124284,7 @@ bCi bCi cbd ccN -ceg +bQV cfu cgA chN @@ -124854,28 +124520,28 @@ brG bep bep bxc -byW +bKy bAG -bCn +bxg dBM -bFL -bHt +bza +bxl bIO -bKv +bMg bMb -bNP +bNS bPp bPp bSg bDS bDS bVI -bXi -bYw +dBJ +bCi bYw cbe ccO -bza +bSh aaf gJs chO @@ -125119,21 +124785,21 @@ bFM bHu bIP bKw -bMc +bKw bNQ bPq bPq -bHu -bTj -bHu -bVJ +bPq +bPq +bPq +bPq bXj -bYx -bMg +bCi +bCi cbf ccP ceh -cfv +cfw cgA chP cje @@ -125374,23 +125040,23 @@ bCp bDU bFN bAO -bIQ -bKx -bMd -bxd -bPr -bQS -bPr -bxd -bUA -bVK -bXk -bYy +bIS +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bKD +bCi bZH cbg ccQ -bza -aaf +bSi +cfx bAR bAR bAR @@ -125632,17 +125298,17 @@ bDV bFO bHv bIR -bKy -bMe -bNR -bNR -bQT -bNR -bNR -bUB -bFO -bXl -bIS +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi bZI cbh ccR @@ -125882,24 +125548,24 @@ bhT bhT bvm bxg -bza -bza -bza -bza -bFP -bza -bIS bKz +bKA +bKA +bMe +bFP +bMe bMf -bxd -bPs -bPs -bSh -bxd -bUC -bVK -bXm -bIS +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi bZI cbi ccS @@ -126146,20 +125812,20 @@ bDW bFQ bHw bIT -bKA -bMg -bNS -bPt -bQU -bSi -bTk -bDW -bFQ -bXm -bYz -bZJ +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bZI cbj -ccP +bPv ceh cfw cgA @@ -126403,21 +126069,21 @@ bDX bFR bHx bIU -bKB -bMh +bCi +bCi bCi bCi bKD bCi bCi -bUD bCi -dDm -bIS +bCi +dCY +bCi bZK cbk kJW -ceh +bSi cfx bAR bAR @@ -126660,20 +126326,20 @@ bDY bFS bHy bIV -bKC -bMi -bNU -bMg -bQV -bMg -bMg -bUE -bVL -bXn -bYA -bZJ +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bZI cbl -bKG +bQS cei cfy cgB @@ -126918,19 +126584,19 @@ bFT bHz bIW bKD -dhe -dhg -bPu -bPu -bPu -bTl -bUF +bCi +bCi +bCi +bCi +bCi +bCi +bCi bKD -bXo +bCi bMj bZI cVJ -ccQ +ccS bza aaf gJs @@ -127175,20 +126841,20 @@ bFU bHy bIX bKE -bKE -dhh -bPv -bKE -bKE -bKE -bUG -bKE -bXp -bKE +bNR +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi +bCi bZL cbn ccT -cei +bTk cfy cgC chV @@ -127444,8 +127110,8 @@ bXq bNV bZM cbo -ccU -bxc +ccS +bTl aaf bAR bAR @@ -127692,17 +127358,17 @@ bKG bMl dhj njd -bKG -bMl -bKG +jsc +bPr +bNU eJq -bKG -bMl +bNU +bPt bYB -bKG -bKG +bNU +bNU ccV -bxc +bTl aaf aaf aaf @@ -127939,27 +127605,27 @@ aaa aaf bxc bxc -bxc +bKB bCy -bza +cei bFX -bza -bJa -bza +cei +bCy +cei bFX dhk -bJa -bza +bCy +cei bFX -bza -bJa -bza +cei +bCy +cei bFX -bxc -bxc -bxc +bPu +bPu +bPu ccW -bxc +bUA aaf aaa aaa diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index bdbce36c9c..4a14660e57 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -46,13 +46,13 @@ /area/engine/engineering) "aag" = ( /obj/effect/spawner/structure/window/plasma/reinforced, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, /obj/machinery/door/poddoor/shutters/radiation/preopen{ id = "engsm"; name = "Radiation Chamber Shutters" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, /turf/open/floor/plating, /area/engine/engineering) "aah" = ( @@ -4719,9 +4719,13 @@ /area/security/warden) "aml" = ( /obj/structure/cable{ - icon_state = "2-8" + icon_state = "0-8" }, -/turf/closed/wall/r_wall, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" + }, +/turf/open/floor/plating, /area/security/warden) "amm" = ( /obj/structure/cable{ @@ -5124,14 +5128,25 @@ dir = 8; pixel_x = 28 }, -/turf/open/floor/plasteel/showroomfloor, -/area/security/warden) -"ana" = ( /obj/structure/cable{ icon_state = "1-2" }, -/turf/closed/wall/r_wall, +/turf/open/floor/plasteel/showroomfloor, /area/security/warden) +"ana" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, +/turf/open/floor/plasteel, +/area/security/brig) "anb" = ( /obj/structure/cable{ icon_state = "1-2" @@ -5333,19 +5348,19 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, -/turf/open/floor/plasteel, -/area/security/brig) -"anB" = ( /obj/structure/cable{ icon_state = "2-8" }, -/obj/structure/cable{ - icon_state = "0-2" - }, -/obj/structure/cable{ - icon_state = "4-8" - }, +/turf/open/floor/plasteel, +/area/security/brig) +"anB" = ( /obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/structure/cable{ + icon_state = "0-4" + }, /turf/open/floor/plating, /area/security/warden) "anC" = ( @@ -5394,17 +5409,22 @@ /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "anK" = ( /obj/structure/cable{ icon_state = "0-2" }, -/obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/cyan/hidden{ dir = 4 }, +/obj/structure/cable{ + icon_state = "0-8" + }, /turf/open/floor/plating, /area/security/warden) "anL" = ( @@ -5671,6 +5691,9 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/security/brig) "aop" = ( @@ -5896,11 +5919,10 @@ /turf/open/floor/plasteel/dark, /area/security/brig) "aoQ" = ( -/obj/structure/cable, -/obj/structure/cable{ - icon_state = "0-2" - }, /obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, /turf/open/floor/plating, /area/security/warden) "aoR" = ( @@ -5958,6 +5980,9 @@ /obj/item/crowbar, /obj/item/wrench, /obj/item/laser_pointer/red, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "aoY" = ( @@ -5965,14 +5990,17 @@ /obj/machinery/light_switch{ pixel_y = -22 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "aoZ" = ( -/obj/structure/cable{ - icon_state = "0-2" - }, /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-8" + }, /turf/open/floor/plating, /area/security/warden) "apa" = ( @@ -6266,32 +6294,22 @@ /turf/open/floor/plasteel, /area/security/brig) "apI" = ( +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable{ - icon_state = "1-4" + icon_state = "0-2" }, -/obj/structure/cable{ - icon_state = "1-2" - }, -/turf/closed/wall/r_wall, +/obj/structure/cable, +/turf/open/floor/plating, /area/security/warden) "apJ" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, /obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable{ + icon_state = "0-2" + }, /turf/open/floor/plating, /area/security/warden) "apK" = ( /obj/structure/table/reinforced, -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, /obj/machinery/door/window/brigdoor{ dir = 1; name = "Armory Desk"; @@ -6311,14 +6329,11 @@ /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "apL" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable{ + icon_state = "0-2" + }, /turf/open/floor/plating, /area/security/warden) "apM" = ( @@ -6326,26 +6341,44 @@ name = "Brig Control"; req_access_txt = "3" }, -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /turf/open/floor/plasteel/showroomfloor, /area/security/warden) "apN" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, /obj/structure/cable{ icon_state = "4-8" }, -/turf/closed/wall/r_wall, -/area/security/warden) -"apO" = ( /obj/structure/cable{ icon_state = "1-8" }, -/turf/closed/wall/r_wall, -/area/security/warden) +/turf/open/floor/plasteel, +/area/security/brig) +"apO" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/turf/open/floor/plasteel, +/area/security/brig) "apP" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ @@ -6501,12 +6534,12 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel, /area/security/brig) "aqo" = ( -/obj/structure/cable{ - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -6519,6 +6552,12 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/brig) "aqp" = ( @@ -6546,12 +6585,21 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/security/brig) "aqr" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/brig) "aqs" = ( @@ -6562,6 +6610,12 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/security/brig) "aqt" = ( @@ -6574,6 +6628,12 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "1-8" + }, /turf/open/floor/plasteel, /area/security/brig) "aqu" = ( @@ -6582,6 +6642,9 @@ }, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/brig) "aqv" = ( @@ -7533,6 +7596,9 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/cable{ + icon_state = "2-4" + }, /turf/open/floor/plasteel, /area/security/brig) "asx" = ( @@ -7552,6 +7618,12 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/cable{ + icon_state = "1-8" + }, +/obj/structure/cable{ + icon_state = "1-4" + }, /turf/open/floor/plasteel, /area/security/brig) "asy" = ( @@ -7577,10 +7649,16 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/brig) "asA" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/hidden, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/brig) "asB" = ( @@ -7597,6 +7675,9 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/cable{ + icon_state = "4-8" + }, /turf/open/floor/plasteel, /area/security/brig) "asC" = ( @@ -7994,31 +8075,34 @@ /obj/structure/cable{ icon_state = "0-8" }, -/obj/structure/cable{ - icon_state = "0-4" - }, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" + }, /turf/open/floor/plating, /area/security/brig) "aty" = ( -/obj/structure/cable{ - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 }, /obj/structure/cable{ - icon_state = "1-8" + icon_state = "2-8" }, -/turf/closed/wall, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, /area/security/brig) "atz" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, -/obj/structure/cable{ - icon_state = "0-4" - }, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/cyan/hidden, +/obj/structure/cable, /turf/open/floor/plating, /area/security/brig) "atA" = ( @@ -8026,9 +8110,6 @@ id = "Cell 2"; name = "Cell 2" }, -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 @@ -8036,19 +8117,19 @@ /turf/open/floor/plasteel, /area/security/brig) "atB" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, /obj/structure/cable{ icon_state = "4-8" }, -/turf/closed/wall, +/turf/open/floor/plasteel, /area/security/brig) "atC" = ( /obj/machinery/door/window/brigdoor/security/cell{ id = "Cell 3"; name = "Cell 3" }, -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/effect/turf_decal/tile/red, /obj/effect/turf_decal/tile/red{ dir = 8 @@ -8056,14 +8137,12 @@ /turf/open/floor/plasteel, /area/security/brig) "atD" = ( -/obj/structure/cable{ - icon_state = "0-4" - }, -/obj/structure/cable{ - icon_state = "0-8" - }, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/obj/structure/cable{ + icon_state = "0-2" + }, /turf/open/floor/plating, /area/security/brig) "atE" = ( @@ -8073,9 +8152,6 @@ name = "Brig"; req_access_txt = "63" }, -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/red{ @@ -8087,13 +8163,11 @@ /turf/open/floor/plasteel, /area/security/brig) "atF" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, /obj/structure/cable{ icon_state = "0-2" }, /obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, /turf/open/floor/plating, /area/security/brig) "atG" = ( @@ -8507,6 +8581,9 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/security/brig) "auA" = ( @@ -8964,6 +9041,9 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/security/brig) "avv" = ( @@ -8995,6 +9075,9 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/security/brig) "avy" = ( @@ -9026,6 +9109,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/cable{ + icon_state = "1-2" + }, /turf/open/floor/plasteel, /area/security/brig) "avB" = ( @@ -9605,18 +9691,21 @@ /turf/open/floor/plating, /area/security/brig) "awK" = ( -/obj/structure/cable{ - icon_state = "0-4" +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 }, /obj/structure/cable{ - icon_state = "0-8" + icon_state = "2-4" }, -/obj/machinery/door/poddoor/preopen{ - id = "Secure Gate"; - name = "brig shutters" +/obj/structure/cable{ + icon_state = "4-8" }, -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/turf/open/floor/plasteel, /area/security/brig) "awL" = ( /obj/machinery/door/firedoor, @@ -9628,9 +9717,6 @@ name = "Brig"; req_access_txt = "63" }, -/obj/structure/cable{ - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/red{ dir = 1 @@ -9641,9 +9727,6 @@ /turf/open/floor/plasteel, /area/security/brig) "awM" = ( -/obj/structure/cable{ - icon_state = "0-8" - }, /obj/structure/cable, /obj/machinery/door/poddoor/preopen{ id = "Secure Gate"; @@ -23111,7 +23194,7 @@ name = "Hydroponics Desk"; req_access_txt = "35" }, -/obj/item/reagent_containers/food/snacks/monkeycube, +/obj/item/reagent_containers/food/snacks/cube/monkey, /turf/open/floor/plasteel/dark, /area/hydroponics) "bce" = ( @@ -53150,6 +53233,9 @@ dir = 1; pixel_y = -22 }, +/obj/structure/reflector/double/anchored{ + dir = 9 + }, /turf/open/floor/plasteel/dark, /area/engine/engineering) "dFJ" = ( @@ -55547,6 +55633,23 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) +"jen" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, +/area/security/brig) "jeq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -55700,6 +55803,20 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"jxK" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plasteel, +/area/security/brig) "jzz" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/vacuum/external, @@ -56503,6 +56620,16 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"loL" = ( +/obj/machinery/atmospherics/components/trinary/filter/flipped/critical{ + dir = 4; + filter_type = "n2" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/engine, +/area/engine/engineering) "lqc" = ( /obj/item/toy/gun, /obj/effect/decal/cleanable/oil, @@ -57668,6 +57795,7 @@ /area/maintenance/department/science) "odM" = ( /obj/effect/landmark/barthpot, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/carpet, /area/library/lounge) "oep" = ( @@ -58403,9 +58531,6 @@ /turf/open/space/basic, /area/space/nearstation) "pCo" = ( -/obj/structure/reflector/single/anchored{ - dir = 6 - }, /obj/machinery/light/small{ dir = 1 }, @@ -59072,6 +59197,22 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"rdB" = ( +/obj/machinery/atmospherics/pipe/manifold/cyan/hidden{ + dir = 1 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, +/area/security/brig) "reH" = ( /obj/item/reagent_containers/food/drinks/bottle/vodka, /obj/structure/disposalpipe/segment{ @@ -59138,6 +59279,18 @@ }, /turf/open/floor/plasteel/dark, /area/science/xenobiology) +"rjF" = ( +/obj/structure/cable{ + icon_state = "0-8" + }, +/obj/machinery/door/poddoor/preopen{ + id = "Secure Gate"; + name = "brig shutters" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/security/brig) "rmC" = ( /turf/open/space/basic, /area/space/station_ruins) @@ -59921,10 +60074,10 @@ /turf/open/floor/engine, /area/engine/engineering) "tlV" = ( -/obj/structure/reflector/double/anchored{ - dir = 9 +/obj/structure/reflector/single/anchored{ + dir = 6 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating, /area/engine/engineering) "tnP" = ( /obj/machinery/seed_extractor, @@ -60127,6 +60280,19 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"tTZ" = ( +/obj/machinery/atmospherics/pipe/simple/cyan/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/red, +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable{ + icon_state = "2-8" + }, +/turf/open/floor/plasteel, +/area/security/brig) "tXn" = ( /obj/structure/sink{ dir = 4; @@ -60772,19 +60938,6 @@ }, /turf/open/floor/engine, /area/engine/engineering) -"vsG" = ( -/obj/structure/cable{ - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/maintenance{ - name = "Research Lab Maintenance"; - req_one_access_txt = "7;29" - }, -/turf/open/floor/plating, -/area/maintenance/department/engine) "vsJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ @@ -83189,7 +83342,7 @@ amf amR anA aoo -aoo +ana aoo aqn arl @@ -83197,7 +83350,7 @@ asw atx auz avu -awJ +rjF axG ayH aAe @@ -83445,16 +83598,16 @@ alx amg amg anB -ana +amg aoQ -apI +amg aqo alv asx -aty ajM ajM -atB +ajM +akA axH ayI aAf @@ -83705,13 +83858,13 @@ anC aop aoR apJ -aqp +apN aon -asy +aty atz aux avv -awK +awI axG ayL aAi @@ -83964,7 +84117,7 @@ aoS apJ aqq aon -asv +atB atA auA avw @@ -84221,11 +84374,11 @@ aoT apK aqr arl -asw -atx +awK +atD auz avx -awJ +rjF axG ayJ aAg @@ -84479,10 +84632,10 @@ apL aqs aon asz -atB ajM ajM -atB +ajM +akA axI ayL aAh @@ -84735,11 +84888,11 @@ aoV apJ aqt arm -asy +rdB atz aux avy -awK +awI axG ayL aAi @@ -85246,14 +85399,14 @@ amY anI aor aoX -apJ -aqt +apI +apO aro -asw +jen atD auz avA -awJ +rjF axG ayL aAi @@ -85498,19 +85651,19 @@ ajj ajT akP alA -amj +aml amZ anJ amX aoY -apN +amg sBA arp asB -atB ajM ajM -atB +ajM +akA axJ ayL aAi @@ -85755,15 +85908,15 @@ ahL ahL ahL ahL -aml -ana +amg +amg anK aos aoZ -apO +amg aqv aro -asw +jxK atE auB avB @@ -86020,7 +86173,7 @@ apa agP aqw arp -asC +tTZ atF alv alv @@ -86538,7 +86691,7 @@ asE ajM auD avC -ajM +akA axJ axG aAm @@ -87566,7 +87719,7 @@ asG ajM auH avG -auH +awR axM ayR aAo @@ -94044,7 +94197,7 @@ jZG bpY bpY bpY -vsG +bNZ bva bva bva @@ -94076,7 +94229,7 @@ bXk pCo wcs wcs -tlV +wcs eyj qkM miw @@ -94330,7 +94483,7 @@ bZA cam mgz aac -cbX +tlV wcs wcs dEy @@ -94592,7 +94745,7 @@ oHa eWi cbX aac -vlC +loL cgx qeY fyO diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index c9b81cefd9..d015547ac4 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -7639,7 +7639,7 @@ /obj/item/clothing/suit/space/hardsuit/deathsquad{ pixel_y = 5 }, -/obj/item/clothing/gloves/combat, +/obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/shoes/combat/swat, /obj/item/clothing/mask/gas/sechailer/swat, /obj/effect/turf_decal/stripes/line, @@ -16752,7 +16752,7 @@ }, /area/centcom/holding) "Nf" = ( -/obj/machinery/autoylathe, +/obj/machinery/autolathe/toy, /turf/open/indestructible/hotelwood, /area/centcom/holding) "Ni" = ( diff --git a/_maps/shuttles/cargo_kilo.dmm b/_maps/shuttles/cargo_kilo.dmm index 6d9d543842..86660a4dc7 100644 --- a/_maps/shuttles/cargo_kilo.dmm +++ b/_maps/shuttles/cargo_kilo.dmm @@ -3,50 +3,30 @@ /turf/closed/wall/mineral/titanium, /area/shuttle/supply) "b" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 9 }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) "c" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) "d" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) "e" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 10 }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) "f" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -55,18 +35,7 @@ }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) -"g" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/open/floor/mineral/titanium/yellow, -/area/shuttle/supply) "h" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -91,20 +60,10 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/supply) "k" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, +/obj/effect/turf_decal/stripes/corner, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) "l" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -126,10 +85,6 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/supply) "n" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -140,20 +95,12 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) "o" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) "p" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -176,10 +123,6 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) "q" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, @@ -196,19 +139,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/mineral/plastitanium, /area/shuttle/supply) -"s" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/turf/open/floor/mineral/titanium/yellow, -/area/shuttle/supply) "t" = ( /obj/machinery/door/poddoor{ id = "QMLoaddoor2"; @@ -228,28 +158,15 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/supply) "v" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/end{ dir = 8 }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) "w" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) "x" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 6 }, @@ -260,10 +177,6 @@ /turf/closed/wall/mineral/titanium/nodiagonal, /area/shuttle/supply) "z" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/supply) @@ -290,6 +203,27 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating/airless, /area/shuttle/supply) +"K" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/supply) +"Q" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/supply) +"Z" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 4 + }, +/turf/open/floor/mineral/titanium/yellow, +/area/shuttle/supply) (1,1,1) = {" a @@ -323,12 +257,12 @@ C a c o -g -k -g +K +Z +w o -g -s +K +Q e A D @@ -336,13 +270,13 @@ D (4,1,1) = {" a c -g -g -g -g -g -g -g +w +w +w +w +w +w +w z A D @@ -350,13 +284,13 @@ D (5,1,1) = {" a c -g -g -g -g -g -g w +w +w +w +w +w +k x A D diff --git a/_maps/shuttles/emergency_kilo.dmm b/_maps/shuttles/emergency_kilo.dmm index 3c2da5ae85..c7aa1f28ce 100644 --- a/_maps/shuttles/emergency_kilo.dmm +++ b/_maps/shuttles/emergency_kilo.dmm @@ -144,7 +144,6 @@ pixel_y = 4 }, /obj/item/folder/blue, -/obj/item/gun/energy/e_gun/mini, /turf/open/floor/mineral/titanium/blue, /area/shuttle/escape) "av" = ( @@ -172,10 +171,6 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "ax" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/structure/sign/warning/vacuum/external{ pixel_y = 32 }, @@ -288,10 +283,6 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "aM" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/corner{ dir = 1 }, @@ -301,10 +292,6 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "aN" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -725,10 +712,6 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "bB" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -791,14 +774,6 @@ /obj/machinery/recharge_station, /turf/open/floor/plasteel/dark, /area/shuttle/escape) -"bG" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/titanium/yellow, -/area/shuttle/escape) "bH" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/bot, @@ -1057,20 +1032,12 @@ /turf/open/floor/plasteel/dark, /area/shuttle/escape) "cj" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "ck" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "cm" = ( @@ -1079,27 +1046,15 @@ /area/shuttle/escape) "cr" = ( /obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "cs" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/escape) "cA" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 10 }, @@ -1159,10 +1114,6 @@ /turf/open/floor/plating/airless, /area/shuttle/escape) "Xo" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -1543,7 +1494,7 @@ bn bi ac cj -bG +cr bR cK cT diff --git a/_maps/shuttles/ferry_kilo.dmm b/_maps/shuttles/ferry_kilo.dmm index 744d09d373..a905f8a0de 100644 --- a/_maps/shuttles/ferry_kilo.dmm +++ b/_maps/shuttles/ferry_kilo.dmm @@ -70,10 +70,6 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/transport) "m" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -115,10 +111,6 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/transport) "r" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -126,10 +118,6 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/transport) "s" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/stripes/corner, /obj/effect/turf_decal/stripes/corner{ dir = 1 diff --git a/_maps/shuttles/labour_kilo.dmm b/_maps/shuttles/labour_kilo.dmm index 9ee9a38f07..6b70922475 100644 --- a/_maps/shuttles/labour_kilo.dmm +++ b/_maps/shuttles/labour_kilo.dmm @@ -29,10 +29,6 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/labor) "f" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -47,10 +43,6 @@ req_access_txt = "1" }, /obj/machinery/light, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -63,10 +55,6 @@ pixel_x = 30; pixel_y = 30 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -111,10 +99,6 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/labor) "l" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -127,10 +111,6 @@ /obj/machinery/light{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -141,17 +121,12 @@ machinedir = 1; pixel_x = 30 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/labor) "o" = ( -/obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -164,10 +139,6 @@ /turf/open/floor/mineral/plastitanium/red, /area/shuttle/labor) "p" = ( -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/mineral/plastitanium/red, /area/shuttle/labor) @@ -177,9 +148,6 @@ pixel_x = 25 }, /obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/chair/comfy/shuttle{ dir = 8 }, @@ -189,31 +157,12 @@ /turf/open/floor/mineral/plastitanium/red, /area/shuttle/labor) "r" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/structure/closet/crate, /obj/effect/turf_decal/delivery, /obj/effect/turf_decal/stripes/line, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/labor) -"s" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/loading_area{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/mineral/titanium/yellow, -/area/shuttle/labor) "t" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/labor) @@ -284,7 +233,7 @@ g a m p -s +t w y "} diff --git a/_maps/shuttles/mining_kilo.dmm b/_maps/shuttles/mining_kilo.dmm index 1de45c713c..5609ecfc06 100644 --- a/_maps/shuttles/mining_kilo.dmm +++ b/_maps/shuttles/mining_kilo.dmm @@ -15,7 +15,6 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/mining) "d" = ( -/obj/effect/turf_decal/bot, /obj/machinery/computer/shuttle/mining, /turf/open/floor/mineral/plastitanium, /area/shuttle/mining) @@ -31,10 +30,6 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/mining) "f" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 9 }, @@ -48,10 +43,6 @@ /turf/open/floor/mineral/plastitanium, /area/shuttle/mining) "h" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -61,20 +52,12 @@ /turf/open/floor/mineral/titanium/yellow, /area/shuttle/mining) "i" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line{ dir = 5 }, /turf/open/floor/mineral/titanium/yellow, /area/shuttle/mining) "j" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/machinery/status_display/evac{ pixel_x = -32 }, @@ -114,10 +97,6 @@ /turf/open/floor/plating, /area/shuttle/mining) "m" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -134,10 +113,6 @@ /turf/open/floor/plating/airless, /area/shuttle/mining) "p" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/general/hidden{ icon_state = "pipe11-2"; diff --git a/code/__DEFINES/__513_compatibility.dm b/code/__DEFINES/__513_compatibility.dm deleted file mode 100644 index 12577fb68b..0000000000 --- a/code/__DEFINES/__513_compatibility.dm +++ /dev/null @@ -1,32 +0,0 @@ - -#if DM_VERSION < 513 - -#define ismovableatom(A) (istype(A, /atom/movable)) - -#define islist(L) (istype(L, /list)) - -#define CLAMP01(x) (CLAMP(x, 0, 1)) - -#define CLAMP(CLVALUE,CLMIN,CLMAX) ( max( (CLMIN), min((CLVALUE), (CLMAX)) ) ) - -#define ATAN2(x, y) ( !(x) && !(y) ? 0 : (y) >= 0 ? arccos((x) / sqrt((x)*(x) + (y)*(y))) : -arccos((x) / sqrt((x)*(x) + (y)*(y))) ) - -#define TAN(x) (sin(x) / cos(x)) - -#define arctan(x) (arcsin(x/sqrt(1+x*x))) - -////////////////////////////////////////////////// - -#else - -#define ismovableatom(A) ismovable(A) - -#define CLAMP01(x) clamp(x, 0, 1) - -#define CLAMP(CLVALUE, CLMIN, CLMAX) clamp(CLVALUE, CLMIN, CLMAX) - -#define TAN(x) tan(x) - -#define ATAN2(x, y) arctan(x, y) - -#endif diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 14c78f90d0..7de162207d 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -111,9 +111,6 @@ #define GRAB_NECK 2 #define GRAB_KILL 3 -//slowdown when in softcrit -#define SOFTCRIT_ADD_SLOWDOWN 6 - /// Attack types for check_block()/run_block(). Flags, combinable. /// Attack was melee, whether or not armed. #define ATTACK_TYPE_MELEE (1<<0) @@ -302,8 +299,8 @@ GLOBAL_LIST_INIT(shove_disarming_types, typecacheof(list( /// Block priorities #define BLOCK_PRIORITY_HELD_ITEM 100 -#define BLOCK_PRIORITY_CLOTHING 50 #define BLOCK_PRIORITY_WEAR_SUIT 75 +#define BLOCK_PRIORITY_CLOTHING 50 #define BLOCK_PRIORITY_UNIFORM 25 #define BLOCK_PRIORITY_DEFAULT BLOCK_PRIORITY_HELD_ITEM diff --git a/code/__DEFINES/construction.dm b/code/__DEFINES/construction.dm index 92f00fbf38..2f54d066a0 100644 --- a/code/__DEFINES/construction.dm +++ b/code/__DEFINES/construction.dm @@ -73,6 +73,7 @@ #define CAT_AMMO "Ammunition" #define CAT_ROBOT "Robots" #define CAT_MISC "Misc" +#define CAT_MISCELLANEOUS "Miscellaneous" #define CAT_TOOL "Tools & Storage" #define CAT_FURNITURE "Furniture" #define CAT_PRIMAL "Tribal" diff --git a/code/__DEFINES/dcs/flags.dm b/code/__DEFINES/dcs/flags.dm index 3210341cc3..59c0c58b8d 100644 --- a/code/__DEFINES/dcs/flags.dm +++ b/code/__DEFINES/dcs/flags.dm @@ -40,6 +40,7 @@ #define CALTROP_BYPASS_SHOES 1 #define CALTROP_IGNORE_WALKERS 2 +// Spellcasting #define SPELL_SKIP_ALL_REQS (1<<0) #define SPELL_SKIP_CENTCOM (1<<1) #define SPELL_SKIP_STAT (1<<2) @@ -53,3 +54,24 @@ #define SPELL_CULT_ARMOR (1<<10) #define SPELL_WIZARD_GARB (SPELL_WIZARD_HAT|SPELL_WIZARD_ROBE) #define SPELL_CULT_GARB (SPELL_CULT_HELMET|SPELL_CULT_ARMOR) + +//// Identification //// +// /datum/component/identification/identification_flags +/// Delete on successful broad identification (so the main way we "uncover" how an object works, since this won't be on it to obfuscate it) +#define ID_COMPONENT_DEL_ON_IDENTIFY (1<<0) +/// We've already been successfully deepscanned by a deconstructive analyzer +#define ID_COMPONENT_DECONSTRUCTOR_DEEPSCANNED (1<<1) + +// /datum/component/identification/identification_effect_flags +/// Block user from getting actions if they don't know how to use this. Triggered on equip. +#define ID_COMPONENT_EFFECT_NO_ACTIONS (1<<0) + +// /datum/component/identification/identification_method_flags +/// Can be identified in a deconstructive analyzer +#define ID_COMPONENT_IDENTIFY_WITH_DECONSTRUCTOR (1<<0) + +// Return values for /datum/component/deitnfication/check_knowledge() +/// Has no knowledge, default +#define ID_COMPONENT_KNOWLEDGE_NONE 0 +/// Has full knowledge +#define ID_COMPONENT_KNOWLEDGE_FULL 1 diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index a09c96ad30..a3b7596494 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -30,7 +30,7 @@ #define COMSIG_PARENT_ATTACKBY "atom_attackby" //from base of atom/attackby(): (/obj/item, /mob/living, params) #define COMPONENT_NO_AFTERATTACK 1 //Return this in response if you don't want afterattack to be called #define COMSIG_ATOM_HULK_ATTACK "hulk_attack" //from base of atom/attack_hulk(): (/mob/living/carbon/human) -#define COMSIG_PARENT_EXAMINE "atom_examine" //from base of atom/examine(): (/mob, list/examine_list) +#define COMSIG_PARENT_EXAMINE "atom_examine" //from base of atom/examine(): (/mob, list/examine_return_text) #define COMSIG_ATOM_GET_EXAMINE_NAME "atom_examine_name" //from base of atom/get_examine_name(): (/mob, list/overrides) //Positions for overrides list #define EXAMINE_POSITION_ARTICLE 1 @@ -119,6 +119,8 @@ #define COMSIG_MOVABLE_UNCROSSED "movable_uncrossed" //from base of atom/movable/Uncrossed(): (/atom/movable) #define COMSIG_MOVABLE_BUMP "movable_bump" //from base of atom/movable/Bump(): (/atom) #define COMSIG_MOVABLE_IMPACT "movable_impact" //from base of atom/movable/throw_impact(): (/atom/hit_atom, /datum/thrownthing/throwingdatum) + #define COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH 1 ///if true, flip if the impact will push what it hits + #define COMPONENT_MOVABLE_IMPACT_NEVERMIND 2 ///return true if you destroyed whatever it was you're impacting and there won't be anything for hitby() to run on #define COMSIG_MOVABLE_IMPACT_ZONE "item_impact_zone" //from base of mob/living/hitby(): (mob/living/target, hit_zone) #define COMSIG_MOVABLE_BUCKLE "buckle" //from base of atom/movable/buckle_mob(): (mob, force) #define COMSIG_MOVABLE_UNBUCKLE "unbuckle" //from base of atom/movable/unbuckle_mob(): (mob, force) @@ -138,7 +140,6 @@ #define HEARING_SOURCE 8*/ #define COMSIG_MOVABLE_DISPOSING "movable_disposing" //called when the movable is added to a disposal holder object for disposal movement: (obj/structure/disposalholder/holder, obj/machinery/disposal/source) #define COMSIG_MOVABLE_TELEPORTED "movable_teleported" //from base of do_teleport(): (channel, turf/origin, turf/destination) - // /mind signals #define COMSIG_PRE_MIND_TRANSFER "pre_mind_transfer" //from base of mind/transfer_to() before it's done: (new_character, old_character) #define COMPONENT_STOP_MIND_TRANSFER 1 //stops the mind transfer from happening. @@ -148,6 +149,8 @@ #define COMSIG_MOB_EXAMINATE "mob_examinate" //from base of /mob/verb/examinate(): (atom/A) #define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed) #define COMPONENT_BLOCK_DEATH_BROADCAST 1 //stops the death from being broadcasted in deadchat. +#define COMSIG_MOB_CLICKON "mob_clickon" //from base of mob/clickon(): (atom/A, params) + #define COMSIG_MOB_CANCEL_CLICKON 1 #define COMSIG_MOB_GHOSTIZE "mob_ghostize" //from base of mob/Ghostize(): (can_reenter_corpse, special, penalize) #define COMPONENT_BLOCK_GHOSTING (1<<0) #define COMPONENT_DO_NOT_PENALIZE_GHOSTING (1<<1) @@ -197,6 +200,7 @@ #define COMSIG_LIVING_RUN_BLOCK "living_do_run_block" //from base of mob/living/do_run_block(): (real_attack, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone) #define COMSIG_LIVING_COMBAT_ENABLED "combatmode_enabled" //from base of mob/living/enable_combat_mode() (was_forced) #define COMSIG_LIVING_COMBAT_DISABLED "combatmode_disabled" //from base of mob/living/disable_combat_mode() (was_forced) +#define COMSIG_LIVING_GET_BLOCKING_ITEMS "get_blocking_items" //from base of mob/living/get_blocking_items(): (list/items) //ALL OF THESE DO NOT TAKE INTO ACCOUNT WHETHER AMOUNT IS 0 OR LOWER AND ARE SENT REGARDLESS! #define COMSIG_LIVING_STATUS_STUN "living_stun" //from base of mob/living/Stun() (amount, update, ignore) @@ -212,7 +216,7 @@ // /mob/living/carbon signals #define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity)) #define COMSIG_CARBON_IDENTITY_TRANSFERRED_TO "carbon_id_transferred_to" //from datum/dna/transfer_identity(): (datum/dna, transfer_SE) - +#define COMSIG_CARBON_TACKLED "carbon_tackled" //sends from tackle.dm on tackle completion // /mob/living/simple_animal/hostile signals #define COMSIG_HOSTILE_ATTACKINGTARGET "hostile_attackingtarget" #define COMPONENT_HOSTILE_NO_ATTACK 1 @@ -237,7 +241,11 @@ #define COMSIG_ITEM_AFTERATTACK "item_afterattack" //from base of obj/item/afterattack(): (atom/target, mob/user, params) #define COMSIG_ITEM_ALT_AFTERATTACK "item_alt_afterattack" //from base of obj/item/altafterattack(): (atom/target, mob/user, proximity, params) #define COMSIG_ITEM_EQUIPPED "item_equip" //from base of obj/item/equipped(): (/mob/equipper, slot) + // Do not grant actions on equip. + #define COMPONENT_NO_GRANT_ACTIONS 1 #define COMSIG_ITEM_DROPPED "item_drop" //from base of obj/item/dropped(): (mob/user) + // relocated, tell inventory procs if those called this that the item isn't available anymore. + #define COMPONENT_DROPPED_RELOCATION 1 #define COMSIG_ITEM_PICKUP "item_pickup" //from base of obj/item/pickup(): (/mob/taker) #define COMSIG_ITEM_ATTACK_ZONE "item_attack_zone" //from base of mob/living/carbon/attacked_by(): (mob/living/carbon/target, mob/living/user, hit_zone) #define COMSIG_ITEM_IMBUE_SOUL "item_imbue_soul" //return a truthy value to prevent ensouling, checked in /obj/effect/proc_holder/spell/targeted/lichdom/cast(): (mob/user) @@ -247,6 +255,9 @@ // THE FOLLOWING TWO BLOCKS SHOULD RETURN BLOCK FLAGS AS DEFINED IN __DEFINES/combat.dm! #define COMSIG_ITEM_CHECK_BLOCK "check_block" //from base of obj/item/check_block(): (mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) #define COMSIG_ITEM_RUN_BLOCK "run_block" //from base of obj/item/run_block(): (mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) +#define COMSIG_ITEM_DECONSTRUCTOR_DEEPSCAN "deconstructor_deepscan" //Called by deconstructive analyzers deepscanning an item: (obj/machinery/rnd/destructive_analyzer/analyzer_machine, mob/user, list/information_list) + // Uncovered information + #define COMPONENT_DEEPSCAN_UNCOVERED_INFORMATION 1 // /obj/item/clothing signals #define COMSIG_SHOES_STEP_ACTION "shoes_step_action" //from base of obj/item/clothing/shoes/proc/step_action(): () diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 439583c859..378667cd82 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -246,6 +246,8 @@ GLOBAL_LIST_INIT(pointed_types, typecacheof(list( #define isgun(A) (istype(A, /obj/item/gun)) +#define isfood(A) (istype(A, /obj/item/reagent_containers/food)) + //Assemblies #define isassembly(O) (istype(O, /obj/item/assembly)) diff --git a/code/__DEFINES/layers_planes.dm b/code/__DEFINES/layers_planes.dm index d0f9f8bc28..f4a30cd482 100644 --- a/code/__DEFINES/layers_planes.dm +++ b/code/__DEFINES/layers_planes.dm @@ -8,6 +8,10 @@ #define PLANE_SPACE_PARALLAX -90 #define PLANE_SPACE_PARALLAX_RENDER_TARGET "PLANE_SPACE_PARALLAX" +#define OPENSPACE_LAYER 17 //Openspace layer over all +#define OPENSPACE_PLANE -4 //Openspace plane below all turfs +#define OPENSPACE_BACKDROP_PLANE -3 //Black square just over openspace plane to guaranteed cover all in openspace turf + #define FLOOR_PLANE -2 #define FLOOR_PLANE_RENDER_TARGET "FLOOR_PLANE" #define GAME_PLANE -1 @@ -61,7 +65,9 @@ #define BELOW_MOB_LAYER 3.7 #define LYING_MOB_LAYER 3.8 +#define MOB_LOWER_LAYER 3.95 //#define MOB_LAYER 4 //For easy recordkeeping; this is a byond define +#define MOB_UPPER_LAYER 4.05 #define ABOVE_MOB_LAYER 4.1 #define WALL_OBJ_LAYER 4.25 #define EDGED_TURF_LAYER 4.3 @@ -103,10 +109,6 @@ #define ABOVE_LIGHTING_LAYER 16 #define ABOVE_LIGHTING_RENDER_TARGET "ABOVE_LIGHTING_PLANE" -#define FLOOR_OPENSPACE_PLANE 17 -#define OPENSPACE_LAYER 17 -#define OPENSPACE_RENDER_TARGET "OPENSPACE_PLANE" - #define BYOND_LIGHTING_PLANE 18 #define BYOND_LIGHTING_LAYER 18 #define BYOND_LIGHTING_RENDER_TARGET "BYOND_LIGHTING_PLANE" diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index eee0676dec..5a26feb624 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -22,14 +22,14 @@ //used in design to specify which machine can build it #define IMPRINTER (1<<0) //For circuits. Uses glass/chemicals. -#define PROTOLATHE (1<<1) //New stuff. Uses glass/metal/chemicals -#define AUTOLATHE (1<<2) //Uses glass/metal only. -#define CRAFTLATHE (1<<3) //Uses fuck if I know. For use eventually. -#define MECHFAB (1<<4) //Remember, objects utilising this flag should have construction_time and construction_cost vars. -#define BIOGENERATOR (1<<5) //Uses biomass -#define LIMBGROWER (1<<6) //Uses synthetic flesh -#define SMELTER (1<<7) //uses various minerals -#define AUTOYLATHE (1<<8) // CITADEL ADD +#define PROTOLATHE (1<<1) //New stuff. Uses materials/chemicals +#define AUTOLATHE (1<<2) //Uses materials only. +#define TOYLATHE (1<<3) //Glass/metal/plastic. Meant for toys. +#define NO_PUBLIC_LATHE (1<<4) //prevents the design from being auto-unlocked by public auto(y)lathes. +#define MECHFAB (1<<5) //Remember, objects utilising this flag should have construction_time and construction_cost vars. +#define BIOGENERATOR (1<<6) //Uses biomass +#define LIMBGROWER (1<<7) //Uses synthetic flesh +#define SMELTER (1<<8) //uses various minerals #define NANITE_COMPILER (1<<9) //Prints nanite disks #define AUTOBOTTLER (1<<10) //Uses booze, for printing //Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable. diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 73e900226e..844fe2cb90 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -35,6 +35,7 @@ require only minor tweaks. #define ZTRAIT_REEBE "Reebe" #define ZTRAIT_RESERVED "Transit/Reserved" #define ZTRAIT_AWAY "Away Mission" +#define ZTRAIT_VR "Virtual Reality" #define ZTRAIT_SPACE_RUINS "Space Ruins" #define ZTRAIT_LAVA_RUINS "Lava Ruins" #define ZTRAIT_ISOLATED_RUINS "Isolated Ruins" //Placing ruins on z levels with this trait will use turf reservation instead of usual placement. @@ -101,4 +102,8 @@ require only minor tweaks. #define PLACE_BELOW "below" //On z levl below - centered on same tile #define PLACE_ISOLATED "isolated" //On isolated ruin z level //Map type stuff. -#define MAP_TYPE_STATION "station" \ No newline at end of file +#define MAP_TYPE_STATION "station" + +//Random z-levels name defines. +#define AWAY_MISSION_NAME "Away Mission" +#define VIRT_REALITY_NAME "Virtual Reality" diff --git a/code/__DEFINES/maths.dm b/code/__DEFINES/maths.dm index f37efd694c..e418b8b4c6 100644 --- a/code/__DEFINES/maths.dm +++ b/code/__DEFINES/maths.dm @@ -17,6 +17,8 @@ #define PERCENT(val) (round((val)*100, 0.1)) +#define CLAMP01(x) clamp(x, 0, 1) + //time of day but automatically adjusts to the server going into the next day within the same round. //for when you need a reliable time number that doesn't depend on byond time. #define REALTIMEOFDAY (world.timeofday + (MIDNIGHT_ROLLOVER * MIDNIGHT_ROLLOVER_CHECK)) @@ -30,13 +32,13 @@ #define FLOOR(x, y) ( round((x) / (y)) * (y) ) // Similar to clamp but the bottom rolls around to the top and vice versa. min is inclusive, max is exclusive -#define WRAP(val, min, max) CLAMP(( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) ),min,max-1) +#define WRAP(val, min, max) clamp(( min == max ? min : (val) - (round(((val) - (min))/((max) - (min))) * ((max) - (min))) ),min,max-1) // Real modulus that handles decimals #define MODULUS(x, y) ( (x) - (y) * round((x) / (y)) ) // Cotangent -#define COT(x) (1 / TAN(x)) +#define COT(x) (1 / tan(x)) // Secant #define SEC(x) (1 / cos(x)) @@ -169,8 +171,8 @@ while(pixel_y < -16) pixel_y += 32 new_y-- - new_x = CLAMP(new_x, 0, world.maxx) - new_y = CLAMP(new_y, 0, world.maxy) + new_x = clamp(new_x, 0, world.maxx) + new_y = clamp(new_y, 0, world.maxy) return locate(new_x, new_y, starting.z) // Returns a list where [1] is all x values and [2] is all y values that overlap between the given pair of rectangles @@ -195,7 +197,7 @@ #define EXP_DISTRIBUTION(desired_mean) ( -(1/(1/desired_mean)) * log(rand(1, 1000) * 0.001) ) -#define LORENTZ_DISTRIBUTION(x, s) ( s*TAN(TODEGREES(PI*(rand()-0.5))) + x ) +#define LORENTZ_DISTRIBUTION(x, s) ( s*tan(TODEGREES(PI*(rand()-0.5))) + x ) #define LORENTZ_CUMULATIVE_DISTRIBUTION(x, y, s) ( (1/PI)*TORADIANS(arctan((x-y)/s)) + 1/2 ) #define RULE_OF_THREE(a, b, x) ((a*x)/b) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 4cc269cefe..8bc8c8bebe 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -71,14 +71,6 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s #define ABOVE_SHOES_LAYER (SHOES_LAYER-1) #define ABOVE_BODY_FRONT_LAYER (BODY_FRONT_LAYER-1) - -//Security levels -#define SEC_LEVEL_GREEN 0 -#define SEC_LEVEL_BLUE 1 -#define SEC_LEVEL_AMBER 2 -#define SEC_LEVEL_RED 3 -#define SEC_LEVEL_DELTA 4 - //some arbitrary defines to be used by self-pruning global lists. (see master_controller) #define PROCESS_KILL 26 //Used to trigger removal from a processing list diff --git a/code/__DEFINES/misc/return_values.dm b/code/__DEFINES/misc/return_values.dm new file mode 100644 index 0000000000..d55f603de9 --- /dev/null +++ b/code/__DEFINES/misc/return_values.dm @@ -0,0 +1,3 @@ +// obj/item/dropped +/// dropped() relocated this item, return FALSE for doUnEquip. +#define ITEM_RELOCATED_BY_DROPPED "relocated_by_dropped" diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index e5f817614b..c89bd4843e 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -291,3 +291,7 @@ #define PULL_PRONE_SLOWDOWN 0.6 #define FIREMAN_CARRY_SLOWDOWN 0 #define PIGGYBACK_CARRY_SLOWDOWN 1 +//slowdown when in softcrit. Note that crawling slowdown will also apply at the same time! +#define SOFTCRIT_ADD_SLOWDOWN 2 +//slowdown when crawling +#define CRAWLING_ADD_SLOWDOWN 4 diff --git a/code/__DEFINES/movespeed_modification.dm b/code/__DEFINES/movespeed_modification.dm index 4d40474a3c..1f3ae63940 100644 --- a/code/__DEFINES/movespeed_modification.dm +++ b/code/__DEFINES/movespeed_modification.dm @@ -1,12 +1,3 @@ -#define MOVESPEED_DATA_INDEX_PRIORITY 1 -#define MOVESPEED_DATA_INDEX_FLAGS 2 -#define MOVESPEED_DATA_INDEX_MULTIPLICATIVE_SLOWDOWN 3 -#define MOVESPEED_DATA_INDEX_MOVETYPE 4 -#define MOVESPEED_DATA_INDEX_BL_MOVETYPE 5 -#define MOVESPEED_DATA_INDEX_CONFLICT 6 - -#define MOVESPEED_DATA_INDEX_MAX 6 - //flags #define IGNORE_NOSLOW (1 << 0) @@ -15,70 +6,7 @@ #define MOVE_CONFLICT_JETPACK "JETPACK" //ids +#define MOVESPEED_ID_SANITY "mood_sanity" -#define MOVESPEED_ID_MOB_WALK_RUN_CONFIG_SPEED "MOB_WALK_RUN" -#define MOVESPEED_ID_MOB_GRAB_STATE "MOB_GRAB_STATE" -#define MOVESPEED_ID_MOB_EQUIPMENT "MOB_EQUIPMENT" -#define MOVESPEED_ID_MOB_GRAVITY "MOB_GRAVITY" -#define MOVESPEED_ID_CONFIG_SPEEDMOD "MOB_CONFIG_MODIFIER" - -#define MOVESPEED_ID_SLIME_REAGENTMOD "SLIME_REAGENT_MODIFIER" -#define MOVESPEED_ID_SLIME_HEALTHMOD "SLIME_HEALTH_MODIFIER" -#define MOVESPEED_ID_SLIME_TEMPMOD "SLIME_TEMPERATURE_MODIFIER" - -#define MOVESPEED_ID_SLIME_STATUS "SLIME_STATUS" - -#define MOVESPEED_ID_TARANTULA_WEB "TARANTULA_WEB" - -#define MOVESPEED_ID_LIVING_TURF_SPEEDMOD "LIVING_TURF_SPEEDMOD" -#define MOVESPEED_ID_LIVING_LIMBLESS "LIVING_LIMBLESS" - -#define MOVESPEED_ID_CARBON_SOFTCRIT "CARBON_SOFTCRIT" -#define MOVESPEED_ID_CARBON_OLDSPEED "CARBON_DEPRECATED_SPEED" - -#define MOVESPEED_ID_DNA_VAULT "DNA_VAULT" - -#define MOVESPEED_ID_YELLOW_ORB "YELLOW_ORB" - -#define MOVESPEED_ID_TARFOOT "TARFOOT" - -#define MOVESPEED_ID_SEPIA "SEPIA" - -#define MOVESPEED_ID_MONKEY_REAGENT_SPEEDMOD "MONKEY_REAGENT_SPEEDMOD" -#define MOVESPEED_ID_MONKEY_TEMPERATURE_SPEEDMOD "MONKEY_TEMPERATURE_SPEEDMOD" -#define MOVESPEED_ID_MONKEY_HEALTH_SPEEDMOD "MONKEY_HEALTH_SPEEDMOD" - -#define MOVESPEED_ID_CHANGELING_MUSCLES "CHANGELING_MUSCLES" - -#define MOVESPEED_ID_SIMPLEMOB_VARSPEED "SIMPLEMOB_VARSPEED_MODIFIER" -#define MOVESPEED_ID_ADMIN_VAREDIT "ADMIN_VAREDIT_MODIFIER" - -#define MOVESPEED_ID_PAI_SPACEWALK_SPEEDMOD "PAI_SPACEWALK_MODIFIER" - -#define MOVESPEED_ID_SANITY "MOOD_SANITY" - -#define MOVESPEED_ID_SPECIES "SPECIES_SPEED_MOD" - -#define MOVESPEED_ID_SMALL_STRIDE "SMALL_STRIDE" -#define MOVESPEED_ID_PRONE_DRAGGING "PRONE_DRAG" -#define MOVESPEED_ID_HUMAN_CARRYING "HUMAN_CARRY" -#define MOVESPEED_ID_SHRINK_RAY "SHRUNKEN_SPEED_MODIFIER" - -#define MOVESPEED_ID_SLAUGHTER "SLAUGHTER" - -#define MOVESPEED_ID_CYBER_THRUSTER "CYBER_IMPLANT_THRUSTER" -#define MOVESPEED_ID_JETPACK "JETPACK" - -#define MOVESPEED_ID_MKULTRA "MKULTRA" - -#define MOVESPEED_ID_TASED_STATUS "TASED" -#define MOVESPEED_ID_ELECTROSTAFF "ELECTROSTAFF" - -#define MOVESPEED_ID_SHOVE "SHOVE" -#define MOVESPEED_ID_FAT "FAT" -#define MOVESPEED_ID_COLD "COLD" -#define MOVESPEED_ID_HUNGRY "HUNGRY" -#define MOVESPEED_ID_DAMAGE_SLOWDOWN "DAMAGE" -#define MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING "FLYING" - -#define MOVESPEED_ID_CIRRHOSIS "CIRRHOSIS" \ No newline at end of file +#define MOVESPEED_ID_MOB_GRAB_STATE "mob_grab_state" +#define MOVESPEED_ID_MOB_WALK_RUN "mob_walk_run" diff --git a/code/__DEFINES/nanites.dm b/code/__DEFINES/nanites.dm index ed15e972ab..05c3501609 100644 --- a/code/__DEFINES/nanites.dm +++ b/code/__DEFINES/nanites.dm @@ -12,6 +12,10 @@ #define NANITE_CLOUD_DISABLE 2 #define NANITE_CLOUD_ENABLE 3 +///Nanite Protocol types +#define NANITE_PROTOCOL_REPLICATION "nanite_replication" +#define NANITE_PROTOCOL_STORAGE "nanite_storage" + ///Nanite extra settings types: used to help uis know what type an extra setting is #define NESTYPE_TEXT "text" #define NESTYPE_NUMBER "number" diff --git a/code/__DEFINES/reagents.dm b/code/__DEFINES/reagents.dm index 97ae7b8e95..f4beef7ee8 100644 --- a/code/__DEFINES/reagents.dm +++ b/code/__DEFINES/reagents.dm @@ -22,11 +22,23 @@ // Is an open container for all intents and purposes. #define OPENCONTAINER (REFILLABLE | DRAINABLE | TRANSPARENT) -//reagents_value defines, for cargo stuff. +//reagents_value defines, basically a multiplier used in reagent containers cargo selling. #define DEFAULT_REAGENTS_VALUE 1 #define NO_REAGENTS_VALUE 0 #define HARVEST_REAGENTS_VALUE 0.3 +/// Standard reagents value defines. +/// Take a grain of salt, only "rare" reagents should have a decent value here, for balance reasons. +/// TL;DR Think of it also like general market request price more than rarity. +#define REAGENT_VALUE_NONE 0 //all the stuff pretty much available in potentially unlimited quantities. +#define REAGENT_VALUE_VERY_COMMON 0.1 //same as above, just not so unlimited. +#define REAGENT_VALUE_COMMON 0.5 +#define REAGENT_VALUE_UNCOMMON 1 +#define REAGENT_VALUE_RARE 2.5 +#define REAGENT_VALUE_VERY_RARE 5 +#define REAGENT_VALUE_EXCEPTIONAL 10 //extremely rare or tedious to craft, possibly unsynthetizable, reagents. +#define REAGENT_VALUE_AMAZING 30 //reserved ONLY for non-mass produceable, unsynthetizable reagents. +#define REAGENT_VALUE_GLORIOUS 300 //reagents that shouldn't be possible to get or farm under normal conditions. e.g. Romerol, fungal TB, adminordrazine... #define TOUCH 1 // splashing #define INGEST 2 // ingestion diff --git a/code/__DEFINES/research.dm b/code/__DEFINES/research.dm index 9feb5f40c5..60effc7265 100644 --- a/code/__DEFINES/research.dm +++ b/code/__DEFINES/research.dm @@ -60,7 +60,8 @@ #define DESIGN_ID_IGNORE "IGNORE_THIS_DESIGN" -#define RESEARCH_MATERIAL_RECLAMATION_ID "__materials" +#define RESEARCH_MATERIAL_RECLAMATION_ID "__materials" +#define RESEARCH_DEEP_SCAN_ID "__deepscan" //When adding new types, update the list below! #define TECHWEB_POINT_TYPE_GENERIC "General Research" diff --git a/code/__DEFINES/security_levels.dm b/code/__DEFINES/security_levels.dm new file mode 100644 index 0000000000..19c66d9125 --- /dev/null +++ b/code/__DEFINES/security_levels.dm @@ -0,0 +1,10 @@ +//Security levels +#define SEC_LEVEL_GREEN 1 +#define SEC_LEVEL_BLUE 2 +#define SEC_LEVEL_AMBER 3 +#define SEC_LEVEL_RED 4 +#define SEC_LEVEL_DELTA 5 + +//Macro helpers. +#define SECLEVEL2NUM(text) (GLOB.all_security_levels.Find(text)) +#define NUM2SECLEVEL(num) (ISINRANGE(num, 1, length(GLOB.all_security_levels)) ? GLOB.all_security_levels[num] : null) diff --git a/code/__DEFINES/skills/skills.dm b/code/__DEFINES/skills/skills.dm new file mode 100644 index 0000000000..b97b921550 --- /dev/null +++ b/code/__DEFINES/skills/skills.dm @@ -0,0 +1,28 @@ +/// true/false +#define SKILL_PROGRESSION_BINARY 1 +/// numerical +#define SKILL_PROGRESSION_NUMERICAL 2 +/// Enum +#define SKILL_PROGRESSION_ENUM 3 + +/// Max value of skill for numerical skills +#define SKILL_NUMERICAL_MAX 100 +/// Min value of skill for numerical skills +#define SKILL_NUMERICAL_MIN 0 + +// Standard values for job starting skills + +#define STARTING_SKILL_SURGERY_MEDICAL 35 //out of SKILL_NUMERICAL_MAX + +// Standard values for job starting skill affinities + +#define STARTING_SKILL_AFFINITY_SURGERY_MEDICAL 1.2 + +// Standard values for skill gain (this is multiplied by affinity) + +#define SKILL_GAIN_SURGERY_PER_STEP 0.25 + +// Misc + +/// 40% speedup at 100 skill +#define SURGERY_SKILL_SPEEDUP_NUMERICAL_SCALE(number) clamp(number / 250, 1, 2) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index e70e0ba743..4d18e60b71 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -150,6 +150,44 @@ #define TRAIT_PUGILIST "pugilist" //This guy punches people for a living #define TRAIT_KI_VAMPIRE "ki-vampire" //when someone with this trait rolls maximum damage on a punch and stuns the target, they regain some stamina and do clone damage #define TRAIT_PASSTABLE "passtable" +#define TRAIT_GIANT "giant" +#define TRAIT_DWARF "dwarf" +#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" +#define TRAIT_AGEUSIA "ageusia" +#define TRAIT_HEAVY_SLEEPER "heavy_sleeper" +#define TRAIT_NIGHT_VISION "night_vision" +#define TRAIT_LIGHT_STEP "light_step" +#define TRAIT_SILENT_STEP "silent_step" +#define TRAIT_SPEEDY_STEP "speedy_step" +#define TRAIT_SPIRITUAL "spiritual" +#define TRAIT_VORACIOUS "voracious" +#define TRAIT_SELF_AWARE "self_aware" +#define TRAIT_FREERUNNING "freerunning" +#define TRAIT_SKITTISH "skittish" +#define TRAIT_POOR_AIM "poor_aim" +#define TRAIT_PROSOPAGNOSIA "prosopagnosia" +#define TRAIT_DRUNK_HEALING "drunk_healing" +#define TRAIT_TAGGER "tagger" +#define TRAIT_PHOTOGRAPHER "photographer" +#define TRAIT_MUSICIAN "musician" +#define TRAIT_PERMABONER "permanent_arousal" +#define TRAIT_NEVERBONER "never_aroused" +#define TRAIT_MASO "masochism" +#define TRAIT_HIGH_BLOOD "high_blood" +#define TRAIT_PARA "paraplegic" +#define TRAIT_EMPATH "empath" +#define TRAIT_FRIENDLY "friendly" +#define TRAIT_CULT_EYES "cult_eyes" +#define TRAIT_AUTO_CATCH_ITEM "auto_catch_item" +#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman. +#define TRAIT_FREESPRINT "free_sprinting" +#define TRAIT_XRAY_VISION "xray_vision" +#define TRAIT_THERMAL_VISION "thermal_vision" +#define TRAIT_NO_TELEPORT "no-teleport" //you just can't +#define TRAIT_NO_INTERNALS "no-internals" +#define TRAIT_NO_ALCOHOL "alcohol_intolerance" +#define TRAIT_MUTATION_STASIS "mutation_stasis" //Prevents processed genetics mutations from processing. +#define TRAIT_FAST_PUMP "fast_pump" // mobility flag traits // IN THE FUTURE, IT WOULD BE NICE TO DO SOMETHING SIMILAR TO https://github.com/tgstation/tgstation/pull/48923/files (ofcourse not nearly the same because I have my.. thoughts on it) @@ -183,43 +221,6 @@ // item traits #define TRAIT_NODROP "nodrop" -#define TRAIT_ALCOHOL_TOLERANCE "alcohol_tolerance" -#define TRAIT_AGEUSIA "ageusia" -#define TRAIT_HEAVY_SLEEPER "heavy_sleeper" -#define TRAIT_NIGHT_VISION "night_vision" -#define TRAIT_LIGHT_STEP "light_step" -#define TRAIT_SILENT_STEP "silent_step" -#define TRAIT_SPEEDY_STEP "speedy_step" -#define TRAIT_SPIRITUAL "spiritual" -#define TRAIT_VORACIOUS "voracious" -#define TRAIT_SELF_AWARE "self_aware" -#define TRAIT_FREERUNNING "freerunning" -#define TRAIT_SKITTISH "skittish" -#define TRAIT_POOR_AIM "poor_aim" -#define TRAIT_PROSOPAGNOSIA "prosopagnosia" -#define TRAIT_DRUNK_HEALING "drunk_healing" -#define TRAIT_TAGGER "tagger" -#define TRAIT_PHOTOGRAPHER "photographer" -#define TRAIT_MUSICIAN "musician" -#define TRAIT_PERMABONER "permanent_arousal" -#define TRAIT_NEVERBONER "never_aroused" -#define TRAIT_NYMPHO "nymphomania" -#define TRAIT_MASO "masochism" -#define TRAIT_HIGH_BLOOD "high_blood" -#define TRAIT_PARA "paraplegic" -#define TRAIT_EMPATH "empath" -#define TRAIT_FRIENDLY "friendly" -#define TRAIT_CULT_EYES "cult_eyes" -#define TRAIT_AUTO_CATCH_ITEM "auto_catch_item" -#define TRAIT_CLOWN_MENTALITY "clown_mentality" // The future is now, clownman. -#define TRAIT_FREESPRINT "free_sprinting" -#define TRAIT_XRAY_VISION "xray_vision" -#define TRAIT_THERMAL_VISION "thermal_vision" -#define TRAIT_NO_TELEPORT "no-teleport" //you just can't -#define TRAIT_NO_INTERNALS "no-internals" -#define TRAIT_NO_ALCOHOL "alcohol_intolerance" -#define TRAIT_MUTATION_STASIS "mutation_stasis" //Prevents processed genetics mutations from processing. - // common trait sources #define TRAIT_GENERIC "generic" #define EYE_DAMAGE "eye_damage" @@ -244,6 +245,7 @@ #define BLOODSUCKER_TRAIT "bloodsucker" #define SHOES_TRAIT "shoes" //inherited from your sweet kicks #define GLOVE_TRAIT "glove" //inherited by your cool gloves +#define BOOK_TRAIT "granter (book)" // knowledge is power // unique trait sources, still defines #define STATUE_MUTE "statue" diff --git a/code/__DEFINES/vv.dm b/code/__DEFINES/vv.dm index ec7a11085c..a364e0b93c 100644 --- a/code/__DEFINES/vv.dm +++ b/code/__DEFINES/vv.dm @@ -73,6 +73,7 @@ #define VV_HK_EXPOSE "expose" #define VV_HK_CALLPROC "proc_call" #define VV_HK_MARK "mark" +#define VV_HK_ADDCOMPONENT "addcomponent" #define VV_HK_MODIFY_TRAITS "modtraits" // /atom diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm index 754b56a202..ad977ec493 100644 --- a/code/__HELPERS/_lists.dm +++ b/code/__HELPERS/_lists.dm @@ -11,6 +11,7 @@ #define LAZYINITLIST(L) if (!L) L = list() #define UNSETEMPTY(L) if (L && !length(L)) L = null +#define LAZYCOPY(L) (L ? L.Copy() : list() ) #define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } } #define LAZYADD(L, I) if(!L) { L = list(); } L += I; #define LAZYOR(L, I) if(!L) { L = list(); } L |= I; @@ -21,34 +22,47 @@ #define LAZYCLEARLIST(L) if(L) L.Cut() #define SANITIZE_LIST(L) ( islist(L) ? L : list() ) #define reverseList(L) reverseRange(L.Copy()) +#define LAZYADDASSOC(L, K, V) if(!L) { L = list(); } L[K] += list(V); +#define LAZYREMOVEASSOC(L, K, V) if(L) { if(L[K]) { L[K] -= V; if(!length(L[K])) L -= K; } if(!length(L)) L = null; } -// binary search sorted insert -// IN: Object to be inserted -// LIST: List to insert object into -// TYPECONT: The typepath of the contents of the list -// COMPARE: The variable on the objects to compare -#define BINARY_INSERT(IN, LIST, TYPECONT, COMPARE) \ - var/__BIN_CTTL = length(LIST);\ - if(!__BIN_CTTL) {\ - LIST += IN;\ - } else {\ - var/__BIN_LEFT = 1;\ - var/__BIN_RIGHT = __BIN_CTTL;\ - var/__BIN_MID = (__BIN_LEFT + __BIN_RIGHT) >> 1;\ - var/##TYPECONT/__BIN_ITEM;\ - while(__BIN_LEFT < __BIN_RIGHT) {\ - __BIN_ITEM = LIST[__BIN_MID];\ - if(__BIN_ITEM.##COMPARE <= IN.##COMPARE) {\ - __BIN_LEFT = __BIN_MID + 1;\ - } else {\ - __BIN_RIGHT = __BIN_MID;\ +/// Passed into BINARY_INSERT to compare keys +#define COMPARE_KEY __BIN_LIST[__BIN_MID] +/// Passed into BINARY_INSERT to compare values +#define COMPARE_VALUE __BIN_LIST[__BIN_LIST[__BIN_MID]] + +/**** + * Binary search sorted insert + * INPUT: Object to be inserted + * LIST: List to insert object into + * TYPECONT: The typepath of the contents of the list + * COMPARE: The object to compare against, usualy the same as INPUT + * COMPARISON: The variable on the objects to compare + */ +#define BINARY_INSERT(INPUT, LIST, TYPECONT, COMPARE, COMPARISON, COMPTYPE) \ + do {\ + var/list/__BIN_LIST = LIST;\ + var/__BIN_CTTL = length(__BIN_LIST);\ + if(!__BIN_CTTL) {\ + __BIN_LIST += INPUT;\ + } else {\ + var/__BIN_LEFT = 1;\ + var/__BIN_RIGHT = __BIN_CTTL;\ + var/__BIN_MID = (__BIN_LEFT + __BIN_RIGHT) >> 1;\ + var/##TYPECONT/__BIN_ITEM;\ + while(__BIN_LEFT < __BIN_RIGHT) {\ + __BIN_ITEM = COMPTYPE;\ + if(__BIN_ITEM.##COMPARISON <= COMPARE.##COMPARISON) {\ + __BIN_LEFT = __BIN_MID + 1;\ + } else {\ + __BIN_RIGHT = __BIN_MID;\ + };\ + __BIN_MID = (__BIN_LEFT + __BIN_RIGHT) >> 1;\ };\ - __BIN_MID = (__BIN_LEFT + __BIN_RIGHT) >> 1;\ + __BIN_ITEM = COMPTYPE;\ + __BIN_MID = __BIN_ITEM.##COMPARISON > COMPARE.##COMPARISON ? __BIN_MID : __BIN_MID + 1;\ + __BIN_LIST.Insert(__BIN_MID, INPUT);\ };\ - __BIN_ITEM = LIST[__BIN_MID];\ - __BIN_MID = __BIN_ITEM.##COMPARE > IN.##COMPARE ? __BIN_MID : __BIN_MID + 1;\ - LIST.Insert(__BIN_MID, IN);\ - } + } while(FALSE) //Returns a list in plain english as a string /proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" ) @@ -231,7 +245,7 @@ //Picks a random element from a list based on a weighting system: //1. Adds up the total of weights for each element -//2. Gets a number between 1 and that total +//2. Gets the total from 0% to 100% of previous total value. //3. For each element in the list, subtracts its weighting from that number //4. If that makes the number 0 or less, return that element. /proc/pickweight(list/L, base_weight = 1) @@ -248,6 +262,61 @@ if (total <= 0) return item +//Picks a number of elements from a list based on weight. +//This is highly optimised and good for things like grabbing 200 items from a list of 40,000 +//Much more efficient than many pickweight calls +/proc/pickweight_mult(list/L, quantity, base_weight = 1) + //First we total the list as normal + var/total = 0 + var/item + for (item in L) + if (!L[item]) + L[item] = base_weight + total += L[item] + + //Next we will make a list of randomly generated numbers, called Requests + //It is critical that this list be sorted in ascending order, so we will build it in that order + //First one is free, so we start counting at 2 + var/list/requests = list(rand(1, total)) + for (var/i in 2 to quantity) + //Each time we generate the next request + var/newreq = rand()* total + //We will loop through all existing requests + for (var/j in 1 to requests.len) + //We keep going through the list until we find an element which is bigger than the one we want to add + if (requests[j] > newreq) + //And then we insert the newqreq at that point, pushing everything else forward + requests.Insert(j, newreq) + break + + + + //Now when we get here, we have a list of random numbers sorted in ascending order. + //The length of that list is equal to Quantity passed into this function + //Next we make a list to store results + var/list/results = list() + + //Zero the total, we'll reuse it + total = 0 + + //Now we will iterate forward through the items list, adding each weight to the total + for (item in L) + total += L[item] + + //After each item we do a while loop + while (requests.len && total >= requests[1]) + //If the total is higher than the value of the first request + results += item //We add this item to the results list + requests.Cut(1,2) //And we cut off the top of the requests list + + //This while loop will repeat until the next request is higher than the total. + //The current item might be added to the results list many times, in this process + + //By the time we get here: + //Requests will be empty + //Results will have a length of quality + return results + //Pick a random element from the list and remove it from the list. /proc/pick_n_take(list/L) RETURN_TYPE(L[_].type) @@ -256,6 +325,13 @@ . = L[picked] L.Cut(picked,picked+1) //Cut is far more efficient that Remove() +//Pick a random element from the list by weight and remove it from the list. +//Result is returned as a list in the format list(key, value) +/proc/pickweight_n_take(list/L, base_weight = 1) + if (L.len) + . = pickweight(L, base_weight) + L.Remove(.) + //Returns the top(last) element from the list and removes it from the list (typical stack function) /proc/pop(list/L) if(L.len) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 7e52fbe273..801a2cd431 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -61,7 +61,7 @@ var/adjacencies = 0 var/atom/movable/AM - if(ismovableatom(A)) + if(ismovable(A)) AM = A if(AM.can_be_unanchored && !AM.anchored) return 0 diff --git a/code/__HELPERS/level_traits.dm b/code/__HELPERS/level_traits.dm index 3e6e88c8fa..030a324614 100644 --- a/code/__HELPERS/level_traits.dm +++ b/code/__HELPERS/level_traits.dm @@ -12,3 +12,5 @@ #define is_reserved_level(z) SSmapping.level_trait(z, ZTRAIT_RESERVED) #define is_away_level(z) SSmapping.level_trait(z, ZTRAIT_AWAY) + +#define is_vr_level(z) SSmapping.level_trait(z, ZTRAIT_VR) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index d3ad4dcaec..e69052ad8d 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -47,7 +47,7 @@ init_sprite_accessory_subtypes(/datum/sprite_accessory/underwear/socks, GLOB.socks_list) return pick(GLOB.socks_list) -/proc/random_features(intendedspecies) +/proc/random_features(intendedspecies, intended_gender) if(!GLOB.tails_list_human.len) init_sprite_accessory_subtypes(/datum/sprite_accessory/tails/human, GLOB.tails_list_human) if(!GLOB.tails_list_lizard.len) @@ -149,7 +149,13 @@ var/color2 = random_short_color() var/color3 = random_short_color() - //CIT CHANGE - changes this entire return to support cit's snowflake parts + var/body_model = MALE + switch(intended_gender) + if(MALE, FEMALE) + body_model = intended_gender + if(PLURAL) + body_model = pick(MALE,FEMALE) + return(list( "mcolor" = color1, "mcolor2" = color2, @@ -209,7 +215,7 @@ "ipc_antenna" = "None", "flavor_text" = "", "meat_type" = "Mammalian", - "body_model" = MALE, + "body_model" = body_model, "body_size" = RESIZE_DEFAULT_SIZE )) diff --git a/code/__HELPERS/mouse_control.dm b/code/__HELPERS/mouse_control.dm index a69c139d80..10fe976c26 100644 --- a/code/__HELPERS/mouse_control.dm +++ b/code/__HELPERS/mouse_control.dm @@ -11,7 +11,7 @@ var/screenviewY = screenview[2] * world.icon_size var/ox = round(screenviewX/2) - client.pixel_x //"origin" x var/oy = round(screenviewY/2) - client.pixel_y //"origin" y - var/angle = SIMPLIFY_DEGREES(ATAN2(y - oy, x - ox)) + var/angle = SIMPLIFY_DEGREES(arctan(y - oy, x - ox)) return angle //Wow, specific name! diff --git a/code/__HELPERS/radio.dm b/code/__HELPERS/radio.dm index 5fe87bdf5b..dc52299025 100644 --- a/code/__HELPERS/radio.dm +++ b/code/__HELPERS/radio.dm @@ -2,9 +2,9 @@ /proc/sanitize_frequency(frequency, free = FALSE) frequency = round(frequency) if(free) - . = CLAMP(frequency, MIN_FREE_FREQ, MAX_FREE_FREQ) + . = clamp(frequency, MIN_FREE_FREQ, MAX_FREE_FREQ) else - . = CLAMP(frequency, MIN_FREQ, MAX_FREQ) + . = clamp(frequency, MIN_FREQ, MAX_FREQ) if(!(. % 2)) // Ensure the last digit is an odd number . += 1 diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 7cbfbd040a..aa388d7413 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -563,7 +563,7 @@ if(objective.completable) var/completion = objective.check_completion() if(completion >= 1) - objective_parts += "Objective #[count]: [objective.explanation_text] Success!" + objective_parts += "Objective #[count]: [objective.explanation_text] Success!" else if(completion <= 0) objective_parts += "Objective #[count]: [objective.explanation_text] Fail." else diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index faa8c22f38..dadd4322fb 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -6,6 +6,13 @@ return number return default +/proc/sanitize_num_clamp(number, min=0, max=1, default=0, quantize=0) + if(!isnum(number)) + return default + . = clamp(number, min, max) + if(quantize) + . = round(number, quantize) + /proc/sanitize_text(text, default="") if(istext(text)) return text diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index afa858afb7..8a196e8651 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -777,8 +777,8 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list( tX = splittext(tX[1], ":") tX = tX[1] var/list/actual_view = getviewsize(C ? C.view : world.view) - tX = CLAMP(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx) - tY = CLAMP(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy) + tX = clamp(origin.x + text2num(tX) - round(actual_view[1] / 2) - 1, 1, world.maxx) + tY = clamp(origin.y + text2num(tY) - round(actual_view[2] / 2) - 1, 1, world.maxy) return locate(tX, tY, tZ) /proc/screen_loc2turf(text, turf/origin, client/C) @@ -791,8 +791,8 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list( tX = text2num(tX[2]) tZ = origin.z var/list/actual_view = getviewsize(C ? C.view : world.view) - tX = CLAMP(origin.x + round(actual_view[1] / 2) - tX, 1, world.maxx) - tY = CLAMP(origin.y + round(actual_view[2] / 2) - tY, 1, world.maxy) + tX = clamp(origin.x + round(actual_view[1] / 2) - tX, 1, world.maxx) + tY = clamp(origin.y + round(actual_view[2] / 2) - tY, 1, world.maxy) return locate(tX, tY, tZ) /proc/IsValidSrc(datum/D) @@ -1568,7 +1568,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /proc/blood_sucking_checks(var/mob/living/carbon/target, check_neck, check_blood) //Bypass this if the target isnt carbon. if(!iscarbon(target)) - return TRUE + return TRUE if(check_neck) if(istype(target.get_item_by_slot(SLOT_NECK), /obj/item/clothing/neck/garlic_necklace)) return FALSE diff --git a/code/_compile_options.dm b/code/_compile_options.dm index fe4761ddcd..9a36c626ba 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -32,31 +32,12 @@ #endif //Update this whenever you need to take advantage of more recent byond features -#define MIN_COMPILER_VERSION 512 -#if DM_VERSION < MIN_COMPILER_VERSION +#define MIN_COMPILER_VERSION 513 +#define MIN_COMPILER_BUILD 1508 +#if DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD //Don't forget to update this part #error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update. -#error You need version 512 or higher -#endif - -//Compatability -- These procs were added in 513.1493, not 513.1490 -//Which really shoulda bumped us up to 514 right then and there but instead Lummox is a dumb dumb -#if DM_BUILD < 1493 -#define length_char(args...) length(args) -#define text2ascii_char(args...) text2ascii(args) -#define copytext_char(args...) copytext(args) -#define splittext_char(args...) splittext(args) -#define spantext_char(args...) spantext(args) -#define nonspantext_char(args...) nonspantext(args) -#define findtext_char(args...) findtext(args) -#define findtextEx_char(args...) findtextEx(args) -#define findlasttext_char(args...) findlasttext(args) -#define findlasttextEx_char(args...) findlasttextEx(args) -#define replacetext_char(args...) replacetext(args) -#define replacetextEx_char(args...) replacetextEx(args) -// /regex procs -#define Find_char(args...) Find(args) -#define Replace_char(args...) Replace(args) +#error You need version 513.1508 or higher #endif //Additional code for the above flags. diff --git a/code/_globalvars/bitfields.dm b/code/_globalvars/bitfields.dm index c1ca671044..c4ed2d9266 100644 --- a/code/_globalvars/bitfields.dm +++ b/code/_globalvars/bitfields.dm @@ -265,5 +265,15 @@ GLOBAL_LIST_INIT(bitfields, list( "STORAGE_LIMIT_MAX_W_CLASS" = STORAGE_LIMIT_MAX_W_CLASS, "STORAGE_LIMIT_COMBINED_W_CLASS" = STORAGE_LIMIT_COMBINED_W_CLASS, "STORAGE_LIMIT_VOLUME" = STORAGE_LIMIT_VOLUME + ), + "vis_flags" = list( + "VIS_INHERIT_ICON" = VIS_INHERIT_ICON, + "VIS_INHERIT_ICON_STATE" = VIS_INHERIT_ICON_STATE, + "VIS_INHERIT_DIR" = VIS_INHERIT_DIR, + "VIS_INHERIT_LAYER" = VIS_INHERIT_LAYER, + "VIS_INHERIT_PLANE" = VIS_INHERIT_PLANE, + "VIS_INHERIT_ID" = VIS_INHERIT_ID, + "VIS_UNDERLAY" = VIS_UNDERLAY, + "VIS_HIDE" = VIS_HIDE ) )) diff --git a/code/_globalvars/lists/maintenance_loot.dm b/code/_globalvars/lists/maintenance_loot.dm index f85503a678..632904202d 100644 --- a/code/_globalvars/lists/maintenance_loot.dm +++ b/code/_globalvars/lists/maintenance_loot.dm @@ -115,5 +115,6 @@ GLOBAL_LIST_INIT(maintenance_loot, list( /obj/item/autosurgeon/penis = 1, /obj/item/autosurgeon/testicles = 1, /obj/item/storage/box/marshmallow = 2, + /obj/item/clothing/gloves/tackler/offbrand = 1, "" = 3 )) diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm index fb8863ebe7..d214ec94ef 100644 --- a/code/_globalvars/lists/mapping.dm +++ b/code/_globalvars/lists/mapping.dm @@ -50,3 +50,8 @@ GLOBAL_LIST_EMPTY_TYPED(areas_by_type, /area) GLOBAL_LIST_EMPTY(all_abstract_markers) GLOBAL_LIST_EMPTY(stationroom_landmarks) //List of all spawns for stationrooms + +///Away missions, VR, random z levels stuff. +GLOBAL_LIST_EMPTY(random_zlevels_generated) +GLOBAL_LIST_INIT(potential_away_levels, generateMapList(filename = "[global.config.directory]/awaymissionconfig.txt")) +GLOBAL_LIST_INIT(potential_vr_levels, generateMapList(filename = "[global.config.directory]/vr_config.txt")) diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 04d4c2888a..959a62ebf8 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -43,15 +43,26 @@ GLOBAL_LIST_EMPTY(mob_config_movespeed_type_lookup) GLOBAL_LIST_EMPTY(latejoiners) //CIT CHANGE - All latejoining people, for traitor-target purposes. /proc/update_config_movespeed_type_lookup(update_mobs = TRUE) - var/list/mob_types = list() + // NOTE: This is entirely based on the fact that byond typesof/subtypesof gets longer/deeper paths before shallower ones. + // If that ever breaks this entire proc breaks. + var/list/mob_types = typesof(/mob) var/list/entry_value = CONFIG_GET(keyed_list/multiplicative_movespeed) + var/list/configured_types = list() for(var/path in entry_value) var/value = entry_value[path] - if(!value) + if(isnull(value)) continue + // associative list sets for elements that already exist preserve order + mob_types[path] = value + // now go back up through it to set everything, making absolute sure that base paths are overridden by child paths all the way down the path tree. + for(var/i in length(mob_types) to 1 step -1) + var/path = mob_types[i] + if(isnull(mob_types[path])) + continue + // we're going from bottom to top so it should be safe to do this without further checks.. for(var/subpath in typesof(path)) - mob_types[subpath] = value - GLOB.mob_config_movespeed_type_lookup = mob_types + configured_types[subpath] = mob_types[path] + GLOB.mob_config_movespeed_type_lookup = configured_types if(update_mobs) update_mob_config_movespeeds() diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm new file mode 100644 index 0000000000..dd8b9f0d94 --- /dev/null +++ b/code/_globalvars/traits.dm @@ -0,0 +1,138 @@ +/* + FUN ZONE OF ADMIN LISTINGS + Try to keep this in sync with __DEFINES/traits.dm + quirks have it's own panel so we don't need them here. +*/ + +GLOBAL_LIST_INIT(traits_by_type, list( + /mob = list( + "TRAIT_BLIND" = TRAIT_BLIND, + "TRAIT_MUTE" = TRAIT_MUTE, + "TRAIT_EMOTEMUTE " = TRAIT_EMOTEMUTE, + "TRAIT_DEAF" = TRAIT_DEAF, + "TRAIT_NEARSIGHT" = TRAIT_NEARSIGHT, + "TRAIT_FAT" = TRAIT_FAT, + "TRAIT_HUSK" = TRAIT_HUSK, + "TRAIT_NOCLONE" = TRAIT_NOCLONE, + "TRAIT_CLUMSY" = TRAIT_CLUMSY, + "TRAIT_CHUNKYFINGERS" = TRAIT_CHUNKYFINGERS, + "TRAIT_DUMB" = TRAIT_DUMB, + "TRAIT_MONKEYLIKE" = TRAIT_MONKEYLIKE, + "TRAIT_PACIFISM" = TRAIT_PACIFISM, + "TRAIT_IGNORESLOWDOWN" = TRAIT_IGNORESLOWDOWN, + "TRAIT_DEATHCOMA" = TRAIT_DEATHCOMA, + "TRAIT_FAKEDEATH" = TRAIT_FAKEDEATH, + "TRAIT_DISFIGURED" = TRAIT_DISFIGURED, + "TRAIT_XENO_HOST" = TRAIT_XENO_HOST, + "TRAIT_STUNIMMUNE" = TRAIT_STUNIMMUNE, + "TRAIT_TASED_RESISTANCE" = TRAIT_TASED_RESISTANCE, + "TRAIT_SLEEPIMMUNE" = TRAIT_SLEEPIMMUNE, + "TRAIT_PUSHIMMUNE" = TRAIT_PUSHIMMUNE, + "TRAIT_SHOCKIMMUNE" = TRAIT_SHOCKIMMUNE, + "TRAIT_STABLEHEART" = TRAIT_STABLEHEART, + "TRAIT_STABLELIVER" = TRAIT_STABLELIVER, + "TRAIT_RESISTHEAT" = TRAIT_RESISTHEAT, + "TRAIT_RESISTHEATHANDS" = TRAIT_RESISTHEATHANDS, + "TRAIT_RESISTCOLD" = TRAIT_RESISTCOLD, + "TRAIT_RESISTHIGHPRESSURE" = TRAIT_RESISTHIGHPRESSURE, + "TRAIT_RESISTLOWPRESSURE" = TRAIT_RESISTLOWPRESSURE, + "TRAIT_RADIMMUNE" = TRAIT_RADIMMUNE, + "TRAIT_VIRUSIMMUNE" = TRAIT_VIRUSIMMUNE, + "TRAIT_PIERCEIMMUNE" = TRAIT_PIERCEIMMUNE, + "TRAIT_NODISMEMBER" = TRAIT_NODISMEMBER, + "TRAIT_NOFIRE" = TRAIT_NOFIRE, + "TRAIT_NOGUNS" = TRAIT_NOGUNS, + "TRAIT_NOHUNGER" = TRAIT_NOHUNGER, + "TRAIT_EASYDISMEMBER" = TRAIT_EASYDISMEMBER, + "TRAIT_LIMBATTACHMENT" = TRAIT_LIMBATTACHMENT, + "TRAIT_NOLIMBDISABLE" = TRAIT_NOLIMBDISABLE, + "TRAIT_EASYLIMBDISABLE" = TRAIT_EASYLIMBDISABLE, + "TRAIT_TOXINLOVER" = TRAIT_TOXINLOVER, + "TRAIT_NOBREATH" = TRAIT_NOBREATH, + "TRAIT_ANTIMAGIC" = TRAIT_ANTIMAGIC, + "TRAIT_HOLY" = TRAIT_HOLY, + "TRAIT_DEPRESSION" = TRAIT_DEPRESSION, + "TRAIT_JOLLY" = TRAIT_JOLLY, + "TRAIT_NOCRITDAMAGE" = TRAIT_NOCRITDAMAGE, + "TRAIT_NOSLIPWATER" = TRAIT_NOSLIPWATER, + "TRAIT_NOSLIPALL" = TRAIT_NOSLIPALL, + "TRAIT_NODEATH" = TRAIT_NODEATH, + "TRAIT_NOHARDCRIT" = TRAIT_NOHARDCRIT, + "TRAIT_NOSOFTCRIT" = TRAIT_NOSOFTCRIT, + "TRAIT_MINDSHIELD" = TRAIT_MINDSHIELD, + "TRAIT_HIJACKER" = TRAIT_HIJACKER, + "TRAIT_DISSECTED" = TRAIT_DISSECTED, + "TRAIT_SIXTHSENSE" = TRAIT_SIXTHSENSE, + "TRAIT_FEARLESS" = TRAIT_FEARLESS, + "TRAIT_PARALYSIS_L_ARM" = TRAIT_PARALYSIS_L_ARM, + "TRAIT_PARALYSIS_R_ARM" = TRAIT_PARALYSIS_R_ARM, + "TRAIT_PARALYSIS_L_LEG" = TRAIT_PARALYSIS_L_LEG, + "TRAIT_PARALYSIS_R_LEG" = TRAIT_PARALYSIS_R_LEG, + "TRAIT_DISK_VERIFIER" = TRAIT_DISK_VERIFIER, + "TRAIT_XRAY_VISION" = TRAIT_XRAY_VISION, + "TRAIT_THERMAL_VISION" = TRAIT_THERMAL_VISION, + "TRAIT_ABDUCTOR_TRAINING" = TRAIT_ABDUCTOR_TRAINING, + "TRAIT_ABDUCTOR_SCIENTIST_TRAINING" = TRAIT_ABDUCTOR_SCIENTIST_TRAINING, + "TRAIT_SURGEON" = TRAIT_SURGEON, + "TRAIT_STRONG_GRABBER" = TRAIT_STRONG_GRABBER, + "TRAIT_MAGIC_CHOKE" = TRAIT_MAGIC_CHOKE, + "TRAIT_SOOTHED_THROAT" = TRAIT_SOOTHED_THROAT, + "TRAIT_LAW_ENFORCEMENT_METABOLISM" = TRAIT_LAW_ENFORCEMENT_METABOLISM, + "TRAIT_UNINTELLIGIBLE_SPEECH" = TRAIT_UNINTELLIGIBLE_SPEECH, + "TRAIT_UNSTABLE" = TRAIT_UNSTABLE, + "TRAIT_COLDBLOODED" = TRAIT_COLDBLOODED, + "TRAIT_NONATURALHEAL" = TRAIT_NONATURALHEAL, + "TRAIT_NORUNNING" = TRAIT_NORUNNING, + "TRAIT_NOMARROW" = TRAIT_NOMARROW, + "TRAIT_NOPULSE" = TRAIT_NOPULSE, + "TRAIT_EXEMPT_HEALTH_EVENTS" = TRAIT_EXEMPT_HEALTH_EVENTS, + "TRAIT_NO_MIDROUND_ANTAG" = TRAIT_NO_MIDROUND_ANTAG, + "TRAIT_PUGILIST" = TRAIT_PUGILIST, + "TRAIT_KI_VAMPIRE" = TRAIT_KI_VAMPIRE, + "TRAIT_PASSTABLE" = TRAIT_PASSTABLE, + "TRAIT_GIANT" = TRAIT_GIANT, + "TRAIT_DWARF" = TRAIT_DWARF, + "TRAIT_COMBAT_MODE_LOCKED" = TRAIT_COMBAT_MODE_LOCKED, + "TRAIT_SPRINT_LOCKED" = TRAIT_SPRINT_LOCKED, + "TRAIT_AUTO_CATCH_ITEM" = TRAIT_AUTO_CATCH_ITEM, + "TRAIT_FREESPRINT" = TRAIT_FREESPRINT, + "TRAIT_NO_INTERNALS" = TRAIT_NO_INTERNALS, + "TRAIT_NO_ALCOHOL" = TRAIT_NO_ALCOHOL, + "TRAIT_MUTATION_STASIS" = TRAIT_MUTATION_STASIS, + "TRAIT_HEAVY_SLEEPER" = TRAIT_HEAVY_SLEEPER, + "TRAIT_LIGHT_STEP" = TRAIT_LIGHT_STEP, + "TRAIT_SILENT_STEP" = TRAIT_SILENT_STEP, + "TRAIT_VORACIOUS" = TRAIT_VORACIOUS, + "TRAIT_SELF_AWARE" = TRAIT_SELF_AWARE, + "TRAIT_FREERUNNING" = TRAIT_FREERUNNING, + "TRAIT_SKITTISH" = TRAIT_SKITTISH, + "TRAIT_POOR_AIM" = TRAIT_POOR_AIM, + "TRAIT_PROSOPAGNOSIA" = TRAIT_PROSOPAGNOSIA, + "TRAIT_DRUNK_HEALING" = TRAIT_DRUNK_HEALING, + "TRAIT_TAGGER" = TRAIT_TAGGER, + "TRAIT_PHOTOGRAPHER" = TRAIT_PHOTOGRAPHER, + "TRAIT_MUSICIAN" = TRAIT_MUSICIAN, + "TRAIT_MASO" = TRAIT_MASO, + "TRAIT_HIGH_BLOOD" = TRAIT_HIGH_BLOOD, + "TRAIT_EMPATH" = TRAIT_EMPATH, + "TRAIT_FRIENDLY" = TRAIT_FRIENDLY + ), + /obj/item/bodypart = list( + "TRAIT_PARALYSIS" = TRAIT_PARALYSIS + ), + /obj/item = list( + "TRAIT_NODROP" = TRAIT_NODROP, + "TRAIT_NO_TELEPORT" = TRAIT_NO_TELEPORT + ) + )) + + +/// value -> trait name, generated on use from trait_by_type global +GLOBAL_LIST(trait_name_map) + +/proc/generate_trait_name_map() + . = list() + for(var/key in GLOB.traits_by_type) + for(var/tname in GLOB.traits_by_type[key]) + var/val = GLOB.traits_by_type[key][tname] + .[val] = tname diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 46c2c919f4..9ce96585d3 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -75,6 +75,9 @@ if(notransform) return + if(SEND_SIGNAL(src, COMSIG_MOB_CLICKON, A, params) & COMSIG_MOB_CANCEL_CLICKON) + return + var/list/modifiers = params2list(params) if(modifiers["shift"] && modifiers["middle"]) ShiftMiddleClickOn(A) diff --git a/code/_onclick/hud/picture_in_picture.dm b/code/_onclick/hud/picture_in_picture.dm index e028212e96..5e474331f6 100644 --- a/code/_onclick/hud/picture_in_picture.dm +++ b/code/_onclick/hud/picture_in_picture.dm @@ -102,8 +102,8 @@ add_overlay(standard_background) /obj/screen/movable/pic_in_pic/proc/set_view_size(width, height, do_refresh = TRUE) - width = CLAMP(width, 0, max_dimensions) - height = CLAMP(height, 0, max_dimensions) + width = clamp(width, 0, max_dimensions) + height = clamp(height, 0, max_dimensions) src.width = width src.height = height diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm index 7a8cc20d76..a0dade37bd 100644 --- a/code/_onclick/hud/plane_master.dm +++ b/code/_onclick/hud/plane_master.dm @@ -19,7 +19,7 @@ ///Things rendered on "openspace"; holes in multi-z /obj/screen/plane_master/openspace name = "open space plane master" - plane = FLOOR_OPENSPACE_PLANE + plane = OPENSPACE_BACKDROP_PLANE appearance_flags = PLANE_MASTER blend_mode = BLEND_MULTIPLY alpha = 255 @@ -106,8 +106,8 @@ * * You really shouldn't be directly using this, use atom helpers instead */ -/obj/screen/plane_master/emissive_unblockable - name = "emissive mob plane master" +/obj/screen/plane_master/emissive_blocker + name = "emissive blocker plane master" plane = EMISSIVE_BLOCKER_PLANE mouse_opacity = MOUSE_OPACITY_TRANSPARENT render_target = EMISSIVE_BLOCKER_RENDER_TARGET diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index b0e1d39d9a..98db89a100 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -155,9 +155,9 @@ /obj/item/proc/get_clamped_volume() if(w_class) if(force) - return CLAMP((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100 + return clamp((force + w_class) * 4, 30, 100)// Add the item's force to its weight class and multiply by 4, then clamp the value between 30 and 100 else - return CLAMP(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 + return clamp(w_class * 6, 10, 100) // Multiply the item's weight class by 6, then clamp the value between 10 and 100 /mob/living/proc/send_item_attack_message(obj/item/I, mob/living/user, hit_area) var/message_verb = "attacked" diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index d596b5fabf..9f9870a9e5 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -5,7 +5,7 @@ return // seems legit. // Things you might plausibly want to follow - if(ismovableatom(A)) + if(ismovable(A)) ManualFollow(A) // Otherwise jump diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index d7323700e4..4647b83cd7 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -103,7 +103,7 @@ return FALSE var/temp = text2num(trim(str_val)) if(!isnull(temp)) - config_entry_value = CLAMP(integer ? round(temp) : temp, min_val, max_val) + config_entry_value = clamp(integer ? round(temp) : temp, min_val, max_val) if(config_entry_value != temp && !(datum_flags & DF_VAR_EDITED)) log_config("Changing [name] from [temp] to [config_entry_value]!") return TRUE diff --git a/code/controllers/configuration/entries/game_options.dm b/code/controllers/configuration/entries/game_options.dm index cb18d37f21..6b0be68e60 100644 --- a/code/controllers/configuration/entries/game_options.dm +++ b/code/controllers/configuration/entries/game_options.dm @@ -217,7 +217,8 @@ config_entry_value = list( //DEFAULTS /mob/living/simple_animal = 1, /mob/living/silicon/pai = 1, - /mob/living/carbon/alien/humanoid/hunter = -1, + /mob/living/carbon/alien/humanoid/sentinel = 0.25, + /mob/living/carbon/alien/humanoid/drone = 0.5, /mob/living/carbon/alien/humanoid/royal/praetorian = 1, /mob/living/carbon/alien/humanoid/royal/queen = 3 ) @@ -248,8 +249,18 @@ /datum/config_entry/number/movedelay/run_delay +/datum/config_entry/number/movedelay/run_delay/ValidateAndSet() + . = ..() + var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/run) + M.sync() + /datum/config_entry/number/movedelay/walk_delay +/datum/config_entry/number/movedelay/walk_delay/ValidateAndSet() + . = ..() + var/datum/movespeed_modifier/config_walk_run/M = get_cached_movespeed_modifier(/datum/movespeed_modifier/config_walk_run/walk) + M.sync() + /datum/config_entry/number/movedelay/sprint_speed_increase config_entry_value = 1 @@ -288,6 +299,8 @@ /datum/config_entry/flag/roundstart_away //Will random away mission be loaded. +/datum/config_entry/flag/roundstart_vr //Will virtual reality missions be loaded? + /datum/config_entry/number/gateway_delay //How long the gateway takes before it activates. Default is half an hour. Only matters if roundstart_away is enabled. config_entry_value = 18000 min_val = 0 @@ -455,10 +468,12 @@ config_entry_value = RESIZE_DEFAULT_SIZE min_val = 0.1 //to avoid issues with zeros and negative values. max_val = RESIZE_DEFAULT_SIZE + integer = FALSE /datum/config_entry/number/body_size_max config_entry_value = RESIZE_DEFAULT_SIZE min_val = RESIZE_DEFAULT_SIZE + integer = FALSE //Pun-Pun movement slowdown given to characters with a body size smaller than this value, //to compensate for their smaller hitbox. @@ -467,13 +482,14 @@ config_entry_value = RESIZE_DEFAULT_SIZE * 0.85 min_val = 0 max_val = RESIZE_DEFAULT_SIZE + integer = FALSE //multiplicative slowdown multiplier. See 'dna.update_body_size' for the operation. //doesn't apply to floating or crawling mobs /datum/config_entry/number/body_size_slowdown_multiplier config_entry_value = 0.25 min_val = 0.1 //To encourage folks to disable the slowdown through the above config instead. + integer = FALSE //Allows players to set a hexadecimal color of their choice as skin tone, on top of the standard ones. -/datum/config_entry/number/allow_custom_skintones - config_entry_value = 1 +/datum/config_entry/flag/allow_custom_skintones diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm index 12b467b624..c6e6a84bcf 100644 --- a/code/controllers/subsystem/lighting.dm +++ b/code/controllers/subsystem/lighting.dm @@ -6,7 +6,6 @@ SUBSYSTEM_DEF(lighting) name = "Lighting" wait = 2 init_order = INIT_ORDER_LIGHTING - flags = SS_TICKER /datum/controller/subsystem/lighting/stat_entry() ..("L:[GLOB.lighting_update_lights.len]|C:[GLOB.lighting_update_corners.len]|O:[GLOB.lighting_update_objects.len]") @@ -85,4 +84,4 @@ SUBSYSTEM_DEF(lighting) /datum/controller/subsystem/lighting/Recover() initialized = SSlighting.initialized - ..() \ No newline at end of file + ..() diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index f13d5a2779..89155cefb3 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -1,3 +1,5 @@ +#define INIT_ANNOUNCE(X) to_chat(world, "[X]"); log_world(X) + SUBSYSTEM_DEF(mapping) name = "Mapping" init_order = INIT_ORDER_MAPPING @@ -81,7 +83,9 @@ SUBSYSTEM_DEF(mapping) // Pick a random away mission. if(CONFIG_GET(flag/roundstart_away)) createRandomZlevel() - + // Pick a random VR level. + if(CONFIG_GET(flag/roundstart_vr)) + createRandomZlevel(VIRT_REALITY_NAME, list(ZTRAIT_AWAY = TRUE, ZTRAIT_VR = TRUE), GLOB.potential_vr_levels) // Generate mining ruins loading_ruins = TRUE @@ -181,7 +185,6 @@ SUBSYSTEM_DEF(mapping) z_list = SSmapping.z_list -#define INIT_ANNOUNCE(X) to_chat(world, "[X]"); log_world(X) /datum/controller/subsystem/mapping/proc/LoadGroup(list/errorList, name, path, files, list/traits, list/default_traits, silent = FALSE) . = list() var/start_time = REALTIMEOFDAY @@ -265,7 +268,6 @@ SUBSYSTEM_DEF(mapping) msg += ", [FailedZs[I]]" msg += ". Yell at your server host!" INIT_ANNOUNCE(msg) -#undef INIT_ANNOUNCE GLOBAL_LIST_EMPTY(the_station_areas) @@ -410,52 +412,63 @@ GLOBAL_LIST_EMPTY(the_station_areas) //Manual loading of away missions. /client/proc/admin_away() - set name = "Load Away Mission" + set name = "Load Away Mission / Virtual Reality" set category = "Fun" if(!holder ||!check_rights(R_FUN)) return + var/choice = alert(src, "What kind of level would you like to load?", "Load Away/VR", AWAY_MISSION_NAME, VIRT_REALITY_NAME, "Cancel") - if(!GLOB.the_gateway) - if(alert("There's no home gateway on the station. You sure you want to continue ?", "Uh oh", "Yes", "No") != "Yes") + var/list/possible_options + var/list/ztraits + switch(choice) + if(VIRT_REALITY_NAME) + possible_options = GLOB.potential_vr_levels + ztraits = list(ZTRAIT_AWAY = TRUE, ZTRAIT_VR = TRUE) + if(AWAY_MISSION_NAME) + if(!GLOB.the_gateway) + if(alert("There's no home gateway on the station. You sure you want to continue ?", "Uh oh", "Yes", "No") != "Yes") + return + possible_options = GLOB.potential_away_levels + ztraits = list(ZTRAIT_AWAY = TRUE) + else return - var/list/possible_options = GLOB.potentialRandomZlevels + "Custom" - var/away_name - var/datum/space_level/away_level + possible_options += "Custom" + var/lvl_name + var/datum/space_level/level - var/answer = input("What kind ? ","Away") as null|anything in possible_options + var/answer = input("What kind ? ","Away/VR") as null|anything in possible_options switch(answer) + if(null) + return if("Custom") var/mapfile = input("Pick file:", "File") as null|file if(!mapfile) return - away_name = "[mapfile] custom" - to_chat(usr,"Loading [away_name]...") - var/datum/map_template/template = new(mapfile, "Away Mission") - away_level = template.load_new_z() + lvl_name = "[mapfile] custom" + to_chat(usr,"Loading [lvl_name]...") + var/datum/map_template/template = new(mapfile, choice, ztraits) + level = template.load_new_z(ztraits) else - if(answer in GLOB.potentialRandomZlevels) - away_name = answer - to_chat(usr,"Loading [away_name]...") - var/datum/map_template/template = new(away_name, "Away Mission") - away_level = template.load_new_z() - else - return + lvl_name = answer + to_chat(usr,"Loading [lvl_name]...") + var/datum/map_template/template = new(lvl_name, choice) + level = template.load_new_z(ztraits) - message_admins("Admin [key_name_admin(usr)] has loaded [away_name] away mission.") - log_admin("Admin [key_name(usr)] has loaded [away_name] away mission.") - if(!away_level) - message_admins("Loading [away_name] failed!") + message_admins("Admin [key_name_admin(usr)] has loaded [lvl_name] [choice].") + log_admin("Admin [key_name(usr)] has loaded [lvl_name] [choice].") + if(!level) + message_admins("Loading [lvl_name] failed!") return - if(GLOB.the_gateway) + if(choice == AWAY_MISSION_NAME && GLOB.the_gateway) //Link any found away gate with station gate var/obj/machinery/gateway/centeraway/new_gate for(var/obj/machinery/gateway/centeraway/G in GLOB.machines) - if(G.z == away_level.z_value) //I'll have to refactor gateway shitcode before multi-away support. + if(G.z == level.z_value) //I'll have to refactor gateway shitcode before multi-away support. new_gate = G break //Link station gate with away gate and remove wait time. diff --git a/code/controllers/subsystem/processing/flightpacks.dm b/code/controllers/subsystem/processing/flightpacks.dm deleted file mode 100644 index a462e2b645..0000000000 --- a/code/controllers/subsystem/processing/flightpacks.dm +++ /dev/null @@ -1,25 +0,0 @@ -PROCESSING_SUBSYSTEM_DEF(flightpacks) - name = "Flightpack Movement" - priority = FIRE_PRIORITY_FLIGHTPACKS - wait = 2 - stat_tag = "FM" - flags = SS_NO_INIT|SS_TICKER|SS_KEEP_TIMING - - var/flightsuit_processing = FLIGHTSUIT_PROCESSING_FULL - -/datum/controller/subsystem/processing/flightpacks/Initialize() - sync_flightsuit_processing() - -/datum/controller/subsystem/processing/flightpacks/vv_edit_var(var_name, var_value) - ..() - switch(var_name) - if("flightsuit_processing") - sync_flightsuit_processing() - -/datum/controller/subsystem/processing/flightpacks/proc/sync_flightsuit_processing() - for(var/obj/item/flightpack/FP in processing) - FP.sync_processing(src) - if(flightsuit_processing == FLIGHTSUIT_PROCESSING_NONE) //Don't even bother firing. - can_fire = FALSE - else - can_fire = TRUE diff --git a/code/controllers/subsystem/profiler.dm b/code/controllers/subsystem/profiler.dm index ec8b243073..ef10e0626c 100644 --- a/code/controllers/subsystem/profiler.dm +++ b/code/controllers/subsystem/profiler.dm @@ -5,7 +5,7 @@ SUBSYSTEM_DEF(profiler) init_order = INIT_ORDER_PROFILER runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY wait = 3000 - flags = SS_NO_TICK_CHECK + flags = SS_NO_TICK_CHECK var/fetch_cost = 0 var/write_cost = 0 @@ -31,23 +31,12 @@ SUBSYSTEM_DEF(profiler) return ..() /datum/controller/subsystem/profiler/proc/StartProfiling() -#if DM_BUILD < 1506 || DM_VERSION < 513 - stack_trace("Auto profiling unsupported on this byond version") - CONFIG_SET(flag/auto_profile, FALSE) -#else world.Profile(PROFILE_START) -#endif /datum/controller/subsystem/profiler/proc/StopProfiling() -#if DM_BUILD >= 1506 && DM_VERSION >= 513 world.Profile(PROFILE_STOP) -#endif /datum/controller/subsystem/profiler/proc/DumpFile() -#if DM_BUILD < 1506 || DM_VERSION < 513 - stack_trace("Auto profiling unsupported on this byond version") - CONFIG_SET(flag/auto_profile, FALSE) -#else var/timer = TICK_USAGE_REAL var/current_profile_data = world.Profile(PROFILE_REFRESH,format="json") fetch_cost = MC_AVERAGE(fetch_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) @@ -60,4 +49,3 @@ SUBSYSTEM_DEF(profiler) timer = TICK_USAGE_REAL WRITE_FILE(json_file, current_profile_data) write_cost = MC_AVERAGE(write_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) -#endif diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index e4a3ff1f9a..a3e804d541 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -217,13 +217,13 @@ SUBSYSTEM_DEF(shuttle) call_reason = trim(html_encode(call_reason)) - if(length(call_reason) < CALL_SHUTTLE_REASON_LENGTH && seclevel2num(get_security_level()) > SEC_LEVEL_GREEN) + if(length(call_reason) < CALL_SHUTTLE_REASON_LENGTH && GLOB.security_level > SEC_LEVEL_GREEN) to_chat(user, "You must provide a reason.") return var/area/signal_origin = get_area(user) var/emergency_reason = "\nNature of emergency:\n\n[call_reason]" - var/security_num = seclevel2num(get_security_level()) + var/security_num = GLOB.security_level switch(security_num) if(SEC_LEVEL_RED,SEC_LEVEL_DELTA) emergency.request(null, signal_origin, html_decode(emergency_reason), 1) //There is a serious threat we gotta move no time to give them five minutes. @@ -285,7 +285,7 @@ SUBSYSTEM_DEF(shuttle) /datum/controller/subsystem/shuttle/proc/canRecall() if(!emergency || emergency.mode != SHUTTLE_CALL || emergencyNoRecall || SSticker.mode.name == "meteor") return - var/security_num = seclevel2num(get_security_level()) + var/security_num = GLOB.security_level switch(security_num) if(SEC_LEVEL_GREEN) if(emergency.timeLeft(1) < emergencyCallTime) @@ -642,7 +642,7 @@ SUBSYSTEM_DEF(shuttle) /datum/controller/subsystem/shuttle/proc/autoEnd() //CIT CHANGE - allows shift to end without being a proper shuttle call? if(EMERGENCY_IDLE_OR_RECALLED) SSshuttle.emergency.request(silent = TRUE) - priority_announce("The shift has come to an end and the shuttle called. [seclevel2num(get_security_level()) == SEC_LEVEL_RED ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [emergency.timeLeft(600)] minutes.", null, "shuttlecalled", "Priority") + priority_announce("The shift has come to an end and the shuttle called. [GLOB.security_level == SEC_LEVEL_RED ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [emergency.timeLeft(600)] minutes.", null, "shuttlecalled", "Priority") log_game("Round end vote passed. Shuttle has been auto-called.") message_admins("Round end vote passed. Shuttle has been auto-called.") emergencyNoRecall = TRUE diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index a7be36abc2..8042631b7b 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -387,6 +387,9 @@ SUBSYSTEM_DEF(ticker) for(var/mob/dead/new_player/N in GLOB.player_list) var/mob/living/carbon/human/player = N.new_character if(istype(player) && player.mind && player.mind.assigned_role) + var/datum/job/J = SSjob.GetJob(player.mind.assigned_role) + if(J) + J.standard_assign_skills(player.mind) if(player.mind.assigned_role == "Captain") captainless=0 if(player.mind.assigned_role != player.mind.special_role) diff --git a/code/controllers/subsystem/time_track.dm b/code/controllers/subsystem/time_track.dm index cd53c8f0ba..2f4949fc1e 100644 --- a/code/controllers/subsystem/time_track.dm +++ b/code/controllers/subsystem/time_track.dm @@ -23,7 +23,7 @@ SUBSYSTEM_DEF(time_track) var/time_dilation_text /datum/controller/subsystem/time_track/fire() - stat_time_text = "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]\n\nRound Time: [WORLDTIME2TEXT("hh:mm:ss")]\n\nStation Time: [STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)]\n\n[time_dilation_text]" + stat_time_text = "Server Time: [time2text(world.timeofday, "YYYY-MM-DD hh:mm:ss")]\n\nRound Time: [DisplayTimeText(world.time - SSticker.round_start_time, 1)] \n\nStation Time: [STATION_TIME_TIMESTAMP("hh:mm:ss", world.time)]\n\n[time_dilation_text]" if(++last_measurement == measurement_delay) last_measurement = 0 diff --git a/code/controllers/subsystem/timer.dm b/code/controllers/subsystem/timer.dm index bd2fb854af..36bf992cfb 100644 --- a/code/controllers/subsystem/timer.dm +++ b/code/controllers/subsystem/timer.dm @@ -94,7 +94,7 @@ SUBSYSTEM_DEF(timer) if(ctime_timer.flags & TIMER_LOOP) ctime_timer.spent = 0 ctime_timer.timeToRun = REALTIMEOFDAY + ctime_timer.wait - BINARY_INSERT(ctime_timer, clienttime_timers, datum/timedevent, timeToRun) + BINARY_INSERT(ctime_timer, clienttime_timers, datum/timedevent, ctime_timer, timeToRun, COMPARE_KEY) else qdel(ctime_timer) @@ -423,7 +423,7 @@ SUBSYSTEM_DEF(timer) L = SStimer.second_queue if(L) - BINARY_INSERT(src, L, datum/timedevent, timeToRun) + BINARY_INSERT(src, L, datum/timedevent, src, timeToRun, COMPARE_KEY) return //get the list of buckets diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index df3f24f0dc..97a5ec2c2b 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -352,7 +352,6 @@ SUBSYSTEM_DEF(vote) if("dynamic") if(SSticker.current_state > GAME_STATE_PREGAME)//Don't change the mode if the round already started. return message_admins("A vote has tried to change the gamemode, but the game has already started. Aborting.") - GLOB.master_mode = "dynamic" var/list/runnable_storytellers = config.get_runnable_storytellers() var/datum/dynamic_storyteller/picked for(var/T in runnable_storytellers) @@ -489,6 +488,7 @@ SUBSYSTEM_DEF(vote) modes_to_add -= "traitor" // makes it so that traitor is always available choices.Add(modes_to_add) if("dynamic") + GLOB.master_mode = "dynamic" var/list/probabilities = CONFIG_GET(keyed_list/storyteller_weight) for(var/T in config.storyteller_cache) var/datum/dynamic_storyteller/S = T diff --git a/code/datums/action.dm b/code/datums/action.dm index f2f93ac40d..8862482dc2 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -171,7 +171,7 @@ if(!..()) return 0 var/mob/M = target - M.ghostize(1) + M.ghostize(can_reenter_corpse = TRUE, voluntary = TRUE) /datum/action/proc/OnUpdatedIcon() UpdateButtonIcon() diff --git a/code/datums/components/bouncy.dm b/code/datums/components/bouncy.dm index c7ca85455b..fed603410e 100644 --- a/code/datums/components/bouncy.dm +++ b/code/datums/components/bouncy.dm @@ -4,7 +4,7 @@ var/list/bounce_signals = list(COMSIG_MOVABLE_IMPACT, COMSIG_ITEM_HIT_REACT, COMSIG_ITEM_ATTACK) /datum/component/bouncy/Initialize(_bouncy_mod, list/_bounce_signals) - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE if(_bouncy_mod) bouncy_mod = _bouncy_mod diff --git a/code/datums/components/butchering.dm b/code/datums/components/butchering.dm index 06169f64bf..441a161428 100644 --- a/code/datums/components/butchering.dm +++ b/code/datums/components/butchering.dm @@ -55,7 +55,7 @@ log_combat(user, H, "starts slicing the throat of") playsound(H.loc, butcher_sound, 50, TRUE, -1) - if(do_mob(user, H, CLAMP(500 / source.force, 30, 100)) && H.Adjacent(source)) + if(do_mob(user, H, clamp(500 / source.force, 30, 100)) && H.Adjacent(source)) if(H.has_status_effect(/datum/status_effect/neck_slice)) user.show_message("[H]'s neck has already been already cut, you can't make the bleeding any worse!", 1, \ "Their neck has already been already cut, you can't make the bleeding any worse!") @@ -65,13 +65,17 @@ "[user] slits your throat...") log_combat(user, H, "finishes slicing the throat of") H.apply_damage(source.force, BRUTE, BODY_ZONE_HEAD) - H.bleed_rate = CLAMP(H.bleed_rate + 20, 0, 30) + H.bleed_rate = clamp(H.bleed_rate + 20, 0, 30) H.apply_status_effect(/datum/status_effect/neck_slice) /datum/component/butchering/proc/Butcher(mob/living/butcher, mob/living/meat) + var/meat_quality = 50 + (bonus_modifier/10) //increases through quality of butchering tool, and through if it was butchered in the kitchen or not + if(istype(get_area(butcher), /area/crew_quarters/kitchen)) + meat_quality = meat_quality + 10 var/turf/T = meat.drop_location() var/final_effectiveness = effectiveness - meat.butcher_difficulty var/bonus_chance = max(0, (final_effectiveness - 100) + bonus_modifier) //so 125 total effectiveness = 25% extra chance + var/list/butchered_items = list() for(var/V in meat.butcher_results) var/obj/bones = V var/amount = meat.butcher_results[bones] @@ -83,16 +87,21 @@ if(butcher) to_chat(butcher, "You harvest some extra [initial(bones.name)] from [meat]!") for(var/i in 1 to 2) - new bones (T) + butchered_items += new bones (T) + else - new bones (T) + butchered_items += new bones (T) meat.butcher_results.Remove(bones) //in case you want to, say, have it drop its results on gib for(var/V in meat.guaranteed_butcher_results) var/obj/sinew = V var/amount = meat.guaranteed_butcher_results[sinew] for(var/i in 1 to amount) - new sinew (T) + butchered_items += new sinew (T) meat.guaranteed_butcher_results.Remove(sinew) + for(var/butchered_item in butchered_items) + if(isfood(butchered_item)) + var/obj/item/reagent_containers/food/butchered_meat = butchered_item + butchered_meat.food_quality = meat_quality if(butcher) meat.visible_message("[butcher] butchers [meat].") ButcherEffects(meat) diff --git a/code/datums/components/crafting/craft.dm b/code/datums/components/crafting/craft.dm index e0bf084ac2..8ebd52522a 100644 --- a/code/datums/components/crafting/craft.dm +++ b/code/datums/components/crafting/craft.dm @@ -24,7 +24,7 @@ ), CAT_ROBOT = CAT_NONE, CAT_MISC = list( - CAT_MISC, + CAT_MISCELLANEOUS, CAT_TOOL, CAT_FURNITURE, ), @@ -205,6 +205,18 @@ var/atom/movable/I = new R.result (get_turf(user.loc)) I.CheckParts(parts, R) if(isitem(I)) + if(isfood(I)) + var/obj/item/reagent_containers/food/food_result = I + var/total_quality = 0 + var/total_items = 0 + for(var/obj/item/ingredient in parts) + var/obj/item/reagent_containers/food/food_ingredient = ingredient + total_items += 1 + total_quality += food_ingredient.food_quality + if(total_items == 0) + food_result.adjust_food_quality(50) + else + food_result.adjust_food_quality(total_quality / total_items) user.put_in_hands(I) if(send_feedback) SSblackbox.record_feedback("tally", "object_crafted", 1, I.type) diff --git a/code/datums/components/crafting/recipes.dm b/code/datums/components/crafting/recipes.dm index 2b6f1a5b81..bc76082f0a 100644 --- a/code/datums/components/crafting/recipes.dm +++ b/code/datums/components/crafting/recipes.dm @@ -23,3 +23,4 @@ */ /datum/crafting_recipe/proc/check_requirements(mob/user, list/collected_requirements) return TRUE + diff --git a/code/datums/components/crafting/recipes/recipes_clothing.dm b/code/datums/components/crafting/recipes/recipes_clothing.dm index 8f52e06f30..02dd3f2c05 100644 --- a/code/datums/components/crafting/recipes/recipes_clothing.dm +++ b/code/datums/components/crafting/recipes/recipes_clothing.dm @@ -327,3 +327,16 @@ /obj/item/stack/cable_coil = 10) time = 100 //Takes awhile to put all the garlics on the coil and knot it. category = CAT_CLOTHING + +/datum/crafting_recipe/gripperoffbrand + name = "Improvised Gripper Gloves" + reqs = list( + /obj/item/clothing/gloves/fingerless = 1, + // /obj/item/stack/sticky_tape = 1 + /obj/item/stack/cable_coil = 5, + /obj/item/stack/sheet/cloth = 2, + ) + result = /obj/item/clothing/gloves/tackler/offbrand + category = CAT_CLOTHING + tools = list(TOOL_WIRECUTTER) + time = 20 diff --git a/code/datums/components/crafting/recipes/recipes_misc.dm b/code/datums/components/crafting/recipes/recipes_misc.dm index b454ef134f..9eb3fcaaea 100644 --- a/code/datums/components/crafting/recipes/recipes_misc.dm +++ b/code/datums/components/crafting/recipes/recipes_misc.dm @@ -19,6 +19,7 @@ /obj/item/stack/sheet/mineral/wood = 20, /obj/item/stack/cable_coil = 10) tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/femur_breaker @@ -28,12 +29,119 @@ reqs = list(/obj/item/stack/sheet/metal = 20, /obj/item/stack/cable_coil = 30) tools = list(TOOL_SCREWDRIVER, TOOL_WRENCH, TOOL_WELDER) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC +// Blood Sucker stuff // +/datum/crafting_recipe/bloodsucker/blackcoffin + name = "Black Coffin" + result = /obj/structure/closet/crate/coffin/blackcoffin + tools = list(/obj/item/weldingtool, + /obj/item/screwdriver) + reqs = list(/obj/item/stack/sheet/cloth = 1, + /obj/item/stack/sheet/mineral/wood = 5, + /obj/item/stack/sheet/metal = 1) + ///obj/item/stack/packageWrap = 8, + ///obj/item/pipe = 2) + time = 150 + subcategory = CAT_FURNITURE + category = CAT_MISC + always_availible = TRUE + +/datum/crafting_recipe/bloodsucker/meatcoffin + name = "Meat Coffin" + result =/obj/structure/closet/crate/coffin/meatcoffin + tools = list(/obj/item/kitchen/knife, + /obj/item/kitchen/rollingpin) + reqs = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5, + /obj/item/restraints/handcuffs/cable = 1) + time = 150 + subcategory = CAT_FURNITURE + category = CAT_MISC + always_availible = TRUE + +/datum/crafting_recipe/bloodsucker/metalcoffin + name = "Metal Coffin" + result =/obj/structure/closet/crate/coffin/metalcoffin + tools = list(/obj/item/weldingtool, + /obj/item/screwdriver) + reqs = list(/obj/item/stack/sheet/metal = 5) + time = 100 + subcategory = CAT_FURNITURE + category = CAT_MISC + always_availible = TRUE + +/datum/crafting_recipe/bloodsucker/vassalrack + name = "Persuasion Rack" + //desc = "For converting crewmembers into loyal Vassals." + result = /obj/structure/bloodsucker/vassalrack + tools = list(/obj/item/weldingtool, + //obj/item/screwdriver, + /obj/item/wrench + ) + reqs = list(/obj/item/stack/sheet/mineral/wood = 3, + /obj/item/stack/sheet/metal = 2, + /obj/item/restraints/handcuffs/cable = 2, + //obj/item/storage/belt = 1, + //obj/item/stack/sheet/animalhide = 1, + //obj/item/stack/sheet/leather = 1, + //obj/item/stack/sheet/plasteel = 5 + ) + //parts = list(/obj/item/storage/belt = 1 + // ) + time = 150 + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + always_availible = FALSE // Disabled til learned + + +/datum/crafting_recipe/bloodsucker/candelabrum + name = "Candelabrum" + //desc = "For converting crewmembers into loyal Vassals." + result = /obj/structure/bloodsucker/candelabrum + tools = list(/obj/item/weldingtool, + /obj/item/wrench + ) + reqs = list(/obj/item/stack/sheet/metal = 3, + /obj/item/stack/rods = 1, + /obj/item/candle = 1 + ) + time = 100 + subcategory = CAT_MISCELLANEOUS + category = CAT_MISC + always_availible = FALSE // Disabled til learned + /////////////////// //Tools & Storage// /////////////////// +/datum/crafting_recipe/upgraded_gauze + name = "Improved Gauze" + result = /obj/item/stack/medical/gauze/adv + time = 1 + reqs = list(/obj/item/stack/medical/gauze = 1, + /datum/reagent/space_cleaner/sterilizine = 10) + category = CAT_MISC + subcategory = CAT_TOOL + +/datum/crafting_recipe/bruise_pack + name = "Bruise Pack" + result = /obj/item/stack/medical/bruise_pack + time = 1 + reqs = list(/obj/item/stack/medical/gauze = 1, + /datum/reagent/medicine/styptic_powder = 10) + category = CAT_MISC + subcategory = CAT_TOOL + +/datum/crafting_recipe/burn_pack + name = "Brun Ointment" + result = /obj/item/stack/medical/ointment + time = 1 + reqs = list(/obj/item/stack/medical/gauze = 1, + /datum/reagent/medicine/silver_sulfadiazine = 10) + category = CAT_MISC + subcategory = CAT_TOOL + /datum/crafting_recipe/ghettojetpack name = "Improvised Jetpack" result = /obj/item/tank/jetpack/improvised @@ -162,6 +270,7 @@ reqs = list(/obj/item/stack/sheet/plasteel = 2, /obj/item/stack/rods = 8) time = 100 + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/skateboard @@ -170,6 +279,7 @@ time = 60 reqs = list(/obj/item/stack/sheet/metal = 5, /obj/item/stack/rods = 10) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/scooter @@ -178,6 +288,7 @@ time = 65 reqs = list(/obj/item/stack/sheet/metal = 5, /obj/item/stack/rods = 12) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC ///////// @@ -188,18 +299,21 @@ name = "Toy Sword" reqs = list(/obj/item/light/bulb = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4) result = /obj/item/toy/sword + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/extendohand name = "Extendo-Hand" reqs = list(/obj/item/bodypart/r_arm/robot = 1, /obj/item/clothing/gloves/boxing = 1) result = /obj/item/extendohand + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/toyneb name = "Non-Euplastic Blade" reqs = list(/obj/item/light/tube = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plastic = 4) result = /obj/item/toy/sword/cx + subcategory = CAT_MISCELLANEOUS category = CAT_MISC //////////// @@ -210,6 +324,7 @@ name = "Black Carpet" reqs = list(/obj/item/stack/tile/carpet = 50, /obj/item/toy/crayon/black = 1) result = /obj/item/stack/tile/carpet/black/fifty + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/paperframes @@ -217,6 +332,7 @@ result = /obj/item/stack/sheet/paperframes/five time = 10 reqs = list(/obj/item/stack/sheet/mineral/wood = 5, /obj/item/paper = 20) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/naturalpaper @@ -225,6 +341,7 @@ reqs = list(/datum/reagent/water = 50, /obj/item/stack/sheet/mineral/wood = 1) tools = list(/obj/item/hatchet) result = /obj/item/paper_bin/bundlenatural + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/bluespacehonker @@ -234,6 +351,7 @@ reqs = list(/obj/item/stack/ore/bluespace_crystal = 1, /obj/item/toy/crayon/blue = 1, /obj/item/bikehorn = 1) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/mousetrap @@ -242,6 +360,7 @@ time = 10 reqs = list(/obj/item/stack/sheet/cardboard = 1, /obj/item/stack/rods = 1) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/flashlight_eyes @@ -252,6 +371,7 @@ /obj/item/flashlight = 2, /obj/item/restraints/handcuffs/cable = 1 ) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/pressureplate @@ -262,6 +382,7 @@ /obj/item/stack/tile/plasteel = 1, /obj/item/stack/cable_coil = 2, /obj/item/assembly/igniter = 1) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/gold_horn @@ -270,6 +391,7 @@ time = 20 reqs = list(/obj/item/stack/sheet/mineral/bananium = 5, /obj/item/bikehorn = 1) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/spooky_camera @@ -279,6 +401,7 @@ reqs = list(/obj/item/camera = 1, /datum/reagent/water/holywater = 10) parts = list(/obj/item/camera = 1) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/paperwork @@ -287,6 +410,7 @@ time = 10 //Takes time for people to file and complete paper work! tools = list(/obj/item/pen) reqs = list(/obj/item/folder/paperwork = 1) + subcategory = CAT_MISCELLANEOUS category = CAT_MISC /datum/crafting_recipe/coconut_bong @@ -295,6 +419,7 @@ reqs = list(/obj/item/stack/sheet/mineral/bamboo = 2, /obj/item/reagent_containers/food/snacks/grown/coconut = 1) time = 70 + subcategory = CAT_MISCELLANEOUS category = CAT_MISC ////////////// @@ -354,41 +479,3 @@ /obj/item/clothing/under/rank/security/officer = 1) subcategory = CAT_FURNITURE category = CAT_MISC - -/datum/crafting_recipe/bloodsucker/vassalrack - name = "Persuasion Rack" - //desc = "For converting crewmembers into loyal Vassals." - result = /obj/structure/bloodsucker/vassalrack - tools = list(/obj/item/weldingtool, - //obj/item/screwdriver, - /obj/item/wrench - ) - reqs = list(/obj/item/stack/sheet/mineral/wood = 3, - /obj/item/stack/sheet/metal = 2, - /obj/item/restraints/handcuffs/cable = 2, - //obj/item/storage/belt = 1, - //obj/item/stack/sheet/animalhide = 1, - //obj/item/stack/sheet/leather = 1, - //obj/item/stack/sheet/plasteel = 5 - ) - //parts = list(/obj/item/storage/belt = 1 - // ) - time = 150 - category = CAT_MISC - always_availible = FALSE // Disabled til learned - - -/datum/crafting_recipe/bloodsucker/candelabrum - name = "Candelabrum" - //desc = "For converting crewmembers into loyal Vassals." - result = /obj/structure/bloodsucker/candelabrum - tools = list(/obj/item/weldingtool, - /obj/item/wrench - ) - reqs = list(/obj/item/stack/sheet/metal = 3, - /obj/item/stack/rods = 1, - /obj/item/candle = 1 - ) - time = 100 - category = CAT_MISC - always_availible = FALSE // Disabled til learned diff --git a/code/datums/components/edit_complainer.dm b/code/datums/components/edit_complainer.dm index bf52296e2c..e2cca2eb50 100644 --- a/code/datums/components/edit_complainer.dm +++ b/code/datums/components/edit_complainer.dm @@ -3,7 +3,7 @@ var/list/say_lines /datum/component/edit_complainer/Initialize(list/text) - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE var/static/list/default_lines = list( diff --git a/code/datums/components/explodable.dm b/code/datums/components/explodable.dm index 820208a319..2e5834c025 100644 --- a/code/datums/components/explodable.dm +++ b/code/datums/components/explodable.dm @@ -13,7 +13,7 @@ RegisterSignal(parent, COMSIG_PARENT_ATTACKBY, .proc/explodable_attack) RegisterSignal(parent, COMSIG_TRY_STORAGE_INSERT, .proc/explodable_insert_item) RegisterSignal(parent, COMSIG_ATOM_EX_ACT, .proc/detonate) - if(ismovableatom(parent)) + if(ismovable(parent)) RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, .proc/explodable_impact) RegisterSignal(parent, COMSIG_MOVABLE_BUMP, .proc/explodable_bump) if(isitem(parent)) diff --git a/code/datums/components/fantasy/prefixes.dm b/code/datums/components/fantasy/prefixes.dm index 702ec9329a..5ef2ac2baf 100644 --- a/code/datums/components/fantasy/prefixes.dm +++ b/code/datums/components/fantasy/prefixes.dm @@ -54,7 +54,7 @@ /datum/fantasy_affix/pyromantic/apply(datum/component/fantasy/comp, newName) var/obj/item/master = comp.parent - comp.appliedComponents += master.AddComponent(/datum/component/igniter, CLAMP(comp.quality, 1, 10)) + comp.appliedComponents += master.AddComponent(/datum/component/igniter, clamp(comp.quality, 1, 10)) return "pyromantic [newName]" /datum/fantasy_affix/vampiric diff --git a/code/datums/components/identification.dm b/code/datums/components/identification.dm new file mode 100644 index 0000000000..f7dc211504 --- /dev/null +++ b/code/datums/components/identification.dm @@ -0,0 +1,88 @@ +/** + * Identification components + */ +/datum/component/identification + /// General flags for how we should work. + var/identification_flags = NONE + /// General flags for what we should do. + var/identification_effect_flags = NONE + /// General flags for how we can be identified. + var/identification_method_flags = NONE + /// If this is set, show this on examine to the examiner if they know how to use it. + var/additional_examine_text = "You seem to know more about this item than others.." + /// Added to deconstructive analyzer say on success if set + var/deconstructor_reveal_text = "item operation instructions" + +/datum/component/identification/Initialize(id_flags, id_effect_flags, id_method_flags) + if(!isobj(parent)) + return COMPONENT_INCOMPATIBLE + . = ..() + if(. & COMPONENT_INCOMPATIBLE) + return + identification_flags = id_flags + identification_effect_flags = id_effect_flags + identification_method_flags = id_method_flags + +/datum/component/identification/RegisterWithParent() + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/on_examine) + if(identification_effect_flags & ID_COMPONENT_EFFECT_NO_ACTIONS) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip) + if(identification_method_flags & ID_COMPONENT_IDENTIFY_WITH_DECONSTRUCTOR) + RegisterSignal(parent, COMSIG_ITEM_DECONSTRUCTOR_DEEPSCAN, .proc/on_deconstructor_deepscan) + +/datum/component/identification/UnregisterFromParent() + var/list/unregister = list(COMSIG_PARENT_EXAMINE) + if(identification_effect_flags & ID_COMPONENT_EFFECT_NO_ACTIONS) + unregister += COMSIG_ITEM_EQUIPPED + if(identification_method_flags & ID_COMPONENT_IDENTIFY_WITH_DECONSTRUCTOR) + unregister += COMSIG_ITEM_DECONSTRUCTOR_DEEPSCAN + UnregisterSignal(parent, unregister) + +/datum/component/identification/proc/on_examine(datum/source, mob/user, list/returnlist) + if(check_knowledge(user) != ID_COMPONENT_KNOWLEDGE_FULL) + return + if(!additional_examine_text) + return + returnlist += additional_examine_text + +/datum/component/identification/vv_edit_var(var_name, var_value) + // since i care SOOO much about memory optimization, we only register signals we need to + // so when someone vv's us, we should probably make sure we have the ones we need to with an update. + if((var_value == NAMEOF(src, identification_flags)) || (var_value == NAMEOF(src, identification_effect_flags)) || (var_value == NAMEOF(src, identification_method_flags))) + UnregisterFromParent() + . = ..() + if((var_value == NAMEOF(src, identification_flags)) || (var_value == NAMEOF(src, identification_effect_flags)) || (var_value == NAMEOF(src, identification_method_flags))) + RegisterWithParent() + +/datum/component/identification/proc/on_equip(datum/source, mob/user) + if(check_knowledge(user) == ID_COMPONENT_KNOWLEDGE_FULL) + return + if(identification_method_flags & ID_COMPONENT_EFFECT_NO_ACTIONS) + return COMPONENT_NO_GRANT_ACTIONS + +/datum/component/identification/proc/check_knowledge(mob/user) + return ID_COMPONENT_KNOWLEDGE_NONE + +/datum/component/identification/proc/on_identify(mob/user) + if(identification_flags & ID_COMPONENT_DEL_ON_IDENTIFY) + qdel(src) + +/datum/component/identification/proc/on_deconstructor_deepscan(datum/source, obj/machinery/rnd/destructive_analyzer/analyzer, mob/user, list/information = list()) + if((identification_method_flags & ID_COMPONENT_IDENTIFY_WITH_DECONSTRUCTOR) && !(identification_flags & ID_COMPONENT_DECONSTRUCTOR_DEEPSCANNED)) + identification_flags |= ID_COMPONENT_DECONSTRUCTOR_DEEPSCANNED + on_identify(user) + if(deconstructor_reveal_text) + information += deconstructor_reveal_text + return COMPONENT_DEEPSCAN_UNCOVERED_INFORMATION + +/** + * Identification component subtype - Syndicate + * + * Checks if the user is a traitor. + */ +/datum/component/identification/syndicate + +/datum/component/identification/syndicate/check_knowledge(mob/user) + . = ..() + if(user?.mind?.has_antag_datum(/datum/antagonist/traitor)) + . = max(., ID_COMPONENT_KNOWLEDGE_FULL) diff --git a/code/datums/components/infective.dm b/code/datums/components/infective.dm index ad2b7ded14..8d3c6ab81f 100644 --- a/code/datums/components/infective.dm +++ b/code/datums/components/infective.dm @@ -13,7 +13,7 @@ expire_time = world.time + expire_in QDEL_IN(src, expire_in) - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, COMSIG_COMPONENT_CLEAN_ACT, .proc/clean) RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, .proc/try_infect_buckle) diff --git a/code/datums/components/knockback.dm b/code/datums/components/knockback.dm index 988a0e575e..3899e92a22 100644 --- a/code/datums/components/knockback.dm +++ b/code/datums/components/knockback.dm @@ -34,7 +34,7 @@ do_knockback(target, null, angle2dir(Angle)) /datum/component/knockback/proc/do_knockback(atom/target, mob/thrower, throw_dir) - if(!ismovableatom(target) || throw_dir == null) + if(!ismovable(target) || throw_dir == null) return var/atom/movable/throwee = target if(throwee.anchored && !throw_anchored) diff --git a/code/datums/components/magnetic_catch.dm b/code/datums/components/magnetic_catch.dm index c7e59e0ead..181b24260b 100644 --- a/code/datums/components/magnetic_catch.dm +++ b/code/datums/components/magnetic_catch.dm @@ -2,7 +2,7 @@ if(!isatom(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, COMSIG_PARENT_EXAMINE, .proc/examine) - if(ismovableatom(parent)) + if(ismovable(parent)) RegisterSignal(parent, COMSIG_MOVABLE_CROSSED, .proc/crossed_react) RegisterSignal(parent, COMSIG_MOVABLE_UNCROSSED, .proc/uncrossed_react) for(var/i in get_turf(parent)) diff --git a/code/datums/components/mirage_border.dm b/code/datums/components/mirage_border.dm index 20e3b317ec..de4425e208 100644 --- a/code/datums/components/mirage_border.dm +++ b/code/datums/components/mirage_border.dm @@ -14,8 +14,8 @@ var/x = target.x var/y = target.y var/z = target.z - var/turf/southwest = locate(CLAMP(x - (direction & WEST ? range : 0), 1, world.maxx), CLAMP(y - (direction & SOUTH ? range : 0), 1, world.maxy), CLAMP(z, 1, world.maxz)) - var/turf/northeast = locate(CLAMP(x + (direction & EAST ? range : 0), 1, world.maxx), CLAMP(y + (direction & NORTH ? range : 0), 1, world.maxy), CLAMP(z, 1, world.maxz)) + var/turf/southwest = locate(clamp(x - (direction & WEST ? range : 0), 1, world.maxx), clamp(y - (direction & SOUTH ? range : 0), 1, world.maxy), clamp(z, 1, world.maxz)) + var/turf/northeast = locate(clamp(x + (direction & EAST ? range : 0), 1, world.maxx), clamp(y + (direction & NORTH ? range : 0), 1, world.maxy), clamp(z, 1, world.maxz)) //holder.vis_contents += block(southwest, northeast) // This doesnt work because of beta bug memes for(var/i in block(southwest, northeast)) holder.vis_contents += i diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index 5e9382f88e..6938046e11 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -175,27 +175,27 @@ switch(sanity) if(-INFINITY to SANITY_CRAZY) setInsanityEffect(MAJOR_INSANITY_PEN) - master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=1.5) //Did we change something ? movetypes is runtiming, movetypes=(~FLYING)) + master.add_movespeed_modifier(/datum/movespeed_modifier/sanity/insane) sanity_level = 6 if(SANITY_CRAZY to SANITY_UNSTABLE) setInsanityEffect(MINOR_INSANITY_PEN) - master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=1)//, movetypes=(~FLYING)) + master.add_movespeed_modifier(/datum/movespeed_modifier/sanity/crazy) sanity_level = 5 if(SANITY_UNSTABLE to SANITY_DISTURBED) setInsanityEffect(0) - master.add_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE, 100, override=TRUE, multiplicative_slowdown=0.5)//, movetypes=(~FLYING)) + master.add_movespeed_modifier(/datum/movespeed_modifier/sanity/disturbed) sanity_level = 4 if(SANITY_DISTURBED to SANITY_NEUTRAL) setInsanityEffect(0) - master.remove_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE) + master.remove_movespeed_modifier(MOVESPEED_ID_SANITY) sanity_level = 3 if(SANITY_NEUTRAL+1 to SANITY_GREAT+1) //shitty hack but +1 to prevent it from responding to super small differences setInsanityEffect(0) - master.remove_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE) + master.remove_movespeed_modifier(MOVESPEED_ID_SANITY) sanity_level = 2 if(SANITY_GREAT+1 to INFINITY) setInsanityEffect(0) - master.remove_movespeed_modifier(MOVESPEED_ID_SANITY, TRUE) + master.remove_movespeed_modifier(MOVESPEED_ID_SANITY) sanity_level = 1 //update_mood_icon() diff --git a/code/datums/components/nanites.dm b/code/datums/components/nanites.dm index 7aacb745b6..29add286be 100644 --- a/code/datums/components/nanites.dm +++ b/code/datums/components/nanites.dm @@ -12,7 +12,7 @@ var/list/datum/nanite_program/programs = list() var/max_programs = NANITE_PROGRAM_LIMIT - var/list/datum/nanite_program/protocol/protocols = list() ///Separate list of protocol programs, to avoid looping through the whole programs list when cheking for conflicts + var/list/datum/nanite_program/protocol/protocols = list() ///Separate list of protocol programs, to avoid looping through the whole programs list when checking for conflicts var/start_time = 0 ///Timestamp to when the nanites were first inserted in the host var/stealth = FALSE //if TRUE, does not appear on HUDs and health scans var/diagnostics = TRUE //if TRUE, displays program list when scanned by nanite scanners @@ -175,7 +175,7 @@ return (nanite_volume > 0) /datum/component/nanites/proc/adjust_nanites(datum/source, amount) - nanite_volume = CLAMP(nanite_volume + amount, 0, max_nanites) + nanite_volume = clamp(nanite_volume + amount, 0, max_nanites) if(nanite_volume <= 0) //oops we ran out qdel(src) @@ -187,7 +187,7 @@ if(remove || stealth) return //bye icon var/nanite_percent = (nanite_volume / max_nanites) * 100 - nanite_percent = CLAMP(CEILING(nanite_percent, 10), 10, 100) + nanite_percent = clamp(CEILING(nanite_percent, 10), 10, 100) holder.icon_state = "nanites[nanite_percent]" /datum/component/nanites/proc/on_emp(datum/source, severity) @@ -249,13 +249,13 @@ return FALSE /datum/component/nanites/proc/set_volume(datum/source, amount) - nanite_volume = CLAMP(amount, 0, max_nanites) + nanite_volume = clamp(amount, 0, max_nanites) /datum/component/nanites/proc/set_max_volume(datum/source, amount) max_nanites = max(1, max_nanites) /datum/component/nanites/proc/set_cloud(datum/source, amount) - cloud_id = CLAMP(amount, 0, 100) + cloud_id = clamp(amount, 0, 100) /datum/component/nanites/proc/set_cloud_sync(datum/source, method) switch(method) @@ -267,7 +267,7 @@ cloud_active = TRUE /datum/component/nanites/proc/set_safety(datum/source, amount) - safety_threshold = CLAMP(amount, 0, max_nanites) + safety_threshold = clamp(amount, 0, max_nanites) /datum/component/nanites/proc/set_regen(datum/source, amount) regen_rate = amount diff --git a/code/datums/components/orbiter.dm b/code/datums/components/orbiter.dm index 2be22d01e5..49e6b91c6d 100644 --- a/code/datums/components/orbiter.dm +++ b/code/datums/components/orbiter.dm @@ -22,14 +22,14 @@ /datum/component/orbiter/RegisterWithParent() . = ..() var/atom/target = parent - while(ismovableatom(target)) + while(ismovable(target)) RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react) target = target.loc /datum/component/orbiter/UnregisterFromParent() . = ..() var/atom/target = parent - while(ismovableatom(target)) + while(ismovable(target)) UnregisterSignal(target, COMSIG_MOVABLE_MOVED) target = target.loc @@ -111,12 +111,12 @@ // These are prety rarely activated, how often are you following something in a bag? if(oldloc && !isturf(oldloc)) // We used to be registered to it, probably var/atom/target = oldloc - while(ismovableatom(target)) + while(ismovable(target)) UnregisterSignal(target, COMSIG_MOVABLE_MOVED) target = target.loc if(orbited?.loc && orbited.loc != newturf) // We want to know when anything holding us moves too var/atom/target = orbited.loc - while(ismovableatom(target)) + while(ismovable(target)) RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/move_react, TRUE) target = target.loc diff --git a/code/datums/components/riding.dm b/code/datums/components/riding.dm index 4d8cfc4412..00bb392787 100644 --- a/code/datums/components/riding.dm +++ b/code/datums/components/riding.dm @@ -21,7 +21,7 @@ var/list/offhands = list() // keyed list containing all the current riding offsets associated by mob /datum/component/riding/Initialize() - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, COMSIG_MOVABLE_BUCKLE, .proc/vehicle_mob_buckle) RegisterSignal(parent, COMSIG_MOVABLE_UNBUCKLE, .proc/vehicle_mob_unbuckle) @@ -198,13 +198,14 @@ /datum/component/riding/human/Initialize() . = ..() + directional_vehicle_layers = list(TEXT_NORTH = MOB_LOWER_LAYER, TEXT_SOUTH = MOB_UPPER_LAYER, TEXT_EAST = MOB_UPPER_LAYER, TEXT_WEST = MOB_UPPER_LAYER) RegisterSignal(parent, COMSIG_HUMAN_MELEE_UNARMED_ATTACK, .proc/on_host_unarmed_melee) /datum/component/riding/human/vehicle_mob_unbuckle(datum/source, mob/living/M, force = FALSE) . = ..() var/mob/living/carbon/human/H = parent if(!length(H.buckled_mobs)) - H.remove_movespeed_modifier(MOVESPEED_ID_HUMAN_CARRYING) + H.remove_movespeed_modifier(/datum/movespeed_modifier/human_carry) if(!fireman_carrying) M.Daze(25) REMOVE_TRAIT(M, TRAIT_MOBILITY_NOUSE, src) @@ -213,7 +214,7 @@ . = ..() var/mob/living/carbon/human/H = parent if(length(H.buckled_mobs)) - H.add_movespeed_modifier(MOVESPEED_ID_HUMAN_CARRYING, multiplicative_slowdown = fireman_carrying? FIREMAN_CARRY_SLOWDOWN : PIGGYBACK_CARRY_SLOWDOWN) + H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/human_carry, TRUE, fireman_carrying? FIREMAN_CARRY_SLOWDOWN : PIGGYBACK_CARRY_SLOWDOWN) if(fireman_carrying) ADD_TRAIT(M, TRAIT_MOBILITY_NOUSE, src) @@ -261,6 +262,10 @@ /datum/component/riding/cyborg +/datum/component/riding/cyborg/Initialize() + . = ..() + directional_vehicle_layers = list(TEXT_NORTH = MOB_LOWER_LAYER, TEXT_SOUTH = MOB_UPPER_LAYER, TEXT_EAST = MOB_UPPER_LAYER, TEXT_WEST = MOB_UPPER_LAYER) + /datum/component/riding/cyborg/ride_check(mob/user) var/atom/movable/AM = parent if(user.incapacitated()) diff --git a/code/datums/components/rotation.dm b/code/datums/components/rotation.dm index 422d73520e..6a32a46aef 100644 --- a/code/datums/components/rotation.dm +++ b/code/datums/components/rotation.dm @@ -14,7 +14,7 @@ var/default_rotation_direction = ROTATION_CLOCKWISE /datum/component/simple_rotation/Initialize(rotation_flags = NONE ,can_user_rotate,can_be_rotated,after_rotation) - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE //throw if no rotation direction is specificed ? diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm new file mode 100644 index 0000000000..2052e57f49 --- /dev/null +++ b/code/datums/components/shielded.dm @@ -0,0 +1,191 @@ +/datum/component/shielded + dupe_mode = COMPONENT_DUPE_ALLOWED + can_transfer = TRUE + var/charges = 3 + var/max_charges = 3 + var/recharge_delay = 20 SECONDS //How long after we've been attacked before we can start recharging. + var/recharge_rate = 1 //How quickly the shield recharges once it starts charging. Can be a decimal. set to zero to disable. + var/last_time_used //Last time the shield attempted to stop an attack. + var/accepted_slots + var/shield_state = "shield-old" //the state of the shield overlay. + var/broken_state //null by default. + var/recharge_sound = 'sound/magic/charge.ogg' + var/recharge_end_sound = 'sound/machines/ding.ogg' + var/mob/living/holder //who is currently benefiting from the shield. + var/dissipating = FALSE //Is this shield meant to dissipate over time instead of recharging. + var/del_on_overload = FALSE //will delete itself once it has no charges left. + +/datum/component/shielded/Initialize(current, max = 3, delay = 20 SECONDS, rate = 1, slots, state = "shield-old", broken, \ + sound = 'sound/magic/charge.ogg', end_sound = 'sound/machines/ding.ogg', diss = FALSE, del_overload = FALSE) + var/isitem = isitem(parent) + if(!isitem && !isliving(parent)) + return COMPONENT_INCOMPATIBLE + max_charges = max + charges = !isnull(current) ? current : max_charges + recharge_delay = delay + recharge_rate = rate + accepted_slots = slots + shield_state = state + broken_state = broken + recharge_sound = sound + recharge_end_sound = end_sound + dissipating = diss + del_on_overload = del_overload + if(dissipating && recharge_rate > 0) + recharge_rate = -recharge_rate + if(recharge_delay && recharge_rate && (charges < max_charges || dissipating)) + START_PROCESSING(SSdcs, src) + +/datum/component/shielded/RegisterWithParent() + . = ..() + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, .proc/on_equip) + RegisterSignal(parent, COMSIG_ITEM_DROPPED, .proc/on_drop) + else //it's a mob + var/mob/living/L = parent + RegisterSignal(L, COMSIG_LIVING_RUN_BLOCK, .proc/living_block) + holder = L + var/to_add = charges >= 1 ? shield_state : broken_state + if(to_add) + var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) + M.layer = (L.layer > MOB_LAYER ? L.layer : MOB_LAYER) + 0.01 + holder.add_overlay(M, TRUE) + +/datum/component/shielded/UnregisterFromParent() + . = ..() + if(parent != holder) //not a mob, thus an item. + UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK,COMSIG_ITEM_CHECK_BLOCK,COMSIG_ITEM_EQUIPPED,COMSIG_ITEM_DROPPED)) + if(holder) + UnregisterSignal(holder, list(COMSIG_LIVING_RUN_BLOCK, COMSIG_LIVING_GET_BLOCKING_ITEMS)) + var/to_remove = charges >= 1 ? shield_state : broken_state + if(to_remove) + holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + holder = null + +/datum/component/shielded/process() + if(world.time < last_time_used && !dissipating) + return + var/old_charges = charges + charges = clamp(charges + recharge_rate, 0, max_charges) + if(round(old_charges) >= round(charges)) //only send outputs if it effectively gained at least one charge + return + var/sound = recharge_sound + if(dissipating ? !charges : charges == max_charges ) + STOP_PROCESSING(SSdcs, src) + sound = recharge_end_sound + if(parent && sound) + playsound(parent, sound, 50, 1) + if(charges < 1 && del_on_overload) + if(holder) + holder.visible_message("[holder]'s shield overloads!") + qdel(src) + return + if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1)) + update_shield_overlay(charges < 1) + +/datum/component/shielded/proc/adjust_charges(amount) + var/old_charges = charges + charges = clamp(charges + amount, 0, max_charges) + if(recharge_delay && recharge_rate && (dissipating ? !charges : charges == max_charges)) + STOP_PROCESSING(SSdcs, src) + if(charges < 1 && del_on_overload) + if(holder) + holder.visible_message("[holder]'s shield overloads!") + qdel(src) + return + if(holder && (old_charges < 1 && charges >= 1) || (!del_on_overload && old_charges >= 1 && charges < 1)) + update_shield_overlay(charges < 1) + +/datum/component/shielded/proc/update_shield_overlay(broken) + if(!holder) + return + var/to_remove = broken ? shield_state : broken_state + var/to_add = broken ? broken_state : shield_state + if(to_remove) + holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + if(to_add) + var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) + M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 + holder.add_overlay(M, TRUE) + +/datum/component/shielded/proc/on_equip(obj/item/source, mob/living/equipper, slot) + if(!(accepted_slots & slotdefine2slotbit(slot))) + return + holder = equipper + RegisterSignal(parent, COMSIG_ITEM_RUN_BLOCK, .proc/on_run_block) + RegisterSignal(parent, COMSIG_ITEM_CHECK_BLOCK, .proc/on_check_block) + RegisterSignal(equipper, COMSIG_LIVING_GET_BLOCKING_ITEMS, .proc/include_shield) + var/to_add = charges >= 1 ? shield_state : broken_state + if(to_add) + var/mutable_appearance/M = mutable_appearance('icons/effects/effects.dmi', to_add) + M.layer = (holder.layer > MOB_LAYER ? holder.layer : MOB_LAYER) + 0.01 + equipper.add_overlay(M, TRUE) + +/datum/component/shielded/proc/on_drop(obj/item/source, mob/dropper) + if(holder == dropper) + UnregisterSignal(holder, COMSIG_LIVING_GET_BLOCKING_ITEMS) + UnregisterSignal(parent, list(COMSIG_ITEM_RUN_BLOCK, COMSIG_ITEM_CHECK_BLOCK)) + var/to_remove = charges >= 1 ? shield_state : broken_state + if(to_remove) + holder.cut_overlay(mutable_appearance('icons/effects/effects.dmi', to_remove), TRUE) + holder = null + +/datum/component/shielded/proc/include_shield(mob/source, list/items) + items += parent + +/datum/component/shielded/proc/on_run_block(obj/item/source, mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) + if(block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] >= 100) //already blocked by another shielded item, don't do anything. + block_return[BLOCK_RETURN_BLOCK_CAPACITY] += round(charges) + return BLOCK_NONE + last_time_used = world.time + recharge_delay + if(charges < 1) + return BLOCK_NONE + var/datum/effect_system/spark_spread/s = new + s.set_up(2, 1, source) + s.start() + owner.visible_message("[holder]'s shields deflect [attack_text] in a shower of sparks!") + charges-- + var/rounded_charges = round(charges) + if(recharge_delay && recharge_rate && !dissipating) + START_PROCESSING(SSdcs, src) + if(charges < 1) + owner.visible_message("[holder]'s shield overloads!") + if(del_on_overload) + qdel(src) + else + update_shield_overlay(TRUE) + block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + block_return[BLOCK_RETURN_BLOCK_CAPACITY] += rounded_charges + return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL + +/datum/component/shielded/proc/on_check_block(obj/item/source, mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) + if(charges >= 1) + block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + block_return[BLOCK_RETURN_BLOCK_CAPACITY] += round(charges) + +/datum/component/shielded/proc/living_block(mob/living/source, real_attack, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, return_list) + if(!real_attack) + if(charges >= 1) + return_list[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + return_list[BLOCK_RETURN_BLOCK_CAPACITY] = round(charges) + return + last_time_used = world.time + recharge_delay + if(charges < 1) + return BLOCK_NONE + var/datum/effect_system/spark_spread/s = new + s.set_up(2, 1, source) + s.start() + source.visible_message("[source]'s shields deflect [attack_text] in a shower of sparks!") + charges-- + var/rounded_charges = round(charges) + if(recharge_delay && recharge_rate && !dissipating) + START_PROCESSING(SSdcs, src) + if(charges < 1) + source.visible_message("[source]'s shield overloads!") + if(del_on_overload) + qdel(src) + else + update_shield_overlay(TRUE) + return_list[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 + return_list[BLOCK_RETURN_BLOCK_CAPACITY] += rounded_charges + return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL diff --git a/code/datums/components/shrink.dm b/code/datums/components/shrink.dm index f070d9b22f..96807fe313 100644 --- a/code/datums/components/shrink.dm +++ b/code/datums/components/shrink.dm @@ -14,7 +14,7 @@ parent_atom.opacity = 0 if(isliving(parent_atom)) var/mob/living/L = parent_atom - L.add_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY, update=TRUE, priority=100, multiplicative_slowdown=4) + L.add_movespeed_modifier(/datum/movespeed_modifier/shrink_ray) if(iscarbon(L)) var/mob/living/carbon/C = L C.unequip_everything() @@ -35,7 +35,7 @@ parent_atom.opacity = oldopac if(isliving(parent_atom)) var/mob/living/L = parent_atom - L.remove_movespeed_modifier(MOVESPEED_ID_SHRINK_RAY) + L.remove_movespeed_modifier(/datum/movespeed_modifier/shrink_ray) if(ishuman(L)) var/mob/living/carbon/human/H = L H.physiology.damage_resistance += 100 diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index ad538760db..792222b27b 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -16,7 +16,7 @@ if(!isatom(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY), .proc/play_squeak) - if(ismovableatom(parent)) + if(ismovable(parent)) RegisterSignal(parent, list(COMSIG_MOVABLE_BUMP, COMSIG_MOVABLE_IMPACT), .proc/play_squeak) RegisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ITEM_WEARERCROSSED), .proc/play_squeak_crossed) RegisterSignal(parent, COMSIG_MOVABLE_DISPOSING, .proc/disposing_react) diff --git a/code/datums/components/stationloving.dm b/code/datums/components/stationloving.dm index 13267e74c3..b651133274 100644 --- a/code/datums/components/stationloving.dm +++ b/code/datums/components/stationloving.dm @@ -5,7 +5,7 @@ var/allow_death = FALSE /datum/component/stationloving/Initialize(inform_admins = FALSE, allow_death = FALSE) - if(!ismovableatom(parent)) + if(!ismovable(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, list(COMSIG_MOVABLE_Z_CHANGED), .proc/check_in_bounds) RegisterSignal(parent, list(COMSIG_MOVABLE_SECLUDED_LOCATION), .proc/relocate) diff --git a/code/datums/components/storage/concrete/pockets.dm b/code/datums/components/storage/concrete/pockets.dm index 4d3ecc8d17..851885b2ed 100644 --- a/code/datums/components/storage/concrete/pockets.dm +++ b/code/datums/components/storage/concrete/pockets.dm @@ -56,7 +56,8 @@ /obj/item/scalpel, /obj/item/reagent_containers/syringe, /obj/item/dnainjector, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/dropper, /obj/item/implanter, /obj/item/screwdriver, /obj/item/weldingtool/mini, - /obj/item/firing_pin, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/automatic/magrifle/pistol + /obj/item/firing_pin, /obj/item/gun/ballistic/automatic/pistol, /obj/item/gun/ballistic/automatic/magrifle/pistol, + /obj/item/toy/plush/snakeplushie )) /datum/component/storage/concrete/pockets/shoes/clown/Initialize() diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index 4100942fec..aad6e8289f 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -15,6 +15,7 @@ var/datum/component/storage/concrete/master //If not null, all actions act on master and this is just an access point. var/list/can_hold //if this is set, only things in this typecache will fit. + var/list/can_hold_extra //if this is set, it will also be able to hold these. var/list/cant_hold //if this is set, anything in this typecache will not be able to fit. var/list/mob/is_using //lazy list of mobs looking at the contents of this storage. @@ -493,26 +494,25 @@ if(M && !stop_messages) host.add_fingerprint(M) return FALSE - if(length(can_hold)) - if(!is_type_in_typecache(I, can_hold)) + if(!length(can_hold_extra) || !is_type_in_typecache(I, can_hold_extra)) + if(length(can_hold) && !is_type_in_typecache(I, can_hold)) if(!stop_messages) to_chat(M, "[host] cannot hold [I]!") return FALSE - if(is_type_in_typecache(I, cant_hold)) //Check for specific items which this container can't hold. - if(!stop_messages) - to_chat(M, "[host] cannot hold [I]!") - return FALSE - // STORAGE LIMITS + if(is_type_in_typecache(I, cant_hold)) //Check for specific items which this container can't hold. + if(!stop_messages) + to_chat(M, "[host] cannot hold [I]!") + return FALSE + if(storage_flags & STORAGE_LIMIT_MAX_W_CLASS && I.w_class > max_w_class) + if(!stop_messages) + to_chat(M, "[I] is too long for [host]!") + return FALSE + // STORAGE LIMITS if(storage_flags & STORAGE_LIMIT_MAX_ITEMS) if(real_location.contents.len >= max_items) if(!stop_messages) to_chat(M, "[host] has too many things in it, make some space!") return FALSE //Storage item is full - if(storage_flags & STORAGE_LIMIT_MAX_W_CLASS) - if(I.w_class > max_w_class) - if(!stop_messages) - to_chat(M, "[I] is too long for [host]!") - return FALSE if(storage_flags & STORAGE_LIMIT_COMBINED_W_CLASS) var/sum_w_class = I.w_class for(var/obj/item/_I in real_location) diff --git a/code/datums/components/storage/ui.dm b/code/datums/components/storage/ui.dm index dd8607a51c..f37f574002 100644 --- a/code/datums/components/storage/ui.dm +++ b/code/datums/components/storage/ui.dm @@ -27,8 +27,8 @@ numbered_contents = _process_numerical_display() adjusted_contents = numbered_contents.len - var/columns = CLAMP(max_items, 1, maxcolumns ? maxcolumns : screen_max_columns) - var/rows = CLAMP(CEILING(adjusted_contents / columns, 1), 1, screen_max_rows) + var/columns = clamp(max_items, 1, maxcolumns ? maxcolumns : screen_max_columns) + var/rows = clamp(CEILING(adjusted_contents / columns, 1), 1, screen_max_rows) // First, boxes. ui_boxes = get_ui_boxes() @@ -105,7 +105,7 @@ // after this point we are sure we can somehow fit all items into our max number of rows. // determine rows - var/rows = CLAMP(CEILING(min_pixels / horizontal_pixels, 1), 1, screen_max_rows) + var/rows = clamp(CEILING(min_pixels / horizontal_pixels, 1), 1, screen_max_rows) var/overrun = FALSE if(used > our_volume) @@ -198,7 +198,7 @@ M.active_storage.ui_hide(M) M.active_storage = src LAZYOR(is_using, M) - if(volumetric_ui()) + if(!M.client?.prefs?.no_tetris_storage && volumetric_ui()) //new volumetric ui bay-style M.client.screen |= orient2hud_volumetric(M, maxallowedscreensize) else diff --git a/code/datums/components/tackle.dm b/code/datums/components/tackle.dm new file mode 100644 index 0000000000..ddc47d59a1 --- /dev/null +++ b/code/datums/components/tackle.dm @@ -0,0 +1,491 @@ +#define MAX_TABLE_MESSES 8 // how many things can we knock off a table at once? + +/** + *#tackle.dm + * + * For when you want to throw a person at something and have fun stuff happen + * + * This component is made for carbon mobs (really, humans), and allows its parent to throw themselves and perform tackles. This is done by enabling throw mode, then clicking on your + * intended target with an empty hand. You will then launch toward your target. If you hit a carbon, you'll roll to see how hard you hit them. If you hit a solid non-mob, you'll + * roll to see how badly you just messed yourself up. If, along your journey, you hit a table, you'll slam onto it and send up to MAX_TABLE_MESSES (8) /obj/items on the table flying, + * and take a bit of extra damage and stun for each thing launched. + * + * There are 2 """skill rolls""" involved here, which are handled and explained in sack() and rollTackle() (for roll 1, carbons), and splat() (for roll 2, walls and solid objects) +*/ +/datum/component/tackler + dupe_mode = COMPONENT_DUPE_UNIQUE + ///How much stamina it takes to launch a tackle + var/stamina_cost + ///Launching a tackle calls Knockdown on you for this long, so this is your cooldown. Once you stand back up, you can tackle again. + var/base_knockdown + ///Your max range for how far you can tackle. + var/range + ///How fast you sail through the air. Standard tackles are 1 speed, but gloves that throw you faster come at a cost: higher speeds make it more likely you'll be badly injured if you fly into a non-mob obstacle. + var/speed + ///A flat modifier to your roll against your target, as described in [rollTackle()][/datum/component/tackler/proc/rollTackle]. Slightly misleading, skills aren't relevant here, this is a matter of what type of gloves (or whatever) is granting you the ability to tackle. + var/skill_mod + ///Some gloves, generally ones that increase mobility, may have a minimum distance to fly. Rocket gloves are especially dangerous with this, be sure you'll hit your target or have a clear background if you miss, or else! + var/min_distance + ///The throwdatum we're currently dealing with, if we need it + var/datum/thrownthing/tackle + +/datum/component/tackler/Initialize(stamina_cost = 25, base_knockdown = 1 SECONDS, range = 4, speed = 1, skill_mod = 0, min_distance = min_distance) + if(!iscarbon(parent)) + return COMPONENT_INCOMPATIBLE + + src.stamina_cost = stamina_cost + src.base_knockdown = base_knockdown + src.range = range + src.speed = speed + src.skill_mod = skill_mod + src.min_distance = min_distance + + var/mob/living/carbon/P = parent + to_chat(P, "You are now able to launch tackles! You can do so by activating throw intent, and clicking on your target with an empty hand.") + P.tackling = TRUE + addtimer(CALLBACK(src, .proc/resetTackle), base_knockdown, TIMER_STOPPABLE) + +/datum/component/tackler/Destroy() + var/mob/living/carbon/P = parent + to_chat(P, "You can no longer tackle.") + P.tackling = FALSE + ..() + +/datum/component/tackler/RegisterWithParent() + RegisterSignal(parent, COMSIG_MOB_CLICKON, .proc/checkTackle) + RegisterSignal(parent, COMSIG_MOVABLE_IMPACT, .proc/sack) + RegisterSignal(parent, COMSIG_MOVABLE_POST_THROW, .proc/registerTackle) + +/datum/component/tackler/UnregisterFromParent() + UnregisterSignal(parent, list(COMSIG_MOB_CLICKON, COMSIG_MOVABLE_IMPACT, COMSIG_MOVABLE_MOVED, COMSIG_MOVABLE_POST_THROW)) + +///Store the thrownthing datum for later use +/datum/component/tackler/proc/registerTackle(mob/living/carbon/user, datum/thrownthing/TT) + tackle = TT + +///See if we can tackle or not. If we can, leap! +/datum/component/tackler/proc/checkTackle(mob/living/carbon/user, atom/A, params) + if(!user.in_throw_mode || user.get_active_held_item() || user.pulling || user.buckling) + return + + if(HAS_TRAIT(user, TRAIT_HULK)) + to_chat(user, "You're too angry to remember how to tackle!") + return + + if(user.restrained()) + to_chat(user, "You need free use of your hands to tackle!") + return + + if(!(user.mobility_flags & MOBILITY_STAND)) + to_chat(user, "You must be standing to tackle!") + return + + if(user.tackling) + to_chat(user, "You're not ready to tackle!") + return + + if(user.has_status_effect(STATUS_EFFECT_TASED)) // can't tackle if you just got tased + to_chat(user, "You can't tackle while tased!") + return + + user.face_atom(A) + + var/list/modifiers = params2list(params) + if(modifiers["alt"] || modifiers["shift"] || modifiers["ctrl"] || modifiers["middle"]) + return + + user.tackling = TRUE + RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/checkObstacle) + playsound(user, 'sound/weapons/thudswoosh.ogg', 40, TRUE, -1) + + var/leap_word = iscatperson(user) ? "pounce" : "leap" ///If cat, "pounce" instead of "leap". + if(can_see(user, A, 7)) + user.visible_message("[user] [leap_word]s at [A]!", "You [leap_word] at [A]!") + else + user.visible_message("[user] [leap_word]s!", "You [leap_word]!") + + if(get_dist(user, A) < min_distance) + A = get_ranged_target_turf(user, get_dir(user, A), min_distance) //TODO: this only works in cardinals/diagonals, make it work with in-betweens too! + + user.Knockdown(base_knockdown, TRUE, TRUE) + user.adjustStaminaLoss(stamina_cost) + user.throw_at(A, range, speed, user, FALSE) + user.toggle_throw_mode() + addtimer(CALLBACK(src, .proc/resetTackle), base_knockdown, TIMER_STOPPABLE) + return(COMSIG_MOB_CANCEL_CLICKON) + +/** + * sack() + * + * sack() is called when you actually smack into something, assuming we're mid-tackle. First it deals with smacking into non-carbons, in two cases: + * * If it's a non-carbon mob, we don't care, get out of here and do normal thrown-into-mob stuff + * * Else, if it's something dense (walls, machinery, structures, most things other than the floor), go to splat() and get ready for some high grade shit + * + * If it's a carbon we hit, we'll call rollTackle() which rolls a die and calculates modifiers for both the tackler and target, then gives us a number. Negatives favor the target, while positives favor the tackler. + * Check [rollTackle()][/datum/component/tackler/proc/rollTackle] for a more thorough explanation on the modifiers at play. + * + * Then, we figure out what effect we want, and we get to work! Note that with standard gripper gloves and no modifiers, the range of rolls is (-3, 3). The results are as follows, based on what we rolled: + * * -inf to -5: Seriously botched tackle, tackler suffers a concussion, brute damage, and a 3 second paralyze, target suffers nothing + * * -4 to -2: weak tackle, tackler gets 3 second knockdown, target gets shove slowdown but is otherwise fine + * * -1 to 0: decent tackle, tackler gets up a bit quicker than the target + * * 1: solid tackle, tackler has more of an advantage getting up quicker + * * 2 to 4: expert tackle, tackler has sizeable advantage and lands on their feet with a free passive grab + * * 5 to inf: MONSTER tackle, tackler gets up immediately and gets a free aggressive grab, target takes sizeable stamina damage from the hit and is paralyzed for one and a half seconds and knocked down for three seconds + * + * Finally, we return a bitflag to [COMSIG_MOVABLE_IMPACT] that forces the hitpush to false so that we don't knock them away. +*/ +/datum/component/tackler/proc/sack(mob/living/carbon/user, atom/hit) + if(!user.tackling || !tackle) + return + + if(!iscarbon(hit)) + if(hit.density) + return splat(user, hit) + return + + var/mob/living/carbon/target = hit + var/tackle_word = iscatperson(user) ? "pounce" : "tackle" ///If cat, "pounce" instead of "tackle". + + var/roll = rollTackle(target) + user.tackling = FALSE + + switch(roll) + if(-INFINITY to -5) + user.visible_message("[user] botches [user.p_their()] [tackle_word] and slams [user.p_their()] head into [target], knocking [user.p_them()]self silly!", "You botch your [tackle_word] and slam your head into [target], knocking yourself silly!", target) + to_chat(target, "[user] botches [user.p_their()] [tackle_word] and slams [user.p_their()] head into you, knocking [user.p_them()]self silly!") + + user.Paralyze(30) + var/obj/item/bodypart/head/hed = user.get_bodypart(BODY_ZONE_HEAD) + if(hed) + hed.receive_damage(brute=20, updating_health=TRUE) + user.gain_trauma(/datum/brain_trauma/mild/concussion) + + if(-4 to -2) // glancing blow at best + user.visible_message("[user] lands a weak [tackle_word] on [target], briefly knocking [target.p_them()] off-balance!", "You land a weak [tackle_word] on [target], briefly knocking [target.p_them()] off-balance!", target) + to_chat(target, "[user] lands a weak [tackle_word] on you, briefly knocking you off-balance!") + + user.Knockdown(30) + target.apply_status_effect(STATUS_EFFECT_TASED_WEAK, 6 SECONDS) + + if(-1 to 0) // decent hit, both parties are about equally inconvenienced + user.visible_message("[user] lands a passable [tackle_word] on [target], sending them both tumbling!", "You land a passable [tackle_word] on [target], sending you both tumbling!", target) + to_chat(target, "[user] lands a passable [tackle_word] on you, sending you both tumbling!") + + target.adjustStaminaLoss(stamina_cost) + target.Paralyze(5) + user.Knockdown(20) + target.Knockdown(25) + + if(1 to 2) // solid hit, tackler has a slight advantage + user.visible_message("[user] lands a solid [tackle_word] on [target], knocking them both down hard!", "You land a solid [tackle_word] on [target], knocking you both down hard!", target) + to_chat(target, "[user] lands a solid [tackle_word] on you, knocking you both down hard!") + + target.adjustStaminaLoss(30) + target.Paralyze(5) + user.Knockdown(10) + target.Knockdown(20) + + if(3 to 4) // really good hit, the target is definitely worse off here. Without positive modifiers, this is as good a tackle as you can land + user.visible_message("[user] lands an expert [tackle_word] on [target], knocking [target.p_them()] down hard while landing on [user.p_their()] feet with a passive grip!", "You land an expert [tackle_word] on [target], knocking [target.p_them()] down hard while landing on your feet with a passive grip!", target) + to_chat(target, "[user] lands an expert [tackle_word] on you, knocking you down hard and maintaining a passive grab!") + + user.SetKnockdown(0) + user.set_resting(FALSE, TRUE, FALSE) + user.forceMove(get_turf(target)) + target.adjustStaminaLoss(40) + target.Paralyze(5) + target.Knockdown(30) + if(ishuman(target) && iscarbon(user)) + target.grabbedby(user) + + if(5 to INFINITY) // absolutely BODIED + user.visible_message("[user] lands a monster [tackle_word] on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", "You land a monster [tackle_word] on [target], knocking [target.p_them()] senseless and applying an aggressive pin!", target) + to_chat(target, "[user] lands a monster [tackle_word] on you, knocking you senseless and aggressively pinning you!") + + user.SetKnockdown(0) + user.set_resting(FALSE, TRUE, FALSE) + user.forceMove(get_turf(target)) + target.adjustStaminaLoss(40) + target.Paralyze(5) + target.Knockdown(30) + if(ishuman(target) && iscarbon(user)) + target.grabbedby(user) + target.grippedby(user, instant = TRUE) + + SEND_SIGNAL(user, COMSIG_CARBON_TACKLED, roll) + return COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH + +/** + * rollTackle() + * + * This handles all of the modifiers for the actual carbon-on-carbon tackling, and gets its own proc because of how many there are (with plenty more in mind!) + * + * The base roll is between (-3, 3), with negative numbers favoring the target, and positive numbers favoring the tackler. The target and the tackler are both assessed for + * how easy they are to knock over, with clumsiness and dwarfiness being strong maluses for each, and gigantism giving a bonus for each. These numbers and ideas + * are absolutely subject to change. + + * In addition, after subtracting the defender's mod and adding the attacker's mod to the roll, the component's base (skill) mod is added as well. Some sources of tackles + * are better at taking people down, like the bruiser and rocket gloves, while the dolphin gloves have a malus in exchange for better mobility. +*/ +/datum/component/tackler/proc/rollTackle(mob/living/carbon/target) + var/defense_mod = 0 + var/attack_mod = 0 + + // DE-FENSE + if(target.drunkenness > 60) // drunks are easier to knock off balance + defense_mod -= 3 + else if(target.drunkenness > 30) + defense_mod -= 1 + if(HAS_TRAIT(target, TRAIT_CLUMSY)) + defense_mod -= 2 + if(HAS_TRAIT(target, TRAIT_FAT)) // chonkers are harder to knock over + defense_mod += 1 + //if(HAS_TRAIT(target, TRAIT_GRABWEAKNESS)) Todo, port the pushover trait + //defense_mod -= 2 + if(HAS_TRAIT(target, TRAIT_DWARF)) + defense_mod -= 2 + if(HAS_TRAIT(target, TRAIT_GIANT)) + defense_mod += 2 + + if(ishuman(target)) + var/mob/living/carbon/human/T = target + var/suit_slot = T.get_item_by_slot(ITEM_SLOT_OCLOTHING) + + if(isnull(T.wear_suit) && isnull(T.w_uniform)) // who honestly puts all of their effort into tackling a naked guy? + defense_mod += 2 + if(suit_slot && (istype(suit_slot,/obj/item/clothing/suit/space/hardsuit))) + defense_mod += 1 + if(T.is_shove_knockdown_blocked()) // riot armor and such + defense_mod += 5 + if(T.is_holding_item_of_type(/obj/item/shield)) + defense_mod += 2 + + if(islizard(T)) + if(!T.getorganslot(ORGAN_SLOT_TAIL)) // lizards without tails are off-balance + defense_mod -= 1 + else if(T.dna.species.is_wagging_tail()) // lizard tail wagging is robust and can swat away assailants! + defense_mod += 1 + + // OF-FENSE + var/mob/living/carbon/sacker = parent + + if(sacker.drunkenness > 60) // you're far too drunk to hold back! + attack_mod += 1 + else if(sacker.drunkenness > 30) // if you're only a bit drunk though, you're just sloppy + attack_mod -= 1 + if(HAS_TRAIT(sacker, TRAIT_CLUMSY)) + attack_mod -= 2 + if(HAS_TRAIT(sacker, TRAIT_DWARF)) + attack_mod -= 2 + if(HAS_TRAIT(sacker, TRAIT_GIANT)) + attack_mod += 2 + + if(ishuman(target)) + var/mob/living/carbon/human/S = sacker + + var/suit_slot = S.get_item_by_slot(ITEM_SLOT_OCLOTHING) + if(suit_slot && (istype(suit_slot,/obj/item/clothing/suit/armor/riot))) // tackling in riot armor is more effective, but tiring + attack_mod += 2 + sacker.adjustStaminaLoss(20) + + var/r = rand(-3, 3) - defense_mod + attack_mod + skill_mod + return r + + +/** + * splat() + * + * This is where we handle diving into dense atoms, generally with effects ranging from bad to REALLY bad. This works as a percentile roll that is modified in two steps as detailed below. The higher + * the roll, the more severe the result. + * + * Mod 1: Speed + * * Base tackle speed is 1, which is what normal gripper gloves use. For other sources with higher speed tackles, like dolphin and ESPECIALLY rocket gloves, we obey Newton's laws and hit things harder. + * * For every unit of speed above 1, move the lower bound of the roll up by 15. Unlike Mod 2, this only serves to raise the lower bound, so it can't be directly counteracted by anything you can control. + * + * Mod 2: Misc + * -Flat modifiers, these take whatever you rolled and add/subtract to it, with the end result capped between the minimum from Mod 1 and 100. Note that since we can't roll higher than 100 to start with, + * wearing a helmet should be enough to remove any chance of permanently paralyzing yourself and dramatically lessen knocking yourself unconscious, even with rocket gloves. Will expand on maybe + * * Wearing a helmet: -6 + * * Wearing armor: -6 + * * Clumsy: +6 + * + * Effects: Below are the outcomes based off your roll, in order of increasing severity + * * 1-63: Knocked down for a few seconds and a bit of brute and stamina damage + * * 64-83: Knocked silly, gain some confusion as well as the above + * * 84-93: Cranial trauma, get a concussion and more confusion, plus more damage + * * 94-98: Knocked unconscious, significant chance to get a random mild brain trauma, as well as a fair amount of damage + * * 99-100: Break your spinal cord, get paralyzed, take a bunch of damage too. Very unlucky! +*/ +/datum/component/tackler/proc/splat(mob/living/carbon/user, atom/hit) + if(istype(hit, /obj/structure/window)) + var/obj/structure/window/W = hit + splatWindow(user, W) + if(QDELETED(W)) + return COMPONENT_MOVABLE_IMPACT_NEVERMIND + return + + var/oopsie_mod = 0 + var/danger_zone = (speed - 1) * 15 // for every extra speed we have over 1, take away 15 of the safest chance + danger_zone = max(min(danger_zone, 100), 1) + + if(ishuman(user)) + var/mob/living/carbon/human/S = user + var/head_slot = S.get_item_by_slot(ITEM_SLOT_HEAD) + var/suit_slot = S.get_item_by_slot(ITEM_SLOT_OCLOTHING) + if(head_slot && (istype(head_slot,/obj/item/clothing/head/helmet) || istype(head_slot,/obj/item/clothing/head/hardhat))) + oopsie_mod -= 6 + if(suit_slot && (istype(suit_slot,/obj/item/clothing/suit/armor/))) + oopsie_mod -= 6 + + if(HAS_TRAIT(user, TRAIT_CLUMSY)) + oopsie_mod += 6 //honk! + + var/oopsie = rand(danger_zone, 100) + if(oopsie >= 94 && oopsie_mod < 0) // good job avoiding getting paralyzed! gold star! + to_chat(user, "You're really glad you're wearing protection!") + oopsie += oopsie_mod + + switch(oopsie) + if(99 to INFINITY) + // can you imagine standing around minding your own business when all of the sudden some guy fucking launches himself into a wall at full speed and irreparably paralyzes himself? + user.visible_message("[user] slams face-first into [hit] at an awkward angle, severing [user.p_their()] spinal column with a sickening crack! Holy shit!", "You slam face-first into [hit] at an awkward angle, severing your spinal column with a sickening crack! Holy shit!") + user.adjustStaminaLoss(30) + user.adjustBruteLoss(30) + playsound(user, 'sound/effects/blobattack.ogg', 60, TRUE) + playsound(user, 'sound/effects/splat.ogg', 70, TRUE) + user.emote("scream") + user.gain_trauma(/datum/brain_trauma/severe/paralysis/paraplegic) // oopsie indeed! + shake_camera(user, 7, 7) + user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) + user.clear_fullscreen("flash", 4.5) + + if(94 to 98) + user.visible_message("[user] slams face-first into [hit] with a concerning squish, immediately going limp!", "You slam face-first into [hit], and immediately lose consciousness!") + user.adjustStaminaLoss(100) + user.adjustBruteLoss(30) + user.Unconscious(100) + user.gain_trauma_type(BRAIN_TRAUMA_MILD) + user.playsound_local(get_turf(user), 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9) + shake_camera(user, 6, 6) + user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) + user.clear_fullscreen("flash", 3.5) + + if(84 to 93) + user.visible_message("[user] slams head-first into [hit], suffering major cranial trauma!", "You slam head-first into [hit], and the world explodes around you!") + user.adjustStaminaLoss(30) + user.adjustBruteLoss(30) + user.confused += 15 + if(prob(80)) + user.gain_trauma(/datum/brain_trauma/mild/concussion) + user.playsound_local(get_turf(user), 'sound/weapons/flashbang.ogg', 100, TRUE, 8, 0.9) + user.DefaultCombatKnockdown(40) + shake_camera(user, 5, 5) + user.overlay_fullscreen("flash", /obj/screen/fullscreen/flash) + user.clear_fullscreen("flash", 2.5) + + if(64 to 83) + user.visible_message("[user] slams hard into [hit], knocking [user.p_them()] senseless!", "You slam hard into [hit], knocking yourself senseless!") + user.adjustStaminaLoss(30) + user.adjustBruteLoss(10) + user.confused += 10 + user.DefaultCombatKnockdown(30) + shake_camera(user, 3, 4) + + if(1 to 63) + user.visible_message("[user] slams into [hit]!", "You slam into [hit]!") + user.adjustStaminaLoss(20) + user.adjustBruteLoss(10) + user.DefaultCombatKnockdown(30) + shake_camera(user, 2, 2) + + playsound(user, 'sound/weapons/smash.ogg', 70, TRUE) + + +/datum/component/tackler/proc/resetTackle() + var/mob/living/carbon/P = parent + P.tackling = FALSE + QDEL_NULL(tackle) + UnregisterSignal(parent, COMSIG_MOVABLE_MOVED) + +///A special case for splatting for handling windows +/datum/component/tackler/proc/splatWindow(mob/living/carbon/user, obj/structure/window/W) + playsound(user, "sound/effects/Glasshit.ogg", 140, TRUE) + + if(W.type in list(/obj/structure/window, /obj/structure/window/fulltile, /obj/structure/window/unanchored, /obj/structure/window/fulltile/unanchored)) // boring unreinforced windows + for(var/i = 0, i < speed, i++) + var/obj/item/shard/shard = new /obj/item/shard(get_turf(user)) + //shard.embedding = list(embed_chance = 100, ignore_throwspeed_threshold = TRUE, impact_pain_mult=3, pain_chance=5) + //shard.AddElement(/datum/element/embed, shard.embedding) + user.hitby(shard, skipcatch = TRUE, hitpush = FALSE) + //shard.embedding = list() + //shard.AddElement(/datum/element/embed, shard.embedding) + W.obj_destruction() + user.adjustStaminaLoss(10 * speed) + user.DefaultCombatKnockdown(40) + user.Paralyze(5) + user.visible_message("[user] slams into [W] and shatters it, shredding [user.p_them()]self with glass!", "You slam into [W] and shatter it, shredding yourself with glass!") + + else + user.visible_message("[user] slams into [W] like a bug, then slowly slides off it!", "You slam into [W] like a bug, then slowly slide off it!") + user.Paralyze(2) + user.DefaultCombatKnockdown(20) + W.take_damage(20 * speed) + user.adjustStaminaLoss(10 * speed) + user.adjustBruteLoss(5 * speed) + +/datum/component/tackler/proc/delayedSmash(obj/structure/window/W) + if(W) + W.obj_destruction() + playsound(W, "shatter", 70, TRUE) + +///Check to see if we hit a table, and if so, make a big mess! +/datum/component/tackler/proc/checkObstacle(mob/living/carbon/owner) + if(!owner.tackling) + return + + var/turf/T = get_turf(owner) + var/obj/structure/table/kevved = locate(/obj/structure/table) in T.contents + if(!kevved) + return + + var/list/messes = list() + + // we split the mess-making into two parts (check what we're gonna send flying, intermission for dealing with the tackler, then actually send stuff flying) for the benefit of making sure the face-slam text + // comes before the list of stuff that goes flying, but can still adjust text + damage to how much of a mess it made + for(var/obj/item/I in T.contents) + if(!I.anchored) + messes += I + if(messes.len >= MAX_TABLE_MESSES) + break + + /// for telling HOW big of a mess we just made + var/HOW_big_of_a_miss_did_we_just_make = "" + if(messes.len) + if(messes.len < MAX_TABLE_MESSES / 4) + HOW_big_of_a_miss_did_we_just_make = ", making a mess" + else if(messes.len < MAX_TABLE_MESSES / 2) + HOW_big_of_a_miss_did_we_just_make = ", making a big mess" + else if(messes.len < MAX_TABLE_MESSES) + HOW_big_of_a_miss_did_we_just_make = ", making a giant mess" + else + HOW_big_of_a_miss_did_we_just_make = ", making a ginormous mess!" // an extra exclamation point!! for emphasis!!! + + owner.visible_message("[owner] trips over [kevved] and slams into it face-first[HOW_big_of_a_miss_did_we_just_make]!", "You trip over [kevved] and slam into it face-first[HOW_big_of_a_miss_did_we_just_make]!") + owner.adjustStaminaLoss(20 + messes.len * 2) + owner.adjustBruteLoss(10 + messes.len) + owner.Paralyze(2 * messes.len) + owner.DefaultCombatKnockdown(20 + 5 * messes.len) // 2 seconds of knockdown after the paralyze + + for(var/obj/item/I in messes) + var/dist = rand(1, 3) + var/sp = 2 + if(prob(25 * (src.speed - 1))) // if our tackle speed is higher than 1, with chance (speed - 1 * 25%), throw the thing at our tackle speed + 1 + sp = speed + 1 + I.throw_at(get_ranged_target_turf(I, pick(GLOB.alldirs), range = dist), range = dist, speed = sp) + I.visible_message("[I] goes flying[sp > 3 ? " dangerously fast" : ""]!") // standard embed speed + + playsound(owner, 'sound/weapons/smash.ogg', 70, TRUE) + tackle.finalize(hit=TRUE) + resetTackle() + +#undef MAX_TABLE_MESSES diff --git a/code/datums/components/wet_floor.dm b/code/datums/components/wet_floor.dm index 30c6625049..0fbbcd59b0 100644 --- a/code/datums/components/wet_floor.dm +++ b/code/datums/components/wet_floor.dm @@ -181,7 +181,7 @@ /datum/component/wet_floor/proc/_do_add_wet(type, duration_minimum, duration_add, duration_maximum) var/time = 0 if(LAZYACCESS(time_left_list, "[type]")) - time = CLAMP(LAZYACCESS(time_left_list, "[type]") + duration_add, duration_minimum, duration_maximum) + time = clamp(LAZYACCESS(time_left_list, "[type]") + duration_add, duration_minimum, duration_maximum) else time = min(duration_minimum, duration_maximum) LAZYSET(time_left_list, "[type]", time) diff --git a/code/datums/dash_weapon.dm b/code/datums/dash_weapon.dm index c31139dcd7..80570d0c3b 100644 --- a/code/datums/dash_weapon.dm +++ b/code/datums/dash_weapon.dm @@ -42,7 +42,7 @@ addtimer(CALLBACK(src, .proc/charge), charge_rate) /datum/action/innate/dash/proc/charge() - current_charges = CLAMP(current_charges + 1, 0, max_charges) + current_charges = clamp(current_charges + 1, 0, max_charges) holder.update_action_buttons_icon() if(recharge_sound) playsound(dashing_item, recharge_sound, 50, 1) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index f97fde6f7e..348f9e6778 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -29,7 +29,8 @@ VV_DROPDOWN_OPTION(VV_HK_MARK, "Mark Object") VV_DROPDOWN_OPTION(VV_HK_DELETE, "Delete") VV_DROPDOWN_OPTION(VV_HK_EXPOSE, "Show VV To Player") -// VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRAITS, "Modify Traits") + VV_DROPDOWN_OPTION(VV_HK_ADDCOMPONENT, "Add Component/Element") + VV_DROPDOWN_OPTION(VV_HK_MODIFY_TRAITS, "Modify Traits") //This proc is only called if everything topic-wise is verified. The only verifications that should happen here is things like permission checks! //href_list is a reference, modifying it in these procs WILL change the rest of the proc in topic.dm of admin/view_variables! @@ -37,8 +38,8 @@ /datum/proc/vv_do_topic(list/href_list) if(!usr || !usr.client || !usr.client.holder || !check_rights(NONE)) return FALSE //This is VV, not to be called by anything else. -// if(href_list[VV_HK_MODIFY_TRAITS]) -// usr.client.holder.modify_traits(src) + if(href_list[VV_HK_MODIFY_TRAITS]) + usr.client.holder.modify_traits(src) return TRUE /datum/proc/vv_get_header() diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 330a3494d9..7e3ac29b2d 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -246,10 +246,10 @@ else visibility_flags &= ~HIDDEN_SCANNER - SetSpread(CLAMP(2 ** (properties["transmittable"] - symptoms.len), DISEASE_SPREAD_BLOOD, DISEASE_SPREAD_AIRBORNE)) + SetSpread(clamp(2 ** (properties["transmittable"] - symptoms.len), DISEASE_SPREAD_BLOOD, DISEASE_SPREAD_AIRBORNE)) permeability_mod = max(CEILING(0.4 * properties["transmittable"], 1), 1) - cure_chance = 15 - CLAMP(properties["resistance"], -5, 5) // can be between 10 and 20 + cure_chance = 15 - clamp(properties["resistance"], -5, 5) // can be between 10 and 20 stage_prob = max(properties["stage_rate"], 2) SetSeverity(properties["severity"]) GenerateCure(properties) @@ -304,7 +304,7 @@ // Will generate a random cure, the less resistance the symptoms have, the harder the cure. /datum/disease/advance/proc/GenerateCure() if(properties && properties.len) - var/res = CLAMP(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len) + var/res = clamp(properties["resistance"] - (symptoms.len / 2), 1, advance_cures.len) if(res == oldres) return cures = list(pick(advance_cures[res])) diff --git a/code/datums/dna.dm b/code/datums/dna.dm index e08d5c509c..e0df2a8f1b 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -309,7 +309,7 @@ unique_enzymes = generate_unique_enzymes() uni_identity = generate_uni_identity() generate_dna_blocks() - features = random_features(species?.id) + features = random_features(species?.id, holder?.gender) /datum/dna/stored //subtype used by brain mob's stored_dna @@ -662,6 +662,6 @@ var/danger = CONFIG_GET(number/threshold_body_size_slowdown) if(features["body_size"] < danger) var/slowdown = 1 + round(danger/features["body_size"], 0.1) * CONFIG_GET(number/body_size_slowdown_multiplier) - holder.add_movespeed_modifier(MOVESPEED_ID_SMALL_STRIDE, TRUE, 100, NONE, TRUE, slowdown, ALL, FLOATING|CRAWLING) + holder.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/small_stride, TRUE, slowdown) else if(old_size < danger) - holder.remove_movespeed_modifier(MOVESPEED_ID_SMALL_STRIDE) + holder.remove_movespeed_modifier(/datum/movespeed_modifier/small_stride) diff --git a/code/datums/elements/cleaning.dm b/code/datums/elements/cleaning.dm index 3f80204089..d86fe22632 100644 --- a/code/datums/elements/cleaning.dm +++ b/code/datums/elements/cleaning.dm @@ -1,6 +1,6 @@ /datum/element/cleaning/Attach(datum/target) . = ..() - if(!ismovableatom(target)) + if(!ismovable(target)) return ELEMENT_INCOMPATIBLE RegisterSignal(target, COMSIG_MOVABLE_MOVED, .proc/Clean) diff --git a/code/datums/elements/firestacker.dm b/code/datums/elements/firestacker.dm index 39021d23bb..771812242f 100644 --- a/code/datums/elements/firestacker.dm +++ b/code/datums/elements/firestacker.dm @@ -10,7 +10,7 @@ /datum/element/firestacker/Attach(datum/target, amount) . = ..() - if(!ismovableatom(target)) + if(!ismovable(target)) return ELEMENT_INCOMPATIBLE src.amount = amount diff --git a/code/datums/elements/squish.dm b/code/datums/elements/squish.dm new file mode 100644 index 0000000000..823d391e14 --- /dev/null +++ b/code/datums/elements/squish.dm @@ -0,0 +1,28 @@ +#define SHORT 5/7 +#define TALL 7/5 + +/datum/element/squish + element_flags = ELEMENT_DETACH + +/datum/element/squish/Attach(datum/target, duration) + . = ..() + if(!iscarbon(target)) + return ELEMENT_INCOMPATIBLE + + var/mob/living/carbon/C = target + var/was_lying = (C.lying != 0) + addtimer(CALLBACK(src, .proc/Detach, C, was_lying), duration) + + C.transform = C.transform.Scale(TALL, SHORT) + +/datum/element/squish/Detach(mob/living/carbon/C, was_lying) + . = ..() + if(istype(C)) + var/is_lying = (C.lying != 0) + if(was_lying == is_lying) + C.transform = C.transform.Scale(SHORT, TALL) + else + C.transform = C.transform.Scale(TALL, SHORT) + +#undef SHORT +#undef TALL diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm index 7be4489e86..f763affcd1 100644 --- a/code/datums/explosion.dm +++ b/code/datums/explosion.dm @@ -121,14 +121,14 @@ GLOBAL_LIST_EMPTY(explosions) if(dist <= round(max_range + world.view - 2, 1)) M.playsound_local(epicenter, null, 100, 1, frequency, falloff = 5, S = explosion_sound) if(baseshakeamount > 0) - shake_camera(M, 25, CLAMP(baseshakeamount, 0, 10)) + shake_camera(M, 25, clamp(baseshakeamount, 0, 10)) // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station. else if(dist <= far_dist) - var/far_volume = CLAMP(far_dist, 30, 50) // Volume is based on explosion size and dist + var/far_volume = clamp(far_dist, 30, 50) // Volume is based on explosion size and dist far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion M.playsound_local(epicenter, null, far_volume, 1, frequency, falloff = 5, S = far_explosion_sound) if(baseshakeamount > 0) - shake_camera(M, 10, CLAMP(baseshakeamount*0.25, 0, 2.5)) + shake_camera(M, 10, clamp(baseshakeamount*0.25, 0, 2.5)) EX_PREPROCESS_CHECK_TICK //postpone processing for a bit diff --git a/code/datums/martial/krav_maga.dm b/code/datums/martial/krav_maga.dm index 4332b09ac6..f054867de4 100644 --- a/code/datums/martial/krav_maga.dm +++ b/code/datums/martial/krav_maga.dm @@ -116,7 +116,7 @@ "[A] slams your chest! You can't breathe!") playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) if(D.losebreath <= 10) - D.losebreath = CLAMP(D.losebreath + 5, 0, 10) + D.losebreath = clamp(D.losebreath + 5, 0, 10) D.adjustOxyLoss(damage + 5) log_combat(A, D, "quickchoked") return TRUE @@ -128,7 +128,7 @@ playsound(get_turf(A), 'sound/effects/hit_punch.ogg', 50, 1, -1) D.apply_damage(damage, BRUTE) if(D.silent <= 10) - D.silent = CLAMP(D.silent + 10, 0, 10) + D.silent = clamp(D.silent + 10, 0, 10) log_combat(A, D, "neck chopped") return TRUE @@ -187,7 +187,7 @@ if(damage >= stunthreshold) D.visible_message("[D] sputters and recoils in pain!", "You recoil in pain as you are jabbed in a nerve!") D.drop_all_held_items() - + return TRUE //Krav Maga Gloves diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index c3d0deeac6..f07b1d8792 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -92,7 +92,7 @@ Unless you know what you're doing, only use the first three numbers. They're in /datum/material/plasma/on_applied(atom/source, amount, material_flags) . = ..() - if(ismovableatom(source)) + if(ismovable(source)) source.AddElement(/datum/element/firestacker, amount=1) source.AddComponent(/datum/component/explodable, 0, 0, amount / 2500, amount / 1250) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 31704d5451..728c4fb51b 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -63,7 +63,11 @@ var/force_escaped = FALSE // Set by Into The Sunset command of the shuttle manipulator var/list/learned_recipes //List of learned recipe TYPES. + /// Our skill holder. + var/datum/skill_holder/skill_holder + /datum/mind/New(var/key) + skill_holder = new src.key = key soulOwner = src martial_art = default_martial_art diff --git a/code/datums/mutations/body.dm b/code/datums/mutations/body.dm index ab7fe986fb..9f8c74e2db 100644 --- a/code/datums/mutations/body.dm +++ b/code/datums/mutations/body.dm @@ -81,6 +81,7 @@ /datum/mutation/human/dwarfism/on_acquiring(mob/living/carbon/human/owner) if(..()) return + ADD_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION) owner.transform = owner.transform.Scale(1, 0.8) passtable_on(owner, GENETIC_MUTATION) owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..") @@ -88,6 +89,7 @@ /datum/mutation/human/dwarfism/on_losing(mob/living/carbon/human/owner) if(..()) return + REMOVE_TRAIT(owner, TRAIT_DWARF, GENETIC_MUTATION) owner.transform = owner.transform.Scale(1, 1.25) passtable_off(owner, GENETIC_MUTATION) owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..") @@ -339,6 +341,7 @@ /datum/mutation/human/gigantism/on_acquiring(mob/living/carbon/human/owner) if(..()) return + ADD_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) owner.resize = 1.25 owner.update_transform() owner.visible_message("[owner] suddenly grows!", "Everything around you seems to shrink..") @@ -346,6 +349,7 @@ /datum/mutation/human/gigantism/on_losing(mob/living/carbon/human/owner) if(..()) return + REMOVE_TRAIT(owner, TRAIT_GIANT, GENETIC_MUTATION) owner.resize = 0.8 owner.update_transform() owner.visible_message("[owner] suddenly shrinks!", "Everything around you seems to grow..") diff --git a/code/datums/position_point_vector.dm b/code/datums/position_point_vector.dm index 44ff87e8ae..608683c3dc 100644 --- a/code/datums/position_point_vector.dm +++ b/code/datums/position_point_vector.dm @@ -20,7 +20,7 @@ return sqrt(((b.x - a.x) ** 2) + ((b.y - a.y) ** 2)) /proc/angle_between_points(datum/point/a, datum/point/b) - return ATAN2((b.y - a.y), (b.x - a.x)) + return arctan((b.y - a.y), (b.x - a.x)) /datum/position //For positions with map x/y/z and pixel x/y so you don't have to return lists. Could use addition/subtraction in the future I guess. var/x = 0 diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index faecf809cc..fbc194cc6f 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -38,7 +38,7 @@ if (user.client) user.client.images += bar - progress = CLAMP(progress, 0, goal) + progress = clamp(progress, 0, goal) bar.icon_state = "prog_bar_[round(((progress / goal) * 100), 5)]" if (!shown) user.client.images += bar diff --git a/code/datums/skills/_check_skills.dm b/code/datums/skills/_check_skills.dm new file mode 100644 index 0000000000..d9dc6dad3d --- /dev/null +++ b/code/datums/skills/_check_skills.dm @@ -0,0 +1,16 @@ +// yeah yeah verbs suck whatever I suck at this fix this someone please - kevinz000 + +/mob/verb/check_skills() + set name = "Check Skills" + set category = "IC" + set desc = "Check your skills (if you have any..)" + + if(!mind) + to_chat(usr, "How do you check the skills of [(usr == src)? "yourself when you are" : "something"] without a mind?") + return + if(!mind.skill_holder) + to_chat(usr, "How do you check the skills of [(usr == src)? "yourself when you are" : "something"] without the capability for skills? (PROBABLY A BUG, PRESS F1.)") + return + var/datum/browser/B = new(usr, "skilldisplay_[REF(src)]", "Skills of [src]") + B.set_content(mind.skill_holder.html_readout()) + B.open() diff --git a/code/datums/skills/_skill.dm b/code/datums/skills/_skill.dm new file mode 100644 index 0000000000..2dd321c4c6 --- /dev/null +++ b/code/datums/skills/_skill.dm @@ -0,0 +1,95 @@ +GLOBAL_LIST_INIT(skill_datums, init_skill_datums()) + +/proc/init_skill_datums() + . = list() + for(var/path in subtypesof(/datum/skill)) + var/datum/skill/S = path + if(initial(S.abstract_type) == path) + continue + S = new path + .[S.type] = S + +/proc/get_skill_datum(path) + return GLOB.skill_datums[path] + +/proc/sanitize_skill_value(path, value) + var/datum/skill/S = get_skill_datum(path) + // don't check, if we runtime let it happen. + return S.sanitize_value(value) + +/proc/is_skill_value_greater(path, existing, new_value) + var/datum/skill/S = get_skill_datum(path) + // don't check, if we runtime let it happen. + return S.is_value_greater(existing, new_value) + +/** + * Skill datums + */ +/datum/skill + /// Our name + var/name + /// Our description + var/desc + /// Our progression type + var/progression_type + /// Abstract type + var/abstract_type = /datum/skill + +/** + * Ensures what someone's setting as a value for this skill is valid. + */ +/datum/skill/proc/sanitize_value(new_value) + return new_value + +/** + * Checks if a value is greater + */ +/datum/skill/proc/is_value_greater(existing, new_value) + if(!existing) + return TRUE + return new_value > existing + +/** + * Standard value "render" + */ +/datum/skill/proc/standard_render_value(value) + return value + +// Just saying, the choice to use different sub-parent-types is to force coders to resolve issues as I won't be implementing custom procs to grab skill levels in a certain context. +// Aka: So people don't forget to change checks if they change a skill's progression type. + +/datum/skill/binary + abstract_type = /datum/skill/binary + progression_type = SKILL_PROGRESSION_BINARY + +/datum/skill/binary/sanitize_value(new_value) + return new_value? TRUE : FALSE + +/datum/skill/binary/standard_render_value(value) + return value? "Yes" : "No" + +/datum/skill/numerical + abstract_type = /datum/skill/numerical + progression_type = SKILL_PROGRESSION_NUMERICAL + /// Max value of this skill + var/max_value = 100 + /// Min value of this skill + var/min_value = 0 + /// Display as a percent in standard_render_value? + var/display_as_percent = FALSE + +/datum/skill/numerical/sanitize_value(new_value) + return clamp(new_value, min_value, max_value) + +/datum/skill/numerical/standard_render_value(value) + return display_as_percent? "[round(value/max_value/100, 0.01)]%" : "[value] / [max_value]" + +/datum/skill/enum + abstract_type = /datum/skill/enum + progression_type = SKILL_PROGRESSION_ENUM + /// Valid values for the skill + var/list/valid_values = list() + +/datum/skill/enum/sanitize_value(new_value) + if(new_value in valid_values) + return new_value diff --git a/code/datums/skills/_skill_holder.dm b/code/datums/skills/_skill_holder.dm new file mode 100644 index 0000000000..352adc46ff --- /dev/null +++ b/code/datums/skills/_skill_holder.dm @@ -0,0 +1,78 @@ +/** + * Skill holder datums + */ +/datum/skill_holder + /// Our list of skills and values. Lazylist. Associative. Keys are datum typepaths to the skill. + var/list/skills + /// Same as [skills] but affinities, which are multiplied to increase amount when gaining skills. + var/list/skill_affinities + +/** + * Grabs the value of a skill. + */ +/datum/skill_holder/proc/get_skill_value(skill) + if(!ispath(skill)) + CRASH("Invalid get_skill_value call. Use typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this. + if(!skills) + return null + return skills[skill] + +/** + * Grabs our affinity for a skill. !!This is a multiplier!! + */ +/datum/skill_holder/proc/get_skill_affinity(skill) + if(!ispath(skill)) + CRASH("Invalid get_skill_affinity call. Use typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this. + if(!skills) + return 1 + var/affinity = skill_affinities[skill] + if(isnull(affinity)) + return 1 + return affinity + +/** + * Sets the value of a skill. + */ +/datum/skill_holder/proc/set_skill_value(skill, value) + if(!ispath(skill)) + CRASH("Invalid set_skill_value call. Use typepaths.") //until a time when we somehow need text ids for dynamic skills, I'm enforcing this. + LAZYINITLIST(skills) + value = sanitize_skill_value(skill, value) + if(!isnull(value)) + skills[skill] = value + return TRUE + return FALSE + +/** + * Boosts a skill to a value if not aobve + */ +/datum/skill_holder/proc/boost_skill_value_to(skill, value) + var/current = get_skill_value(skill) + if(!is_skill_value_greater(skill, current, value)) + return FALSE + set_skill_value(skill, value) + return TRUE + +/** + * Automatic skill increase, multiplied by skill affinity if existing. + * Only works if skill is numerical. + */ +/datum/skill_holder/proc/auto_gain_experience(skill, value) + if(!ispath(skill, /datum/skill/numerical)) + CRASH("You cannot auto increment a non numerical skill!") + var/current = get_skill_value(skill) + var/affinity = get_skill_affinity(skill) + boost_skill_value_to(skill, current + (value * affinity)) + +/** + * Generates a HTML readout of our skills. + * Port to tgui-next when? + */ +/datum/skill_holder/proc/html_readout() + var/list/out = list("

Skills


") + out += "" + for(var/path in skills) + var/datum/skill/S = GLOB.skill_datums[path] + out += "" + out += "
SkillValue
[S.name][S.standard_render_value(skills[path])]
" + return out.Join("") diff --git a/code/datums/skills/medical.dm b/code/datums/skills/medical.dm new file mode 100644 index 0000000000..3b67cacb04 --- /dev/null +++ b/code/datums/skills/medical.dm @@ -0,0 +1,3 @@ +/datum/skill/numerical/surgery + name = "Surgery" + desc = "How proficient you are at doing surgery." diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 69b74841df..680c0a89c4 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -120,12 +120,12 @@ /datum/status_effect/mesmerize/on_creation(mob/living/new_owner, set_duration) . = ..() ADD_TRAIT(owner, TRAIT_MUTE, "mesmerize") - owner.add_movespeed_modifier("[STATUS_EFFECT_MESMERIZE]_[id]", TRUE, priority = 64, override = TRUE, multiplicative_slowdown = 5, blacklisted_movetypes = FALSE? NONE : CRAWLING) + owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/mesmerize) /datum/status_effect/mesmerize/on_remove() . = ..() REMOVE_TRAIT(owner, TRAIT_MUTE, "mesmerize") - owner.remove_movespeed_modifier("[STATUS_EFFECT_MESMERIZE]_[id]") + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/mesmerize) /datum/status_effect/mesmerize/on_creation(mob/living/new_owner, set_duration) if(isnum(set_duration)) @@ -141,9 +141,7 @@ /datum/status_effect/electrode id = "tased" alert_type = null - var/slowdown = 1.5 - var/slowdown_priority = 50 //to make sure the stronger effect overrides - var/affect_crawl = FALSE + var/movespeed_mod = /datum/movespeed_modifier/status_effect/tased var/nextmove_modifier = 1 var/stamdmg_per_ds = 0 //a 20 duration would do 20 stamdmg, disablers do 24 or something var/last_tick = 0 //fastprocess processing speed is a goddamn sham, don't trust it. @@ -155,12 +153,12 @@ last_tick = world.time if(iscarbon(owner)) var/mob/living/carbon/C = owner - C.add_movespeed_modifier("[MOVESPEED_ID_TASED_STATUS]_[id]", TRUE, priority = slowdown_priority, override = TRUE, multiplicative_slowdown = slowdown, blacklisted_movetypes = affect_crawl? NONE : CRAWLING) + C.add_movespeed_modifier(movespeed_mod) /datum/status_effect/electrode/on_remove() if(iscarbon(owner)) var/mob/living/carbon/C = owner - C.remove_movespeed_modifier("[MOVESPEED_ID_TASED_STATUS]_[id]") + C.remove_movespeed_modifier(movespeed_mod) . = ..() /datum/status_effect/electrode/tick() @@ -178,8 +176,7 @@ /datum/status_effect/electrode/no_combat_mode id = "tased_strong" - slowdown = 8 - slowdown_priority = 100 + movespeed_mod = /datum/movespeed_modifier/status_effect/tased/no_combat_mode nextmove_modifier = 2 blocks_combatmode = TRUE stamdmg_per_ds = 1 @@ -336,7 +333,7 @@ if(prob(severity * 0.15)) to_chat(owner, "\"[text2ratvar(pick(mania_messages))]\"") owner.playsound_local(get_turf(motor), hum, severity, 1) - owner.adjust_drugginess(CLAMP(max(severity * 0.075, 1), 0, max(0, 50 - owner.druggy))) //7.5% of severity per second, minimum 1 + owner.adjust_drugginess(clamp(max(severity * 0.075, 1), 0, max(0, 50 - owner.druggy))) //7.5% of severity per second, minimum 1 if(owner.hallucination < 50) owner.hallucination = min(owner.hallucination + max(severity * 0.075, 1), 50) //7.5% of severity per second, minimum 1 if(owner.dizziness < 50) @@ -594,7 +591,7 @@ old_health = owner.health if(!old_oxyloss) old_oxyloss = owner.getOxyLoss() - var/health_difference = old_health - owner.health - CLAMP(owner.getOxyLoss() - old_oxyloss,0, owner.getOxyLoss()) + var/health_difference = old_health - owner.health - clamp(owner.getOxyLoss() - old_oxyloss,0, owner.getOxyLoss()) if(!health_difference) return owner.visible_message("The light in [owner]'s eyes dims as [owner.p_theyre()] harmed!", \ @@ -650,11 +647,11 @@ if(isnum(set_duration)) duration = set_duration . = ..() - owner.add_movespeed_modifier(MOVESPEED_ID_ELECTROSTAFF, multiplicative_slowdown = 1, movetypes = GROUND) + owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/electrostaff) /datum/status_effect/electrostaff/on_remove() . = ..() - owner.remove_movespeed_modifier(MOVESPEED_ID_ELECTROSTAFF) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/electrostaff) //GOLEM GANG diff --git a/code/datums/wires/autoylathe.dm b/code/datums/wires/autoylathe.dm deleted file mode 100644 index 736c9551ec..0000000000 --- a/code/datums/wires/autoylathe.dm +++ /dev/null @@ -1,48 +0,0 @@ -/datum/wires/autoylathe - holder_type = /obj/machinery/autoylathe - proper_name = "Autoylathe" - -/datum/wires/autoylathe/New(atom/holder) - wires = list( - WIRE_HACK, WIRE_DISABLE, - WIRE_SHOCK, WIRE_ZAP - ) - add_duds(6) - ..() - -/datum/wires/autoylathe/interactable(mob/user) - var/obj/machinery/autoylathe/A = holder - if(A.panel_open) - return TRUE - -/datum/wires/autoylathe/get_status() - var/obj/machinery/autoylathe/A = holder - var/list/status = list() - status += "The red light is [A.disabled ? "on" : "off"]." - status += "The blue light is [A.hacked ? "on" : "off"]." - return status - -/datum/wires/autoylathe/on_pulse(wire) - var/obj/machinery/autoylathe/A = holder - switch(wire) - if(WIRE_HACK) - A.adjust_hacked(!A.hacked) - addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60) - if(WIRE_SHOCK) - A.shocked = !A.shocked - addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60) - if(WIRE_DISABLE) - A.disabled = !A.disabled - addtimer(CALLBACK(A, /obj/machinery/autoylathe.proc/reset, wire), 60) - -/datum/wires/autoylathe/on_cut(wire, mend) - var/obj/machinery/autoylathe/A = holder - switch(wire) - if(WIRE_HACK) - A.adjust_hacked(!mend) - if(WIRE_HACK) - A.shocked = !mend - if(WIRE_DISABLE) - A.disabled = !mend - if(WIRE_ZAP) - A.shock(usr, 50) diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index c2855250f4..30699d36f4 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -169,7 +169,7 @@ .["real_mode"] = SSticker.mode.name // Key-authed callers may know the truth behind the "secret" - .["security_level"] = get_security_level() + .["security_level"] = NUM2SECLEVEL(GLOB.security_level) .["round_duration"] = SSticker ? round((world.time-SSticker.round_start_time)/10) : 0 // Amount of world's ticks in seconds, useful for calculating round duration diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 40090c35c5..b71f51bd07 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -192,7 +192,7 @@ reagents = new() reagents.reagent_list.Add(A) reagents.conditional_update() - else if(ismovableatom(A)) + else if(ismovable(A)) var/atom/movable/M = A if(isliving(M.loc)) var/mob/living/L = M.loc @@ -692,7 +692,7 @@ /atom/vv_get_dropdown() . = ..() VV_DROPDOWN_OPTION("", "---------") - if(!ismovableatom(src)) + if(!ismovable(src)) var/turf/curturf = get_turf(src) if(curturf) . += "" diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 6089d11d6c..b86c7e9729 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -68,7 +68,7 @@ if(vs.plane == EMISSIVE_BLOCKER_PLANE) SSvis_overlays.remove_vis_overlay(src, list(vs)) break - SSvis_overlays.add_vis_overlay(src, icon, icon_state, EMISSIVE_BLOCKER_LAYER, EMISSIVE_BLOCKER_PLANE) + SSvis_overlays.add_vis_overlay(src, icon, icon_state, EMISSIVE_BLOCKER_LAYER, EMISSIVE_BLOCKER_PLANE, dir) /atom/movable/proc/can_zFall(turf/source, levels = 1, turf/target, direction) if(!direction) @@ -251,8 +251,13 @@ /atom/movable/proc/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) set waitfor = 0 - SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) - return hit_atom.hitby(src, throwingdatum=throwingdatum) + var/hitpush = TRUE + var/impact_signal = SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) + if(impact_signal & COMPONENT_MOVABLE_IMPACT_FLIP_HITPUSH) + hitpush = FALSE // hacky, tie this to something else or a proper workaround later + + if(impact_signal & ~COMPONENT_MOVABLE_IMPACT_NEVERMIND) // in case a signal interceptor broke or deleted the thing before we could process our hit + return hit_atom.hitby(src, throwingdatum = throwingdatum, hitpush = hitpush) /atom/movable/hitby(atom/movable/AM, skipcatch, hitpush = TRUE, blocked, datum/thrownthing/throwingdatum) if(!anchored && hitpush && (!throwingdatum || (throwingdatum.force >= (move_resist * MOVE_FORCE_PUSH_RATIO)))) diff --git a/code/game/gamemodes/bloodsucker/bloodsucker.dm b/code/game/gamemodes/bloodsucker/bloodsucker.dm index bb776d7bc0..c54de16e2e 100644 --- a/code/game/gamemodes/bloodsucker/bloodsucker.dm +++ b/code/game/gamemodes/bloodsucker/bloodsucker.dm @@ -53,7 +53,7 @@ restricted_jobs += "Assistant" // Set number of Vamps - recommended_enemies = CLAMP(round(num_players()/10), 1, 6); + recommended_enemies = clamp(round(num_players()/10), 1, 6); // Select Antags for(var/i = 0, i < recommended_enemies, i++) @@ -195,7 +195,7 @@ return FALSE if(target.stat > UNCONSCIOUS) return FALSE - + // Check Overdose: Am I even addicted to blood? Do I even have any in me? //if (!target.reagents.addiction_list || !target.reagents.reagent_list) //message_admins("DEBUG2: can_make_vassal() Abort: No reagents") diff --git a/code/game/gamemodes/dynamic/dynamic.dm b/code/game/gamemodes/dynamic/dynamic.dm index d548f373db..659d50c077 100644 --- a/code/game/gamemodes/dynamic/dynamic.dm +++ b/code/game/gamemodes/dynamic/dynamic.dm @@ -40,8 +40,10 @@ GLOBAL_VAR_INIT(dynamic_stacking_limit, 90) GLOBAL_LIST_EMPTY(dynamic_forced_roundstart_ruleset) // Forced threat level, setting this to zero or higher forces the roundstart threat to the value. GLOBAL_VAR_INIT(dynamic_forced_threat_level, -1) - +// Storyteller picked by the voting. GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic) +// Storyteller forced by admins during voting--will be used instead of above. +GLOBAL_VAR_INIT(dynamic_forced_storyteller, null) /datum/game_mode/dynamic name = "dynamic mode" @@ -164,7 +166,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic) dat += "Current threat: [threat] \[Adjust\] \[View Log\]
" dat += "
" - dat += "Storyteller: [storyteller.name]
" + dat += "Storyteller: [storyteller.name]
" dat += "Parameters: centre = [GLOB.dynamic_curve_centre] ; width = [GLOB.dynamic_curve_width].
" dat += "On average, [peaceful_percentage]% of the rounds are more peaceful.
" dat += "Forced extended: [GLOB.dynamic_forced_extended ? "On" : "Off"]
" @@ -222,6 +224,15 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic) show_threatlog(usr) else if (href_list["stacking_limit"]) GLOB.dynamic_stacking_limit = input(usr,"Change the threat limit at which round-endings rulesets will start to stack.", "Change stacking limit", null) as num + else if (href_list["change_storyteller"]) + var/list/choices = list() + for(var/T in config.storyteller_cache) + var/datum/dynamic_storyteller/S = T + choices[initial(S.name)] = T + var/selected_storyteller = choices[input("Select storyteller:", "Storyteller", storyteller.name) as null|anything in choices] + storyteller = new selected_storyteller + storyteller.on_start() + message_admins("[key_name(usr)] changed the storyteller to [storyteller].", 1) admin_panel() // Refreshes the window @@ -243,7 +254,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic) /datum/game_mode/dynamic/send_intercept() . = "Central Command Status Summary
" switch(round(threat_level)) - if(0 to 20) + if(-INFINITY to 20) . += "Peaceful Waypoint
" . += "Your station orbits deep within controlled, core-sector systems and serves as a waypoint for routine traffic through Nanotrasen's trade empire. Due to the combination of high security, interstellar traffic, and low strategic value, it makes any direct threat of violence unlikely. Your primary enemies will be incompetence and bored crewmen: try to organize team-building events to keep staffers interested and productive. However, even deep in our territory there may be subversive elements, especially for such a high-value target as your station. Keep an eye out, but don't expect much trouble." set_security_level(SEC_LEVEL_GREEN) @@ -275,7 +286,7 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic) . += "Black Orbit
" . += "As part of a mandatory security protocol, we are required to inform you that as a result of your orbital pattern directly behind an astrological body (oriented from our nearest observatory), your station will be under decreased monitoring and support. It is anticipated that your extreme location and decreased surveillance could pose security risks. Avoid unnecessary risks and attempt to keep your station in one piece." set_security_level(SEC_LEVEL_AMBER) - if(96 to 100) + if(96 to INFINITY) . += "Impending Doom
" . += "Your station is somehow in the middle of hostile territory, in clear view of any enemy of the corporation. Your likelihood to survive is low, and station destruction is expected and almost inevitable. Secure any sensitive material and neutralize any enemy you will come across. It is important that you at least try to maintain the station.
" . += "Good luck." @@ -346,6 +357,8 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic) SSblackbox.record_feedback("tally","dynamic_threat",peaceful_percentage,"Percent of same-vote rounds that are more peaceful") /datum/game_mode/dynamic/can_start() + if(GLOB.dynamic_forced_storyteller) + GLOB.dynamic_storyteller_type = GLOB.dynamic_forced_storyteller storyteller = new GLOB.dynamic_storyteller_type // this is where all the initialization happens storyteller.on_start() SSblackbox.record_feedback("text","dynamic_storyteller",1,storyteller.name) @@ -441,6 +454,8 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic) if(!drafted_rules.len) message_admins("Not enough threat level for roundstart antags!") log_game("DYNAMIC: Not enough threat level for roundstart antags!") + midround_injection_cooldown = round((midround_injection_cooldown + world.time) / 2, 1) + latejoin_injection_cooldown = round((latejoin_injection_cooldown + world.time) / 2, 1) var/indice_pop = min(10,round(roundstart_pop_ready/pop_per_requirement)+1) extra_rulesets_amount = 0 if (GLOB.dynamic_classic_secret) @@ -721,7 +736,8 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic) if (O.started_as_observer) // Observers current_players[CURRENT_OBSERVERS].Add(M) continue - current_players[CURRENT_DEAD_PLAYERS].Add(M) // Players who actually died (and admins who ghosted, would be nice to avoid counting them somehow) + if(!M.voluntary_ghosted) + current_players[CURRENT_DEAD_PLAYERS].Add(M) // Players who actually died (and admins who ghosted, would be nice to avoid counting them somehow) threat = storyteller.calculate_threat() + added_threat if(threat_average_weight) var/cur_sample_weight = world.time - last_threat_sample_time @@ -823,3 +839,11 @@ GLOBAL_VAR_INIT(dynamic_storyteller_type, /datum/dynamic_storyteller/classic) return RULE_OF_THREE(40, 20, x) + 50 if (20 to INFINITY) return rand(90, 100) + +/datum/game_mode/dynamic/ghost_info() + . = list() + . += "Current threat: [threat]" + . += "Target threat: [threat_level]" + . += "Storyteller: [storyteller.name]
" + . += "Parameters: centre = [GLOB.dynamic_curve_centre] ; width = [GLOB.dynamic_curve_width].
" + . += "On average, [peaceful_percentage]% of the rounds are more peaceful.
" diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 48e306b2b5..4378a5c440 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -105,7 +105,7 @@ if (M.mind && M.mind.assigned_role && (M.mind.assigned_role in enemy_roles) && (!(M in candidates) || (M.mind.assigned_role in restricted_roles))) job_check++ // Checking for "enemies" (such as sec officers). To be counters, they must either not be candidates to that rule, or have a job that restricts them from it - var/threat = CLAMP(round(mode.threat_level/10),1,10) + var/threat = clamp(round(mode.threat_level/10),1,10) if (job_check < required_enemies[threat]) SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough enemy roles") return FALSE @@ -671,7 +671,7 @@ message_admins("[ADMIN_LOOKUPFLW(Ninja)] has been made into a ninja by dynamic.") log_game("[key_name(Ninja)] was spawned as a ninja by dynamic.") return Ninja - + /datum/dynamic_ruleset/midround/from_ghosts/ninja/finish_setup(mob/new_character, index) return diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm index a7fc9b86ce..edaadeae1c 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_roundstart.dm @@ -789,7 +789,7 @@ if (prob(meteorminutes/2)) wavetype = GLOB.meteors_catastrophic - var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10) + var/ramp_up_final = clamp(round(meteorminutes/rampupdelta), 1, 10) spawn_meteors(ramp_up_final, wavetype) diff --git a/code/game/gamemodes/dynamic/dynamic_storytellers.dm b/code/game/gamemodes/dynamic/dynamic_storytellers.dm index c37eb9bc2a..561b38fde1 100644 --- a/code/game/gamemodes/dynamic/dynamic_storytellers.dm +++ b/code/game/gamemodes/dynamic/dynamic_storytellers.dm @@ -11,7 +11,7 @@ WAROPS_ALWAYS_ALLOWED: Can always do warops, regardless of threat level. USE_PREF_WEIGHTS: Will use peoples' preferences to change the threat centre. FORCE_IF_WON: If this mode won the vote, forces it - USE_PREV_ROUND_WEIGHTS: Changes its threat centre based on the average chaos of previous rounds. + USE_PREV_ROUND_WEIGHTS: Changes its threat centre based on the average chaos of previous rounds. */ var/flags = 0 var/dead_player_weight = 1 // How much dead players matter for threat calculation @@ -22,11 +22,11 @@ var/datum/game_mode/dynamic/mode = null // Cached as soon as it's made, by dynamic. /** -Property weights are: +Property weights are: "story_potential" -- essentially how many different ways the antag can be played. "trust" -- How much it makes the crew trust each other. Negative values means they're suspicious. Team antags are like this. "chaos" -- How chaotic it makes the round. Has some overlap with "valid" and somewhat contradicts "extended". -"valid" -- How likely the non-antag-enemy crew are to get involved, e.g. nukies encouraging the warden to +"valid" -- How likely the non-antag-enemy crew are to get involved, e.g. nukies encouraging the warden to let everyone into the armory, wizard moving around and being a nuisance, nightmare busting lights. "extended" -- How much the antag is conducive to a long round. Nukies and cults are bad for this; Wizard is less bad; and so on. "conversion" -- Basically a bool. Conversion antags, well, convert. It's its own class for a good reason. @@ -34,13 +34,13 @@ Property weights are: /datum/dynamic_storyteller/proc/start_injection_cooldowns() var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_latejoin_delay_max + GLOB.dynamic_first_latejoin_delay_min) - mode.latejoin_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_first_latejoin_delay_min, GLOB.dynamic_first_latejoin_delay_max)) + world.time + mode.latejoin_injection_cooldown = round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_first_latejoin_delay_min, GLOB.dynamic_first_latejoin_delay_max)) + world.time var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_first_midround_delay_min + GLOB.dynamic_first_midround_delay_max) - mode.midround_injection_cooldown = round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_first_midround_delay_min, GLOB.dynamic_first_midround_delay_max)) + world.time - + mode.midround_injection_cooldown = round(clamp(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_first_midround_delay_min, GLOB.dynamic_first_midround_delay_max)) + world.time + var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min) - mode.event_injection_cooldown = (round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time) + mode.event_injection_cooldown = (round(clamp(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + world.time) /datum/dynamic_storyteller/proc/calculate_threat() var/threat = 0 @@ -99,15 +99,15 @@ Property weights are: /datum/dynamic_storyteller/proc/get_midround_cooldown() var/midround_injection_cooldown_middle = 0.5*(GLOB.dynamic_midround_delay_max + GLOB.dynamic_midround_delay_min) - return round(CLAMP(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max)) + return round(clamp(EXP_DISTRIBUTION(midround_injection_cooldown_middle), GLOB.dynamic_midround_delay_min, GLOB.dynamic_midround_delay_max)) /datum/dynamic_storyteller/proc/get_event_cooldown() var/event_injection_cooldown_middle = 0.5*(GLOB.dynamic_event_delay_max + GLOB.dynamic_event_delay_min) - return round(CLAMP(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) + return round(clamp(EXP_DISTRIBUTION(event_injection_cooldown_middle), GLOB.dynamic_event_delay_min, GLOB.dynamic_event_delay_max)) /datum/dynamic_storyteller/proc/get_latejoin_cooldown() var/latejoin_injection_cooldown_middle = 0.5*(GLOB.dynamic_latejoin_delay_max + GLOB.dynamic_latejoin_delay_min) - return round(CLAMP(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) + return round(clamp(EXP_DISTRIBUTION(latejoin_injection_cooldown_middle), GLOB.dynamic_latejoin_delay_min, GLOB.dynamic_latejoin_delay_max)) /datum/dynamic_storyteller/proc/get_injection_chance(dry_run = FALSE) if(mode.forced_injection) @@ -115,7 +115,7 @@ Property weights are: return 100 var/threat_perc = mode.threat/mode.threat_level - return round(max(0,100*(1-(threat_perc*threat_perc*threat_perc)))) + return clamp(round(100*(1-(threat_perc*threat_perc))**2,1),0,100) /datum/dynamic_storyteller/proc/roundstart_draft() var/list/drafted_rules = list() @@ -144,7 +144,7 @@ Property weights are: if(!(rule.flags & MINOR_RULESET)) // makes the traitor rulesets always possible anyway var/cost_difference = abs(rule.cost-(mode.threat_level-mode.threat)) /* Basically, the closer the cost is to the current threat-level-away-from-threat, the more likely it is to - pick this particular ruleset. + pick this particular ruleset. Let's use a toy example: there's 60 threat level and 10 threat spent. We want to pick a ruleset that's close to that, so we run the below equation, on two rulesets. Ruleset 1 has 30 cost, ruleset 2 has 5 cost. @@ -152,7 +152,7 @@ Property weights are: is 2.26 times as likely to be picked, all other things considered. Of course, we don't want it to GUARANTEE the closest, that's no fun, so it's just a weight. */ - threat_weight = 1-abs(1-LOGISTIC_FUNCTION(2,0.05,cost_difference,0)) + threat_weight = abs(1-abs(1-LOGISTIC_FUNCTION(2,0.05,cost_difference,0))) if (rule.ready()) var/property_weight = 0 for(var/property in property_weights) @@ -209,10 +209,10 @@ Property weights are: weight = 1 event_frequency_lower = 2 MINUTES event_frequency_upper = 10 MINUTES - flags = WAROPS_ALWAYS_ALLOWED - min_players = 40 + flags = WAROPS_ALWAYS_ALLOWED | FORCE_IF_WON + min_players = 30 var/refund_cooldown = 0 - + /datum/dynamic_storyteller/chaotic/do_process() if(refund_cooldown < world.time) mode.create_threat(20) @@ -221,7 +221,7 @@ Property weights are: /datum/dynamic_storyteller/chaotic/get_midround_cooldown() return ..() / 4 - + /datum/dynamic_storyteller/chaotic/get_latejoin_cooldown() return ..() / 4 @@ -232,7 +232,7 @@ Property weights are: curve_centre = 2 curve_width = 1.5 weight = 2 - min_players = 30 + min_players = 20 flags = WAROPS_ALWAYS_ALLOWED | USE_PREV_ROUND_WEIGHTS property_weights = list("valid" = 3, "trust" = 5) @@ -331,7 +331,7 @@ Property weights are: /datum/dynamic_storyteller/story/calculate_threat() var/current_time = (world.time / SSautotransfer.targettime)*180 mode.threat_level = round(mode.initial_threat_level*(sin(current_time)+0.25),0.1) - ..() + return ..() /datum/dynamic_storyteller/classic name = "Classic" @@ -358,7 +358,7 @@ Property weights are: flags = NO_ASSASSIN | FORCE_IF_WON weight = 1 dead_player_weight = 5 - property_weights = list("extended" = 2, "chaos" = -1, "valid" = -1, "story_potential" = 1, "conversion" = -10) + property_weights = list("extended" = 2, "chaos" = -1, "valid" = -1, "conversion" = -10) /datum/dynamic_storyteller/no_antag name = "Extended" diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 57919863f2..e2c549d911 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -604,3 +604,7 @@ /// Mode specific admin panel. /datum/game_mode/proc/admin_panel() return + +/// Mode specific info for ghost game_info +/datum/game_mode/proc/ghost_info() + return diff --git a/code/game/gamemodes/gangs/dominator.dm b/code/game/gamemodes/gangs/dominator.dm index 858c10c46c..dca50be5b9 100644 --- a/code/game/gamemodes/gangs/dominator.dm +++ b/code/game/gamemodes/gangs/dominator.dm @@ -229,7 +229,7 @@ if(!was_stranded) priority_announce("All hostile activity within station systems has ceased.","Network Alert") - if(get_security_level() == "delta") + if(NUM2SECLEVEL(GLOB.security_level) == "delta") set_security_level("red") SSshuttle.clearHostileEnvironment(src) diff --git a/code/game/gamemodes/meteor/meteor.dm b/code/game/gamemodes/meteor/meteor.dm index 7857eb8253..afeebb770b 100644 --- a/code/game/gamemodes/meteor/meteor.dm +++ b/code/game/gamemodes/meteor/meteor.dm @@ -25,7 +25,7 @@ if (prob(meteorminutes/2)) wavetype = GLOB.meteors_catastrophic - var/ramp_up_final = CLAMP(round(meteorminutes/rampupdelta), 1, 10) + var/ramp_up_final = clamp(round(meteorminutes/rampupdelta), 1, 10) spawn_meteors(ramp_up_final, wavetype) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 74554ac9f8..9eed18d906 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -70,7 +70,7 @@ /datum/game_mode/revolution/post_setup() var/list/heads = SSjob.get_living_heads() var/list/sec = SSjob.get_living_sec() - var/weighted_score = CLAMP(round(heads.len - ((3 - sec.len) / 3)), 1, max_headrevs) + var/weighted_score = clamp(round(heads.len - ((3 - sec.len) / 3)), 1, max_headrevs) for(var/datum/mind/rev_mind in headrev_candidates) //People with return to lobby may still be in the lobby. Let's pick someone else in that case. if(isnewplayer(rev_mind.current)) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 6fa7fa30c0..edb31e9dbd 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -28,11 +28,11 @@ var/prod_coeff = 1 var/datum/design/being_built - var/datum/techweb/stored_research var/list/datum/design/matching_designs var/selected_category var/screen = 1 + var/datum/techweb/stored_research = /datum/techweb/specialized/autounlocking/autolathe var/list/categories = list( "Tools", "Electronics", @@ -45,9 +45,7 @@ "Dinnerware", "Imported" ) - -/obj/machinery/autolathe/Initialize() - var/static/list/allowed_types = list( + var/list/allowed_materials = list( /datum/material/iron, /datum/material/glass, /datum/material/gold, @@ -63,10 +61,12 @@ /datum/material/adamantine, /datum/material/mythril ) - AddComponent(/datum/component/material_container, allowed_types, _show_on_examine=TRUE, _after_insert=CALLBACK(src, .proc/AfterMaterialInsert)) + +/obj/machinery/autolathe/Initialize() + AddComponent(/datum/component/material_container, allowed_materials, _show_on_examine=TRUE, _after_insert=CALLBACK(src, .proc/AfterMaterialInsert)) . = ..() wires = new /datum/wires/autolathe(src) - stored_research = new /datum/techweb/specialized/autounlocking/autolathe + stored_research = new stored_research matching_designs = list() /obj/machinery/autolathe/Destroy() @@ -91,7 +91,7 @@ if(AUTOLATHE_SEARCH_MENU) dat = search_win(user) - var/datum/browser/popup = new(user, "autolathe", name, 400, 500) + var/datum/browser/popup = new(user, name, name, 400, 500) popup.set_content(dat) popup.open() @@ -169,7 +169,7 @@ var/multiplier = text2num(href_list["multiplier"]) var/is_stack = ispath(being_built.build_path, /obj/item/stack) - multiplier = CLAMP(multiplier,1,50) + multiplier = clamp(multiplier,1,50) ///////////////// @@ -439,8 +439,32 @@ desc = "An autolathe reprogrammed with security protocols to prevent hacking." hackable = FALSE circuit = /obj/item/circuitboard/machine/autolathe/secure + stored_research = /datum/techweb/specialized/autounlocking/autolathe/public -//Called when the object is constructed by an autolathe -//Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes -/obj/item/proc/autolathe_crafted(obj/machinery/autolathe/A) - return +/obj/machinery/autolathe/toy + name = "autoylathe" + desc = "It produces toys using plastic, metal and glass." + circuit = /obj/item/circuitboard/machine/autolathe/toy + + stored_research = /datum/techweb/specialized/autounlocking/autolathe/toy + categories = list( + "Toys", + "Figurines", + "Pistols", + "Rifles", + "Heavy", + "Melee", + "Armor", + "Adult", + "Misc", + "Imported" + ) + allowed_materials = list( + /datum/material/iron, + /datum/material/glass, + /datum/material/plastic + ) + +/obj/machinery/autolathe/toy/hacked/Initialize() + . = ..() + adjust_hacked(TRUE) diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index bc0fec68ba..3f4b389b77 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -69,7 +69,7 @@ for(var/obj/item/stock_parts/manipulator/P in component_parts) speed_coeff += (P.rating / 2) speed_coeff = max(1, speed_coeff) - heal_level = CLAMP((efficiency * 10) + 10, MINIMUM_HEAL_LEVEL, 100) + heal_level = clamp((efficiency * 10) + 10, MINIMUM_HEAL_LEVEL, 100) //The return of data disks?? Just for transferring between genetics machine/cloning machine. //TO-DO: Make the genetics machine accept them. diff --git a/code/game/machinery/computer/apc_control.dm b/code/game/machinery/computer/apc_control.dm index 6d22f9d6c8..eae2d5fa5b 100644 --- a/code/game/machinery/computer/apc_control.dm +++ b/code/game/machinery/computer/apc_control.dm @@ -150,7 +150,7 @@ return log_activity("changed greater than charge filter to \"[new_filter]\"") if(new_filter) - new_filter = CLAMP(new_filter, 0, 100) + new_filter = clamp(new_filter, 0, 100) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) result_filters["Charge Above"] = new_filter if(href_list["below_filter"]) @@ -160,7 +160,7 @@ return log_activity("changed lesser than charge filter to \"[new_filter]\"") if(new_filter) - new_filter = CLAMP(new_filter, 0, 100) + new_filter = clamp(new_filter, 0, 100) playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) result_filters["Charge Below"] = new_filter if(href_list["access_filter"]) diff --git a/code/game/machinery/computer/arcade/minesweeper.dm b/code/game/machinery/computer/arcade/minesweeper.dm index 370f85b4b9..ad325455ad 100644 --- a/code/game/machinery/computer/arcade/minesweeper.dm +++ b/code/game/machinery/computer/arcade/minesweeper.dm @@ -308,12 +308,12 @@ var/new_rows = input(user, "How many rows do you want? (Minimum: 4, Maximum: 30)", "Minesweeper Rows") as null|num if(!new_rows || !user.canUseTopic(src, !hasSiliconAccessInArea(user))) return FALSE - new_rows = CLAMP(new_rows + 1, 4, 30) + new_rows = clamp(new_rows + 1, 4, 30) playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) var/new_columns = input(user, "How many columns do you want? (Minimum: 4, Maximum: 50)", "Minesweeper Squares") as null|num if(!new_columns || !user.canUseTopic(src, !hasSiliconAccessInArea(user))) return FALSE - new_columns = CLAMP(new_columns + 1, 4, 50) + new_columns = clamp(new_columns + 1, 4, 50) playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) var/grid_area = (new_rows - 1) * (new_columns - 1) var/lower_limit = round(grid_area*0.156) @@ -324,7 +324,7 @@ playsound(loc, 'sound/arcade/minesweeper_menuselect.ogg', 50, 0, extrarange = -3, falloff = 10) rows = new_rows columns = new_columns - mine_limit = CLAMP(new_mine_limit, lower_limit, upper_limit) + mine_limit = clamp(new_mine_limit, lower_limit, upper_limit) return TRUE /obj/machinery/computer/arcade/minesweeper/proc/make_mines(var/reset_everything) diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index 22e102b54b..79ea51eca4 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -296,7 +296,7 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers) if("rate") var/target = text2num(params["rate"]) if(!isnull(target)) - target = CLAMP(target, 0, MAX_TRANSFER_RATE) + target = clamp(target, 0, MAX_TRANSFER_RATE) signal.data += list("tag" = input_tag, "set_volume_rate" = target) . = TRUE if("output") @@ -305,7 +305,7 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers) if("pressure") var/target = text2num(params["pressure"]) if(!isnull(target)) - target = CLAMP(target, 0, MAX_OUTPUT_PRESSURE) + target = clamp(target, 0, MAX_OUTPUT_PRESSURE) signal.data += list("tag" = output_tag, "set_internal_pressure" = target) . = TRUE radio_connection.post_signal(src, signal, filter = RADIO_ATMOSIA) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 4c3d85a162..6eb06e3be4 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -111,7 +111,7 @@ to_chat(usr, "Authorization confirmed. Modifying security level.") playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) //Only notify people if an actual change happened - var/security_level = get_security_level() + var/security_level = NUM2SECLEVEL(GLOB.security_level) log_game("[key_name(usr)] has changed the security level to [security_level] with [src] at [AREACOORD(usr)].") message_admins("[ADMIN_LOOKUPFLW(usr)] has changed the security level to [security_level] with [src] at [AREACOORD(usr)].") deadchat_broadcast("[usr.real_name] has changed the security level to [security_level] with [src] at [get_area_name(usr, TRUE)].", usr) @@ -404,7 +404,7 @@ security_level_cd = world.time + 15 SECONDS if(GLOB.security_level != old_level) //Only notify people if an actual change happened - var/security_level = get_security_level() + var/security_level = NUM2SECLEVEL(GLOB.security_level) log_game("[key_name(usr)] has changed the security level to [security_level] from [src] at [AREACOORD(usr)].") message_admins("[ADMIN_LOOKUPFLW(usr)] has changed the security level to [security_level] from [src] at [AREACOORD(usr)].") deadchat_broadcast("[usr.real_name] has changed the security level to [security_level] from [src] at [get_area_name(usr, TRUE)].", usr) @@ -555,7 +555,7 @@ dat += " Biohazard \]

" playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0) if(STATE_ALERT_LEVEL) - dat += "Current alert level: [get_security_level()]
" + dat += "Current alert level: [NUM2SECLEVEL(GLOB.security_level)]
" if(GLOB.security_level == SEC_LEVEL_DELTA) dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate." else @@ -563,8 +563,8 @@ dat += "Blue
" dat += "Green" if(STATE_CONFIRM_LEVEL) - dat += "Current alert level: [get_security_level()]
" - dat += "Confirm the change to: [num2seclevel(tmp_alertlevel)]
" + dat += "Current alert level: [NUM2SECLEVEL(GLOB.security_level)]
" + dat += "Confirm the change to: [NUM2SECLEVEL(tmp_alertlevel)]
" dat += "Swipe ID to confirm change.
" if(STATE_TOGGLE_EMERGENCY) playsound(src, 'sound/machines/terminal_prompt.ogg', 50, 0) @@ -696,7 +696,7 @@ dat += " Biohazard \]

" if(STATE_ALERT_LEVEL) - dat += "Current alert level: [get_security_level()]
" + dat += "Current alert level: [NUM2SECLEVEL(GLOB.security_level)]
" if(GLOB.security_level == SEC_LEVEL_DELTA) dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate." else diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index b9bd3da95e..d465ff2022 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -604,13 +604,13 @@ if("setbufferlabel") var/text = sanitize(input(usr, "Input a new label:", "Input a Text", null) as text|null) if(num && text) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) var/list/buffer_slot = buffer[num] if(istype(buffer_slot)) buffer_slot["label"] = text if("setbuffer") if(num && viable_occupant) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) buffer[num] = list( "label"="Buffer[num]:[viable_occupant.real_name]", "UI"=viable_occupant.dna.uni_identity, @@ -620,7 +620,7 @@ ) if("clearbuffer") if(num) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) var/list/buffer_slot = buffer[num] if(istype(buffer_slot)) buffer_slot.Cut() @@ -635,7 +635,7 @@ apply_buffer(SCANNER_ACTION_MIXED,num) if("injector") if(num && injectorready < world.time) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) var/list/buffer_slot = buffer[num] if(istype(buffer_slot)) var/obj/item/dnainjector/timed/I @@ -662,11 +662,11 @@ injectorready = world.time + INJECTOR_TIMEOUT if("loaddisk") if(num && diskette && diskette.fields) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) buffer[num] = diskette.fields.Copy() if("savedisk") if(num && diskette && !diskette.read_only) - num = CLAMP(num, 1, NUMBER_OF_BUFFERS) + num = clamp(num, 1, NUMBER_OF_BUFFERS) var/list/buffer_slot = buffer[num] if(istype(buffer_slot)) diskette.name = "data disk \[[buffer_slot["label"]]\]" @@ -953,7 +953,7 @@ return viable_occupant /obj/machinery/computer/scan_consolenew/proc/apply_buffer(action,buffer_num) - buffer_num = CLAMP(buffer_num, 1, NUMBER_OF_BUFFERS) + buffer_num = clamp(buffer_num, 1, NUMBER_OF_BUFFERS) var/list/buffer_slot = buffer[buffer_num] var/mob/living/carbon/viable_occupant = get_viable_occupant() if(istype(buffer_slot)) diff --git a/code/game/machinery/computer/prisoner/gulag_teleporter.dm b/code/game/machinery/computer/prisoner/gulag_teleporter.dm index e4a6a0b2d4..ca75ff1dd0 100644 --- a/code/game/machinery/computer/prisoner/gulag_teleporter.dm +++ b/code/game/machinery/computer/prisoner/gulag_teleporter.dm @@ -97,7 +97,7 @@ return if(!new_goal) new_goal = default_goal - contained_id.goal = CLAMP(new_goal, 0, 1000) //maximum 1000 points + contained_id.goal = clamp(new_goal, 0, 1000) //maximum 1000 points return TRUE if("toggle_open") if(teleporter.locked) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 118145ed88..07f95c17ff 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -405,7 +405,7 @@ // Ghost and delete the mob. if(!mob_occupant.get_ghost(1)) - mob_occupant.ghostize(FALSE, penalize = TRUE) + mob_occupant.ghostize(FALSE, penalize = TRUE, voluntary = TRUE) QDEL_NULL(occupant) for(var/I in cryo_items) //only "CRYO_DESTROY_LATER" atoms are left) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index 686b62d1c3..67113fcf78 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -33,7 +33,7 @@ to_chat(user, "You begin repairing [src]...") if(I.use_tool(src, user, 40, volume=40)) - obj_integrity = CLAMP(obj_integrity + 20, 0, max_integrity) + obj_integrity = clamp(obj_integrity + 20, 0, max_integrity) else return ..() diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index adc1748ded..cd22b2dc05 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -135,7 +135,7 @@ . /= 10 /obj/machinery/door_timer/proc/set_timer(value) - var/new_time = CLAMP(value,0,MAX_TIMER) + var/new_time = clamp(value,0,MAX_TIMER) . = new_time == timer_duration //return 1 on no change timer_duration = new_time diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index d01f7e3e40..c8219e9ebf 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -68,9 +68,9 @@ if(teleporting) return if(!isnull(x)) - x_offset = CLAMP(x, -range, range) + x_offset = clamp(x, -range, range) if(!isnull(y)) - y_offset = CLAMP(y, -range, range) + y_offset = clamp(y, -range, range) /obj/machinery/launchpad/proc/doteleport(mob/user, sending) if(teleporting) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index b0e26ce129..c144616c05 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -55,9 +55,9 @@ new /obj/item/pipe_meter(loc) wait = world.time + 15 if(href_list["layer_up"]) - piping_layer = CLAMP(++piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) + piping_layer = clamp(++piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) if(href_list["layer_down"]) - piping_layer = CLAMP(--piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) + piping_layer = clamp(--piping_layer, PIPING_LAYER_MIN, PIPING_LAYER_MAX) return /obj/machinery/pipedispenser/attackby(obj/item/W, mob/user, params) diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index c152e302fe..34db7b0e08 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -270,7 +270,7 @@ use_stored_power(50) /obj/machinery/shieldwallgen/proc/use_stored_power(amount) - power = CLAMP(power - amount, 0, maximum_stored_power) + power = clamp(power - amount, 0, maximum_stored_power) update_activity() /obj/machinery/shieldwallgen/proc/update_activity() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 41dfe8e3ac..f9f4eb3e80 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -127,7 +127,7 @@ settableTemperatureRange = cap * 30 efficiency = (cap + 1) * 10000 - targetTemperature = CLAMP(targetTemperature, + targetTemperature = clamp(targetTemperature, max(settableTemperatureMedian - settableTemperatureRange, TCMB), settableTemperatureMedian + settableTemperatureRange) @@ -230,7 +230,7 @@ target= text2num(target) + T0C . = TRUE if(.) - targetTemperature = CLAMP(round(target), + targetTemperature = clamp(round(target), max(settableTemperatureMedian - settableTemperatureRange, TCMB), settableTemperatureMedian + settableTemperatureRange) if("eject") diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index b8d4ef26e8..50984c43b8 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -195,7 +195,7 @@ /obj/machinery/syndicatebomb/proc/settings(mob/user) var/new_timer = input(user, "Please set the timer.", "Timer", "[timer_set]") as num if(in_range(src, user) && isliving(user)) //No running off and setting bombs from across the station - timer_set = CLAMP(new_timer, minimum_timer, maximum_timer) + timer_set = clamp(new_timer, minimum_timer, maximum_timer) loc.visible_message("[icon2html(src, viewers(src))] timer set for [timer_set] seconds.") if(alert(user,"Would you like to start the countdown now?",,"Yes","No") == "Yes" && in_range(src, user) && isliving(user)) if(defused || active) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 985c1166b7..16ae158ea7 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -70,7 +70,7 @@ com.target = null visible_message("Cannot authenticate locked on coordinates. Please reinstate coordinate matrix.") return - if (ismovableatom(M)) + if (ismovable(M)) if(do_teleport(M, com.target, channel = TELEPORT_CHANNEL_BLUESPACE)) use_power(5000) diff --git a/code/game/machinery/toylathe.dm b/code/game/machinery/toylathe.dm deleted file mode 100644 index c679f3f983..0000000000 --- a/code/game/machinery/toylathe.dm +++ /dev/null @@ -1,415 +0,0 @@ -#define AUTOYLATHE_MAIN_MENU 1 -#define AUTOYLATHE_CATEGORY_MENU 2 -#define AUTOYLATHE_SEARCH_MENU 3 - -/obj/machinery/autoylathe - name = "autoylathe" - desc = "It produces toys using plastic, metal and glass." - icon_state = "autolathe" - density = TRUE - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 100 - circuit = /obj/item/circuitboard/machine/autoylathe - layer = BELOW_OBJ_LAYER - - var/operating = FALSE - var/list/L = list() - var/list/LL = list() - var/hacked = FALSE - var/disabled = 0 - var/shocked = FALSE - var/hack_wire - var/disable_wire - var/shock_wire - - var/busy = FALSE - var/prod_coeff = 1 - - var/datum/design/being_built - var/datum/techweb/stored_research - var/list/datum/design/matching_designs - var/selected_category - var/screen = 1 - - var/list/categories = list( - "Toys", - "Figurines", - "Pistols", - "Rifles", - "Heavy", - "Melee", - "Armor", - "Adult", - "Misc", - "Imported" - ) - -/obj/machinery/autoylathe/Initialize() - var/static/list/allowed_materials = list( - /datum/material/iron, - /datum/material/glass, - /datum/material/plastic - ) - AddComponent(/datum/component/material_container, allowed_materials, 0, TRUE, null, null, CALLBACK(src, .proc/AfterMaterialInsert)) - . = ..() - - wires = new /datum/wires/autoylathe(src) - stored_research = new /datum/techweb/specialized/autounlocking/autoylathe - matching_designs = list() - -/obj/machinery/autoylathe/Destroy() - QDEL_NULL(wires) - return ..() - -/obj/machinery/autoylathe/ui_interact(mob/user) - . = ..() - if(!is_operational()) - return - - if(shocked && !(stat & NOPOWER)) - shock(user,50) - - var/dat - - switch(screen) - if(AUTOYLATHE_MAIN_MENU) - dat = main_win(user) - if(AUTOYLATHE_CATEGORY_MENU) - dat = category_win(user,selected_category) - if(AUTOYLATHE_SEARCH_MENU) - dat = search_win(user) - - var/datum/browser/popup = new(user, "Autoylathe", name, 400, 500) - popup.set_content(dat) - popup.open() - -/obj/machinery/autoylathe/on_deconstruction() - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - materials.retrieve_all() - -/obj/machinery/autoylathe/attackby(obj/item/O, mob/user, params) - if (busy) - to_chat(user, "The autoylathe is busy. Please wait for completion of previous operation.") - return TRUE - - if(default_deconstruction_screwdriver(user, "autolathe_t", "autolathe", O)) - updateUsrDialog() - return TRUE - - if(default_deconstruction_crowbar(O)) - return TRUE - - if(panel_open && is_wire_tool(O)) - wires.interact(user) - return TRUE - - if(user.a_intent == INTENT_HARM) //so we can hit the machine - return ..() - - if(stat) - return TRUE - - if(istype(O, /obj/item/disk/design_disk)) - user.visible_message("[user] begins to load \the [O] in \the [src]...", - "You begin to load a design from \the [O]...", - "You hear the chatter of a floppy drive.") - busy = TRUE - var/obj/item/disk/design_disk/D = O - if(do_after(user, 14.4, target = src)) - for(var/B in D.blueprints) - if(B) - stored_research.add_design(B) - busy = FALSE - return TRUE - - return ..() - -/obj/machinery/autoylathe/proc/AfterMaterialInsert(obj/item/item_inserted, id_inserted, amount_inserted) - if(item_inserted.custom_materials?.len && item_inserted.custom_materials[SSmaterials.GetMaterialRef(/datum/material/glass)]) - flick("autolathe_r",src)//plays glass insertion animation by default otherwise - else - flick("autolathe_o",src)//plays metal insertion animation - - use_power(min(1000, amount_inserted / 100)) - updateUsrDialog() - -/obj/machinery/autoylathe/Topic(href, href_list) - if(..()) - return - if (!busy) - if(href_list["menu"]) - screen = text2num(href_list["menu"]) - updateUsrDialog() - - if(href_list["category"]) - selected_category = href_list["category"] - updateUsrDialog() - - if(href_list["make"]) - - ///////////////// - //href protection - being_built = stored_research.isDesignResearchedID(href_list["make"]) - if(!being_built) - return - - var/multiplier = text2num(href_list["multiplier"]) - var/is_stack = ispath(being_built.build_path, /obj/item/stack) - multiplier = CLAMP(multiplier,1,50) - - ///////////////// - - var/coeff = (is_stack ? 1 : prod_coeff) //stacks are unaffected by production coefficient - var/total_amount = 0 - for(var/MAT in being_built.materials) - total_amount += being_built.materials[MAT] - var/power = max(2000, (total_amount)*multiplier/5) //Change this to use all materials - - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - - var/list/materials_used = list() - var/list/custom_materials = list() //These will apply their material effect, This should usually only be one. - - for(var/MAT in being_built.materials) - var/datum/material/used_material = MAT - var/amount_needed = being_built.materials[MAT] * coeff * multiplier - if(istext(used_material)) //This means its a category - var/list/list_to_show = list() - for(var/i in SSmaterials.materials_by_category[used_material]) - if(materials.materials[i] > 0) - list_to_show += i - - used_material = input("Choose [used_material]", "Custom Material") as null|anything in list_to_show - if(!used_material) - return //Didn't pick any material, so you can't build shit either. - custom_materials[used_material] += amount_needed - - materials_used[used_material] = amount_needed - - if(materials.has_materials(materials_used)) - busy = TRUE - use_power(power) - icon_state = "autolathe_n" - var/time = is_stack ? 32 : 32*coeff*multiplier - addtimer(CALLBACK(src, .proc/make_item, power, materials_used, custom_materials, multiplier, coeff, is_stack), time) - else - to_chat(usr, "Not enough materials for this operation.") - - if(href_list["search"]) - matching_designs.Cut() - - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(findtext(D.name,href_list["to_search"])) - matching_designs.Add(D) - updateUsrDialog() - else - to_chat(usr, "The autoylathe is busy. Please wait for completion of previous operation.") - - updateUsrDialog() - - return - -/obj/machinery/autoylathe/proc/make_item(power, list/materials_used, list/picked_materials, multiplier, coeff, is_stack) - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - var/atom/A = drop_location() - use_power(power) - materials.use_materials(materials_used) - - if(is_stack) - var/obj/item/stack/N = new being_built.build_path(A, multiplier) - N.update_icon() - N.autoylathe_crafted(src) - else - for(var/i=1, i<=multiplier, i++) - var/obj/item/new_item = new being_built.build_path(A) - new_item.autoylathe_crafted(src) - if(length(picked_materials)) - new_item.set_custom_materials(picked_materials, 1 / multiplier) //Ensure we get the non multiplied amount - icon_state = "autolathe" - busy = FALSE - updateDialog() - -/obj/machinery/autoylathe/RefreshParts() - var/T = 0 - for(var/obj/item/stock_parts/matter_bin/MB in component_parts) - T += MB.rating*75000 - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - materials.max_amount = T - T=1.2 - for(var/obj/item/stock_parts/manipulator/M in component_parts) - T -= M.rating*0.2 - prod_coeff = CLAMP(T,1,0) // Coeff going 1 -> 0,8 -> 0,6 -> 0,4 - -/obj/machinery/autoylathe/proc/main_win(mob/user) - var/dat = "

Autoylathe Menu:


" - dat += materials_printout() - - dat += "
\ - \ - \ - \ - \ - \ -

" - - var/line_length = 1 - dat += "" - - for(var/C in categories) - if(line_length > 2) - dat += "" - line_length = 1 - - dat += "" - line_length++ - - dat += "
[C]
" - return dat - -/obj/machinery/autoylathe/proc/category_win(mob/user,selected_category) - var/dat = "Return to main menu" - dat += "

Browsing [selected_category]:


" - dat += materials_printout() - - for(var/v in stored_research.researched_designs) - var/datum/design/D = SSresearch.techweb_design_by_id(v) - if(!(selected_category in D.category)) - continue - - if(disabled || !can_build(D)) - dat += "[D.name]" - else - dat += "[D.name]" - - if(ispath(D.build_path, /obj/item/stack)) - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - var/max_multiplier - for(var/datum/material/mat in D.materials) - max_multiplier = min(D.maxstack, round(materials.get_material_amount(mat)/D.materials[mat])) - if (max_multiplier>10 && !disabled) - dat += " x10" - if (max_multiplier>25 && !disabled) - dat += " x25" - if(max_multiplier > 0 && !disabled) - dat += " x[max_multiplier]" - else - if(!disabled && can_build(D, 5)) - dat += " x5" - if(!disabled && can_build(D, 10)) - dat += " x10" - - dat += "[get_design_cost(D)]
" - - dat += "
" - return dat - -/obj/machinery/autoylathe/proc/search_win(mob/user) - var/dat = "Return to main menu" - dat += "

Search results:


" - dat += materials_printout() - - for(var/v in matching_designs) - var/datum/design/D = v - if(disabled || !can_build(D)) - dat += "[D.name]" - else - dat += "[D.name]" - - if(ispath(D.build_path, /obj/item/stack)) - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - var/max_multiplier - for(var/datum/material/mat in D.materials) - max_multiplier = min(D.maxstack, round(materials.get_material_amount(mat)/D.materials[mat])) - if (max_multiplier>10 && !disabled) - dat += " x10" - if (max_multiplier>25 && !disabled) - dat += " x25" - if(max_multiplier > 0 && !disabled) - dat += " x[max_multiplier]" - - dat += "[get_design_cost(D)]
" - - dat += "
" - return dat - -/obj/machinery/autoylathe/proc/materials_printout() - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - var/dat = "Total amount: [materials.total_amount] / [materials.max_amount] cm3
" - for(var/mat_id in materials.materials) - var/datum/material/M = mat_id - var/mineral_amount = materials.materials[mat_id] - if(mineral_amount > 0) - dat += "[M.name] amount: [mineral_amount] cm3
" - return dat - -/obj/machinery/autoylathe/proc/can_build(datum/design/D, amount = 1) - if(D.make_reagents.len) - return FALSE - - var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff) - - var/list/required_materials = list() - - for(var/i in D.materials) - required_materials[i] = D.materials[i] * coeff * amount - - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - - return materials.has_materials(required_materials) - -/obj/machinery/autoylathe/proc/get_design_cost(datum/design/D) - var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff) - var/dat - for(var/i in D.materials) - if(istext(i)) //Category handling - dat += "[D.materials[i] * coeff] [i]" - else - var/datum/material/M = i - dat += "[D.materials[i] * coeff] [M.name] " - return dat - -/obj/machinery/autoylathe/proc/reset(wire) - switch(wire) - if(WIRE_HACK) - if(!wires.is_cut(wire)) - adjust_hacked(FALSE) - if(WIRE_SHOCK) - if(!wires.is_cut(wire)) - shocked = FALSE - if(WIRE_DISABLE) - if(!wires.is_cut(wire)) - disabled = FALSE - -/obj/machinery/autoylathe/proc/shock(mob/user, prb) - if(stat & (BROKEN|NOPOWER)) // unpowered, no shock - return FALSE - if(!prob(prb)) - return FALSE - var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread - s.set_up(5, 1, src) - s.start() - if (electrocute_mob(user, get_area(src), src, 0.7, TRUE)) - return TRUE - else - return FALSE - -/obj/machinery/autoylathe/proc/adjust_hacked(state) - hacked = state - for(var/id in SSresearch.techweb_designs) - var/datum/design/D = SSresearch.techweb_designs[id] - if((D.build_type & AUTOYLATHE) && ("hacked" in D.category)) - if(hacked) - stored_research.add_design(D) - else - stored_research.remove_design(D) - -/obj/machinery/autoylathe/hacked/Initialize() - . = ..() - adjust_hacked(TRUE) - -//Called when the object is constructed by an autoylathe -//Has a reference to the autoylathe so you can do !!FUN!! things with hacked lathes -/obj/item/proc/autoylathe_crafted(obj/machinery/autoylathe/A) - return diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index f1fa5ddd20..65aa001fe1 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -484,7 +484,7 @@ /obj/item/punching_glove/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) if(!..()) - if(ismovableatom(hit_atom)) + if(ismovable(hit_atom)) var/atom/movable/AM = hit_atom AM.safe_throw_at(get_edge_target_turf(AM,get_dir(src, AM)), 7, 2) qdel(src) diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index 9acc8921b9..fb321665bc 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -19,6 +19,7 @@ var/processing_queue = 0 var/screen = "main" var/temp + var/offstation_security_levels = TRUE var/list/part_sets = list( "Cyborg", "Ripley", @@ -72,6 +73,8 @@ for(var/obj/item/stock_parts/manipulator/Ml in component_parts) T += Ml.rating time_coeff = round(initial(time_coeff) - (initial(time_coeff)*(T))/5,0.01) + var/obj/item/circuitboard/machine/mechfab/C = circuit + offstation_security_levels = C.offstation_security_levels /obj/machinery/mecha_part_fabricator/examine(mob/user) . = ..() @@ -106,13 +109,27 @@ if(!(set_name in D.category)) continue output += "
[output_part_info(D)]
\[" - if(check_resources(D)) + if(check_clearance(D) && check_resources(D)) output += "Build | " output += "Add to queue\]\[?\]
" return output +/obj/machinery/mecha_part_fabricator/proc/check_clearance(datum/design/D) + if(!(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z)) && !ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level)) + return FALSE + return TRUE + /obj/machinery/mecha_part_fabricator/proc/output_part_info(datum/design/D) - var/output = "[initial(D.name)] (Cost: [output_part_cost(D)]) [get_construction_time_w_coeff(D)/10]sec" + var/clearance = !(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z)) + var/sec_text = "" + if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA)) + sec_text = " (Allowed security levels: " + for(var/n in D.min_security_level to D.max_security_level) + sec_text += NUM2SECLEVEL(n) + if(n + 1 <= D.max_security_level) + sec_text += ", " + sec_text += ") " + var/output = "[initial(D.name)] (Cost: [output_part_cost(D)]) [sec_text][get_construction_time_w_coeff(D)/10]sec" return output /obj/machinery/mecha_part_fabricator/proc/output_part_cost(datum/design/D) @@ -216,6 +233,11 @@ while(D) if(stat&(NOPOWER|BROKEN)) return FALSE + if(!check_clearance(D)) + say("Security level not met. Queue processing stopped.") + temp = {"Security level not met to build next part.
+ Try again | Return"} + return FALSE if(!check_resources(D)) say("Not enough resources. Queue processing stopped.") temp = {"Not enough resources to build next part.
@@ -236,7 +258,7 @@ for(var/datum/design/D in queue) i++ var/obj/part = D.build_path - output += "" + output += "" output += initial(part.name) + " - " output += "[i>1?"
":null] " output += "[i↓":null] " @@ -440,3 +462,7 @@ return FALSE return TRUE + +/obj/machinery/mecha_part_fabricator/offstation + offstation_security_levels = FALSE + circuit = /obj/item/circuitboard/machine/mechfab/offstation diff --git a/code/game/objects/effects/alien_acid.dm b/code/game/objects/effects/alien_acid.dm index 3b5a029df4..5276062121 100644 --- a/code/game/objects/effects/alien_acid.dm +++ b/code/game/objects/effects/alien_acid.dm @@ -17,7 +17,7 @@ target = get_turf(src) if(acid_amt) - acid_level = min( (CLAMP(round(acid_amt, 1), 0, INFINITY)) *acid_pwr, 12000) //capped so the acid effect doesn't last a half hour on the floor. + acid_level = min( (clamp(round(acid_amt, 1), 0, INFINITY)) *acid_pwr, 12000) //capped so the acid effect doesn't last a half hour on the floor. //handle APCs and newscasters and stuff nicely pixel_x = target.pixel_x + rand(-4,4) diff --git a/code/game/objects/effects/effects.dm b/code/game/objects/effects/effects.dm index 8f0ce83c82..979b811bc5 100644 --- a/code/game/objects/effects/effects.dm +++ b/code/game/objects/effects/effects.dm @@ -7,7 +7,7 @@ move_resist = INFINITY obj_flags = 0 - vis_flags = NONE + vis_flags = VIS_INHERIT_PLANE /obj/effect/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) return diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 2fb068a29b..1fe5e46e25 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -170,7 +170,7 @@ if(!victim.client || !istype(victim)) return to_chat(victim, "You feel fast!") - victim.add_movespeed_modifier(MOVESPEED_ID_YELLOW_ORB, update=TRUE, priority=100, multiplicative_slowdown=-2, blacklisted_movetypes=(FLYING|FLOATING)) + victim.add_movespeed_modifier(/datum/movespeed_modifier/yellow_orb) sleep(duration) - victim.remove_movespeed_modifier(MOVESPEED_ID_YELLOW_ORB) + victim.remove_movespeed_modifier(/datum/movespeed_modifier/yellow_orb) to_chat(victim, "You slow down.") diff --git a/code/game/objects/effects/overlays.dm b/code/game/objects/effects/overlays.dm index 596e428c7f..b310119827 100644 --- a/code/game/objects/effects/overlays.dm +++ b/code/game/objects/effects/overlays.dm @@ -49,5 +49,6 @@ /obj/effect/overlay/vis mouse_opacity = MOUSE_OPACITY_TRANSPARENT anchored = TRUE + vis_flags = NONE var/unused = 0 //When detected to be unused it gets set to world.time, after a while it gets removed var/cache_expiration = 2 MINUTES // overlays which go unused for 2 minutes get cleaned up diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 2cdf57bf70..9893e9c7d3 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -521,7 +521,7 @@ /obj/item/gun/ballistic/automatic/toy/pistol = 5, /obj/item/firing_pin = 5, /obj/item/grenade/empgrenade = 15, - /obj/item/clothing/gloves/combat = 10, + /obj/item/clothing/gloves/tackler/combat/insulated = 10, /obj/item/clothing/shoes/sneakers/noslip = 10 ) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 01edd82ccb..80178c95c4 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -52,7 +52,7 @@ var/list/affecting = list() /obj/effect/step_trigger/thrower/Trigger(atom/A) - if(!A || !ismovableatom(A)) + if(!A || !ismovable(A)) return var/atom/movable/AM = A var/curtiles = 0 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 5c80b81ba5..c8e5b15f72 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -392,7 +392,8 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) if(item_flags & DROPDEL) qdel(src) item_flags &= ~IN_INVENTORY - SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user) + if(SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user) & COMPONENT_DROPPED_RELOCATION) + . = ITEM_RELOCATED_BY_DROPPED user.update_equipment_speed_mods() // called just as an item is picked up (loc is not yet changed) @@ -433,11 +434,12 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) // for items that can be placed in multiple slots // note this isn't called during the initial dressing of a player /obj/item/proc/equipped(mob/user, slot) - SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot) - for(var/X in actions) - var/datum/action/A = X - if(item_action_slot_check(slot, user, A)) //some items only give their actions buttons when in a specific slot. - A.Grant(user) + . = SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot) + if(!(. & COMPONENT_NO_GRANT_ACTIONS)) + for(var/X in actions) + var/datum/action/A = X + if(item_action_slot_check(slot, user, A)) //some items only give their actions buttons when in a specific slot. + A.Grant(user) item_flags |= IN_INVENTORY user.update_equipment_speed_mods() @@ -896,3 +898,11 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE) . = ..() if(var_name == NAMEOF(src, slowdown)) set_slowdown(var_value) //don't care if it's a duplicate edit as slowdown'll be set, do it anyways to force normal behavior. + +//Called when the object is constructed by an autolathe +//Has a reference to the autolathe so you can do !!FUN!! things with hacked lathes +/obj/item/proc/autolathe_crafted(obj/machinery/autolathe/A) + return + +/obj/item/proc/rnd_crafted(obj/machinery/rnd/production/P) + return diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index 20e0b09d26..c23bc2bd5b 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -258,6 +258,8 @@ update_label("John Doe", "Clowny") chameleon_action.chameleon_type = /obj/item/card/id chameleon_action.chameleon_name = "ID Card" chameleon_action.initialize_disguises() + if(!anyone) + AddComponent(/datum/component/identification/syndicate, ID_COMPONENT_DEL_ON_IDENTIFY, ID_COMPONENT_EFFECT_NO_ACTIONS, NONE) //no deconstructive analyzer usage. /obj/item/card/id/syndicate/afterattack(obj/item/O, mob/user, proximity) if(!proximity) diff --git a/code/game/objects/items/chrono_eraser.dm b/code/game/objects/items/chrono_eraser.dm index 6b3428698b..c3b6c0312f 100644 --- a/code/game/objects/items/chrono_eraser.dm +++ b/code/game/objects/items/chrono_eraser.dm @@ -193,7 +193,7 @@ /obj/effect/chrono_field/update_icon() var/ttk_frame = 1 - (tickstokill / initial(tickstokill)) - ttk_frame = CLAMP(CEILING(ttk_frame * CHRONO_FRAME_COUNT, 1), 1, CHRONO_FRAME_COUNT) + ttk_frame = clamp(CEILING(ttk_frame * CHRONO_FRAME_COUNT, 1), 1, CHRONO_FRAME_COUNT) if(ttk_frame != RPpos) RPpos = ttk_frame mob_underlay.icon_state = "frame[RPpos]" diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index aaa87bbf01..b788c3fcba 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -308,6 +308,13 @@ /obj/item/stock_parts/manipulator = 1, /obj/item/stock_parts/micro_laser = 1, /obj/item/stack/sheet/glass = 1) + var/offstation_security_levels = TRUE + +/obj/item/circuitboard/machine/mechfab/offstation + offstation_security_levels = FALSE + +/obj/item/circuitboard/machine/mechfab/rnd_crafted(obj/machinery/rnd/production/P) + offstation_security_levels = P.offstation_security_levels /obj/item/circuitboard/machine/cryo_tube name = "Cryotube (Machine Board)" @@ -759,6 +766,13 @@ /obj/item/stock_parts/matter_bin = 1, /obj/item/stock_parts/manipulator = 1, /obj/item/reagent_containers/glass/beaker = 2) + var/offstation_security_levels = TRUE + +/obj/item/circuitboard/machine/circuit_imprinter/offstation + offstation_security_levels = FALSE + +/obj/item/circuitboard/machine/mechfab/rnd_crafted(obj/machinery/rnd/production/P) + offstation_security_levels = P.offstation_security_levels /obj/item/circuitboard/machine/circuit_imprinter/department name = "Departmental Circuit Imprinter (Machine Board)" @@ -804,7 +818,7 @@ var/new_cloud = input("Set the public nanite chamber's Cloud ID (1-100).", "Cloud ID", cloud_id) as num|null if(new_cloud == null) return - cloud_id = CLAMP(round(new_cloud, 1), 1, 100) + cloud_id = clamp(round(new_cloud, 1), 1, 100) /obj/item/circuitboard/machine/public_nanite_chamber/examine(mob/user) . = ..() @@ -832,6 +846,13 @@ /obj/item/stock_parts/matter_bin = 2, /obj/item/stock_parts/manipulator = 2, /obj/item/reagent_containers/glass/beaker = 2) + var/offstation_security_levels = TRUE + +/obj/item/circuitboard/machine/protolathe/offstation + offstation_security_levels = FALSE + +/obj/item/circuitboard/machine/protolathe/rnd_crafted(obj/machinery/rnd/production/P) + offstation_security_levels = P.offstation_security_levels /obj/item/circuitboard/machine/protolathe/department name = "Departmental Protolathe (Machine Board)" @@ -1033,9 +1054,9 @@ build_path = /obj/machinery/vending/kink req_components = list(/obj/item/vending_refill/kink = 1) -/obj/item/circuitboard/machine/autoylathe +/obj/item/circuitboard/machine/autolathe/toy name = "Autoylathe (Machine Board)" - build_path = /obj/machinery/autoylathe + build_path = /obj/machinery/autolathe/toy req_components = list( /obj/item/stock_parts/matter_bin = 3, /obj/item/stock_parts/manipulator = 1, diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 09c045497c..3dad3877b7 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -59,7 +59,7 @@ var/edible = TRUE // That doesn't mean eating it is a good idea - var/list/reagent_contents = list(/datum/reagent/consumable/nutriment = 1) + var/list/reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1) // If the user can toggle the colour, a la vanilla spraycan var/can_change_colour = FALSE @@ -346,8 +346,8 @@ var/clicky if(click_params && click_params["icon-x"] && click_params["icon-y"]) - clickx = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) - clicky = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + clickx = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + clicky = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) if(!instant) to_chat(user, "You start drawing a [temp] on the [target.name]...") @@ -487,56 +487,56 @@ icon_state = "crayonred" paint_color = "#DA0000" crayon_color = "red" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/red = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/red = 0.9) dye_color = DYE_RED /obj/item/toy/crayon/orange icon_state = "crayonorange" paint_color = "#FF9300" crayon_color = "orange" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/orange = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/orange = 0.9) dye_color = DYE_ORANGE /obj/item/toy/crayon/yellow icon_state = "crayonyellow" paint_color = "#FFF200" crayon_color = "yellow" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/yellow = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/yellow = 0.9) dye_color = DYE_YELLOW /obj/item/toy/crayon/green icon_state = "crayongreen" paint_color = "#A8E61D" crayon_color = "green" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/green = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/green = 0.9) dye_color = DYE_GREEN /obj/item/toy/crayon/blue icon_state = "crayonblue" paint_color = "#00B7EF" crayon_color = "blue" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/blue = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/blue = 0.9) dye_color = DYE_BLUE /obj/item/toy/crayon/purple icon_state = "crayonpurple" paint_color = "#DA00FF" crayon_color = "purple" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/purple = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/purple = 0.9) dye_color = DYE_PURPLE /obj/item/toy/crayon/black icon_state = "crayonblack" paint_color = "#1C1C1C" //Not completely black because total black looks bad. So Mostly Black. crayon_color = "black" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/black = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/black = 0.9) dye_color = DYE_BLACK /obj/item/toy/crayon/white icon_state = "crayonwhite" paint_color = "#FFFFFF" crayon_color = "white" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/white = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/white = 0.9) dye_color = DYE_WHITE /obj/item/toy/crayon/mime @@ -544,7 +544,7 @@ desc = "A very sad-looking crayon." paint_color = "#FFFFFF" crayon_color = "mime" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent/crayonpowder/invisible = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent/crayonpowder/invisible = 0.9) charges = -1 dye_color = DYE_MIME @@ -552,10 +552,9 @@ icon_state = "crayonrainbow" paint_color = "#FFF000" crayon_color = "rainbow" - reagent_contents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/colorful_reagent = 1) + reagent_contents = list(/datum/reagent/consumable/nutriment = 0.1, /datum/reagent/colorful_reagent = 0.9) drawtype = RANDOM_ANY // just the default starter. dye_color = DYE_RAINBOW - charges = -1 /obj/item/toy/crayon/rainbow/afterattack(atom/target, mob/user, proximity, params) diff --git a/code/game/objects/items/devices/desynchronizer.dm b/code/game/objects/items/devices/desynchronizer.dm index e5dcfc0075..e3385dc13f 100644 --- a/code/game/objects/items/devices/desynchronizer.dm +++ b/code/game/objects/items/devices/desynchronizer.dm @@ -39,7 +39,7 @@ var/new_duration = input(user, "Set the duration (5-300):", "Desynchronizer", duration / 10) as null|num if(new_duration) new_duration = new_duration SECONDS - new_duration = CLAMP(new_duration, 50, max_duration) + new_duration = clamp(new_duration, 50, max_duration) duration = new_duration to_chat(user, "You set the duration to [DisplayTimeText(duration)].") return TRUE diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 9a09be093d..981a811bc3 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(GPS_list) if(!ui) // Variable window height, depending on how many GPS units there are // to show, clamped to relatively safe range. - var/gps_window_height = CLAMP(325 + GLOB.GPS_list.len * 14, 325, 700) + var/gps_window_height = clamp(325 + GLOB.GPS_list.len * 14, 325, 700) ui = new(user, src, ui_key, "gps", "Global Positioning System", 470, gps_window_height, master_ui, state) //width, height ui.open() diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index bee59b254c..9ab6115634 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -171,7 +171,7 @@ // Negative numbers will subtract /obj/item/lightreplacer/proc/AddUses(amount = 1) - uses = CLAMP(uses + amount, 0, max_uses) + uses = clamp(uses + amount, 0, max_uses) /obj/item/lightreplacer/proc/AddShards(amount = 1, user) bulb_shards += amount diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index 1eee083c80..e94d14a57d 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -81,7 +81,7 @@ if(!usr.canUseTopic(src, BE_CLOSE)) return new_code = round(new_code) - new_code = CLAMP(new_code, 1, 100) + new_code = clamp(new_code, 1, 100) code = new_code if(href_list["set"] == "power") diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 4bab5a5bcd..b6261b9060 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -232,7 +232,7 @@ effective or pretty fucking useless. charge = max(0,charge - 25)//Quick decrease in light else charge = min(max_charge,charge + 50) //Charge in the dark - animate(user,alpha = CLAMP(255 - charge,0,255),time = 10) + animate(user,alpha = clamp(255 - charge,0,255),time = 10) /obj/item/jammer diff --git a/code/game/objects/items/dice.dm b/code/game/objects/items/dice.dm index f572d0a841..4fdb862288 100644 --- a/code/game/objects/items/dice.dm +++ b/code/game/objects/items/dice.dm @@ -170,7 +170,7 @@ /obj/item/dice/proc/diceroll(mob/user) result = roll(sides) if(rigged && result != rigged) - if(prob(CLAMP(1/(sides - 1) * 100, 25, 80))) + if(prob(clamp(1/(sides - 1) * 100, 25, 80))) result = rigged var/fake_result = roll(sides)//Daredevil isn't as good as he used to be var/comment = "" diff --git a/code/game/objects/items/granters.dm b/code/game/objects/items/granters.dm index 9749bae313..0a705df91c 100644 --- a/code/game/objects/items/granters.dm +++ b/code/game/objects/items/granters.dm @@ -57,6 +57,35 @@ on_reading_finished(user) reading = FALSE return TRUE +///TRAITS/// + +/obj/item/book/granter/trait + var/granted_trait + var/traitname = "being cool" + +/obj/item/book/granter/trait/already_known(mob/user) + if(!granted_trait) + return TRUE + if(HAS_TRAIT(user, granted_trait)) + to_chat(user, "You already have all the insight you need about [traitname].") + return TRUE + return FALSE + +/obj/item/book/granter/trait/on_reading_start(mob/user) + to_chat(user, "You start reading about [traitname]...") + +/obj/item/book/granter/trait/on_reading_finished(mob/user) + to_chat(user, "You feel like you've got a good handle on [traitname]!") + ADD_TRAIT(user, granted_trait, BOOK_TRAIT) + +/obj/item/book/granter/trait/rifleman + name = "\proper the Neo-Russian Rifleman\'s Primer" + desc = "A book with stains of vodka and...blood? The back is hard to read, but says something about bolt-actions. Or pump-actions. Both, maybe." + oneuse = FALSE + granted_trait = TRAIT_FAST_PUMP + traitname = "riflery" + icon_state = "book1" + remarks = list("One smooth motion...", "Palm the bolt...", "Push up, rotate back, push forward, down...", "Don't slap yourself with the bolt...", "Wait, what's this about pumping?", "Who just scribbled \"Z\" and \"LMB\" on this page?") ///ACTION BUTTONS/// diff --git a/code/game/objects/items/grenades/plastic.dm b/code/game/objects/items/grenades/plastic.dm index eaecae5a92..66869d6f04 100644 --- a/code/game/objects/items/grenades/plastic.dm +++ b/code/game/objects/items/grenades/plastic.dm @@ -94,7 +94,7 @@ return var/newtime = input(usr, "Please set the timer.", "Timer", 10) as num if(user.get_active_held_item() == src) - newtime = CLAMP(newtime, 10, 60000) + newtime = clamp(newtime, 10, 60000) det_time = newtime to_chat(user, "Timer set for [det_time] seconds.") diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index c961134244..6e270b6374 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -197,9 +197,9 @@ /obj/item/his_grace/proc/adjust_bloodthirst(amt) prev_bloodthirst = bloodthirst if(prev_bloodthirst < HIS_GRACE_CONSUME_OWNER && !ascended) - bloodthirst = CLAMP(bloodthirst + amt, HIS_GRACE_SATIATED, HIS_GRACE_CONSUME_OWNER) + bloodthirst = clamp(bloodthirst + amt, HIS_GRACE_SATIATED, HIS_GRACE_CONSUME_OWNER) else if(!ascended) - bloodthirst = CLAMP(bloodthirst + amt, HIS_GRACE_CONSUME_OWNER, HIS_GRACE_FALL_ASLEEP) + bloodthirst = clamp(bloodthirst + amt, HIS_GRACE_CONSUME_OWNER, HIS_GRACE_FALL_ASLEEP) update_stats() /obj/item/his_grace/proc/update_stats() diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index c262920ec5..171b5a465a 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -239,19 +239,29 @@ if(user.mind && (user.mind.isholy) && !reskinned) reskin_holy_weapon(user) +/** + * reskin_holy_weapon: Shows a user a list of all available nullrod reskins and based on his choice replaces the nullrod with the reskinned version + * + * Arguments: + * * M The mob choosing a nullrod reskin + */ /obj/item/nullrod/proc/reskin_holy_weapon(mob/living/L) if(GLOB.holy_weapon_type) return var/obj/item/holy_weapon var/list/holy_weapons_list = subtypesof(/obj/item/nullrod) + list(HOLY_WEAPONS) var/list/display_names = list() + var/list/nullrod_icons = list() for(var/V in holy_weapons_list) var/obj/item/nullrod/rodtype = V if (initial(rodtype.chaplain_spawnable)) display_names[initial(rodtype.name)] = rodtype + nullrod_icons += list(initial(rodtype.name) = image(icon = initial(rodtype.icon), icon_state = initial(rodtype.icon_state))) - var/choice = input(L, "What theme would you like for your holy weapon?","Holy Weapon Theme") as null|anything in display_names - if(QDELETED(src) || !choice || !in_range(L, src) || !CHECK_MOBILITY(L, MOBILITY_USE) || reskinned) + nullrod_icons = sortList(nullrod_icons) + + var/choice = show_radial_menu(L, src , nullrod_icons, custom_check = CALLBACK(src, .proc/check_menu, L), radius = 42, require_near = TRUE) + if(!choice || !check_menu(L)) return var/A = display_names[choice] // This needs to be on a separate var as list member access is not allowed for new @@ -266,6 +276,21 @@ qdel(src) L.put_in_active_hand(holy_weapon) +/** + * check_menu: Checks if we are allowed to interact with a radial menu + * + * Arguments: + * * user The mob interacting with a menu + */ +/obj/item/nullrod/proc/check_menu(mob/user) + if(!istype(user)) + return FALSE + if(QDELETED(src) || reskinned) + return FALSE + if(user.incapacitated() || !user.is_holding(src)) + return FALSE + return TRUE + /obj/item/nullrod/proc/jedi_spin(mob/living/user) for(var/i in list(NORTH,SOUTH,EAST,WEST,EAST,SOUTH,NORTH,SOUTH,EAST,WEST,EAST,SOUTH)) user.setDir(i) diff --git a/code/game/objects/items/hot_potato.dm b/code/game/objects/items/hot_potato.dm index 5f74830c99..347ec118fd 100644 --- a/code/game/objects/items/hot_potato.dm +++ b/code/game/objects/items/hot_potato.dm @@ -74,7 +74,7 @@ L.SetAllImmobility(0) L.SetSleeping(0) L.SetUnconscious(0) - L.reagents.add_reagent(/datum/reagent/medicine/muscle_stimulant, CLAMP(5 - L.reagents.get_reagent_amount(/datum/reagent/medicine/muscle_stimulant), 0, 5)) //If you don't have legs or get bola'd, tough luck! + L.reagents.add_reagent(/datum/reagent/medicine/muscle_stimulant, clamp(5 - L.reagents.get_reagent_amount(/datum/reagent/medicine/muscle_stimulant), 0, 5)) //If you don't have legs or get bola'd, tough luck! colorize(L) /obj/item/hot_potato/examine(mob/user) diff --git a/code/game/objects/items/pneumaticCannon.dm b/code/game/objects/items/pneumaticCannon.dm index 342f756ffc..23be8cbb9a 100644 --- a/code/game/objects/items/pneumaticCannon.dm +++ b/code/game/objects/items/pneumaticCannon.dm @@ -201,8 +201,8 @@ return target var/x_o = (target.x - starting.x) var/y_o = (target.y - starting.y) - var/new_x = CLAMP((starting.x + (x_o * range_multiplier)), 0, world.maxx) - var/new_y = CLAMP((starting.y + (y_o * range_multiplier)), 0, world.maxy) + var/new_x = clamp((starting.x + (x_o * range_multiplier)), 0, world.maxx) + var/new_y = clamp((starting.y + (y_o * range_multiplier)), 0, world.maxy) var/turf/newtarget = locate(new_x, new_y, starting.z) return newtarget diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 318753e4ad..abb2d12a1f 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -649,7 +649,7 @@ continue usage += projectile_tick_speed_ecost usage += (tracked[I] * projectile_damage_tick_ecost_coefficient) - energy = CLAMP(energy - usage, 0, maxenergy) + energy = clamp(energy - usage, 0, maxenergy) if(energy <= 0) deactivate_field() visible_message("[src] blinks \"ENERGY DEPLETED\".") @@ -659,7 +659,7 @@ if(iscyborg(host.loc)) host = host.loc else - energy = CLAMP(energy + energy_recharge, 0, maxenergy) + energy = clamp(energy + energy_recharge, 0, maxenergy) return if(host.cell && (host.cell.charge >= (host.cell.maxcharge * cyborg_cell_critical_percentage)) && (energy < maxenergy)) host.cell.use(energy_recharge*energy_recharge_cyborg_drain_coefficient) diff --git a/code/game/objects/items/sharpener.dm b/code/game/objects/items/sharpener.dm index 93056adc99..014d4cb159 100644 --- a/code/game/objects/items/sharpener.dm +++ b/code/game/objects/items/sharpener.dm @@ -35,14 +35,14 @@ if(TH.force_wielded > initial(TH.force_wielded)) to_chat(user, "[TH] has already been refined before. It cannot be sharpened further!") return - TH.force_wielded = CLAMP(TH.force_wielded + increment, 0, max)//wieldforce is increased since normal force wont stay + TH.force_wielded = clamp(TH.force_wielded + increment, 0, max)//wieldforce is increased since normal force wont stay if(I.force > initial(I.force)) to_chat(user, "[I] has already been refined before. It cannot be sharpened further!") return user.visible_message("[user] sharpens [I] with [src]!", "You sharpen [I], making it much more deadly than before.") I.sharpness = IS_SHARP_ACCURATE - I.force = CLAMP(I.force + increment, 0, max) - I.throwforce = CLAMP(I.throwforce + increment, 0, max) + I.force = clamp(I.force + increment, 0, max) + I.throwforce = clamp(I.throwforce + increment, 0, max) I.name = "[prefix] [I.name]" name = "worn out [name]" desc = "[desc] At least, it used to." diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index 6d8e582c29..f7bf659f0a 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -33,11 +33,11 @@ return TRUE /obj/item/shield/alt_pre_attack(atom/A, mob/living/user, params) - user_shieldbash(user, A, user.a_intent != INTENT_HARM) + user_shieldbash(user, A, user.a_intent == INTENT_HARM) return TRUE /obj/item/shield/altafterattack(atom/target, mob/user, proximity_flag, click_parameters) - user_shieldbash(user, target, user.a_intent != INTENT_HARM) + user_shieldbash(user, target, user.a_intent == INTENT_HARM) return TRUE /obj/item/shield/proc/do_shieldbash_effect(mob/living/user, dir, harmful) @@ -52,13 +52,13 @@ px = 12 if(WEST) px = -12 - var/oldpx = user.pixel_x - var/oldpy = user.pixel_y - animate(user, pixel_x = px, pixel_y = py, time = 3, easing = SINE_EASING | EASE_OUT, flags = ANIMATION_END_NOW) - animate(user, pixel_x = oldpx, pixel_y = oldpy, time = 3) - user.visible_message("[user] [harmful? "charges forwards with" : "sweeps"] [src]!") var/obj/effect/temp_visual/dir_setting/shield_bash/effect = new(user.loc, dir) - animate(effect, alpha = 0, pixel_x = px + 4, pixel_y = py + 4, time = 3) + effect.pixel_x = user.pixel_x - 32 //96x96 effect, -32. + effect.pixel_y = user.pixel_y - 32 + user.visible_message("[user] [harmful? "charges forwards with" : "sweeps"] [src]!") + animate(user, pixel_x = px, pixel_y = py, time = 3, easing = SINE_EASING | EASE_OUT, flags = ANIMATION_PARALLEL | ANIMATION_RELATIVE) + animate(user, pixel_x = -px, pixel_y = -py, time = 3, flags = ANIMATION_RELATIVE) + animate(effect, alpha = 0, pixel_x = px * 1.5, pixel_y = py * 1.5, time = 3, flags = ANIMATION_PARALLEL | ANIMATION_RELATIVE) /obj/item/shield/proc/bash_target(mob/living/user, mob/living/target, bashdir, harmful) if(!(target.status_flags & CANKNOCKDOWN) || HAS_TRAIT(src, TRAIT_STUNIMMUNE)) // should probably add stun absorption check at some point I guess.. @@ -76,7 +76,7 @@ "[user] shoves you with [src]!") for(var/i in 1 to harmful? shieldbash_knockback : shieldbash_push_distance) var/turf/new_turf = get_step(target, bashdir) - var/mob/living/carbon/human/H = locate() in new_turf + var/mob/living/carbon/human/H = locate() in (new_turf.contents - target) if(H && harmful) H.visible_message("[target] is sent crashing into [H]!", "[target] is sent crashing into you!") @@ -110,10 +110,14 @@ if(!(shield_flags & SHIELD_CAN_BASH)) to_chat(user, "[src] can't be used to shield bash!") return FALSE + if(!CHECK_MOBILITY(user, MOBILITY_STAND)) + to_chat(user, "You can't bash with [src] while on the ground!") + return FALSE if(world.time < last_shieldbash + shieldbash_cooldown) to_chat(user, "You can't bash with [src] again so soon!") return FALSE - if(isliving(target)) //GROUND SLAAAM + var/mob/living/livingtarget = target //only access after an isliving check! + if(isliving(target) && !CHECK_MOBILITY(livingtarget, MOBILITY_STAND)) //GROUND SLAAAM if(!(shield_flags & SHIELD_BASH_GROUND_SLAM)) to_chat(user, "You can't ground slam with [src]!") return FALSE @@ -122,7 +126,7 @@ playsound(src, harmful? "swing_hit" : 'sound/weapons/thudswoosh.ogg', 75, 1) last_shieldbash = world.time user.adjustStaminaLossBuffered(shieldbash_stamcost) - return 1 + return TRUE // Directional sweep! last_shieldbash = world.time user.adjustStaminaLossBuffered(shieldbash_stamcost) @@ -164,11 +168,12 @@ attack_verb = list("shoved", "bashed") var/cooldown = 0 //shield bash cooldown. based on world.time var/repair_material = /obj/item/stack/sheet/mineral/titanium + var/can_shatter = TRUE shield_flags = SHIELD_FLAGS_DEFAULT | SHIELD_TRANSPARENT max_integrity = 75 /obj/item/shield/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - if(ismovableatom(object)) + if(ismovable(object)) var/atom/movable/AM = object if(CHECK_BITFIELD(shield_flags, SHIELD_TRANSPARENT) && (AM.pass_flags & PASSGLASS)) return BLOCK_NONE @@ -213,7 +218,7 @@ new /obj/item/shard((get_turf(src))) /obj/item/shield/riot/on_shield_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - if(obj_integrity <= damage) + if(can_shatter && (obj_integrity <= damage)) var/turf/T = get_turf(owner) T.visible_message("[attack_text] destroys [src]!") shatter(owner) @@ -324,7 +329,6 @@ obj/item/shield/riot/bullet_proof armor = list("melee" = 25, "bullet" = 25, "laser" = 5, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 80) lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi' righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi' - icon = 'icons/obj/items_and_weapons.dmi' item_state = "metal" icon_state = "makeshift_shield" custom_materials = list(/datum/material/iron = 18000) @@ -340,7 +344,6 @@ obj/item/shield/riot/bullet_proof armor = list("melee" = 95, "bullet" = 95, "laser" = 75, "energy" = 60, "bomb" = 90, "bio" = 90, "rad" = 0, "fire" = 90, "acid" = 10) //Armor for the item, dosnt transfer to user item_state = "metal" icon_state = "metal" - icon = 'icons/obj/items_and_weapons.dmi' block_chance = 75 //1/4 shots will hit* force = 16 slowdown = 2 @@ -356,20 +359,47 @@ obj/item/shield/riot/bullet_proof block_chance = 50 /obj/item/shield/riot/implant - name = "riot tower shield" - desc = "A massive shield that can block a lot of attacks and can take a lot of abuse before breaking." //It cant break unless it is removed from the implant + name = "telescoping shield implant" + desc = "A compact, arm-mounted telescopic shield. While nigh-indestructible when powered by a host user, it will eventually overload from damage. Recharges while inside its implant." item_state = "metal" icon_state = "metal" - block_chance = 30 //May be big but hard to move around to block. + block_chance = 50 slowdown = 1 shield_flags = SHIELD_FLAGS_DEFAULT + max_integrity = 60 + obj_integrity = 60 + can_shatter = FALSE item_flags = SLOWS_WHILE_IN_HAND + var/recharge_timerid + var/recharge_delay = 15 SECONDS -/obj/item/shield/riot/implant/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - if(attack_type & ATTACK_TYPE_PROJECTILE) - final_block_chance = 60 //Massive shield - return ..() +/// Entirely overriden take_damage. This shouldn't exist outside of an implant (other than maybe christmas). +/obj/item/shield/riot/implant/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, armour_penetration = 0) + obj_integrity -= damage_amount + if(obj_integrity < 0) + obj_integrity = 0 + if(obj_integrity == 0) + if(ismob(loc)) + var/mob/living/L = loc + playsound(src, 'sound/effects/glassbr3.ogg', 100) + L.visible_message("[src] overloads from the damage sustained!") + L.dropItemToGround(src) //implant component catch hook will grab it. +/obj/item/shield/riot/implant/Moved() + . = ..() + if(istype(loc, /obj/item/organ/cyberimp/arm/shield)) + recharge_timerid = addtimer(CALLBACK(src, .proc/recharge), recharge_delay, flags = TIMER_STOPPABLE) + else //extending + if(recharge_timerid) + deltimer(recharge_timerid) + recharge_timerid = null + +/obj/item/shield/riot/implant/proc/recharge() + if(obj_integrity == max_integrity) + return + obj_integrity = max_integrity + if(ismob(loc.loc)) //cyberimplant.user + to_chat(loc, "[src] has recharged its reinforcement matrix and is ready for use!") /obj/item/shield/energy name = "energy combat shield" diff --git a/code/game/objects/items/singularityhammer.dm b/code/game/objects/items/singularityhammer.dm index 4c64ed9dd4..dc761ee3bf 100644 --- a/code/game/objects/items/singularityhammer.dm +++ b/code/game/objects/items/singularityhammer.dm @@ -37,7 +37,7 @@ /obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder) for(var/atom/X in orange(5,pull)) - if(ismovableatom(X)) + if(ismovable(X)) var/atom/movable/A = X if(A == wielder) continue diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 50e9b94e97..adc4970175 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -100,6 +100,7 @@ if(!H.bleedsuppress && H.bleed_rate) //so you can't stack bleed suppression H.suppress_bloodloss(stop_bleeding) to_chat(user, "You stop the bleeding of [M]!") + H.adjustBruteLoss(-(heal_brute)) return TRUE to_chat(user, "You can not use \the [src] on [M]!") @@ -127,6 +128,12 @@ stop_bleeding = 900 heal_brute = 0 +/obj/item/stack/medical/gauze/adv + name = "sterilized medical gauze" + desc = "A roll of elastic sterilized cloth that is extremely effective at stopping bleeding, heals minor wounds and cleans them." + singular_name = "sterilized medical gauze" + self_delay = 5 + /obj/item/stack/medical/gauze/cyborg custom_materials = null is_cyborg = 1 diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 70b00c72ec..add9ebd6b2 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -71,9 +71,9 @@ /obj/item/stack/proc/update_weight() if(amount <= (max_amount * (1/3))) - w_class = CLAMP(full_w_class-2, WEIGHT_CLASS_TINY, full_w_class) + w_class = clamp(full_w_class-2, WEIGHT_CLASS_TINY, full_w_class) else if (amount <= (max_amount * (2/3))) - w_class = CLAMP(full_w_class-1, WEIGHT_CLASS_TINY, full_w_class) + w_class = clamp(full_w_class-1, WEIGHT_CLASS_TINY, full_w_class) else w_class = full_w_class diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index 103dabdeec..52802fa3df 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -412,7 +412,7 @@ STR.max_combined_w_class = 200 STR.max_items = 25 STR.insert_preposition = "in" - STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/monkeycube, /obj/item/organ, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/bodypart)) + STR.can_hold = typecacheof(list(/obj/item/slime_extract, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/blood, /obj/item/reagent_containers/hypospray/medipen, /obj/item/reagent_containers/food/snacks/deadmouse, /obj/item/reagent_containers/food/snacks/cube, /obj/item/organ, /obj/item/reagent_containers/food/snacks/meat/slab, /obj/item/bodypart)) STR.cant_hold = typecacheof(list(/obj/item/organ/brain, /obj/item/organ/liver/cybernetic, /obj/item/organ/heart/cybernetic, /obj/item/organ/lungs/cybernetic, /obj/item/organ/tongue/cybernetic, /obj/item/organ/ears/cybernetic, /obj/item/organ/eyes/robotic, /obj/item/organ/cyberimp)) /obj/item/storage/bag/bio/holding diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index dc6f5f701e..97b7ee8a38 100755 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -695,7 +695,10 @@ /obj/item/gun/ballistic/revolver, /obj/item/ammo_box, /obj/item/toy/gun, - /obj/item/gun/energy/e_gun/mini + /obj/item/gun/energy/e_gun/mini, + /obj/item/gun/ballistic/automatic/magrifle/pistol, + /obj/item/gun/energy/disabler, + /obj/item/gun/energy/taser )) /obj/item/storage/belt/holster/full/PopulateContents() diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 515c39ffcb..ec443d4e48 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -454,11 +454,11 @@ . = ..() var/datum/component/storage/STR = GetComponent(/datum/component/storage) STR.max_items = 7 - STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/monkeycube)) + STR.can_hold = typecacheof(list(/obj/item/reagent_containers/food/snacks/cube/monkey)) /obj/item/storage/box/monkeycubes/PopulateContents() for(var/i in 1 to 5) - new /obj/item/reagent_containers/food/snacks/monkeycube(src) + new /obj/item/reagent_containers/food/snacks/cube/monkey(src) /obj/item/storage/box/ids name = "box of spare IDs" @@ -1117,9 +1117,9 @@ desc = "A box containing a gift for worthy golems." /obj/item/storage/box/rndboards/PopulateContents() - new /obj/item/circuitboard/machine/protolathe(src) + new /obj/item/circuitboard/machine/protolathe/offstation(src) new /obj/item/circuitboard/machine/destructive_analyzer(src) - new /obj/item/circuitboard/machine/circuit_imprinter(src) + new /obj/item/circuitboard/machine/circuit_imprinter/offstation(src) new /obj/item/circuitboard/computer/rdconsole(src) /obj/item/storage/box/silver_sulf diff --git a/code/game/objects/items/storage/toolbox.dm b/code/game/objects/items/storage/toolbox.dm index 50620b90fe..64e0a6b492 100644 --- a/code/game/objects/items/storage/toolbox.dm +++ b/code/game/objects/items/storage/toolbox.dm @@ -138,7 +138,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons) new /obj/item/crowbar/red(src) new /obj/item/wirecutters(src, "red") new /obj/item/multitool(src) - new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/gloves/tackler/combat/insulated(src) /obj/item/storage/toolbox/drone name = "mechanical toolbox" @@ -311,7 +311,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons) new /obj/item/crowbar/red(src) new /obj/item/wirecutters(src, "red") new /obj/item/multitool/ai_detect(src) - new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/gloves/tackler/combat/insulated(src) /obj/item/storage/toolbox/gold_real/ComponentInitialize() . = ..() diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index 874c858b3f..ffa3d83304 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -294,18 +294,18 @@ name = "chameleon kit" /obj/item/storage/box/syndie_kit/chameleon/PopulateContents() - new /obj/item/clothing/under/chameleon(src) - new /obj/item/clothing/suit/chameleon(src) - new /obj/item/clothing/gloves/chameleon(src) - new /obj/item/clothing/shoes/chameleon(src) - new /obj/item/clothing/glasses/chameleon(src) - new /obj/item/clothing/head/chameleon(src) - new /obj/item/clothing/mask/chameleon(src) - new /obj/item/storage/backpack/chameleon(src) - new /obj/item/radio/headset/chameleon(src) - new /obj/item/stamp/chameleon(src) - new /obj/item/pda/chameleon(src) - new /obj/item/clothing/neck/cloak/chameleon(src) + new /obj/item/clothing/under/chameleon/syndicate(src) + new /obj/item/clothing/suit/chameleon/syndicate(src) + new /obj/item/clothing/gloves/chameleon/insulated/syndicate(src) + new /obj/item/clothing/shoes/chameleon/syndicate(src) + new /obj/item/clothing/glasses/chameleon/syndicate(src) + new /obj/item/clothing/head/chameleon/syndicate(src) + new /obj/item/clothing/mask/chameleon/syndicate(src) + new /obj/item/storage/backpack/chameleon/syndicate(src) + new /obj/item/radio/headset/chameleon/syndicate(src) + new /obj/item/stamp/chameleon/syndicate(src) + new /obj/item/pda/chameleon/syndicate(src) + new /obj/item/clothing/neck/cloak/chameleon/syndicate(src) //5*(2*4) = 5*8 = 45, 45 damage if you hit one person with all 5 stars. //Not counting the damage it will do while embedded (2*4 = 8, at 15% chance) @@ -501,3 +501,13 @@ new item2(src) new item3(src) new /obj/item/paper/contractor_guide(src) //Paper guide + +/obj/item/storage/box/syndie_kit/northstar + +/obj/item/storage/box/syndie_kit/northstar/PopulateContents() + new /obj/item/clothing/gloves/fingerless/pugilist/rapid(src) + new /obj/item/clothing/accessory/padding(src) + new /obj/item/clothing/under/chameleon(src) + new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) + new /obj/item/lighter(src) + diff --git a/code/game/objects/items/tanks/jetpack.dm b/code/game/objects/items/tanks/jetpack.dm index f592055338..e81294ceea 100644 --- a/code/game/objects/items/tanks/jetpack.dm +++ b/code/game/objects/items/tanks/jetpack.dm @@ -52,7 +52,7 @@ ion_trail.start() RegisterSignal(user, COMSIG_MOVABLE_MOVED, .proc/move_react) if(full_speed) - user.add_movespeed_modifier(MOVESPEED_ID_JETPACK, priority=100, multiplicative_slowdown=-2, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK) + user.add_movespeed_modifier(/datum/movespeed_modifier/jetpack/fullspeed) /obj/item/tank/jetpack/proc/turn_off(mob/user) on = FALSE @@ -60,7 +60,7 @@ icon_state = initial(icon_state) ion_trail.stop() UnregisterSignal(user, COMSIG_MOVABLE_MOVED) - user.remove_movespeed_modifier(MOVESPEED_ID_JETPACK) + user.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/fullspeed) /obj/item/tank/jetpack/proc/move_react(mob/user) allow_thrust(0.01, user) diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 58e16ad615..1c92ed4e61 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -204,7 +204,7 @@ pressure = text2num(pressure) . = TRUE if(.) - distribute_pressure = CLAMP(round(pressure), TANK_MIN_RELEASE_PRESSURE, TANK_MAX_RELEASE_PRESSURE) + distribute_pressure = clamp(round(pressure), TANK_MIN_RELEASE_PRESSURE, TANK_MAX_RELEASE_PRESSURE) /obj/item/tank/remove_air(amount) return air_contents.remove(amount) diff --git a/code/game/objects/items/theft_tools.dm b/code/game/objects/items/theft_tools.dm index 6fbf9316ed..08390e1607 100644 --- a/code/game/objects/items/theft_tools.dm +++ b/code/game/objects/items/theft_tools.dm @@ -256,7 +256,7 @@ . = ..() if(!sliver) return - if(proximity && ismovableatom(O) && O != sliver) + if(proximity && ismovable(O) && O != sliver) Consume(O, user) /obj/item/hemostat/supermatter/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) // no instakill supermatter javelins diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 8496a8a216..2d132e4eef 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -303,7 +303,6 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 custom_materials = list(/datum/material/iron=500, /datum/material/glass=500) resistance_flags = FIRE_PROOF - /obj/item/switchblade name = "switchblade" icon_state = "switchblade" @@ -639,6 +638,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 w_class = WEIGHT_CLASS_SMALL //Things in this list will be instantly splatted. Flyman weakness is handled in the flyman species weakness proc. var/list/strong_against + var/list/spider_panic /obj/item/melee/flyswatter/Initialize() . = ..() @@ -648,7 +648,10 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /mob/living/simple_animal/cockroach, /obj/item/queen_bee )) - + spider_panic = typecacheof(list( + /mob/living/simple_animal/banana_spider, + /mob/living/simple_animal/hostile/poison/giant_spider, + )) /obj/item/melee/flyswatter/afterattack(atom/target, mob/user, proximity_flag) . = ..() @@ -659,6 +662,11 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 if(istype(target, /mob/living/)) var/mob/living/bug = target bug.death(1) + if(is_type_in_typecache(target, spider_panic)) + to_chat(user, "You easily land a critical blow on the [target].") + if(istype(target, /mob/living/)) + var/mob/living/bug = target + bug.adjustBruteLoss(-35) //What kinda mad man would go into melee with a spider?! else qdel(target) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index e582aa7e67..8dac972d04 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -31,7 +31,7 @@ if(damage_flag) armor_protection = armor.getRating(damage_flag) if(armor_protection) //Only apply weak-against-armor/hollowpoint effects if there actually IS armor. - armor_protection = CLAMP(armor_protection - armour_penetration, 0, 100) + armor_protection = clamp(armor_protection - armour_penetration, 0, 100) return round(damage_amount * (100 - armor_protection)*0.01, DAMAGE_PRECISION) //the sound played when the obj is damaged. @@ -213,7 +213,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(T.intact && level == 1) //fire can't damage things hidden below the floor. return if(exposed_temperature && !(resistance_flags & FIRE_PROOF)) - take_damage(CLAMP(0.02 * exposed_temperature, 0, 20), BURN, "fire", 0) + take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, "fire", 0) if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE)) resistance_flags |= ON_FIRE SSfire_burning.processing[src] = src @@ -244,7 +244,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(has_buckled_mobs()) for(var/m in buckled_mobs) var/mob/living/buckled_mob = m - buckled_mob.electrocute_act((CLAMP(round(strength/400), 10, 90) + rand(-5, 5)), src, flags = SHOCK_TESLA) + buckled_mob.electrocute_act((clamp(round(strength/400), 10, 90) + rand(-5, 5)), src, flags = SHOCK_TESLA) /obj/proc/reset_shocked() obj_flags &= ~BEING_SHOCKED diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index d2d72193b7..5acbb2f231 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -3,6 +3,7 @@ var/crit_fail = FALSE animate_movement = 2 speech_span = SPAN_ROBOT + vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of obj in openspace. var/obj_flags = CAN_BE_HIT var/set_obj_flags // ONLY FOR MAPPING: Sets flags from a string list, handled in Initialize. Usage: set_obj_flags = "EMAGGED;!CAN_BE_HIT" to set EMAGGED and clear CAN_BE_HIT. diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index a40314c7ad..5da04a6686 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -505,7 +505,7 @@ /obj/structure/closet/container_resist(mob/living/user) if(opened) return - if(ismovableatom(loc)) + if(ismovable(loc)) user.changeNext_move(CLICK_CD_BREAKOUT) user.last_special = world.time + CLICK_CD_BREAKOUT var/atom/movable/AM = loc diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index 83827b56b6..0da502283b 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -37,8 +37,8 @@ ..() new /obj/item/clothing/glasses/eyepatch(src) new /obj/item/clothing/glasses/sunglasses(src) - new /obj/item/clothing/gloves/combat(src) - new /obj/item/clothing/gloves/combat(src) + new /obj/item/clothing/gloves/tackler/combat(src) + new /obj/item/clothing/gloves/tackler/combat(src) new /obj/item/clothing/head/helmet/swat(src) new /obj/item/clothing/head/helmet/swat(src) new /obj/item/clothing/mask/gas/sechailer/swat(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index 58d72e6ee0..05798df953 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -77,6 +77,7 @@ new /obj/item/clothing/mask/gas(src) new /obj/item/clothing/glasses/meson/engine(src) new /obj/item/storage/box/emptysandbags(src) + new /obj/item/cartridge/engineering(src) /obj/structure/closet/secure_closet/atmospherics name = "\proper atmospheric technician's locker" @@ -97,6 +98,7 @@ new /obj/item/clothing/head/hardhat/atmos(src) new /obj/item/clothing/glasses/meson/engine/tray(src) new /obj/item/extinguisher/advanced(src) + new /obj/item/cartridge/atmos(src) /* * Empty lockers diff --git a/code/game/objects/structures/fireplace.dm b/code/game/objects/structures/fireplace.dm index ee8f285230..ca66dbd8de 100644 --- a/code/game/objects/structures/fireplace.dm +++ b/code/game/objects/structures/fireplace.dm @@ -130,7 +130,7 @@ if(burn_time_remaining() < MAXIMUM_BURN_TIMER) flame_expiry_timer = world.time + MAXIMUM_BURN_TIMER else - fuel_added = CLAMP(fuel_added + amount, 0, MAXIMUM_BURN_TIMER) + fuel_added = clamp(fuel_added + amount, 0, MAXIMUM_BURN_TIMER) /obj/structure/fireplace/proc/burn_time_remaining() if(lit) diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index c918e7b867..e794e12ad7 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -453,7 +453,7 @@ name = "Syndicate Operative Empty" uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/syndicate/alt back = /obj/item/storage/backpack implants = list(/obj/item/implant/weapons_auth) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 7c373f2734..fd62ffd368 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -294,7 +294,7 @@ /obj/structure/girder/CanAStarPass(ID, dir, caller) . = !density - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSGRILLE) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 61983dcb4f..54e08db210 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -129,7 +129,7 @@ /obj/structure/grille/CanAStarPass(ID, dir, caller) . = !density - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSGRILLE) diff --git a/code/game/objects/structures/mirror.dm b/code/game/objects/structures/mirror.dm index be783f387e..e32def727a 100644 --- a/code/game/objects/structures/mirror.dm +++ b/code/game/objects/structures/mirror.dm @@ -159,7 +159,7 @@ if(H.dna.species.use_skintones) var/list/choices = GLOB.skin_tones - if(CONFIG_GET(number/allow_custom_skintones)) + if(CONFIG_GET(flag/allow_custom_skintones)) choices += "custom" var/new_s_tone = input(H, "Choose your skin tone:", "Race change") as null|anything in choices if(new_s_tone) diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index 8cf5b1ee66..79a7ce0519 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -333,7 +333,7 @@ GLOBAL_LIST_EMPTY(crematoriums) to_chat(user, "That's not connected to anything!") /obj/structure/tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user) - if(!ismovableatom(O) || O.anchored || !Adjacent(user) || !user.Adjacent(O) || O.loc == user) + if(!ismovable(O) || O.anchored || !Adjacent(user) || !user.Adjacent(O) || O.loc == user) return if(!ismob(O)) if(!istype(O, /obj/structure/closet/body_bag)) @@ -375,6 +375,6 @@ GLOBAL_LIST_EMPTY(crematoriums) /obj/structure/tray/m_tray/CanAStarPass(ID, dir, caller) . = !density - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSTABLE) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 550c0216c6..bbdf6925f9 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -103,7 +103,7 @@ /obj/structure/table/CanAStarPass(ID, dir, caller) . = !density - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSTABLE) @@ -175,8 +175,8 @@ if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) return //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) - I.pixel_x = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) - I.pixel_y = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + I.pixel_x = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + I.pixel_y = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) return 1 else return ..() @@ -610,7 +610,7 @@ /obj/structure/rack/CanAStarPass(ID, dir, caller) . = !density - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSTABLE) diff --git a/code/game/turfs/change_turf.dm b/code/game/turfs/change_turf.dm index bc4cd8df33..3a719d05b9 100644 --- a/code/game/turfs/change_turf.dm +++ b/code/game/turfs/change_turf.dm @@ -256,9 +256,9 @@ GLOBAL_LIST_INIT(blacklisted_automated_baseturfs, typecacheof(list( if(depth) var/list/target_baseturfs if(length(copytarget.baseturfs)) - // with default inputs this would be Copy(CLAMP(2, -INFINITY, baseturfs.len)) + // with default inputs this would be Copy(clamp(2, -INFINITY, baseturfs.len)) // Don't forget a lower index is lower in the baseturfs stack, the bottom is baseturfs[1] - target_baseturfs = copytarget.baseturfs.Copy(CLAMP(1 + ignore_bottom, 1 + copytarget.baseturfs.len - depth, copytarget.baseturfs.len)) + target_baseturfs = copytarget.baseturfs.Copy(clamp(1 + ignore_bottom, 1 + copytarget.baseturfs.len - depth, copytarget.baseturfs.len)) else if(!ignore_bottom) target_baseturfs = list(copytarget.baseturfs) if(target_baseturfs) diff --git a/code/game/turfs/openspace/openspace.dm b/code/game/turfs/openspace/openspace.dm index 66507e7053..41c77cd57c 100644 --- a/code/game/turfs/openspace/openspace.dm +++ b/code/game/turfs/openspace/openspace.dm @@ -1,7 +1,20 @@ +GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdrop, new) + +/atom/movable/openspace_backdrop + name = "openspace_backdrop" + + anchored = TRUE + + icon = 'icons/turf/floors.dmi' + icon_state = "grey" + plane = OPENSPACE_BACKDROP_PLANE + mouse_opacity = MOUSE_OPACITY_TRANSPARENT + layer = SPLASHSCREEN_LAYER + /turf/open/openspace name = "open space" desc = "Watch your step!" - icon_state = "grey" + icon_state = "transparent" baseturfs = /turf/open/openspace CanAtmosPassVertical = ATMOS_PASS_YES //mouse_opacity = MOUSE_OPACITY_TRANSPARENT @@ -14,8 +27,9 @@ /turf/open/openspace/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker . = ..() - plane = FLOOR_OPENSPACE_PLANE + plane = OPENSPACE_PLANE layer = OPENSPACE_LAYER + vis_contents += GLOB.openspace_backdrop_one_for_all //Special grey square for projecting backdrop darkness filter on it. return INITIALIZE_HINT_LATELOAD /turf/open/openspace/LateInitialize() diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index f31649eaca..88f6dd6962 100755 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -1,6 +1,8 @@ /turf icon = 'icons/turf/floors.dmi' level = 1 + vis_flags = VIS_INHERIT_PLANE|VIS_INHERIT_ID //when this be added to vis_contents of something it inherit something.plane and be associatet with something on clicking, + //important for visualisation of turf in openspace and interraction with openspace that show you turf. var/intact = 1 @@ -441,7 +443,7 @@ for(var/V in contents) var/atom/A = V if(!QDELETED(A) && A.level >= affecting_level) - if(ismovableatom(A)) + if(ismovable(A)) var/atom/movable/AM = A if(!AM.ex_check(explosion_id)) continue diff --git a/code/game/world.dm b/code/game/world.dm index 77361310b8..1d719ee138 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -10,9 +10,7 @@ GLOBAL_LIST(topic_status_cache) /world/New() enable_debugger() -#if DM_VERSION >= 513 && DM_BUILD >= 1506 world.Profile(PROFILE_START) -#endif log_world("World loaded at [TIME_STAMP("hh:mm:ss", FALSE)]!") @@ -300,8 +298,8 @@ GLOBAL_LIST(topic_status_cache) if(SSmapping.config) // this just stops the runtime, honk. features += "[SSmapping.config.map_name]" //CIT CHANGE - makes the hub entry display the current map - if(get_security_level())//CIT CHANGE - makes the hub entry show the security level - features += "[get_security_level()] alert" + if(NUM2SECLEVEL(GLOB.security_level))//CIT CHANGE - makes the hub entry show the security level + features += "[NUM2SECLEVEL(GLOB.security_level)] alert" if (n > 1) features += "~[n] players" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 4a7e818125..a2e2b3c122 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -429,6 +429,10 @@ for(var/datum/dynamic_ruleset/roundstart/rule in GLOB.dynamic_forced_roundstart_ruleset) dat += {"-> [rule.name] <-
"} dat += "(Clear Rulesets)
" + dat += "(Force Storyteller)
" + if (GLOB.dynamic_forced_storyteller) + var/datum/dynamic_storyteller/S = GLOB.dynamic_forced_storyteller + dat += "-> [initial(S.name)] <-
" dat += "(Dynamic mode options)
" else if (SSticker.IsRoundInProgress()) dat += "(Force Next Latejoin Ruleset)
" @@ -690,7 +694,7 @@ var/prev_dynamic_voting = CONFIG_GET(flag/dynamic_voting) CONFIG_SET(flag/dynamic_voting,!prev_dynamic_voting) if (!prev_dynamic_voting) - to_chat(world, "Vote is now a ranked choice of dynamic storytellers.") + to_chat(world, "Vote is now between dynamic storytellers.") else to_chat(world, "Vote is now between extended and secret.") log_admin("[key_name(usr)] [prev_dynamic_voting ? "disabled" : "enabled"] dynamic voting.") diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index cbd429af5c..e9b8c274a8 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -81,7 +81,7 @@ GLOBAL_PROTECT(admin_verbs_admin) ) GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/DB_ban_panel, /client/proc/stickybanpanel)) GLOBAL_PROTECT(admin_verbs_ban) -GLOBAL_LIST_INIT(admin_verbs_sounds, list(/client/proc/play_local_sound, /client/proc/play_sound, /client/proc/set_round_end_sound)) +GLOBAL_LIST_INIT(admin_verbs_sounds, list(/client/proc/play_local_sound, /client/proc/play_sound, /client/proc/manual_play_web_sound, /client/proc/set_round_end_sound)) GLOBAL_PROTECT(admin_verbs_sounds) GLOBAL_LIST_INIT(admin_verbs_fun, list( /client/proc/cmd_admin_dress, @@ -364,7 +364,7 @@ GLOBAL_PROTECT(admin_verbs_hideable) log_admin("[key_name(usr)] admin ghosted.") message_admins("[key_name_admin(usr)] admin ghosted.") var/mob/body = mob - body.ghostize(1) + body.ghostize(1, voluntary = TRUE) if(body && !body.key) body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus SSblackbox.record_feedback("tally", "admin_verb", 1, "Admin Ghost") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/callproc/callproc.dm b/code/modules/admin/callproc/callproc.dm index 3de5e39ff4..c13353b7cd 100644 --- a/code/modules/admin/callproc/callproc.dm +++ b/code/modules/admin/callproc/callproc.dm @@ -120,7 +120,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) //adv proc call this, ya nerds /world/proc/WrapAdminProcCall(datum/target, procname, list/arguments) if(target == GLOBAL_PROC) - return call(procname)(arglist(arguments)) + return call(text2path("/proc/[procname]"))(arglist(arguments)) else if(target != world) return call(target, procname)(arglist(arguments)) else diff --git a/code/modules/admin/sound_emitter.dm b/code/modules/admin/sound_emitter.dm index 702e2071bd..56c778dc85 100644 --- a/code/modules/admin/sound_emitter.dm +++ b/code/modules/admin/sound_emitter.dm @@ -95,7 +95,7 @@ var/new_volume = input(user, "Choose a volume.", "Sound Emitter", sound_volume) as null|num if(isnull(new_volume)) return - new_volume = CLAMP(new_volume, 0, 100) + new_volume = clamp(new_volume, 0, 100) sound_volume = new_volume to_chat(user, "Volume set to [sound_volume]%.") if(href_list["edit_mode"]) @@ -118,7 +118,7 @@ var/new_radius = input(user, "Choose a radius.", "Sound Emitter", sound_volume) as null|num if(isnull(new_radius)) return - new_radius = CLAMP(new_radius, 0, 127) + new_radius = clamp(new_radius, 0, 127) play_radius = new_radius to_chat(user, "Audible radius set to [play_radius].") if(href_list["play"]) diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 7b59e72403..356746ddbc 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -393,7 +393,7 @@ var/nsd = CONFIG_GET(number/note_stale_days) var/nfd = CONFIG_GET(number/note_fresh_days) if (agegate && type == "note" && isnum(nsd) && isnum(nfd) && nsd > nfd) - var/alpha = CLAMP(100 - (age - nfd) * (85 / (nsd - nfd)), 15, 100) + var/alpha = clamp(100 - (age - nfd) * (85 / (nsd - nfd)), 15, 100) if (alpha < 100) if (alpha <= 15) if (skipped) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 62c2dc900c..042a6e0fe9 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1394,6 +1394,32 @@ log_admin("[key_name(usr)] removed [rule] from the forced roundstart rulesets.") message_admins("[key_name(usr)] removed [rule] from the forced roundstart rulesets.", 1) + else if(href_list["f_dynamic_storyteller"]) + if(!check_rights(R_ADMIN)) + return + if(SSticker && SSticker.mode) + return alert(usr, "The game has already started.", null, null, null, null) + if(GLOB.master_mode != "dynamic") + return alert(usr, "The game mode has to be dynamic mode.", null, null, null, null) + var/list/choices = list() + for(var/T in config.storyteller_cache) + var/datum/dynamic_storyteller/S = T + choices[initial(S.name)] = T + var/choice = choices[input("Select storyteller:", "Storyteller", "Classic") as null|anything in choices] + if(choice) + GLOB.dynamic_forced_storyteller = choice + log_admin("[key_name(usr)] forced the storyteller to [GLOB.dynamic_forced_storyteller].") + message_admins("[key_name(usr)] forced the storyteller to [GLOB.dynamic_forced_storyteller].") + Game() + + else if(href_list["f_dynamic_storyteller_clear"]) + if(!check_rights(R_ADMIN)) + return + GLOB.dynamic_forced_storyteller = null + Game() + log_admin("[key_name(usr)] cleared the forced storyteller. The mode will pick one as normal.") + message_admins("[key_name(usr)] cleared the forced storyteller. The mode will pick one as normal.", 1) + else if(href_list["f_dynamic_latejoin"]) if(!check_rights(R_ADMIN)) return @@ -2363,7 +2389,7 @@ return var/list/offset = splittext(href_list["offset"],",") - var/number = CLAMP(text2num(href_list["object_count"]), 1, 100) + var/number = clamp(text2num(href_list["object_count"]), 1, 100) var/X = offset.len > 0 ? text2num(offset[1]) : 0 var/Y = offset.len > 1 ? text2num(offset[2]) : 0 var/Z = offset.len > 2 ? text2num(offset[3]) : 0 diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm index 83f2839438..869e44e4f5 100644 --- a/code/modules/admin/verbs/borgpanel.dm +++ b/code/modules/admin/verbs/borgpanel.dm @@ -85,7 +85,7 @@ if ("set_charge") var/newcharge = input("New charge (0-[borg.cell.maxcharge]):", borg.name, borg.cell.charge) as num|null if (newcharge) - borg.cell.charge = CLAMP(newcharge, 0, borg.cell.maxcharge) + borg.cell.charge = clamp(newcharge, 0, borg.cell.maxcharge) message_admins("[key_name_admin(user)] set the charge of [ADMIN_LOOKUPFLW(borg)] to [borg.cell.charge].") log_admin("[key_name(user)] set the charge of [key_name(borg)] to [borg.cell.charge].") if ("remove_cell") diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index cbbec40f85..e7b9342645 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -10,7 +10,7 @@ var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num if(!freq) freq = 1 - vol = CLAMP(vol, 1, 100) + vol = clamp(vol, 1, 100) var/sound/admin_sound = new() admin_sound.file = S @@ -138,6 +138,49 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Internet Sound") +/client/proc/manual_play_web_sound() + set category = "Fun" + set name = "Manual Play Internet Sound" + if(!check_rights(R_SOUNDS)) + return + + var/web_sound_input = input("Enter content stream URL (fetch this from local youtube-dl!)", "Play Internet Sound via direct URL") as text|null + if(istext(web_sound_input)) + if(!length(web_sound_input)) + log_admin("[key_name(src)] stopped web sound") + message_admins("[key_name(src)] stopped web sound") + var/mob/M + for(var/i in GLOB.player_list) + M = i + M?.client?.chatOutput?.stopMusic() + return + else + if(web_sound_input && !findtext(web_sound_input, GLOB.is_http_protocol)) + to_chat(src, "BLOCKED: Content URL not using http(s) protocol") + return + var/freq = input(usr, "What frequency would you like the sound to play at?",, 1) as null|num + if(isnull(freq)) + return + if(!freq) + freq = 1 + SSblackbox.record_feedback("nested tally", "played_url", 1, list("[ckey]", "[web_sound_input]")) + var/logstr = "[key_name(src)] played web sound at freq [freq]: [web_sound_input]" + log_admin(logstr) + message_admins(logstr) + var/mob/M + var/client/C + var/datum/chatOutput/O + for(var/i in GLOB.player_list) + M = i + C = M.client + if(!(C?.prefs?.toggles & SOUND_MIDI)) + continue + O = C.chatOutput + if(!O || O.broken || !O.loaded) + continue + O.sendMusic(web_sound_input, freq) + SSblackbox.record_feedback("tally", "admin_verb", 1, "Manual Play Internet Sound") + /client/proc/set_round_end_sound(S as sound) set category = "Fun" set name = "Set Round End Sound" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index ef8a63a728..5530225130 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -1379,3 +1379,47 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits else message_admins("[key_name_admin(usr)] has [newstate ? "activated" : "deactivated"] job exp exempt status on [key_name_admin(C)]") log_admin("[key_name(usr)] has [newstate ? "activated" : "deactivated"] job exp exempt status on [key_name(C)]") + +/// Allow admin to add or remove traits of datum +/datum/admins/proc/modify_traits(datum/D) + if(!D) + return + + var/add_or_remove = input("Remove/Add?", "Trait Remove/Add") as null|anything in list("Add","Remove") + if(!add_or_remove) + return + var/list/availible_traits = list() + + switch(add_or_remove) + if("Add") + for(var/key in GLOB.traits_by_type) + if(istype(D,key)) + availible_traits += GLOB.traits_by_type[key] + if("Remove") + if(!GLOB.trait_name_map) + GLOB.trait_name_map = generate_trait_name_map() + for(var/trait in D.status_traits) + var/name = GLOB.trait_name_map[trait] || trait + availible_traits[name] = trait + + var/chosen_trait = input("Select trait to modify", "Trait") as null|anything in sortList(availible_traits) + if(!chosen_trait) + return + chosen_trait = availible_traits[chosen_trait] + + var/source = "adminabuse" + switch(add_or_remove) + if("Add") //Not doing source choosing here intentionally to make this bit faster to use, you can always vv it. + ADD_TRAIT(D,chosen_trait,source) + if("Remove") + var/specific = input("All or specific source ?", "Trait Remove/Add") as null|anything in list("All","Specific") + if(!specific) + return + switch(specific) + if("All") + source = null + if("Specific") + source = input("Source to be removed","Trait Remove/Add") as null|anything in sortList(D.status_traits[chosen_trait]) + if(!source) + return + REMOVE_TRAIT(D,chosen_trait,source) diff --git a/code/modules/admin/view_variables/modify_variables.dm b/code/modules/admin/view_variables/modify_variables.dm index a4ed4d45bd..5f80b3a5e4 100644 --- a/code/modules/admin/view_variables/modify_variables.dm +++ b/code/modules/admin/view_variables/modify_variables.dm @@ -194,9 +194,10 @@ GLOBAL_PROTECT(VVpixelmovement) else variable = L[index] //EXPERIMENTAL - Keep old associated value while modifying key, if any - var/found = L[variable] - if(!isnull(found)) - old_assoc_value = found + if(IS_VALID_ASSOC_KEY(variable)) + var/found = L[variable] + if(!isnull(found)) + old_assoc_value = found // default = vv_get_class(objectvar, variable) diff --git a/code/modules/admin/view_variables/topic_basic.dm b/code/modules/admin/view_variables/topic_basic.dm index 2a0f3d7302..d6e4c2b944 100644 --- a/code/modules/admin/view_variables/topic_basic.dm +++ b/code/modules/admin/view_variables/topic_basic.dm @@ -47,5 +47,33 @@ usr.client.debug_variables(src) if(href_list[VV_HK_MARK]) usr.client.mark_datum(target) + if(href_list[VV_HK_ADDCOMPONENT]) + if(!check_rights(NONE)) + return + var/list/names = list() + var/list/componentsubtypes = subtypesof(/datum/component) + names += "---Components---" + names += componentsubtypes + names += "---Elements---" + names += subtypesof(/datum/element) + var/result = input(usr, "Choose a component/element to add","better know what ur fuckin doin pal") as null|anything in names + if(!usr || !result || result == "---Components---" || result == "---Elements---") + return + if(QDELETED(src)) + to_chat(usr, "That thing doesn't exist anymore!") + return + var/list/lst = get_callproc_args() + if(!lst) + return + var/datumname = "error" + lst.Insert(1, result) + if(result in componentsubtypes) + datumname = "component" + target._AddComponent(lst) + else + datumname = "element" + target._AddElement(lst) + log_admin("[key_name(usr)] has added [result] [datumname] to [key_name(src)].") + message_admins("[key_name_admin(usr)] has added [result] [datumname] to [key_name_admin(src)].") if(href_list[VV_HK_CALLPROC]) usr.client.callproc_datum(target) diff --git a/code/modules/antagonists/_common/antag_team.dm b/code/modules/antagonists/_common/antag_team.dm index 653853cfb5..9d138ed0b9 100644 --- a/code/modules/antagonists/_common/antag_team.dm +++ b/code/modules/antagonists/_common/antag_team.dm @@ -42,7 +42,7 @@ if(objective.completable) var/completion = objective.check_completion() if(completion >= 1) - report += "Objective #[objective_count]: [objective.explanation_text] Success!" + report += "Objective #[objective_count]: [objective.explanation_text] Success!" else if(completion <= 0) report += "Objective #[objective_count]: [objective.explanation_text] Fail." win = FALSE diff --git a/code/modules/antagonists/abductor/equipment/gland.dm b/code/modules/antagonists/abductor/equipment/gland.dm index 0d30ebe992..d9ae678bb9 100644 --- a/code/modules/antagonists/abductor/equipment/gland.dm +++ b/code/modules/antagonists/abductor/equipment/gland.dm @@ -6,6 +6,7 @@ status = ORGAN_ROBOTIC beating = TRUE organ_flags = ORGAN_NO_SPOIL + no_pump = TRUE var/true_name = "baseline placebo referencer" var/cooldown_low = 300 var/cooldown_high = 300 @@ -92,6 +93,7 @@ update_gland_hud() /obj/item/organ/heart/gland/on_life() + . = ..() if(!beating) // alien glands are immune to stopping. beating = TRUE diff --git a/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm index 3757aecd02..fbdeea6b84 100644 --- a/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm +++ b/code/modules/antagonists/blob/blob/blobs/blob_mobs.dm @@ -42,7 +42,7 @@ /mob/living/simple_animal/hostile/blob/fire_act(exposed_temperature, exposed_volume) ..() if(exposed_temperature) - adjustFireLoss(CLAMP(0.01 * exposed_temperature, 1, 5)) + adjustFireLoss(clamp(0.01 * exposed_temperature, 1, 5)) else adjustFireLoss(5) diff --git a/code/modules/antagonists/blob/blob/overmind.dm b/code/modules/antagonists/blob/blob/overmind.dm index aed64e4039..02be432045 100644 --- a/code/modules/antagonists/blob/blob/overmind.dm +++ b/code/modules/antagonists/blob/blob/overmind.dm @@ -203,7 +203,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) B.hud_used.blobpwrdisplay.maptext = "
[round(blob_core.obj_integrity)]
" /mob/camera/blob/proc/add_points(points) - blob_points = CLAMP(blob_points + points, 0, max_blob_points) + blob_points = clamp(blob_points + points, 0, max_blob_points) hud_used.blobpwrdisplay.maptext = "
[round(blob_points)]
" /mob/camera/blob/say(message, bubble_type, var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) diff --git a/code/modules/antagonists/blob/blob/theblob.dm b/code/modules/antagonists/blob/blob/theblob.dm index 444b10684b..5717dc557d 100644 --- a/code/modules/antagonists/blob/blob/theblob.dm +++ b/code/modules/antagonists/blob/blob/theblob.dm @@ -77,7 +77,7 @@ /obj/structure/blob/CanAStarPass(ID, dir, caller) . = 0 - if(ismovableatom(caller)) + if(ismovable(caller)) var/atom/movable/mover = caller . = . || (mover.pass_flags & PASSBLOB) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm index efccb5591e..1867be1594 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_life.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_life.dm @@ -14,10 +14,10 @@ set waitfor = FALSE // Don't make on_gain() wait for this function to finish. This lets this code run on the side. var/notice_healing while(owner && !AmFinalDeath()) // owner.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) == src - if(owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_DEATHCOMA)) // Deduct Blood + if(owner.current.stat == CONSCIOUS && !poweron_feed && !HAS_TRAIT(owner.current, TRAIT_FAKEDEATH)) // Deduct Blood AddBloodVolume(passive_blood_drain) // -.1 currently if(HandleHealing(1)) // Heal - if(notice_healing == FALSE && owner.current.blood_volume > 0) + if(!notice_healing && owner.current.blood_volume > 0) to_chat(owner, "The power of your blood begins knitting your wounds...") notice_healing = TRUE else if(notice_healing == TRUE) @@ -25,7 +25,7 @@ HandleStarving() // Death HandleDeath() // Standard Update update_hud()// Daytime Sleep in Coffin - if(SSticker.mode.is_daylight() && !HAS_TRAIT_FROM(owner.current, TRAIT_DEATHCOMA, "bloodsucker")) + if(SSticker.mode.is_daylight() && !HAS_TRAIT_FROM(owner.current, TRAIT_FAKEDEATH, "bloodsucker")) if(istype(owner.current.loc, /obj/structure/closet/crate/coffin)) Torpor_Begin() // Wait before next pass @@ -39,7 +39,7 @@ ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /datum/antagonist/bloodsucker/proc/AddBloodVolume(value) - owner.current.blood_volume = CLAMP(owner.current.blood_volume + value, 0, max_blood_volume) + owner.current.blood_volume = clamp(owner.current.blood_volume + value, 0, max_blood_volume) update_hud() /datum/antagonist/bloodsucker/proc/HandleFeeding(mob/living/carbon/target, mult=1) @@ -83,7 +83,7 @@ // NOTE: Mult of 0 is just a TEST to see if we are injured and need to go into Torpor! //It is called from your coffin on close (by you only) var/actual_regen = regen_rate + additional_regen - if(poweron_masquerade == TRUE || owner.current.AmStaked()) + if(poweron_masquerade|| owner.current.AmStaked()) return FALSE if(owner.current.reagents.has_reagent(/datum/reagent/consumable/garlic)) return FALSE @@ -101,8 +101,8 @@ var/mob/living/carbon/C = owner.current var/costMult = 1 // Coffin makes it cheaper var/fireheal = 0 // BURN: Heal in Coffin while Fakedeath, or when damage above maxhealth (you can never fully heal fire) - var/amInCoffinWhileTorpor = istype(C.loc, /obj/structure/closet/crate/coffin) && (mult == 0 || HAS_TRAIT(C, TRAIT_FAKEDEATH)) // Check for mult 0 OR death coma. (mult 0 means we're testing from coffin) - if(amInCoffinWhileTorpor) + // Check for mult 0 OR death coma. (mult 0 means we're testing from coffin) + if(istype(C.loc, /obj/structure/closet/crate/coffin) && (mult == 0 || HAS_TRAIT(C, TRAIT_FAKEDEATH))) mult *= 4 // Increase multiplier if we're sleeping in a coffin. fireheal = min(C.getFireLoss(), regen_rate) // NOTE: Burn damage ONLY heals in torpor. C.ExtinguishMob() @@ -112,7 +112,10 @@ CheckVampOrgans() // Heart, Eyes if(check_limbs(costMult)) return TRUE - + else if(owner.current.stat >= UNCONSCIOUS) //Faster regeneration and slight burn healing while unconcious + mult *= 2 + fireheal = min(C.getFireLoss(), regen_rate * 0.2) + // BRUTE: Always Heal var/bruteheal = min(C.getBruteLoss(), actual_regen) var/toxinheal = min(C.getToxLoss(), actual_regen) @@ -120,8 +123,6 @@ if(bruteheal + fireheal + toxinheal > 0) // Just a check? Don't heal/spend, and return. if(mult == 0) return TRUE - if(owner.current.stat >= UNCONSCIOUS) //Faster regeneration while unconcious, so you dont have to wait all day - mult *= 2 // We have damage. Let's heal (one time) C.adjustBruteLoss(-bruteheal * mult, forced = TRUE)// Heal BRUTE / BURN in random portions throughout the body. C.adjustFireLoss(-fireheal * mult, forced = TRUE) @@ -129,7 +130,7 @@ //C.heal_overall_damage(bruteheal * mult, fireheal * mult) // REMOVED: We need to FORCE this, because otherwise, vamps won't heal EVER. Swapped to above. AddBloodVolume((bruteheal * -0.5 + fireheal * -1 + toxinheal * -0.2) / mult * costMult) // Costs blood to heal return TRUE // Healed! Done for this tick. - + /datum/antagonist/bloodsucker/proc/check_limbs(costMult) @@ -137,7 +138,7 @@ var/mob/living/carbon/C = owner.current var/list/missing = C.get_missing_limbs() if(missing.len && C.blood_volume < limb_regen_cost + 5) - return FALSE + return FALSE for(var/targetLimbZone in missing) // 1) Find ONE Limb and regenerate it. C.regenerate_limb(targetLimbZone, FALSE) // regenerate_limbs() <--- If you want to EXCLUDE certain parts, do it like this ----> regenerate_limbs(0, list("head")) AddBloodVolume(50) @@ -146,12 +147,6 @@ to_chat(C, "Your flesh knits as it regrows your [L]!") playsound(C, 'sound/magic/demon_consume.ogg', 50, TRUE) return TRUE - /*for(var/obj/item/bodypart/BP in C.bodyparts) - if(!istype(BP) && !BP.status == 2) - return FALSE - to_chat(C, "Your body expels the [BP]!") - BP.drop_limb() - return TRUE */ /datum/antagonist/bloodsucker/proc/CureDisabilities() var/mob/living/carbon/C = owner.current @@ -176,14 +171,14 @@ // EMPTY: Frenzy! // BLOOD_VOLUME_GOOD: [336] Pale (handled in bloodsucker_integration.dm // BLOOD_VOLUME_BAD: [224] Jitter - if(owner.current.blood_volume < BLOOD_VOLUME_BAD && !prob(0.5)) + if(owner.current.blood_volume < BLOOD_VOLUME_BAD && !prob(0.5 && HAS_TRAIT(owner, TRAIT_FAKEDEATH)) && !poweron_masquerade) owner.current.Jitter(3) // BLOOD_VOLUME_SURVIVE: [122] Blur Vision if(owner.current.blood_volume < BLOOD_VOLUME_BAD / 2) owner.current.blur_eyes(8 - 8 * (owner.current.blood_volume / BLOOD_VOLUME_BAD)) // Nutrition owner.current.nutrition = clamp(owner.current.blood_volume, 545, 0) //The amount of blood is how full we are. - //A bit higher regeneration based on blood volume + //A bit higher regeneration based on blood volume if(owner.current.blood_volume < 700) additional_regen = 0.4 else if(owner.current.blood_volume < BLOOD_VOLUME_NORMAL) @@ -230,16 +225,16 @@ Torpor_Begin() to_chat(owner, "Your immortal body will not yet relinquish your soul to the abyss. You enter Torpor.") sleep(30) //To avoid spam - if(poweron_masquerade == TRUE) + if(poweron_masquerade) to_chat(owner, "Your wounds will not heal until you disable the Masquerade power.") // End Torpor: else // No damage, OR toxin healed AND brute healed and NOT in coffin (since you cannot heal burn) if(total_damage <= 0 || total_toxloss <= 0 && total_brute <= 0 && !istype(owner.current.loc, /obj/structure/closet/crate/coffin)) - // Not Daytime, Not in Torpor - if(!SSticker.mode.is_daylight() && HAS_TRAIT_FROM(owner.current, TRAIT_FAKEDEATH, "bloodsucker")) + // Not Daytime, Not in Torpor, enough health to not die the moment you end torpor + if(!SSticker.mode.is_daylight() && HAS_TRAIT_FROM(owner.current, TRAIT_FAKEDEATH, "bloodsucker") && total_damage < owner.current.getMaxHealth()) Torpor_End() // Fake Unconscious - if(poweron_masquerade == TRUE && total_damage >= owner.current.getMaxHealth() - HEALTH_THRESHOLD_FULLCRIT) + if(poweron_masquerade && total_damage >= owner.current.getMaxHealth() - HEALTH_THRESHOLD_FULLCRIT) owner.current.Unconscious(20, 1) /datum/antagonist/bloodsucker/proc/Torpor_Begin(amInCoffin = FALSE) @@ -249,6 +244,7 @@ ADD_TRAIT(owner.current, TRAIT_NODEATH, "bloodsucker") // Without this, you'll just keep dying while you recover. ADD_TRAIT(owner.current, TRAIT_RESISTHIGHPRESSURE, "bloodsucker") // So you can heal in space. Otherwise you just...heal forever. ADD_TRAIT(owner.current, TRAIT_RESISTLOWPRESSURE, "bloodsucker") + owner.current.Jitter(0) // Visuals owner.current.update_sight() owner.current.reload_fullscreen() @@ -256,6 +252,9 @@ for(var/datum/action/bloodsucker/power in powers) if(power.active && !power.can_use_in_torpor) power.DeactivatePower() + if(owner.current.suiciding) + owner.current.suiciding = FALSE //Youll die but not for long. + to_chat(owner.current, "Your body keeps you going, even as you try to end yourself.") /datum/antagonist/bloodsucker/proc/Torpor_End() owner.current.stat = SOFT_CRIT @@ -369,8 +368,8 @@ //Puke blood only if puke_blood is true, and loose some blood, else just puke normally. if(puke_blood) C.blood_volume = max(0, C.blood_volume - foodInGut * 2) - C.vomit(foodInGut * 4, foodInGut * 2, 0) - else + C.vomit(foodInGut * 4, foodInGut * 2, 0) + else C.vomit(foodInGut * 4, FALSE, 0) C.Stun(30) //C.Dizzy(50) diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm index 0c80ce0dee..7043c2f429 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_objectives.dm @@ -87,7 +87,7 @@ // Heads? if (target_role == "HEAD") target_amount = rand(1, round(SSticker.mode.num_players() / 20)) - target_amount = CLAMP(target_amount,1,3) + target_amount = clamp(target_amount,1,3) // Department? else switch(target_role) @@ -100,7 +100,7 @@ if("Quartermaster") department_string = "Cargo" target_amount = rand(round(SSticker.mode.num_players() / 20), round(SSticker.mode.num_players() / 10)) - target_amount = CLAMP(target_amount, 2, 4) + target_amount = clamp(target_amount, 2, 4) ..() // EXPLANATION diff --git a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm index b7d98c6783..43163f6a70 100644 --- a/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm +++ b/code/modules/antagonists/bloodsucker/bloodsucker_sunlight.dm @@ -45,15 +45,15 @@ // (FINAL LIL WARNING) while(time_til_cycle > 5) sleep(10) - if (cancel_me) + if(cancel_me) return //sleep(TIME_BLOODSUCKER_DAY_FINAL_WARN - 50) warn_daylight(3,"Seek cover, for Sol rises!") // Part 3: Night Ending - while (time_til_cycle > 0) + while(time_til_cycle > 0) sleep(10) - if (cancel_me) + if(cancel_me) return //sleep(50) warn_daylight(4,"Solar flares bombard the station with deadly UV light!
Stay in cover for the next [TIME_BLOODSUCKER_DAY / 60] minutes or risk Final Death!",\ @@ -69,11 +69,11 @@ while(time_til_cycle > 0) punish_vamps() sleep(TIME_BLOODSUCKER_BURN_INTERVAL) - if (cancel_me) + if(cancel_me) return //daylight_time -= TIME_BLOODSUCKER_BURN_INTERVAL // Issue Level Up! - if(!issued_XP && time_til_cycle <= 15) + if(!issued_XP && time_til_cycle <= 5) issued_XP = TRUE vamps_rank_up() diff --git a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm index 946be31ed6..2e9d3c1788 100644 --- a/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm +++ b/code/modules/antagonists/bloodsucker/datum_bloodsucker.dm @@ -227,7 +227,7 @@ // Traits for(var/T in defaultTraits) REMOVE_TRAIT(owner.current, T, BLOODSUCKER_TRAIT) - if(had_toxlover == TRUE) + if(had_toxlover) ADD_TRAIT(owner.current, TRAIT_TOXINLOVER, SPECIES_TRAIT) // Traits: Species diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm index debeee3775..e85d3af5a0 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_coffin.dm @@ -200,39 +200,3 @@ to_chat(resident, "You fix the mechanism and lock it.") broken = FALSE locked = TRUE - -// Look up recipes.dm OR pneumaticCannon.dm -/datum/crafting_recipe/bloodsucker/blackcoffin - name = "Black Coffin" - result = /obj/structure/closet/crate/coffin/blackcoffin - tools = list(/obj/item/weldingtool, - /obj/item/screwdriver) - reqs = list(/obj/item/stack/sheet/cloth = 1, - /obj/item/stack/sheet/mineral/wood = 5, - /obj/item/stack/sheet/metal = 1) - ///obj/item/stack/packageWrap = 8, - ///obj/item/pipe = 2) - time = 150 - category = CAT_MISC - always_availible = TRUE - -/datum/crafting_recipe/bloodsucker/meatcoffin - name = "Meat Coffin" - result =/obj/structure/closet/crate/coffin/meatcoffin - tools = list(/obj/item/kitchen/knife, - /obj/item/kitchen/rollingpin) - reqs = list(/obj/item/reagent_containers/food/snacks/meat/slab = 5, - /obj/item/restraints/handcuffs/cable = 1) - time = 150 - category = CAT_MISC - always_availible = TRUE - -/datum/crafting_recipe/bloodsucker/metalcoffin - name = "Metal Coffin" - result =/obj/structure/closet/crate/coffin/metalcoffin - tools = list(/obj/item/weldingtool, - /obj/item/screwdriver) - reqs = list(/obj/item/stack/sheet/metal = 5) - time = 100 - category = CAT_MISC - always_availible = TRUE diff --git a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm index f68191d6d7..dd7e835d3a 100644 --- a/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm +++ b/code/modules/antagonists/bloodsucker/objects/bloodsucker_lair.dm @@ -63,7 +63,7 @@ // Find Animals in Area /* if(rand(0,2) == 0) var/mobCount = 0 - var/mobMax = CLAMP(area_turfs.len / 25, 1, 4) + var/mobMax = clamp(area_turfs.len / 25, 1, 4) for (var/turf/T in area_turfs) if(!T) continue var/mob/living/simple_animal/SA = locate() in T diff --git a/code/modules/antagonists/bloodsucker/powers/cloak.dm b/code/modules/antagonists/bloodsucker/powers/cloak.dm index a616c39923..347700ca9a 100644 --- a/code/modules/antagonists/bloodsucker/powers/cloak.dm +++ b/code/modules/antagonists/bloodsucker/powers/cloak.dm @@ -18,14 +18,11 @@ . = ..() if(!.) return - // must have nobody around to see the cloak - var/watchers = viewers(9,get_turf(owner)) - for(var/mob/living/M in watchers) + for(var/mob/living/M in viewers(9, owner)) if(M != owner) to_chat(owner, "You may only vanish into the shadows unseen.") return FALSE - return TRUE /datum/action/bloodsucker/cloak/ActivatePower() diff --git a/code/modules/antagonists/bloodsucker/powers/fortitude.dm b/code/modules/antagonists/bloodsucker/powers/fortitude.dm index a58034df0d..76f3cc77a4 100644 --- a/code/modules/antagonists/bloodsucker/powers/fortitude.dm +++ b/code/modules/antagonists/bloodsucker/powers/fortitude.dm @@ -3,7 +3,7 @@ /datum/action/bloodsucker/fortitude - name = "Fortitude"//"Cellular Emporium" + name = "Fortitude" desc = "Withstand egregious physical wounds and walk away from attacks that would stun, pierce, and dismember lesser beings. You cannot run while active." button_icon_state = "power_fortitude" bloodcost = 30 @@ -11,28 +11,27 @@ bloodsucker_can_buy = TRUE amToggle = TRUE warn_constant_cost = TRUE + var/was_running - var/this_resist // So we can raise and lower your brute resist based on what your level_current WAS. + var/fortitude_resist // So we can raise and lower your brute resist based on what your level_current WAS. /datum/action/bloodsucker/fortitude/ActivatePower() - var/datum/antagonist/bloodsucker/bloodsuckerdatum = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + var/datum/antagonist/bloodsucker/B = owner.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) var/mob/living/user = owner to_chat(user, "Your flesh, skin, and muscles become as steel.") // Traits & Effects ADD_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude") ADD_TRAIT(user, TRAIT_NODISMEMBER, "fortitude") ADD_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude") - ADD_TRAIT(user, TRAIT_NORUNNING, "fortitude") if(ishuman(owner)) var/mob/living/carbon/human/H = owner - this_resist = max(0.3, 0.7 - level_current * 0.1) - H.physiology.brute_mod *= this_resist//0.5 - H.physiology.burn_mod *= this_resist//0.5 - // Stop Running (Taken from /datum/quirk/nyctophobia in negative.dm) - var/was_running = (user.m_intent == MOVE_INTENT_RUN) + fortitude_resist = max(0.3, 0.7 - level_current * 0.1) + H.physiology.brute_mod *= fortitude_resist + H.physiology.burn_mod *= fortitude_resist + was_running = (user.m_intent == MOVE_INTENT_RUN) if(was_running) user.toggle_move_intent() - while(bloodsuckerdatum && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN) + while(B && ContinueActive(user) || user.m_intent == MOVE_INTENT_RUN) if(istype(user.buckled, /obj/vehicle)) //We dont want people using fortitude being able to use vehicles var/obj/vehicle/V = user.buckled var/datum/component/riding/VRD = V.GetComponent(/datum/component/riding) @@ -44,20 +43,21 @@ to_chat(user, "You fall off the [V], your weight making you too heavy to be supported by it.") // Pay Blood Toll (if awake) if(user.stat == CONSCIOUS) - bloodsuckerdatum.AddBloodVolume(-0.5) // Used to be 0.3 blood per 2 seconds, but we're making it more expensive to keep on. + B.AddBloodVolume(-0.5) sleep(20) // Check every few ticks that we haven't disabled this power // Return to Running (if you were before) - if(was_running && user.m_intent != MOVE_INTENT_RUN) - user.toggle_move_intent() - + /datum/action/bloodsucker/fortitude/DeactivatePower(mob/living/user = owner, mob/living/target) ..() // Restore Traits & Effects REMOVE_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude") REMOVE_TRAIT(user, TRAIT_NODISMEMBER, "fortitude") REMOVE_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude") - REMOVE_TRAIT(user, TRAIT_NORUNNING, "fortitude") - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.physiology.brute_mod /= this_resist//0.5 - H.physiology.burn_mod /= this_resist//0.5 + if(!ishuman(owner)) + return + var/mob/living/carbon/human/H = owner + H.physiology.brute_mod /= fortitude_resist + H.physiology.burn_mod /= fortitude_resist + if(was_running && user.m_intent == MOVE_INTENT_WALK) + user.toggle_move_intent() + diff --git a/code/modules/antagonists/bloodsucker/powers/lunge.dm b/code/modules/antagonists/bloodsucker/powers/lunge.dm index f6dfc8ba72..db7868fa8a 100644 --- a/code/modules/antagonists/bloodsucker/powers/lunge.dm +++ b/code/modules/antagonists/bloodsucker/powers/lunge.dm @@ -1,88 +1,46 @@ -// Level 1: Grapple level 2 -// Level 2: Grapple 3 from Behind -// Level 3: Grapple 3 from Shadows -/datum/action/bloodsucker/targeted/lunge + + +/datum/action/bloodsucker/lunge name = "Predatory Lunge" - desc = "Spring at your target and aggressively grapple them without warning. Attacks from concealment or the rear may even knock them down." + desc = "Prepare the strenght to grapple your prey." button_icon_state = "power_lunge" bloodcost = 10 - cooldown = 120 - target_range = 3 - power_activates_immediately = TRUE - message_Trigger = "Whom will you ensnare within your grasp?" - must_be_capacitated = TRUE + cooldown = 30 bloodsucker_can_buy = TRUE + warn_constant_cost = TRUE + amToggle = TRUE + var/leap_skill_mod = 5 -/datum/action/bloodsucker/targeted/lunge/CheckCanUse(display_error) - if(!..(display_error))// DEFAULT CHECKS - return FALSE - // Being Grabbed - if(owner.pulledby && owner.pulledby.grab_state >= GRAB_AGGRESSIVE) - if(display_error) - to_chat(owner, "You're being grabbed!") - return FALSE - if(!owner.has_gravity(owner.loc))//TODO figure out how to check if theyre able to move while in nograv - if(display_error) - to_chat(owner, "You cant lunge while floating!") - return FALSE - return TRUE +/datum/action/bloodsucker/lunge/New() + . = ..() + -/datum/action/bloodsucker/targeted/lunge/CheckValidTarget(atom/A) - return iscarbon(A) +/datum/action/bloodsucker/lunge/Destroy() + . = ..() + UnregisterSignal(owner, COMSIG_CARBON_TACKLED) -/datum/action/bloodsucker/targeted/lunge/CheckCanTarget(atom/A, display_error) - // Check: Self - if(target == owner) - return FALSE - // Check: Range - //if (!(target in view(target_range, get_turf(owner)))) - // if (display_error) - // to_chat(owner, "Your victim is too far away.") - // return FALSE - // DEFAULT CHECKS (Distance) - if(!..()) - return FALSE - // Check: Turf - var/mob/living/L = A - if(!isturf(L.loc)) - return FALSE - return TRUE +/datum/action/bloodsucker/lunge/ActivatePower() + var/mob/living/carbon/user = owner + var/datum/antagonist/bloodsucker/B = user.mind.has_antag_datum(ANTAG_DATUM_BLOODSUCKER) + var/datum/component/tackler/T = user.LoadComponent(/datum/component/tackler) + T.stamina_cost = 50 + T.base_knockdown = 3 SECONDS + T.range = 4 + T.speed = 0.8 + T.skill_mod = 5 //Monstrous tackling + T.min_distance = 2 + active = TRUE + user.toggle_throw_mode() + RegisterSignal(user, COMSIG_CARBON_TACKLED, .proc/DelayedDeactivatePower) + while(B && ContinueActive(user)) + B.AddBloodVolume(-0.1) + sleep(5) -/datum/action/bloodsucker/targeted/lunge/FireTargetedPower(atom/A) - // set waitfor = FALSE <---- DONT DO THIS!We WANT this power to hold up ClickWithPower(), so that we can unlock the power when it's done. - var/mob/living/carbon/target = A - var/turf/T = get_turf(target) - var/mob/living/L = owner - // Clear Vars - owner.pulling = null - // Will we Knock them Down? - var/do_knockdown = !is_A_facing_B(target,owner) || owner.alpha <= 0 || istype(owner.loc, /obj/structure/closet) - // CAUSES: Target has their back to me, I'm invisible, or I'm in a Closet - // Step One: Heatseek toward Target's Turf - addtimer(CALLBACK(GLOBAL_PROC, .proc/_walk, owner, 0), 2 SECONDS) - target.playsound_local(get_turf(owner), 'sound/bloodsucker/lunge_warn.ogg', 60, FALSE, pressure_affected = FALSE) // target-only telegraphing - owner.playsound_local(owner, 'sound/bloodsucker/lunge_warn.ogg', 60, FALSE, pressure_affected = FALSE) // audio feedback to the user - if(do_mob(owner, owner, 7, TRUE, TRUE)) - walk_towards(owner, T, 0.1, 10) // yes i know i shouldn't use this but i don't know how to work in anything better - if(get_turf(owner) != T && !(isliving(target) && target.Adjacent(owner)) && owner.incapacitated() && !CHECK_MOBILITY(L, MOBILITY_STAND)) - var/send_dir = get_dir(owner, T) - new /datum/forced_movement(owner, get_ranged_target_turf(owner, send_dir, 1), 1, FALSE) - owner.spin(10) - // Step Two: Check if I'm at/adjectent to Target's CURRENT turf (not original...that was just a destination) - for(var/i in 1 to 6) - if (target.Adjacent(owner)) - // LEVEL 2: If behind target, mute or unconscious! - if(do_knockdown) // && level_current >= 1) - target.Knockdown(15 + 10 * level_current,1) - target.adjustStaminaLoss(40 + 10 * level_current) - // Cancel Walk (we were close enough to contact them) - walk(owner, 0) - target.Stun(10,1) //Without this the victim can just walk away - target.grabbedby(owner) // Taken from mutations.dm under changelings - target.grippedby(owner, instant = TRUE) //instant aggro grab - break - sleep(3) +//Without this, the leap component would get removed too early, causing the normal crash into effects. +/datum/action/bloodsucker/lunge/proc/DelayedDeactivatePower() + addtimer(CALLBACK(src, .proc/DeactivatePower), 1 SECONDS, TIMER_UNIQUE) -/datum/action/bloodsucker/targeted/lunge/DeactivatePower(mob/living/user = owner, mob/living/target) - ..() // activate = FALSE - user.update_mobility() +/datum/action/bloodsucker/lunge/DeactivatePower(mob/living/user = owner) + . = ..() + qdel(user.GetComponent(/datum/component/tackler)) + UnregisterSignal(user, COMSIG_CARBON_TACKLED) diff --git a/code/modules/antagonists/bloodsucker/powers/masquerade.dm b/code/modules/antagonists/bloodsucker/powers/masquerade.dm index 7d41899dc2..d83f938e3f 100644 --- a/code/modules/antagonists/bloodsucker/powers/masquerade.dm +++ b/code/modules/antagonists/bloodsucker/powers/masquerade.dm @@ -52,6 +52,7 @@ REMOVE_TRAIT(user, TRAIT_NOHARDCRIT, "bloodsucker") REMOVE_TRAIT(user, TRAIT_NOSOFTCRIT, "bloodsucker") REMOVE_TRAIT(user, TRAIT_VIRUSIMMUNE, "bloodsucker") + REMOVE_TRAIT(user, TRAIT_NOBREATH, "bloodsucker") var/obj/item/organ/heart/vampheart/H = user.getorganslot(ORGAN_SLOT_HEART) var/obj/item/organ/eyes/vassal/bloodsucker/E = user.getorganslot(ORGAN_SLOT_EYES) E.flash_protect = 0 @@ -93,6 +94,7 @@ ADD_TRAIT(user, TRAIT_NOHARDCRIT, "bloodsucker") ADD_TRAIT(user, TRAIT_NOSOFTCRIT, "bloodsucker") ADD_TRAIT(user, TRAIT_VIRUSIMMUNE, "bloodsucker") + ADD_TRAIT(user, TRAIT_NOBREATH, "bloodsucker") // HEART var/obj/item/organ/heart/H = user.getorganslot(ORGAN_SLOT_HEART) diff --git a/code/modules/antagonists/bloodsucker/powers/trespass.dm b/code/modules/antagonists/bloodsucker/powers/trespass.dm index 45d1dda3ef..c91b924bb7 100644 --- a/code/modules/antagonists/bloodsucker/powers/trespass.dm +++ b/code/modules/antagonists/bloodsucker/powers/trespass.dm @@ -28,7 +28,7 @@ /datum/action/bloodsucker/targeted/trespass/CheckValidTarget(atom/A) // Can't target my tile - if (A == get_turf(owner) || get_turf(A) == get_turf(owner)) + if(A == get_turf(owner) || get_turf(A) == get_turf(owner)) return FALSE return TRUE // All we care about is destination. Anything you click is fine. @@ -43,13 +43,13 @@ // Are either tiles WALLS? var/turf/from_turf = get_turf(owner) var/this_dir // = get_dir(from_turf, target_turf) - for (var/i=1 to 2) + for(var/i=1 to 2) // Keep Prev Direction if we've reached final turf - if (from_turf != final_turf) + if(from_turf != final_turf) this_dir = get_dir(from_turf, final_turf) // Recalculate dir so we don't overshoot on a diagonal. from_turf = get_step(from_turf, this_dir) // ERROR! Wall! - if (iswallturf(from_turf)) + if(iswallturf(from_turf)) if (display_error) var/wallwarning = (i == 1) ? "in the way" : "at your destination" to_chat(owner, "There is a solid wall [wallwarning].") @@ -84,7 +84,7 @@ user.next_move = world.time + mist_delay user.Stun(mist_delay, ignore_canstun = TRUE) user.notransform = TRUE - user.density = 0 + user.density = FALSE var/invis_was = user.invisibility user.invisibility = INVISIBILITY_MAXIMUM @@ -94,7 +94,7 @@ sleep(mist_delay / 2) // Move & Freeze - if (isturf(target_turf)) + if(isturf(target_turf)) do_teleport(owner, target_turf, no_effects=TRUE, channel = TELEPORT_CHANNEL_QUANTUM) // in teleport.dm? user.next_move = world.time + mist_delay / 2 user.Stun(mist_delay / 2, ignore_canstun = TRUE) diff --git a/code/modules/antagonists/bloodsucker/powers/veil.dm b/code/modules/antagonists/bloodsucker/powers/veil.dm index 671f88f2c1..422d645ad2 100644 --- a/code/modules/antagonists/bloodsucker/powers/veil.dm +++ b/code/modules/antagonists/bloodsucker/powers/veil.dm @@ -93,7 +93,7 @@ H.socks = random_socks(H.gender) //H.eye_color = random_eye_color() REMOVE_TRAIT(H, TRAIT_DISFIGURED, null) // - H.dna.features = random_features(H.dna.species?.id) + H.dna.features = random_features(H.dna.species?.id, H.gender) // Apply Appearance H.update_body(TRUE) // Outfit and underwear, also body and privates. diff --git a/code/modules/antagonists/brother/brother.dm b/code/modules/antagonists/brother/brother.dm index a48e080a89..0a2e079921 100644 --- a/code/modules/antagonists/brother/brother.dm +++ b/code/modules/antagonists/brother/brother.dm @@ -111,7 +111,7 @@ if(objective.completable) var/completion = objective.check_completion() if(completion >= 1) - parts += "Objective #[objective_count]: [objective.explanation_text] Success!" + parts += "Objective #[objective_count]: [objective.explanation_text] Success!" else if(completion <= 0) parts += "Objective #[objective_count]: [objective.explanation_text] Fail." win = FALSE diff --git a/code/modules/antagonists/changeling/changeling.dm b/code/modules/antagonists/changeling/changeling.dm index 967715ce2f..9dbcaf7ec2 100644 --- a/code/modules/antagonists/changeling/changeling.dm +++ b/code/modules/antagonists/changeling/changeling.dm @@ -430,7 +430,7 @@ objectives += destroy_objective else if(prob(70)) - var/datum/objective/assassinate/kill_objective = new + var/datum/objective/assassinate/once/kill_objective = new kill_objective.owner = owner if(team_mode) //No backstabbing while in a team kill_objective.find_target_by_role(role = ROLE_CHANGELING, role_type = 1, invert = 1) @@ -563,7 +563,7 @@ if(objective.completable) var/completion = objective.check_completion() if(completion >= 1) - parts += "Objective #[count]: [objective.explanation_text] Success!" + parts += "Objective #[count]: [objective.explanation_text] Success!" else if(completion <= 0) parts += "Objective #[count]: [objective.explanation_text] Fail." changelingwin = FALSE diff --git a/code/modules/antagonists/changeling/powers/humanform.dm b/code/modules/antagonists/changeling/powers/humanform.dm index a6f7b0b6e9..91119e1c06 100644 --- a/code/modules/antagonists/changeling/powers/humanform.dm +++ b/code/modules/antagonists/changeling/powers/humanform.dm @@ -27,7 +27,7 @@ changeling.purchasedpowers -= src - var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS) + var/newmob = user.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_KEEPSE) changeling_transform(newmob, chosen_prof) return TRUE diff --git a/code/modules/antagonists/changeling/powers/strained_muscles.dm b/code/modules/antagonists/changeling/powers/strained_muscles.dm index a98700683e..d8572f04cc 100644 --- a/code/modules/antagonists/changeling/powers/strained_muscles.dm +++ b/code/modules/antagonists/changeling/powers/strained_muscles.dm @@ -21,7 +21,7 @@ to_chat(user, "Our muscles tense and strengthen.") changeling.chem_recharge_slowdown += 0.5 else - user.remove_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES) + user.remove_movespeed_modifier(/datum/movespeed_modifier/strained_muscles) to_chat(user, "Our muscles relax.") changeling.chem_recharge_slowdown -= 0.5 if(stacks >= 20) @@ -36,12 +36,12 @@ /obj/effect/proc_holder/changeling/strained_muscles/proc/muscle_loop(mob/living/carbon/user) var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling) while(active) - user.add_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING)) + user.add_movespeed_modifier(/datum/movespeed_modifier/strained_muscles) if(user.stat != CONSCIOUS || user.staminaloss >= 90) active = !active to_chat(user, "Our muscles relax without the energy to strengthen them.") user.DefaultCombatKnockdown(40) - user.remove_movespeed_modifier(MOVESPEED_ID_CHANGELING_MUSCLES) + user.remove_movespeed_modifier(/datum/movespeed_modifier/strained_muscles) changeling.chem_recharge_slowdown -= 0.5 break diff --git a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm index 05f11294de..b0259c460e 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/fabrication_helpers.dm @@ -239,7 +239,7 @@ if(!do_after(user, repair_values["healing_for_cycle"] * fabricator.speed_multiplier, target = src, \ extra_checks = CALLBACK(fabricator, /obj/item/clockwork/replica_fabricator.proc/fabricator_repair_checks, repair_values, src, user, TRUE))) break - obj_integrity = CLAMP(obj_integrity + repair_values["healing_for_cycle"], 0, max_integrity) + obj_integrity = clamp(obj_integrity + repair_values["healing_for_cycle"], 0, max_integrity) adjust_clockwork_power(-repair_values["power_required"]) playsound(src, 'sound/machines/click.ogg', 50, 1) diff --git a/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm b/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm index f927fc237d..628add0cb3 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/power_helpers.dm @@ -10,7 +10,7 @@ if(GLOB.ratvar_awakens) current_power = GLOB.clockwork_power = INFINITY else - current_power = GLOB.clockwork_power = CLAMP(GLOB.clockwork_power + amount, 0, MAX_CLOCKWORK_POWER) + current_power = GLOB.clockwork_power = clamp(GLOB.clockwork_power + amount, 0, MAX_CLOCKWORK_POWER) for(var/obj/effect/clockwork/sigil/transmission/T in GLOB.all_clockwork_objects) T.update_icon() var/unlock_message diff --git a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm index c7c9c42ee9..de2e85a501 100644 --- a/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm +++ b/code/modules/antagonists/clockcult/clock_helpers/slab_abilities.dm @@ -211,7 +211,7 @@ var/mob/living/carbon/C = L C.stuttering = max(8, C.stuttering) C.drowsyness = max(8, C.drowsyness) - C.confused += CLAMP(16 - C.confused, 0, 8) + C.confused += clamp(16 - C.confused, 0, 8) C.apply_status_effect(STATUS_EFFECT_BELLIGERENT) L.adjustFireLoss(15) ..() diff --git a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm index 4a10862e28..234f0445e0 100644 --- a/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm +++ b/code/modules/antagonists/clockcult/clock_items/clock_weapons/ratvarian_spear.dm @@ -59,7 +59,7 @@ if(issilicon(L)) L.DefaultCombatKnockdown(100) else if(iscultist(L)) - L.confused += CLAMP(10 - L.confused, 0, 5) // Spearthrow now confuses enemy cultists + just deals extra damage / sets on fire instead of hardstunning + damage + L.confused += clamp(10 - L.confused, 0, 5) // Spearthrow now confuses enemy cultists + just deals extra damage / sets on fire instead of hardstunning + damage to_chat(L, "[src] crashes into you with burning force, sending you reeling!") L.adjust_fire_stacks(2) L.DefaultCombatKnockdown(1) diff --git a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm index 0fd6c8a8dc..ffe9ecfa80 100644 --- a/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm +++ b/code/modules/antagonists/clockcult/clock_scriptures/scripture_applications.dm @@ -111,7 +111,7 @@ var/mob/living/L = M.current if(ishuman(L) && L.stat != DEAD) human_servants++ - construct_limit = round(CLAMP((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3 + construct_limit = round(clamp((human_servants / 4), 1, 3)) //1 per 4 human servants, maximum of 3 //Summon Neovgre: Summon a very powerful combat mech that explodes when destroyed for massive damage. /datum/clockwork_scripture/create_object/summon_arbiter diff --git a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm index 9b4ac8085c..5fbaf9fd57 100644 --- a/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm +++ b/code/modules/antagonists/clockcult/clock_structures/mania_motor.dm @@ -63,4 +63,4 @@ break if(!M) M = H.apply_status_effect(STATUS_EFFECT_MANIAMOTOR, src) - M.severity = CLAMP(M.severity + ((11 - get_dist(src, H)) * efficiency * efficiency), 0, MAX_MANIA_SEVERITY) + M.severity = clamp(M.severity + ((11 - get_dist(src, H)) * efficiency * efficiency), 0, MAX_MANIA_SEVERITY) diff --git a/code/modules/antagonists/cult/blood_magic.dm b/code/modules/antagonists/cult/blood_magic.dm index d64e99d206..28d1a66e00 100644 --- a/code/modules/antagonists/cult/blood_magic.dm +++ b/code/modules/antagonists/cult/blood_magic.dm @@ -454,16 +454,16 @@ S.emp_act(EMP_HEAVY) else if(iscarbon(target)) var/mob/living/carbon/C = L - C.silent += CLAMP(12 - C.silent, 0, 6) - C.stuttering += CLAMP(30 - C.stuttering, 0, 15) - C.cultslurring += CLAMP(30 - C.cultslurring, 0, 15) + C.silent += clamp(12 - C.silent, 0, 6) + C.stuttering += clamp(30 - C.stuttering, 0, 15) + C.cultslurring += clamp(30 - C.cultslurring, 0, 15) C.Jitter(15) else // cultstun no longer hardstuns + damages hostile cultists, instead debuffs them hard + deals some damage; debuffs for a bit longer since they don't add the clockie belligerent debuff if(iscarbon(target)) var/mob/living/carbon/C = L C.stuttering = max(10, C.stuttering) C.drowsyness = max(10, C.drowsyness) - C.confused += CLAMP(20 - C.confused, 0, 10) + C.confused += clamp(20 - C.confused, 0, 10) L.adjustBruteLoss(15) to_chat(user, "In an brilliant flash of red, [L] [iscultist(L) ? "writhes in pain" : "falls to the ground!"]") uses-- diff --git a/code/modules/antagonists/cult/cult.dm b/code/modules/antagonists/cult/cult.dm index 023794182a..ae61b2c814 100644 --- a/code/modules/antagonists/cult/cult.dm +++ b/code/modules/antagonists/cult/cult.dm @@ -441,7 +441,7 @@ if(objective.completable) var/completion = objective.check_completion() if(completion >= 1) - parts += "Objective #[count]: [objective.explanation_text] Success!" + parts += "Objective #[count]: [objective.explanation_text] Success!" else if(completion <= 0) parts += "Objective #[count]: [objective.explanation_text] Fail." else diff --git a/code/modules/antagonists/cult/cult_items.dm b/code/modules/antagonists/cult/cult_items.dm index b05aa7f769..ffab8174e5 100644 --- a/code/modules/antagonists/cult/cult_items.dm +++ b/code/modules/antagonists/cult/cult_items.dm @@ -539,7 +539,7 @@ if(SSshuttle.emergency.mode == SHUTTLE_CALL) var/cursetime = 1800 var/timer = SSshuttle.emergency.timeLeft(1) + cursetime - var/security_num = seclevel2num(get_security_level()) + var/security_num = SECLEVEL2NUM(NUM2SECLEVEL(GLOB.security_level)) var/set_coefficient = 1 switch(security_num) if(SEC_LEVEL_GREEN) @@ -731,7 +731,7 @@ if(!L.anti_magic_check()) if(is_servant_of_ratvar(L)) to_chat(L, "\"Kneel for me, scum\"") - L.confused += CLAMP(10 - L.confused, 0, 5) //confuses and lightly knockdowns + damages hostile cultists instead of hardstunning like before + L.confused += clamp(10 - L.confused, 0, 5) //confuses and lightly knockdowns + damages hostile cultists instead of hardstunning like before L.DefaultCombatKnockdown(15) L.adjustBruteLoss(10) else diff --git a/code/modules/antagonists/disease/disease_datum.dm b/code/modules/antagonists/disease/disease_datum.dm index c827179006..7de0330ad6 100644 --- a/code/modules/antagonists/disease/disease_datum.dm +++ b/code/modules/antagonists/disease/disease_datum.dm @@ -55,7 +55,7 @@ if(objective.completable) var/completion = objective.check_completion() if(completion >= 1) - result += "Objective #[count]: [objective.explanation_text] Success!" + result += "Objective #[count]: [objective.explanation_text] Success!" else if(completion <= 0) result += "Objective #[count]: [objective.explanation_text] Fail." win = FALSE diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index b4f896fa08..dc44a3b2d8 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -41,7 +41,7 @@ STOP_PROCESSING(SSobj, core) update_icon() GLOB.poi_list |= src - previous_level = get_security_level() + previous_level = NUM2SECLEVEL(GLOB.security_level) /obj/machinery/nuclearbomb/Destroy() safety = FALSE @@ -358,7 +358,7 @@ if(NUKEUI_AWAIT_TIMER) var/number_value = text2num(numeric_input) if(number_value) - timer_set = CLAMP(number_value, minimum_timer_set, maximum_timer_set) + timer_set = clamp(number_value, minimum_timer_set, maximum_timer_set) playsound(src, 'sound/machines/nuke/general_beep.ogg', 50, FALSE) set_safety() . = TRUE @@ -419,7 +419,7 @@ return timing = !timing if(timing) - previous_level = get_security_level() + previous_level = NUM2SECLEVEL(GLOB.security_level) detonation_timer = world.time + (timer_set * 10) for(var/obj/item/pinpointer/nuke/syndicate/S in GLOB.pinpointer_list) S.switch_mode_to(TRACK_INFILTRATOR) diff --git a/code/modules/antagonists/slaughter/slaughter.dm b/code/modules/antagonists/slaughter/slaughter.dm index 475438ba52..5d409a7fb9 100644 --- a/code/modules/antagonists/slaughter/slaughter.dm +++ b/code/modules/antagonists/slaughter/slaughter.dm @@ -64,8 +64,8 @@ /mob/living/simple_animal/slaughter/phasein() . = ..() - add_movespeed_modifier(MOVESPEED_ID_SLAUGHTER, update=TRUE, priority=100, multiplicative_slowdown=-1) - addtimer(CALLBACK(src, .proc/remove_movespeed_modifier, MOVESPEED_ID_SLAUGHTER, TRUE), 6 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) + add_movespeed_modifier(/datum/movespeed_modifier/slaughter) + addtimer(CALLBACK(src, .proc/remove_movespeed_modifier, /datum/movespeed_modifier/slaughter), 6 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) //The loot from killing a slaughter demon - can be consumed to allow the user to blood crawl diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index df5e6004ba..1d30cdbf77 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -239,7 +239,7 @@ if(objective.completable) var/completion = objective.check_completion() if(completion >= 1) - objectives_text += "
Objective #[count]: [objective.explanation_text] Success!" + objectives_text += "
Objective #[count]: [objective.explanation_text] Success!" else if(completion <= 0) objectives_text += "
Objective #[count]: [objective.explanation_text] Fail." traitorwin = FALSE diff --git a/code/modules/antagonists/wizard/equipment/artefact.dm b/code/modules/antagonists/wizard/equipment/artefact.dm index 7c63266255..ff3d95598d 100644 --- a/code/modules/antagonists/wizard/equipment/artefact.dm +++ b/code/modules/antagonists/wizard/equipment/artefact.dm @@ -159,7 +159,7 @@ /obj/item/scrying/attack_self(mob/user) to_chat(user, "You can see...everything!") visible_message("[user] stares into [src], their eyes glazing over.") - user.ghostize(1) + user.ghostize(1, voluntary = TRUE) /////////////////////////////////////////Necromantic Stone/////////////////// diff --git a/code/modules/antagonists/wizard/equipment/spellbook.dm b/code/modules/antagonists/wizard/equipment/spellbook.dm index 2bcda1d400..d49a8f83c6 100644 --- a/code/modules/antagonists/wizard/equipment/spellbook.dm +++ b/code/modules/antagonists/wizard/equipment/spellbook.dm @@ -294,7 +294,7 @@ name = "Staff of Change" desc = "An artefact that spits bolts of coruscating energy which cause the target's very form to reshape itself." item_path = /obj/item/gun/magic/staff/change - dynamic_requirement = 60 + dynamic_requirement = 200 /datum/spellbook_entry/item/staffanimation name = "Staff of Animation" @@ -361,7 +361,7 @@ desc = "A collection of wands that allow for a wide variety of utility. Wands have a limited number of charges, so be conservative in use. Comes in a handy belt." item_path = /obj/item/storage/belt/wands/full category = "Defensive" - dynamic_requirement = 60 + dynamic_requirement = 200 /datum/spellbook_entry/item/armor name = "Mastercrafted Armor Set" @@ -386,7 +386,7 @@ name = "Plasma Fist" desc = "A forbidden martial art designed on the surging power of plasma. Use it to harness the ancient power." item_path = /obj/item/book/granter/martial/plasma_fist - cost = 3 + cost = 2 /datum/spellbook_entry/item/guardian name = "Guardian Deck" diff --git a/code/modules/antagonists/wizard/wizard.dm b/code/modules/antagonists/wizard/wizard.dm index 2d32f8f00a..70adafd3fb 100644 --- a/code/modules/antagonists/wizard/wizard.dm +++ b/code/modules/antagonists/wizard/wizard.dm @@ -269,7 +269,7 @@ if(objective.completable) var/completion = objective.check_completion() if(completion >= 1) - parts += "Objective #[count]: [objective.explanation_text] Success!" + parts += "Objective #[count]: [objective.explanation_text] Success!" else if(completion <= 0) parts += "Objective #[count]: [objective.explanation_text] Fail." wizardwin = FALSE diff --git a/code/modules/assembly/flash.dm b/code/modules/assembly/flash.dm index 0fbc5cf71c..8a0645f311 100644 --- a/code/modules/assembly/flash.dm +++ b/code/modules/assembly/flash.dm @@ -229,6 +229,7 @@ var/flashcd = 20 var/overheat = 0 var/obj/item/organ/cyberimp/arm/flash/I = null + var/active_light_strength = 7 /obj/item/assembly/flash/armimplant/burn_out() if(I && I.owner) @@ -248,6 +249,12 @@ update_icon(1) return TRUE +/obj/item/assembly/flash/armimplant/Moved(oldLoc, dir) + . = ..() + if(!ismob(loc)) + set_light(0) + else + set_light(7) /obj/item/assembly/flash/armimplant/proc/cooldown() overheat = FALSE diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index 5c34ece723..c7ffc51458 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -192,6 +192,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g anchored = TRUE // should only appear in vis_contents, but to be safe layer = FLY_LAYER appearance_flags = TILE_BOUND + vis_flags = NONE /obj/effect/overlay/gas/New(state, alph) . = ..() diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index ebe894138d..59ef15b4cf 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -282,7 +282,7 @@ var/new_heat_capacity = air.heat_capacity() if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) - air.temperature = CLAMP(((air.temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB,INFINITY) + air.temperature = clamp(((air.temperature*old_heat_capacity + reaction_energy)/new_heat_capacity),TCMB,INFINITY) return REACTING /datum/gas_reaction/nitrylformation //The formation of nitryl. Endothermic. Requires N2O as a catalyst. diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index 9238b8602b..2dc0afac26 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -159,13 +159,13 @@ pump_direction = 1 if("set_input_pressure" in signal.data) - input_pressure_min = CLAMP(text2num(signal.data["set_input_pressure"]),0,ONE_ATMOSPHERE*50) + input_pressure_min = clamp(text2num(signal.data["set_input_pressure"]),0,ONE_ATMOSPHERE*50) if("set_output_pressure" in signal.data) - output_pressure_max = CLAMP(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) + output_pressure_max = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) if("set_external_pressure" in signal.data) - external_pressure_bound = CLAMP(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50) + external_pressure_bound = clamp(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50) if("status" in signal.data) spawn(2) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 02eb95acab..051dc965ad 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -122,7 +122,7 @@ Passive gate is similar to the regular pump except: pressure = text2num(pressure) . = TRUE if(.) - target_pressure = CLAMP(pressure, 0, MAX_OUTPUT_PRESSURE) + target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() @@ -144,7 +144,7 @@ Passive gate is similar to the regular pump except: on = !on if("set_output_pressure" in signal.data) - target_pressure = CLAMP(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) + target_pressure = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) if(on != old_on) investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 9e49953df5..0e41f78e20 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -145,7 +145,7 @@ pressure = text2num(pressure) . = TRUE if(.) - target_pressure = CLAMP(pressure, 0, MAX_OUTPUT_PRESSURE) + target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() @@ -167,7 +167,7 @@ on = !on if("set_output_pressure" in signal.data) - target_pressure = CLAMP(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) + target_pressure = clamp(text2num(signal.data["set_output_pressure"]),0,ONE_ATMOSPHERE*50) if(on != old_on) investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm index bc58ef158f..7bdd22cbd1 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/relief_valve.dm @@ -91,7 +91,7 @@ pressure = text2num(pressure) . = TRUE if(.) - open_pressure = CLAMP(pressure, close_pressure, 50*ONE_ATMOSPHERE) + open_pressure = clamp(pressure, close_pressure, 50*ONE_ATMOSPHERE) investigate_log("open pressure was set to [open_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) if("close_pressure") var/pressure = params["close_pressure"] @@ -106,6 +106,6 @@ pressure = text2num(pressure) . = TRUE if(.) - close_pressure = CLAMP(pressure, 0, open_pressure) + close_pressure = clamp(pressure, 0, open_pressure) investigate_log("close pressure was set to [close_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 864e3eef5e..1005f72afe 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -135,7 +135,7 @@ rate = text2num(rate) . = TRUE if(.) - transfer_rate = CLAMP(rate, 0, MAX_TRANSFER_RATE) + transfer_rate = clamp(rate, 0, MAX_TRANSFER_RATE) investigate_log("was set to [transfer_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() @@ -153,7 +153,7 @@ if("set_transfer_rate" in signal.data) var/datum/gas_mixture/air1 = airs[1] - transfer_rate = CLAMP(text2num(signal.data["set_transfer_rate"]),0,air1.volume) + transfer_rate = clamp(text2num(signal.data["set_transfer_rate"]),0,air1.volume) if(on != old_on) investigate_log("was turned [on ? "on" : "off"] by a remote signal", INVESTIGATE_ATMOS) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 1099020662..78258dd10a 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -175,7 +175,7 @@ rate = text2num(rate) . = TRUE if(.) - transfer_rate = CLAMP(rate, 0, MAX_TRANSFER_RATE) + transfer_rate = clamp(rate, 0, MAX_TRANSFER_RATE) investigate_log("was set to [transfer_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS) if("filter") filter_type = null diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index 5b929452fe..dcf0d09bee 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -164,7 +164,7 @@ pressure = text2num(pressure) . = TRUE if(.) - target_pressure = CLAMP(pressure, 0, MAX_OUTPUT_PRESSURE) + target_pressure = clamp(pressure, 0, MAX_OUTPUT_PRESSURE) investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) if("node1") var/value = text2num(params["concentration"]) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 87ab4fa643..05720583f9 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -123,7 +123,7 @@ if("set_volume_rate" in signal.data) var/number = text2num(signal.data["set_volume_rate"]) var/datum/gas_mixture/air_contents = airs[1] - volume_rate = CLAMP(number, 0, air_contents.volume) + volume_rate = clamp(number, 0, air_contents.volume) if("status" in signal.data) spawn(2) @@ -172,7 +172,7 @@ rate = text2num(rate) . = TRUE if(.) - volume_rate = CLAMP(rate, 0, MAX_TRANSFER_RATE) + volume_rate = clamp(rate, 0, MAX_TRANSFER_RATE) investigate_log("was set to [volume_rate] L/s by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() broadcast_status() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm b/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm index 4b6a4a4c10..1d8b875528 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/relief_valve.dm @@ -92,7 +92,7 @@ pressure = text2num(pressure) . = TRUE if(.) - open_pressure = CLAMP(pressure, close_pressure, 50*ONE_ATMOSPHERE) + open_pressure = clamp(pressure, close_pressure, 50*ONE_ATMOSPHERE) investigate_log("open pressure was set to [open_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) if("close_pressure") var/pressure = params["close_pressure"] @@ -107,6 +107,6 @@ pressure = text2num(pressure) . = TRUE if(.) - close_pressure = CLAMP(pressure, 0, open_pressure) + close_pressure = clamp(pressure, 0, open_pressure) investigate_log("close pressure was set to [close_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 877826c1c1..dbe3c0b90b 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -170,7 +170,7 @@ target = text2num(target) . = TRUE if(.) - target_temperature = CLAMP(target, min_temperature, max_temperature) + target_temperature = clamp(target, min_temperature, max_temperature) investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS) update_icon() @@ -225,6 +225,7 @@ if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) return target_temperature = min_temperature + to_chat(user,"You minimize the temperature on the [src].") investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS) message_admins("[src.name] was minimized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]") return TRUE @@ -257,6 +258,7 @@ if(!istype(user) || !user.canUseTopic(src, BE_CLOSE)) return target_temperature = max_temperature + to_chat(user,"You maximize the temperature on the [src].") investigate_log("was set to [target_temperature] K by [key_name(usr)]", INVESTIGATE_ATMOS) message_admins("[src.name] was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]") return TRUE diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index f2f2329661..9788bcb4ee 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -210,13 +210,13 @@ if("set_internal_pressure" in signal.data) var/old_pressure = internal_pressure_bound - internal_pressure_bound = CLAMP(text2num(signal.data["set_internal_pressure"]),0,ONE_ATMOSPHERE*50) + internal_pressure_bound = clamp(text2num(signal.data["set_internal_pressure"]),0,ONE_ATMOSPHERE*50) if(old_pressure != internal_pressure_bound) investigate_log(" internal pressure was set to [internal_pressure_bound] by [key_name(signal_sender)]",INVESTIGATE_ATMOS) if("set_external_pressure" in signal.data) var/old_pressure = external_pressure_bound - external_pressure_bound = CLAMP(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50) + external_pressure_bound = clamp(text2num(signal.data["set_external_pressure"]),0,ONE_ATMOSPHERE*50) if(old_pressure != external_pressure_bound) investigate_log(" external pressure was set to [external_pressure_bound] by [key_name(signal_sender)]",INVESTIGATE_ATMOS) @@ -227,10 +227,10 @@ internal_pressure_bound = 0 if("adjust_internal_pressure" in signal.data) - internal_pressure_bound = CLAMP(internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),0,ONE_ATMOSPHERE*50) + internal_pressure_bound = clamp(internal_pressure_bound + text2num(signal.data["adjust_internal_pressure"]),0,ONE_ATMOSPHERE*50) if("adjust_external_pressure" in signal.data) - external_pressure_bound = CLAMP(external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),0,ONE_ATMOSPHERE*50) + external_pressure_bound = clamp(external_pressure_bound + text2num(signal.data["adjust_external_pressure"]),0,ONE_ATMOSPHERE*50) if("init" in signal.data) name = signal.data["init"] diff --git a/code/modules/atmospherics/machinery/pipes/layermanifold.dm b/code/modules/atmospherics/machinery/pipes/layermanifold.dm index b98098584f..33092f5354 100644 --- a/code/modules/atmospherics/machinery/pipes/layermanifold.dm +++ b/code/modules/atmospherics/machinery/pipes/layermanifold.dm @@ -128,7 +128,7 @@ if(initialize_directions & dir) return ..() if((NORTH|EAST) & dir) - user.ventcrawl_layer = CLAMP(user.ventcrawl_layer + 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX) + user.ventcrawl_layer = clamp(user.ventcrawl_layer + 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX) if((SOUTH|WEST) & dir) - user.ventcrawl_layer = CLAMP(user.ventcrawl_layer - 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX) + user.ventcrawl_layer = clamp(user.ventcrawl_layer - 1, PIPING_LAYER_MIN, PIPING_LAYER_MAX) to_chat(user, "You align yourself with the [user.ventcrawl_layer]\th output.") diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 0b26cfc2f0..a41bdee3b6 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -390,7 +390,7 @@ pressure = text2num(pressure) . = TRUE if(.) - release_pressure = CLAMP(round(pressure), can_min_release_pressure, can_max_release_pressure) + release_pressure = clamp(round(pressure), can_min_release_pressure, can_max_release_pressure) investigate_log("was set to [release_pressure] kPa by [key_name(usr)].", INVESTIGATE_ATMOS) if("valve") var/logmsg @@ -434,7 +434,7 @@ var/N = text2num(user_input) if(!N) return - timer_set = CLAMP(N,minimum_timer_set,maximum_timer_set) + timer_set = clamp(N,minimum_timer_set,maximum_timer_set) log_admin("[key_name(usr)] has activated a prototype valve timer") . = TRUE if("toggle_timer") diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index 3603e46490..18e4da621a 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -150,7 +150,7 @@ pressure = text2num(pressure) . = TRUE if(.) - pump.target_pressure = CLAMP(round(pressure), PUMP_MIN_PRESSURE, PUMP_MAX_PRESSURE) + pump.target_pressure = clamp(round(pressure), PUMP_MIN_PRESSURE, PUMP_MAX_PRESSURE) investigate_log("was set to [pump.target_pressure] kPa by [key_name(usr)].", INVESTIGATE_ATMOS) if("eject") if(holding) diff --git a/code/modules/awaymissions/capture_the_flag.dm b/code/modules/awaymissions/capture_the_flag.dm index 0d96c125a1..f841ae20ca 100644 --- a/code/modules/awaymissions/capture_the_flag.dm +++ b/code/modules/awaymissions/capture_the_flag.dm @@ -487,8 +487,7 @@ suit = /obj/item/clothing/suit/space/hardsuit/shielded/ctf toggle_helmet = FALSE // see the whites of their eyes shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat - id = /obj/item/card/id/syndicate + gloves = /obj/item/clothing/gloves/tackler/combat belt = /obj/item/gun/ballistic/automatic/pistol/deagle/ctf l_pocket = /obj/item/ammo_box/magazine/recharge/ctf r_pocket = /obj/item/ammo_box/magazine/recharge/ctf diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index 5dc11ed100..c11267a5f3 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -490,7 +490,7 @@ glasses = /obj/item/clothing/glasses/eyepatch mask = /obj/item/clothing/mask/cigarette/cigar/cohiba head = /obj/item/clothing/head/centhat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat shoes = /obj/item/clothing/shoes/combat/swat r_pocket = /obj/item/lighter id = /obj/item/card/id @@ -507,7 +507,7 @@ uniform = /obj/item/clothing/under/rank/security/officer suit = /obj/item/clothing/suit/armor/vest shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat mask = /obj/item/clothing/mask/gas/sechailer/swat head = /obj/item/clothing/head/helmet/swat/nanotrasen back = /obj/item/storage/backpack/security diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index d4c9fdbee7..6c8d8287d8 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -1,15 +1,19 @@ -// How much "space" we give the edge of the map -GLOBAL_LIST_INIT(potentialRandomZlevels, generateMapList(filename = "[global.config.directory]/awaymissionconfig.txt")) -/proc/createRandomZlevel() - if(GLOB.awaydestinations.len) //crude, but it saves another var! +/proc/createRandomZlevel(name = AWAY_MISSION_NAME, list/traits = list(ZTRAIT_AWAY = TRUE), list/potential_levels = GLOB.potential_away_levels) + if(GLOB.random_zlevels_generated[name]) + stack_trace("[name] level already generated.") + return + if(!length(potential_levels)) + stack_trace("No potential [name] level to load has been found.") return - if(GLOB.potentialRandomZlevels && GLOB.potentialRandomZlevels.len) - to_chat(world, "Loading away mission...") - var/map = pick(GLOB.potentialRandomZlevels) - load_new_z_level(map, "Away Mission") - to_chat(world, "Away mission loaded.") + var/start_time = REALTIMEOFDAY + var/map = pick(potential_levels) + if(!load_new_z_level(map, name, traits)) + INIT_ANNOUNCE("Failed to load [name]! map filepath: [map]!") + return + INIT_ANNOUNCE("Loaded [name] in [(REALTIMEOFDAY - start_time)/10]s!") + GLOB.random_zlevels_generated[name] = TRUE /proc/reset_gateway_spawns(reset = FALSE) for(var/obj/machinery/gateway/G in world) diff --git a/code/modules/buildmode/effects/line.dm b/code/modules/buildmode/effects/line.dm index 60191de934..8bba27ac88 100644 --- a/code/modules/buildmode/effects/line.dm +++ b/code/modules/buildmode/effects/line.dm @@ -12,7 +12,7 @@ var/matrix/mat = matrix() mat.Translate(0, 16) mat.Scale(1, sqrt((x_offset * x_offset) + (y_offset * y_offset)) / 32) - mat.Turn(90 - ATAN2(x_offset, y_offset)) // So... You pass coords in order x,y to this version of atan2. It should be called acsc2. + mat.Turn(90 - arctan(x_offset, y_offset)) // So... You pass coords in order x,y to this version of atan2. It should be called acsc2. mat.Translate(atom_a.pixel_x, atom_a.pixel_y) transform = mat diff --git a/code/modules/buildmode/submodes/copy.dm b/code/modules/buildmode/submodes/copy.dm index ba415c50fc..4aed8ac700 100644 --- a/code/modules/buildmode/submodes/copy.dm +++ b/code/modules/buildmode/submodes/copy.dm @@ -23,6 +23,6 @@ DuplicateObject(stored, perfectcopy=1, sameloc=0,newloc=T) log_admin("Build Mode: [key_name(c)] copied [stored] to [AREACOORD(object)]") else if(right_click) - if(ismovableatom(object)) // No copying turfs for now. + if(ismovable(object)) // No copying turfs for now. to_chat(c, "[object] set as template.") stored = object diff --git a/code/modules/cargo/exports/gear.dm b/code/modules/cargo/exports/gear.dm index 4db7c68efd..8dba7f69da 100644 --- a/code/modules/cargo/exports/gear.dm +++ b/code/modules/cargo/exports/gear.dm @@ -309,7 +309,7 @@ /datum/export/gear/combatgloves cost = 80 unit_name = "combat gloves" - export_types = list(/obj/item/clothing/gloves/combat, /obj/item/clothing/gloves/fingerless/pugilist/rapid, /obj/item/clothing/gloves/krav_maga) + export_types = list(/obj/item/clothing/gloves/tackler/combat, /obj/item/clothing/gloves/tackler/dolphin, /obj/item/clothing/gloves/fingerless/pugilist/rapid, /obj/item/clothing/gloves/krav_maga) include_subtypes = TRUE /datum/export/gear/bonegloves @@ -797,4 +797,4 @@ datum/export/gear/glasses //glasses are not worth selling export_types = list(/obj/item/clothing/head/chameleon, /obj/item/clothing/mask/chameleon, /obj/item/clothing/under/chameleon, /obj/item/clothing/suit/chameleon, /obj/item/clothing/glasses/chameleon,\ /obj/item/clothing/gloves/chameleon, /obj/item/clothing/head/chameleon, /obj/item/clothing/shoes/chameleon, /obj/item/storage/backpack/chameleon, \ /obj/item/storage/belt/chameleon, /obj/item/radio/headset/chameleon, /obj/item/pda/chameleon, /obj/item/stamp/chameleon, /obj/item/clothing/neck/cloak/chameleon) - include_subtypes = TRUE \ No newline at end of file + include_subtypes = TRUE diff --git a/code/modules/cargo/packs/armory.dm b/code/modules/cargo/packs/armory.dm index d832200201..501b1426ae 100644 --- a/code/modules/cargo/packs/armory.dm +++ b/code/modules/cargo/packs/armory.dm @@ -175,7 +175,7 @@ /obj/item/clothing/suit/armor/vest/russian, /obj/item/clothing/head/helmet/rus_helmet, /obj/item/clothing/shoes/russian, - /obj/item/clothing/gloves/combat, + /obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/under/syndicate/rus_army, /obj/item/clothing/under/costume/soviet, /obj/item/clothing/mask/russian_balaclava, @@ -201,8 +201,8 @@ /obj/item/clothing/mask/gas/sechailer/swat, /obj/item/storage/belt/military/assault, /obj/item/storage/belt/military/assault, - /obj/item/clothing/gloves/combat, - /obj/item/clothing/gloves/combat) + /obj/item/clothing/gloves/tackler/combat/insulated, + /obj/item/clothing/gloves/tackler/combat/insulated) crate_name = "swat crate" /datum/supply_pack/security/armory/wt550 diff --git a/code/modules/cargo/packs/organic.dm b/code/modules/cargo/packs/organic.dm index 97b7636f58..22cb518926 100644 --- a/code/modules/cargo/packs/organic.dm +++ b/code/modules/cargo/packs/organic.dm @@ -205,7 +205,7 @@ desc = "Need some meat? With this do-it-yourself kit you'll be swimming in it! Contains a monkey cube, an IV drip, and some cryoxadone!" cost = 2150 contraband = TRUE - contains = list(/obj/item/reagent_containers/food/snacks/monkeycube, + contains = list(/obj/item/reagent_containers/food/snacks/cube/monkey, /obj/item/restraints/handcuffs/cable, /obj/machinery/iv_drip, /obj/item/reagent_containers/glass/beaker/cryoxadone, diff --git a/code/modules/cargo/packs/security.dm b/code/modules/cargo/packs/security.dm index aea7b95742..ee750b8df7 100644 --- a/code/modules/cargo/packs/security.dm +++ b/code/modules/cargo/packs/security.dm @@ -91,8 +91,8 @@ /obj/item/clothing/suit/armor/bulletproof, /obj/item/clothing/head/helmet/alt, /obj/item/clothing/head/helmet/alt, - /obj/item/clothing/gloves/combat, - /obj/item/clothing/gloves/combat, + /obj/item/clothing/gloves/tackler/combat/insulated, + /obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/mask/gas, /obj/item/clothing/mask/gas) crate_name = "surplus russian clothing" @@ -109,7 +109,7 @@ /obj/item/clothing/head/ushanka, /obj/item/clothing/suit/armor/bulletproof, /obj/item/clothing/head/helmet/alt, - /obj/item/clothing/gloves/combat, + /obj/item/clothing/gloves/tackler/combat/insulated, /obj/item/clothing/mask/gas, /obj/item/gun/ballistic/shotgun/boltaction, /obj/item/ammo_box/a762) diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 74885d0ac0..989ccaf450 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -888,8 +888,8 @@ GLOBAL_LIST_EMPTY(external_rsc_urls) var/viewscale = getviewsize(view) var/x = viewscale[1] var/y = viewscale[2] - x = CLAMP(x+change, min, max) - y = CLAMP(y+change, min,max) + x = clamp(x+change, min, max) + y = clamp(y+change, min,max) change_view("[x]x[y]") /client/proc/change_view(new_size) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 0e5e80eaf3..37ae8b3b09 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -208,6 +208,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/show_mismatched_markings = FALSE //determines whether or not the markings lists should show markings that don't match the currently selected species. Intentionally left unsaved. + var/no_tetris_storage = FALSE + /datum/preferences/New(client/C) parent = C @@ -863,6 +865,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Widescreen: [widescreenpref ? "Enabled ([CONFIG_GET(string/default_view)])" : "Disabled (15x15)"]
" dat += "Auto stand: [autostand ? "Enabled" : "Disabled"]
" dat += "Auto OOC: [auto_ooc ? "Enabled" : "Disabled"]
" + dat += "Force Slot Storage HUD: [no_tetris_storage ? "Enabled" : "Disabled"]
" dat += "Screen Shake: [(screenshake==100) ? "Full" : ((screenshake==0) ? "None" : "[screenshake]")]
" if (user && user.client && !user.client.prefs.screenshake==0) dat += "Damage Screen Shake: [(damagescreenshake==1) ? "On" : ((damagescreenshake==0) ? "Off" : "Only when down")]
" @@ -1834,7 +1837,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if("s_tone") var/list/choices = GLOB.skin_tones - GLOB.nonstandard_skin_tones - if(CONFIG_GET(number/allow_custom_skintones)) + if(CONFIG_GET(flag/allow_custom_skintones)) choices += "custom" var/new_s_tone = input(user, "Choose your character's skin tone:", "Character Preference") as null|anything in choices if(new_s_tone) @@ -1963,7 +1966,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/max_D = CONFIG_GET(number/penis_max_inches_prefs) var/new_length = input(user, "Penis length in inches:\n([min_D]-[max_D])", "Character Preference") as num|null if(new_length) - features["cock_length"] = CLAMP(round(new_length), min_D, max_D) + features["cock_length"] = clamp(round(new_length), min_D, max_D) if("cock_shape") var/new_shape @@ -2160,7 +2163,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) var/danger = CONFIG_GET(number/threshold_body_size_slowdown) var/new_body_size = input(user, "Choose your desired sprite size:\n([min*100]%-[max*100]%), Warning: May make your character look distorted[danger > min ? ", and an exponential slowdown will occur for those smaller than [danger*100]%!" : "!"]", "Character Preference", features["body_size"]*100) as num|null if (new_body_size) - new_body_size = CLAMP(new_body_size * 0.01, min, max) + new_body_size = clamp(new_body_size * 0.01, min, max) var/dorfy if(danger > new_body_size) dorfy = alert(user, "The chosen size appears to be smaller than the threshold of [danger*100]%, which will lead to an added exponential slowdown. Are you sure about that?", "Dwarfism Alert", "Yes", "Move it to the threshold", "No") @@ -2201,6 +2204,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) autostand = !autostand if("auto_ooc") auto_ooc = !auto_ooc + if("no_tetris_storage") + no_tetris_storage = !no_tetris_storage if ("screenshake") var/desiredshake = input(user, "Set the amount of screenshake you want. \n(0 = disabled, 100 = full, 200 = maximum.)", "Character Preference", screenshake) as null|num if (!isnull(desiredshake)) diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index a64d3e057d..715829b56e 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -253,7 +253,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car S["autostand"] >> autostand S["cit_toggles"] >> cit_toggles S["preferred_chaos"] >> preferred_chaos - S["auto_ooc"] >> auto_ooc + S["auto_ooc"] >> auto_ooc + S["no_tetris_storage"] >> no_tetris_storage //try to fix any outdated data if necessary @@ -290,10 +291,11 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car pda_skin = sanitize_inlist(pda_skin, GLOB.pda_reskins, PDA_SKIN_ALT) screenshake = sanitize_integer(screenshake, 0, 800, initial(screenshake)) damagescreenshake = sanitize_integer(damagescreenshake, 0, 2, initial(damagescreenshake)) - widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref)) + widescreenpref = sanitize_integer(widescreenpref, 0, 1, initial(widescreenpref)) autostand = sanitize_integer(autostand, 0, 1, initial(autostand)) cit_toggles = sanitize_integer(cit_toggles, 0, 65535, initial(cit_toggles)) auto_ooc = sanitize_integer(auto_ooc, 0, 1, initial(auto_ooc)) + no_tetris_storage = sanitize_integer(no_tetris_storage, 0, 1, initial(no_tetris_storage)) return 1 @@ -358,6 +360,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car WRITE_FILE(S["cit_toggles"], cit_toggles) WRITE_FILE(S["preferred_chaos"], preferred_chaos) WRITE_FILE(S["auto_ooc"], auto_ooc) + WRITE_FILE(S["no_tetris_storage"], no_tetris_storage) return 1 @@ -568,11 +571,16 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car hair_color = sanitize_hexcolor(hair_color, 3, 0) facial_hair_color = sanitize_hexcolor(facial_hair_color, 3, 0) eye_color = sanitize_hexcolor(eye_color, 3, 0) - use_custom_skin_tone = sanitize_integer(use_custom_skin_tone, FALSE, TRUE, initial(use_custom_skin_tone)) - if(use_custom_skin_tone && CONFIG_GET(number/allow_custom_skintones)) + + var/static/allow_custom_skintones + if(isnull(allow_custom_skintones)) + allow_custom_skintones = CONFIG_GET(flag/allow_custom_skintones) + use_custom_skin_tone = allow_custom_skintones ? sanitize_integer(use_custom_skin_tone, FALSE, TRUE, initial(use_custom_skin_tone)) : FALSE + if(use_custom_skin_tone) skin_tone = sanitize_hexcolor(skin_tone, 6, TRUE, "#FFFFFF") else skin_tone = sanitize_inlist(skin_tone, GLOB.skin_tones - GLOB.nonstandard_skin_tones, initial(skin_tone)) + horn_color = sanitize_hexcolor(horn_color, 3, FALSE) wing_color = sanitize_hexcolor(wing_color, 3, FALSE, "#FFFFFF") backbag = sanitize_inlist(backbag, GLOB.backbaglist, initial(backbag)) @@ -599,7 +607,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car var/static/size_max if(!size_max) size_max = CONFIG_GET(number/body_size_max) - features["body_size"] = sanitize_integer(features["body_size"], size_min, size_max, RESIZE_DEFAULT_SIZE) + features["body_size"] = sanitize_num_clamp(features["body_size"], size_min, size_max, RESIZE_DEFAULT_SIZE, 0.01) var/static/list/B_sizes if(!B_sizes) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 9f1111e5d9..df05eee638 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -262,7 +262,15 @@ return random_look(owner) -/obj/item/clothing/under/chameleon +// Forgive me for my sins... +#define CHAMELEON_CLOTHING_DEFINE(path) \ +##path/syndicate/Initialize(mapload){\ + . = ..();\ + AddComponent(/datum/component/identification/syndicate, ID_COMPONENT_DEL_ON_IDENTIFY, ID_COMPONENT_EFFECT_NO_ACTIONS, ID_COMPONENT_IDENTIFY_WITH_DECONSTRUCTOR);\ +}\ +##path + +CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/under/chameleon) //starts off as black name = "black jumpsuit" icon_state = "black" @@ -300,7 +308,7 @@ . = ..() chameleon_action.emp_randomise(INFINITY) -/obj/item/clothing/suit/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/suit/chameleon) name = "armor" desc = "A slim armored vest that protects against most types of damage." icon_state = "armor" @@ -329,7 +337,7 @@ . = ..() chameleon_action.emp_randomise(INFINITY) -/obj/item/clothing/glasses/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/glasses/chameleon) name = "Optical Meson Scanner" desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." icon_state = "meson" @@ -357,7 +365,7 @@ . = ..() chameleon_action.emp_randomise(INFINITY) -/obj/item/clothing/gloves/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/gloves/chameleon) desc = "These gloves will protect the wearer from electric shock." name = "insulated gloves" icon_state = "yellow" @@ -368,6 +376,9 @@ var/datum/action/item_action/chameleon/change/chameleon_action +CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/gloves/chameleon/insulated) + siemens_coefficient = 0 + /obj/item/clothing/gloves/chameleon/Initialize() . = ..() chameleon_action = new(src) @@ -386,7 +397,7 @@ . = ..() chameleon_action.emp_randomise(INFINITY) -/obj/item/clothing/head/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/head/chameleon) name = "grey cap" desc = "It's a baseball hat in a tasteful grey colour." icon_state = "greysoft" @@ -429,7 +440,7 @@ var/datum/action/item_action/chameleon/drone/randomise/randomise_action = new(src) randomise_action.UpdateButtonIcon() -/obj/item/clothing/mask/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/mask/chameleon) name = "gas mask" desc = "A face-covering mask that can be connected to an air supply. While good for concealing your identity, it isn't good for blocking gas flow." //More accurate icon_state = "gas_alt" @@ -486,7 +497,7 @@ /obj/item/clothing/mask/chameleon/drone/attack_self(mob/user) to_chat(user, "[src] does not have a voice changer.") -/obj/item/clothing/shoes/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/shoes/chameleon) name = "black shoes" icon_state = "black" desc = "A pair of black shoes." @@ -511,7 +522,7 @@ return chameleon_action.emp_randomise() -/obj/item/clothing/shoes/chameleon/noslip +CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/shoes/chameleon/noslip) name = "black shoes" icon_state = "black" desc = "A pair of black shoes." @@ -521,7 +532,7 @@ . = ..() chameleon_action.emp_randomise(INFINITY) -/obj/item/storage/backpack/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/storage/backpack/chameleon) name = "backpack" var/datum/action/item_action/chameleon/change/chameleon_action @@ -542,7 +553,7 @@ . = ..() chameleon_action.emp_randomise(INFINITY) -/obj/item/storage/belt/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/storage/belt/chameleon) name = "toolbelt" desc = "Holds tools." var/datum/action/item_action/chameleon/change/chameleon_action @@ -570,7 +581,7 @@ . = ..() chameleon_action.emp_randomise(INFINITY) -/obj/item/radio/headset/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/radio/headset/chameleon) name = "radio headset" var/datum/action/item_action/chameleon/change/chameleon_action @@ -591,7 +602,7 @@ . = ..() chameleon_action.emp_randomise(INFINITY) -/obj/item/pda/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/pda/chameleon) name = "PDA" var/datum/action/item_action/chameleon/change/pda/chameleon_action @@ -613,7 +624,7 @@ . = ..() chameleon_action.emp_randomise(INFINITY) -/obj/item/stamp/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/stamp/chameleon) var/datum/action/item_action/chameleon/change/chameleon_action /obj/item/stamp/chameleon/Initialize() @@ -627,7 +638,7 @@ . = ..() chameleon_action.emp_randomise(INFINITY) -/obj/item/clothing/neck/cloak/chameleon +CHAMELEON_CLOTHING_DEFINE(/obj/item/clothing/neck/cloak/chameleon) name = "black tie" desc = "A neosilk clip-on tie." icon = 'icons/obj/clothing/neck.dmi' diff --git a/code/modules/clothing/gloves/tacklers.dm b/code/modules/clothing/gloves/tacklers.dm new file mode 100644 index 0000000000..ddbeeab7f6 --- /dev/null +++ b/code/modules/clothing/gloves/tacklers.dm @@ -0,0 +1,97 @@ +/obj/item/clothing/gloves/tackler + name = "gripper gloves" + desc = "Special gloves that manipulate the blood vessels in the wearer's hands, granting them the ability to launch headfirst into walls." + icon_state = "tackle" + item_state = "tackle" + transfer_prints = TRUE + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + resistance_flags = NONE + //custom_premium_price = 350 + /// For storing our tackler datum so we can remove it after + var/datum/component/tackler + /// See: [/datum/component/tackler/var/stamina_cost] + var/tackle_stam_cost = 25 + /// See: [/datum/component/tackler/var/base_knockdown] + var/base_knockdown = 1 SECONDS + /// See: [/datum/component/tackler/var/range] + var/tackle_range = 4 + /// See: [/datum/component/tackler/var/min_distance] + var/min_distance = 0 + /// See: [/datum/component/tackler/var/speed] + var/tackle_speed = 1 + /// See: [/datum/component/tackler/var/skill_mod] + var/skill_mod = 1 + +/obj/item/clothing/gloves/tackler/equipped(mob/user, slot) + . = ..() + if(!ishuman(user)) + return + if(slot == ITEM_SLOT_GLOVES) + var/mob/living/carbon/human/H = user + tackler = H.AddComponent(/datum/component/tackler, stamina_cost=tackle_stam_cost, base_knockdown = base_knockdown, range = tackle_range, speed = tackle_speed, skill_mod = skill_mod, min_distance = min_distance) + +/obj/item/clothing/gloves/tackler/dropped(mob/user) + . = ..() + if(tackler) + qdel(tackler) + +/obj/item/clothing/gloves/tackler/dolphin + name = "dolphin gloves" + desc = "Sleek, aerodynamic gripper gloves that are less effective at actually performing takedowns, but more effective at letting the user sail through the hallways and cause accidents." + icon_state = "tackledolphin" + item_state = "tackledolphin" + + tackle_stam_cost = 15 + base_knockdown = 0.5 SECONDS + tackle_range = 5 + tackle_speed = 2 + min_distance = 2 + skill_mod = -2 + +/obj/item/clothing/gloves/tackler/combat + name = "gorilla gloves" + desc = "Premium quality combative gloves, heavily reinforced to give the user an edge in close combat tackles, though they are more taxing to use than normal gripper gloves. Fireproof to boot!" + icon_state = "combat" + item_state = "blackgloves" + + tackle_stam_cost = 35 + base_knockdown = 1.5 SECONDS + tackle_range = 5 + skill_mod = 3 + + cold_protection = HANDS + min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT + heat_protection = HANDS + max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT + resistance_flags = NONE + +/obj/item/clothing/gloves/tackler/combat/insulated + name = "guerrilla gloves" + desc = "Superior quality combative gloves, good for performing tackle takedowns as well as absorbing electrical shocks." + siemens_coefficient = 0 + permeability_coefficient = 0.05 + +/obj/item/clothing/gloves/tackler/rocket + name = "rocket gloves" + desc = "The ultimate in high risk, high reward, perfect for when you need to stop a criminal from fifty feet away or die trying. Banned in most Spinward gridiron football and rugby leagues." + icon_state = "tacklerocket" + item_state = "tacklerocket" + + tackle_stam_cost = 50 + base_knockdown = 2 SECONDS + tackle_range = 10 + min_distance = 7 + tackle_speed = 6 + skill_mod = 7 + +/obj/item/clothing/gloves/tackler/offbrand + name = "improvised gripper gloves" + desc = "Ratty looking fingerless gloves wrapped with sticky tape. Beware anyone wearing these, for they clearly have no shame and nothing to lose." + icon_state = "fingerless" + item_state = "fingerless" + + tackle_stam_cost = 30 + base_knockdown = 1.75 SECONDS + min_distance = 2 + skill_mod = -1 diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 48cc92db61..7cd2e9b394 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -3,7 +3,7 @@ uniform = /obj/item/clothing/under/rank/centcom/officer shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/headset_cent/alt /datum/outfit/ert/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) @@ -69,8 +69,8 @@ id = /obj/item/card/id/ert/Security suit = /obj/item/clothing/suit/space/hardsuit/ert/sec glasses = /obj/item/clothing/glasses/hud/security/sunglasses - back = /obj/item/storage/backpack/security belt = /obj/item/storage/belt/security/full + back = /obj/item/storage/backpack/security backpack_contents = list(/obj/item/storage/box/engineer=1,\ /obj/item/storage/box/handcuffs=1,\ /obj/item/clothing/mask/gas/sechailer=1,\ diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index b1f6e7696d..d692f9c3fb 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -205,7 +205,7 @@ uniform = /obj/item/clothing/under/rank/centcom/commander suit = /obj/item/clothing/suit/armor/bulletproof shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/headset_cent/commander glasses = /obj/item/clothing/glasses/eyepatch mask = /obj/item/clothing/mask/cigarette/cigar/cohiba @@ -234,7 +234,7 @@ uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/space/officer shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated glasses = /obj/item/clothing/glasses/thermal/eyepatch ears = /obj/item/radio/headset/headset_cent/commander mask = /obj/item/clothing/mask/cigarette/cigar/havana @@ -316,7 +316,7 @@ uniform = /obj/item/clothing/under/costume/soviet head = /obj/item/clothing/head/pirate/captain shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/headset_cent glasses = /obj/item/clothing/glasses/thermal/eyepatch suit = /obj/item/clothing/suit/pirate/captain @@ -372,7 +372,7 @@ uniform = /obj/item/clothing/under/color/green suit = /obj/item/clothing/suit/space/hardsuit/deathsquad shoes = /obj/item/clothing/shoes/combat/swat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated mask = /obj/item/clothing/mask/gas/sechailer/swat glasses = /obj/item/clothing/glasses/hud/toggle/thermal back = /obj/item/storage/backpack/security @@ -431,7 +431,7 @@ glasses = /obj/item/clothing/glasses/debug ears = /obj/item/radio/headset/headset_cent/commander mask = /obj/item/clothing/mask/gas/welding/up - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated belt = /obj/item/storage/belt/utility/chief/full l_pocket = /obj/item/gun/magic/wand/resurrection/debug r_pocket = /obj/item/gun/magic/wand/death/debug diff --git a/code/modules/clothing/outfits/vr.dm b/code/modules/clothing/outfits/vr.dm index ee350e3891..7a057eda41 100644 --- a/code/modules/clothing/outfits/vr.dm +++ b/code/modules/clothing/outfits/vr.dm @@ -17,7 +17,7 @@ name = "Syndicate VR Operative - Basic" uniform = /obj/item/clothing/under/syndicate shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated back = /obj/item/storage/backpack id = /obj/item/card/id/syndicate belt = /obj/item/gun/ballistic/automatic/pistol diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 8a7092d8a6..bc0aaf23f8 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -408,7 +408,6 @@ helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/owl mutantrace_variation = STYLE_DIGITIGRADE - //Wizard hardsuit /obj/item/clothing/head/helmet/space/hardsuit/wizard name = "gem-encrusted hardsuit helmet" @@ -473,6 +472,7 @@ name = "medical hardsuit" desc = "A special suit that protects against hazardous, low pressure environments. Built with lightweight materials for easier movement." item_state = "medical_hardsuit" + slowdown = 0.8 allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/firstaid, /obj/item/healthanalyzer, /obj/item/stack/medical) armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical @@ -748,63 +748,20 @@ allowed = null armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) resistance_flags = FIRE_PROOF | ACID_PROOF - var/current_charges = 3 var/max_charges = 3 //How many charges total the shielding has + var/current_charges //if null, will default to max_chargs var/recharge_delay = 200 //How long after we've been shot before we can start recharging. 20 seconds here - var/recharge_cooldown = 0 //Time since we've last been shot var/recharge_rate = 1 //How quickly the shield recharges once it starts charging var/shield_state = "shield-old" - var/shield_on = "shield-old" /obj/item/clothing/suit/space/hardsuit/shielded/Initialize() . = ..() if(!allowed) allowed = GLOB.advanced_hardsuit_allowed -/obj/item/clothing/suit/space/hardsuit/shielded/check_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - if(current_charges > 0) - block_return[BLOCK_RETURN_NORMAL_BLOCK_CHANCE] = 100 - block_return[BLOCK_RETURN_BLOCK_CAPACITY] = (block_return[BLOCK_RETURN_BLOCK_CAPACITY] || 0) + current_charges - return ..() - -/obj/item/clothing/suit/space/hardsuit/shielded/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - recharge_cooldown = world.time + recharge_delay - if(current_charges > 0) - var/datum/effect_system/spark_spread/s = new - s.set_up(2, 1, src) - s.start() - owner.visible_message("[owner]'s shields deflect [attack_text] in a shower of sparks!") - current_charges-- - if(recharge_rate) - START_PROCESSING(SSobj, src) - if(current_charges <= 0) - owner.visible_message("[owner]'s shield overloads!") - shield_state = "broken" - owner.update_inv_wear_suit() - return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL - return BLOCK_NONE - -/obj/item/clothing/suit/space/hardsuit/shielded/Destroy() - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/item/clothing/suit/space/hardsuit/shielded/process() - if(world.time > recharge_cooldown && current_charges < max_charges) - current_charges = CLAMP((current_charges + recharge_rate), 0, max_charges) - playsound(loc, 'sound/magic/charge.ogg', 50, 1) - if(current_charges == max_charges) - playsound(loc, 'sound/machines/ding.ogg', 50, 1) - STOP_PROCESSING(SSobj, src) - shield_state = "[shield_on]" - if(ishuman(loc)) - var/mob/living/carbon/human/C = loc - C.update_inv_wear_suit() - -/obj/item/clothing/suit/space/hardsuit/shielded/worn_overlays(isinhands, icon_file, used_state, style_flags = NONE) +/obj/item/clothing/suit/space/hardsuit/shielded/ComponentInitialize() . = ..() - if(!isinhands) - var/file2use = style_flags & STYLE_ALL_TAURIC ? 'modular_citadel/icons/mob/64x32_effects.dmi' : 'icons/effects/effects.dmi' - . += mutable_appearance(file2use, shield_state, MOB_LAYER + 0.01) + AddComponent(/datum/component/shielded, current_charges, max_charges, recharge_delay, recharge_rate, ITEM_SLOT_OCLOTHING, shield_state) /obj/item/clothing/head/helmet/space/hardsuit/shielded resistance_flags = FIRE_PROOF | ACID_PROOF @@ -833,7 +790,6 @@ hardsuit_type = "ert_security" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/ctf/red shield_state = "shield-red" - shield_on = "shield-red" /obj/item/clothing/suit/space/hardsuit/shielded/ctf/blue name = "blue shielded hardsuit" @@ -896,7 +852,6 @@ item_state = "swat_suit" hardsuit_type = "syndi" max_charges = 4 - current_charges = 4 recharge_delay = 15 armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) strip_delay = 130 diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 8b5e87d63b..e392a6b2d1 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -199,10 +199,9 @@ icon_state = "battlemage" item_state = "battlemage" recharge_rate = 0 + max_charges = INFINITY current_charges = 15 - recharge_cooldown = INFINITY shield_state = "shield-red" - shield_on = "shield-red" min_cold_protection_temperature = ARMOR_MIN_TEMP_PROTECT max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/wizard @@ -243,6 +242,7 @@ if(!istype(W)) to_chat(user, "The rune can only be used on battlemage armour!") return - W.current_charges += 8 - to_chat(user, "You charge \the [W]. It can now absorb [W.current_charges] hits.") + var/datum/component/shielded/S = GetComponent(/datum/component/shielded) + S.adjust_charges(8) + to_chat(user, "You charge \the [W]. It can now absorb [S.charges] hits.") qdel(src) diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm index fe3aaf4bda..0d08b59be9 100644 --- a/code/modules/clothing/under/_under.dm +++ b/code/modules/clothing/under/_under.dm @@ -26,6 +26,8 @@ . += mutable_appearance('icons/effects/item_damage.dmi', "damageduniform") if(blood_DNA) . += mutable_appearance('icons/effects/blood.dmi', "uniformblood", color = blood_DNA_to_color()) + if(accessory_overlay) + . += accessory_overlay /obj/item/clothing/under/attackby(obj/item/I, mob/user, params) if((has_sensor == BROKEN_SENSORS) && istype(I, /obj/item/stack/cable_coil)) @@ -99,8 +101,7 @@ if((flags_inv & HIDEACCESSORY) || (A.flags_inv & HIDEACCESSORY)) return TRUE - var/accessory_color = attached_accessory.icon_state - accessory_overlay = mutable_appearance('icons/mob/clothing/accessories.dmi', "[accessory_color]") + accessory_overlay = mutable_appearance('icons/mob/clothing/accessories.dmi', "attached_accessory.icon_state") accessory_overlay.alpha = attached_accessory.alpha accessory_overlay.color = attached_accessory.color diff --git a/code/modules/clothing/under/skirt_dress.dm b/code/modules/clothing/under/skirt_dress.dm index a7e842282c..e1212cf337 100644 --- a/code/modules/clothing/under/skirt_dress.dm +++ b/code/modules/clothing/under/skirt_dress.dm @@ -1,4 +1,4 @@ -/obj/item/clothing/under/dress/skirt +/obj/item/clothing/under/dress mutantrace_variation = STYLE_DIGITIGRADE|STYLE_NO_ANTHRO_ICON /obj/item/clothing/under/dress/skirt @@ -182,7 +182,6 @@ icon_state = "bride_white" item_state = "bride_white" can_adjust = FALSE - mutantrace_variation = NONE /obj/item/clothing/under/dress/wedding/orange name = "orange wedding dress" @@ -213,7 +212,6 @@ desc = "A fancy skirt made with polychromic threads." icon_state = "polyskirt" item_state = "rainbow" - mutantrace_variation = NONE var/list/poly_colors = list("#FFFFFF", "#F08080", "#808080") /obj/item/clothing/under/dress/skirt/polychromic/ComponentInitialize() @@ -226,5 +224,4 @@ icon_state = "polypleat" item_state = "rainbow" body_parts_covered = CHEST|GROIN|ARMS - mutantrace_variation = NONE poly_colors = list("#8CC6FF", "#808080", "#FF3535") diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 4fc62893b5..3f61c4b45f 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -57,8 +57,7 @@ icon_state = "tactifool" item_state = "bl_suit" has_sensor = TRUE - mutantrace_variation = NONE - armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0, fire = 0, acid = 0) + armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) /obj/item/clothing/under/syndicate/sniper name = "Tactical turtleneck suit" diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 3b8f8de359..60f2aef629 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -22,7 +22,7 @@ if(turfs.len) //Pick a turf to spawn at if we can var/turf/T = pick(turfs) - new /datum/spacevine_controller(T) //spawn a controller at turf + new /datum/spacevine_controller(T, pick(subtypesof(/datum/spacevine_mutation)), rand(30,100), rand(5,10), src) //spawn a controller at turf with randomized stats and a single random mutation /datum/spacevine_mutation @@ -227,13 +227,13 @@ quality = NEGATIVE /datum/spacevine_mutation/thorns/on_cross(obj/structure/spacevine/holder, mob/living/crosser) - if(prob(severity) && istype(crosser) && !isvineimmune(holder)) + if(prob(severity) && istype(crosser) && !isvineimmune(crosser)) var/mob/living/M = crosser M.adjustBruteLoss(5) to_chat(M, "You cut yourself on the thorny vines.") /datum/spacevine_mutation/thorns/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage) - if(prob(severity) && istype(hitter) && !isvineimmune(holder)) + if(prob(severity) && istype(hitter) && !isvineimmune(hitter)) var/mob/living/M = hitter M.adjustBruteLoss(5) to_chat(M, "You cut yourself on the thorny vines.") @@ -251,7 +251,7 @@ holder.obj_integrity = holder.max_integrity /datum/spacevine_mutation/woodening/on_hit(obj/structure/spacevine/holder, mob/living/hitter, obj/item/I, expected_damage) - if(I.get_sharpness()) + if(I?.get_sharpness()) . = expected_damage * 0.5 else . = expected_damage @@ -344,16 +344,17 @@ switch(damage_type) if(BRUTE) if(damage_amount) - playsound(src, 'sound/weapons/slash.ogg', 50, 1) + playsound(src, 'sound/weapons/slash.ogg', 50, TRUE) else - playsound(src, 'sound/weapons/tap.ogg', 50, 1) + playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, 1) + playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) -/obj/structure/spacevine/Crossed(mob/crosser) - if(isliving(crosser)) - for(var/datum/spacevine_mutation/SM in mutations) - SM.on_cross(src, crosser) +/obj/structure/spacevine/Crossed(atom/movable/AM) + if(!isliving(AM)) + return + for(var/datum/spacevine_mutation/SM in mutations) + SM.on_cross(src, AM) //ATTACK HAND IGNORING PARENT RETURN VALUE /obj/structure/spacevine/attack_hand(mob/user) @@ -378,10 +379,9 @@ var/list/vine_mutations_list var/mutativeness = 1 -/datum/spacevine_controller/New(turf/location, list/muts, potency, production) +/datum/spacevine_controller/New(turf/location, list/muts, potency, production, datum/round_event/event = null) vines = list() growth_queue = list() - spawn_spacevine_piece(location, null, muts) START_PROCESSING(SSobj, src) vine_mutations_list = list() init_subtypes(/datum/spacevine_mutation/, vine_mutations_list) @@ -428,6 +428,7 @@ for(var/datum/spacevine_mutation/SM in SV.mutations) SM.on_birth(SV) location.Entered(SV) + return SV /datum/spacevine_controller/proc/VineDestroyed(obj/structure/spacevine/S) S.master = null @@ -531,14 +532,13 @@ qdel(src) /obj/structure/spacevine/CanPass(atom/movable/mover, turf/target) + . = ..() if(isvineimmune(mover)) - . = TRUE - else - . = ..() + return TRUE /proc/isvineimmune(atom/A) - . = FALSE if(isliving(A)) var/mob/living/M = A if(("vines" in M.faction) || ("plants" in M.faction)) - . = TRUE + return TRUE + return FALSE \ No newline at end of file diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index b7f8b8f911..1b4716b407 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -23,6 +23,9 @@ /datum/round_event/wormholes/start() for(var/turf/open/floor/T in world) if(is_station_level(T.z)) + var/area/A = get_area(T) + if(A.outdoors) + continue pick_turfs += T for(var/i = 1, i <= number_of_wormholes, i++) @@ -57,7 +60,7 @@ if(!(ismecha(M) && mech_sized)) return - if(ismovableatom(M)) + if(ismovable(M)) if(GLOB.portals.len) var/obj/effect/portal/P = pick(GLOB.portals) if(P && isturf(P.loc)) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index 95b9f92873..ccce186304 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -396,6 +396,16 @@ list_reagents = list(/datum/reagent/consumable/orangejuice = 100) foodtype = FRUIT| BREAKFAST +/obj/item/reagent_containers/food/drinks/bottle/bio_carton + name = "small carton box" + desc = "A small biodegradable carton box made from plant biomatter." + icon_state = "eco_box" + item_state = "carton" + lefthand_file = 'icons/mob/inhands/equipment/kitchen_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/kitchen_righthand.dmi' + volume = 50 + isGlass = FALSE + /obj/item/reagent_containers/food/drinks/bottle/cream name = "milk cream" desc = "It's cream. Made from milk. What else did you think you'd find in there?" diff --git a/code/modules/food_and_drinks/food.dm b/code/modules/food_and_drinks/food.dm index 2af24080cb..203eb3eef6 100644 --- a/code/modules/food_and_drinks/food.dm +++ b/code/modules/food_and_drinks/food.dm @@ -16,6 +16,7 @@ resistance_flags = FLAMMABLE var/foodtype = NONE var/last_check_time + var/food_quality = 50 /obj/item/reagent_containers/food/Initialize(mapload) . = ..() @@ -23,6 +24,9 @@ pixel_x = rand(-5, 5) pixel_y = rand(-5, 5) +/obj/item/reagent_containers/food/proc/adjust_food_quality(new_quality) + food_quality = clamp(new_quality,0,100) + /obj/item/reagent_containers/food/proc/checkLiked(var/fraction, mob/M) if(last_check_time + 50 < world.time) if(ishuman(M)) @@ -32,13 +36,13 @@ to_chat(H,"What the hell was that thing?!") H.adjust_disgust(25 + 30 * fraction) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "toxic_food", /datum/mood_event/disgusting_food) - else if(foodtype & H.dna.species.disliked_food) + else if((foodtype & H.dna.species.disliked_food) || food_quality <= 30) to_chat(H,"That didn't taste very good...") H.adjust_disgust(11 + 15 * fraction) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "gross_food", /datum/mood_event/gross_food) - else if(foodtype & H.dna.species.liked_food) + else if(((foodtype & H.dna.species.liked_food) && food_quality >= 50) || food_quality >= 70) //you like food of high quality, and food of regular quality you have a preference for to_chat(H,"I love this taste!") - H.adjust_disgust(-5 + -2.5 * fraction) + H.adjust_disgust(-5 + (-2.5 * food_quality/50) + -2.5 * fraction) SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "fav_food", /datum/mood_event/favorite_food) else if(foodtype & H.dna.species.toxic_food) @@ -48,4 +52,4 @@ SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "breakfast", /datum/mood_event/breakfast) last_check_time = world.time -#undef STOP_SERVING_BREAKFAST \ No newline at end of file +#undef STOP_SERVING_BREAKFAST diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index bd20ad8d69..0e2bdc63c8 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -20,6 +20,7 @@ var/list/ingredients = list() var/ingredients_placement = INGREDIENTS_FILL var/customname = "custom" + var/total_quality = 0 //quality of all ingredients added together /obj/item/reagent_containers/food/snacks/customizable/examine(mob/user) . = ..() @@ -56,6 +57,9 @@ S.reagents.trans_to(src,min(S.reagents.total_volume, 15)) //limit of 15, we don't want our custom food to be completely filled by just one ingredient with large reagent volume. foodtype |= S.foodtype update_snack_overlays(S) + //quality of customised food is average of the ingredient's qualities + total_quality += S.food_quality + food_quality = total_quality / length(ingredients) to_chat(user, "You add the [I.name] to the [name].") update_name(S) else diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 5aaa382ece..a485f0c864 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -153,6 +153,12 @@ All foods are distributed among various categories. Use common sense. /obj/item/reagent_containers/food/snacks/examine(mob/user) . = ..() + if(food_quality >= 70) + . += "It is of a high quality." + else + if(food_quality <= 30) + . += "It is of a low quality." + if(bitecount == 0) return else if(bitecount == 1) @@ -296,6 +302,10 @@ All foods are distributed among various categories. Use common sense. var/obj/item/result if(cooked_type) result = new cooked_type(T) + //if the result is food, set its food quality to the original food item's quality + if(isfood(result)) + var/obj/item/reagent_containers/food/food_output = result + food_output.adjust_food_quality(food_quality + M.quality_increase) if(istype(M)) initialize_cooked_food(result, M.efficiency) else diff --git a/code/modules/food_and_drinks/food/snacks_bread.dm b/code/modules/food_and_drinks/food/snacks_bread.dm index 99fd2af9bb..f3d84f7169 100644 --- a/code/modules/food_and_drinks/food/snacks_bread.dm +++ b/code/modules/food_and_drinks/food/snacks_bread.dm @@ -197,6 +197,7 @@ icon = 'icons/obj/food/food.dmi' icon_state = "" bitesize = 2 + var/fried_garbage = FALSE //did you really fry a fire extinguisher? GLOBAL_VAR_INIT(frying_hardmode, TRUE) GLOBAL_VAR_INIT(frying_bad_chem_add_volume, TRUE) @@ -227,21 +228,13 @@ GLOBAL_LIST_INIT(frying_bad_chems, list( item_flags = fried.item_flags obj_flags = fried.obj_flags - if(istype(fried, /obj/item/reagent_containers/food/snacks)) + if(isfood(fried)) fried.reagents.trans_to(src, fried.reagents.total_volume) qdel(fried) else fried.forceMove(src) trash = fried - if(!istype(fried, /obj/item/reagent_containers/food) && GLOB.frying_hardmode && GLOB.frying_bad_chems.len) - var/R = rand(1, GLOB.frying_bad_chems.len) - var/bad_chem = GLOB.frying_bad_chems[R] - var/bad_chem_amount = GLOB.frying_bad_chems[bad_chem] - if(GLOB.frying_bad_chem_add_volume) - reagents.maximum_volume += bad_chem_amount + 2 //Added room for condensed cooking oil - reagents.add_reagent(bad_chem, bad_chem_amount) - //All fried inedible items also get condensed cooking oil added, which induces minor vomiting and heart damage - reagents.add_reagent(/datum/reagent/toxin/condensed_cooking_oil, 2) + fried_garbage = TRUE /obj/item/reagent_containers/food/snacks/deepfryholder/Destroy() if(trash) @@ -249,6 +242,13 @@ GLOBAL_LIST_INIT(frying_bad_chems, list( . = ..() /obj/item/reagent_containers/food/snacks/deepfryholder/On_Consume(mob/living/eater) + if(fried_garbage && GLOB.frying_hardmode && GLOB.frying_bad_chems.len) + var/R = rand(1, GLOB.frying_bad_chems.len) + var/bad_chem = GLOB.frying_bad_chems[R] + var/bad_chem_amount = GLOB.frying_bad_chems[bad_chem] + eater.reagents.add_reagent(bad_chem, bad_chem_amount) + //All fried inedible items also get condensed cooking oil added, which induces minor vomiting and heart damage + eater.reagents.add_reagent(/datum/reagent/toxin/condensed_cooking_oil, 2) if(trash) QDEL_NULL(trash) ..() @@ -259,18 +259,22 @@ GLOBAL_LIST_INIT(frying_bad_chems, list( add_atom_colour(rgb(166,103,54), FIXED_COLOUR_PRIORITY) name = "lightly-fried [name]" desc = "[desc] It's been lightly fried in a deep fryer." + adjust_food_quality(food_quality - 5) if(16 to 49) add_atom_colour(rgb(103,63,24), FIXED_COLOUR_PRIORITY) name = "fried [name]" desc = "[desc] It's been fried, increasing its tastiness value by [rand(1, 75)]%." + adjust_food_quality(food_quality - 10) if(50 to 59) add_atom_colour(rgb(63,23,4), FIXED_COLOUR_PRIORITY) name = "deep-fried [name]" desc = "[desc] Deep-fried to perfection." + adjust_food_quality(food_quality) //we shouldn't punish perfection in the fried arts if(60 to INFINITY) add_atom_colour(rgb(33,19,9), FIXED_COLOUR_PRIORITY) name = "the physical manifestation of the very concept of fried foods" desc = "A heavily-fried...something. Who can tell anymore?" + adjust_food_quality(0) //good job, you're truly the best cook. filling_color = color foodtype |= FRIED diff --git a/code/modules/food_and_drinks/food/snacks_meat.dm b/code/modules/food_and_drinks/food/snacks_meat.dm index 7e831b6cd6..c7c74fb560 100644 --- a/code/modules/food_and_drinks/food/snacks_meat.dm +++ b/code/modules/food_and_drinks/food/snacks_meat.dm @@ -222,36 +222,6 @@ tastes = list("meat" = 1, "onions" = 1, "garlic" = 1) foodtype = MEAT -/obj/item/reagent_containers/food/snacks/monkeycube - name = "monkey cube" - desc = "Just add water!" - icon_state = "monkeycube" - bitesize = 12 - list_reagents = list(/datum/reagent/consumable/nutriment = 2) - filling_color = "#CD853F" - tastes = list("the jungle" = 1, "bananas" = 1) - foodtype = MEAT | SUGAR - -/obj/item/reagent_containers/food/snacks/monkeycube/On_Consume(mob/living/carbon/M) - if(iscarbon(M)) - M.visible_message("[src] bursts out of [M]!
") - M.emote("scream") - M.DefaultCombatKnockdown(40) - M.adjustBruteLoss(60) - Expand() - return TRUE - return ..() - -/obj/item/reagent_containers/food/snacks/monkeycube/proc/Expand() - var/mob/spammer = get_mob_by_key(fingerprintslast) - var/mob/living/carbon/monkey/bananas = new(drop_location(), TRUE, spammer) - if (!QDELETED(bananas)) - visible_message("[src] expands!") - bananas.log_message("Spawned via [src] at [AREACOORD(src)], Last attached mob: [key_name(spammer)].", LOG_ATTACK) - else if (!spammer) // Visible message in case there are no fingerprints - visible_message("[src] fails to expand!") - qdel(src) - /obj/item/reagent_containers/food/snacks/enchiladas name = "enchiladas" desc = "Viva La Mexico!" @@ -372,3 +342,70 @@ bonus_reagents = list(/datum/reagent/consumable/nutriment = 1, /datum/reagent/consumable/nutriment/vitamin = 1) tastes = list("meat" = 3, "smokey sauce" = 1) foodtype = MEAT + +////////////// Cubes ////////// + +/obj/item/reagent_containers/food/snacks/cube + name = "debug cube" + desc = "Just add water!" + icon_state = "monkeycube" + bitesize = 12 + list_reagents = list(/datum/reagent/consumable/nutriment = 2) + filling_color = "#CD853F" + tastes = list("broken" = 1, "code" = 1) + foodtype = MEAT | SUGAR + var/dried_being = /mob/living/carbon/monkey //What the cube will spawn mob wise + +/obj/item/reagent_containers/food/snacks/cube/On_Consume(mob/living/carbon/M) + if(iscarbon(M)) + M.visible_message("[src] bursts out of [M]!") + M.emote("scream") + M.DefaultCombatKnockdown(40) + M.adjustBruteLoss(60) + Expand() + return TRUE + return ..() + +/obj/item/reagent_containers/food/snacks/cube/proc/Expand() + var/mob/spammer = get_mob_by_key(fingerprintslast) + var/mob/living/water = new dried_being(drop_location(), TRUE, spammer) + if (!QDELETED(water)) + visible_message("[src] expands!") + water.log_message("Spawned via [src] at [AREACOORD(src)], Last attached mob: [key_name(spammer)].", LOG_ATTACK) + else if (!spammer) // Visible message in case there are no fingerprints + visible_message("[src] fails to expand!") + qdel(src) + +/obj/item/reagent_containers/food/snacks/cube/monkey + name = "monkey cube" + desc = "Just add water!" + tastes = list("the jungle" = 1, "bananas" = 1) + dried_being = /mob/living/carbon/monkey + +/obj/item/reagent_containers/food/snacks/cube/beno + name = "alien drone cube" + desc = "Just add water and run!" + tastes = list("the jungle" = 1, "acid" = 1) + dried_being = /mob/living/carbon/alien/humanoid/drone + +/obj/item/reagent_containers/food/snacks/cube/goat + name = "goat cube" + tastes = list("grass" = 1) + dried_being = /mob/living/simple_animal/hostile/retaliate/goat + +/obj/item/reagent_containers/food/snacks/cube/cow + name = "cow cube" + tastes = list("milk" = 1, "beef" = 1) + dried_being = /mob/living/simple_animal/cow + +/obj/item/reagent_containers/food/snacks/cube/egg +//Well eggs normally are able to hatch into small birds, this one does not. +//Also in order to have a normal egg hatch you need a hen to lay the egg that is able to hatch, meaning this one is for on-demand hen needs. + name = "egg cube thing" + desc = "Just add water, hey wait a second..." + icon_state = "egg" + filling_color = "#F0E68C" + cooked_type = /obj/item/reagent_containers/food/snacks/boiledegg + list_reagents = list(/datum/reagent/consumable/eggyolk = 5) + tastes = list("dried eggs" = 1, "confusion" = 1) + dried_being = /mob/living/simple_animal/chicken diff --git a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm index 1215dd7ecb..0a3d172bb0 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/deep_fryer.dm @@ -104,6 +104,12 @@ God bless America. else if(!frying && user.transferItemToLoc(I, src)) to_chat(user, "You put [I] into [src].") frying = new/obj/item/reagent_containers/food/snacks/deepfryholder(src, I) + //setup food quality for item depending on if it's edible or not + if(isfood(I)) + var/obj/item/reagent_containers/food/original_food = I + frying.adjust_food_quality(original_food.food_quality) //food quality remains unchanged until degree of frying is calculated + else + frying.adjust_food_quality(10) //inedible fried item has low quality icon_state = "fryer_on" fry_loop.start() diff --git a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm index 68cc84c639..feba35da97 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/food_cart.dm @@ -118,7 +118,7 @@ break if(href_list["portion"]) - portion = CLAMP(input("How much drink do you want to dispense per glass?") as num, 0, 50) + portion = clamp(input("How much drink do you want to dispense per glass?") as num, 0, 50) if(href_list["pour"] || href_list["m_pour"]) if(glasses-- <= 0) diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 5117439049..c94aba95b4 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -14,6 +14,7 @@ var/gibtime = 40 // Time from starting until meat appears var/meat_produced = 0 var/ignore_clothing = FALSE + var/meat_quality = 35 //food_quality of meat produced /obj/machinery/gibber/Initialize() @@ -23,8 +24,10 @@ /obj/machinery/gibber/RefreshParts() gibtime = 40 meat_produced = 0 + meat_quality = 35 // unupgraded this means quality is 50, and max upgraded it is 95 for(var/obj/item/stock_parts/matter_bin/B in component_parts) meat_produced += B.rating + meat_quality += B.rating * 15 for(var/obj/item/stock_parts/manipulator/M in component_parts) gibtime -= 5 * M.rating if(M.rating >= 2) @@ -181,6 +184,7 @@ for (var/i=1 to meat_produced) var/obj/item/reagent_containers/food/snacks/meat/slab/newmeat = new typeofmeat + newmeat.adjust_food_quality(meat_quality) newmeat.name = "[sourcename] [newmeat.name]" if(istype(newmeat)) newmeat.subjectname = sourcename diff --git a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm index 3e0c9cb4b5..d9e3bc6165 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/microwave.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/microwave.dm @@ -19,6 +19,7 @@ var/broken = 0 // 0, 1 or 2 // How broken is it??? var/max_n_of_items = 10 var/efficiency = 0 + var/quality_increase = 5 // how much do we increase the quality of microwaved items var/productivity = 0 var/datum/looping_sound/microwave/soundloop var/list/ingredients = list() // may only contain /atom/movables @@ -51,7 +52,10 @@ efficiency += M.rating * 0.4 productivity += M.rating for(var/obj/item/stock_parts/matter_bin/M in component_parts) - max_n_of_items += M.rating * 5 + + max_n_of_items = 10 * M.rating + quality_increase = M.rating * 5 + break /obj/machinery/microwave/examine(mob/user) . = ..() diff --git a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm index 3d7341308b..2318c54508 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/monkeyrecycler.dm @@ -78,7 +78,7 @@ playsound(src.loc, 'sound/machines/hiss.ogg', 50, 1) grinded -= required_grind for(var/i = 0, i < cube_production, i++) - new /obj/item/reagent_containers/food/snacks/monkeycube(src.loc) + new /obj/item/reagent_containers/food/snacks/cube/monkey(src.loc) to_chat(user, "The machine's display flashes that it has [grinded] monkeys worth of material left.") else to_chat(user, "The machine needs at least [required_grind] monkey(s) worth of material to produce a monkey cube. It only has [grinded].") diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 3fa188fb94..9a3df0a92b 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -14,10 +14,13 @@ var/processing = FALSE var/rating_speed = 1 var/rating_amount = 1 + var/quality_increase = 5 /obj/machinery/processor/RefreshParts() + quality_increase = 0 for(var/obj/item/stock_parts/matter_bin/B in component_parts) rating_amount = B.rating + quality_increase += B.rating * 5 for(var/obj/item/stock_parts/manipulator/M in component_parts) rating_speed = M.rating @@ -28,8 +31,10 @@ /obj/machinery/processor/proc/process_food(datum/food_processor_process/recipe, atom/movable/what) if (recipe.output && loc && !QDELETED(src)) + var/obj/item/reagent_containers/food/food_input = what for(var/i = 0, i < rating_amount, i++) - new recipe.output(drop_location()) + var/obj/item/reagent_containers/food/food_output = new recipe.output(drop_location()) + food_output.adjust_food_quality(food_input.food_quality + quality_increase) if (ismob(what)) var/mob/themob = what themob.gib(TRUE,TRUE,TRUE) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index 94c8d7219c..19ded25b08 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -125,7 +125,7 @@ return else bomb_timer = input(user, "Set the [bomb] timer from [BOMB_TIMER_MIN] to [BOMB_TIMER_MAX].", bomb, bomb_timer) as num - bomb_timer = CLAMP(CEILING(bomb_timer / 2, 1), BOMB_TIMER_MIN, BOMB_TIMER_MAX) + bomb_timer = clamp(CEILING(bomb_timer / 2, 1), BOMB_TIMER_MIN, BOMB_TIMER_MAX) bomb_defused = FALSE var/message = "[ADMIN_LOOKUPFLW(user)] has trapped a [src] with [bomb] set to [bomb_timer * 2] seconds." diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index c15c1cd2f5..ec96a4537c 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -8,7 +8,6 @@ parts |= reqs //////////////////////////////////////////FOOD MIXTURES//////////////////////////////////// - /datum/chemical_reaction/tofu name = "Tofu" id = "tofu" diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm index 90036c0e2a..f25aaab6fd 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_salad.dm @@ -68,7 +68,7 @@ /datum/reagent/consumable/sodiumchloride = 1, /datum/reagent/consumable/blackpepper = 1, /obj/item/reagent_containers/glass/bowl = 1, - /obj/item/reagent_containers/food/snacks/monkeycube = 1, + /obj/item/reagent_containers/food/snacks/cube/monkey = 1, /obj/item/reagent_containers/food/snacks/grown/banana = 1 ) result = /obj/item/reagent_containers/food/snacks/soup/monkeysdelight diff --git a/code/modules/goonchat/browserOutput.dm b/code/modules/goonchat/browserOutput.dm index 74432c7cbe..6d9e141309 100644 --- a/code/modules/goonchat/browserOutput.dm +++ b/code/modules/goonchat/browserOutput.dm @@ -138,7 +138,7 @@ GLOBAL_DATUM_INIT(iconCache, /savefile, new("tmp/iconCache.sav")) //Cache of ico /datum/chatOutput/proc/setMusicVolume(volume = "") if(volume) - adminMusicVolume = CLAMP(text2num(volume), 0, 100) + adminMusicVolume = clamp(text2num(volume), 0, 100) //Sends client connection details to the chat to handle and save /datum/chatOutput/proc/sendClientData() diff --git a/code/modules/hydroponics/biogenerator.dm b/code/modules/hydroponics/biogenerator.dm index 6a3fd56208..28f3387097 100644 --- a/code/modules/hydroponics/biogenerator.dm +++ b/code/modules/hydroponics/biogenerator.dm @@ -40,14 +40,14 @@ updateUsrDialog() /obj/machinery/biogenerator/RefreshParts() - var/E = 0 - var/P = 0 - var/max_storage = 40 + var/E = 0.5 + var/P = 0.5 + var/max_storage = 20 for(var/obj/item/stock_parts/matter_bin/B in component_parts) - P += B.rating - max_storage = 40 * B.rating + P += B.rating * 0.5 + max_storage = max(20 * B.rating, max_storage) for(var/obj/item/stock_parts/manipulator/M in component_parts) - E += M.rating + E += M.rating * 0.5 efficiency = E productivity = P max_items = max_storage @@ -196,7 +196,7 @@ dat += "x5" if(ispath(D.build_path, /obj/item/stack)) dat += "x10" - dat += "([D.materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]/efficiency])
" + dat += "([CEILING(D.materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]/efficiency, 1)])
" dat += "" else dat += "
No container inside, please insert container.
" @@ -214,12 +214,16 @@ to_chat(usr, "The biogenerator is in the process of working.") return var/S = 0 + var/total = 0 for(var/obj/item/reagent_containers/food/snacks/grown/I in contents) S += 5 - if(I.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment) < 0.1) - points += 1*productivity - else points += I.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment)*10*productivity + var/nutri_amount = I.reagents.get_reagent_amount(/datum/reagent/consumable/nutriment) + if(nutri_amount < 0.1) + total += 1*productivity + else + total += nutri_amount*10*productivity qdel(I) + points += round(total) if(S) processing = TRUE update_icon() @@ -235,12 +239,13 @@ /obj/machinery/biogenerator/proc/check_cost(list/materials, multiplier = 1, remove_points = TRUE) if(materials.len != 1 || materials[1] != SSmaterials.GetMaterialRef(/datum/material/biomass)) return FALSE - if (materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]*multiplier/efficiency > points) + var/cost = CEILING(materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]*multiplier/efficiency, 1) + if (cost > points) menustat = "nopoints" return FALSE else if(remove_points) - points -= materials[SSmaterials.GetMaterialRef(/datum/material/biomass)]*multiplier/efficiency + points -= cost update_icon() updateUsrDialog() return TRUE @@ -311,7 +316,7 @@ else if(href_list["create"]) var/amount = (text2num(href_list["amount"])) //Can't be outside these (if you change this keep a sane limit) - amount = CLAMP(amount, 1, 50) + amount = clamp(amount, 1, 50) var/id = href_list["create"] if(!stored_research.researched_designs.Find(id)) //naughty naughty diff --git a/code/modules/hydroponics/grown/towercap.dm b/code/modules/hydroponics/grown/towercap.dm index 1775a1f9b1..a18dbe165d 100644 --- a/code/modules/hydroponics/grown/towercap.dm +++ b/code/modules/hydroponics/grown/towercap.dm @@ -199,8 +199,8 @@ if(!click_params || !click_params["icon-x"] || !click_params["icon-y"]) return //Clamp it so that the icon never moves more than 16 pixels in either direction (thus leaving the table turf) - W.pixel_x = CLAMP(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) - W.pixel_y = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) + W.pixel_x = clamp(text2num(click_params["icon-x"]) - 16, -(world.icon_size/2), world.icon_size/2) + W.pixel_y = clamp(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2) else return ..() diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 718033ac56..b7665d7b5d 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -928,26 +928,26 @@ /// Tray Setters - The following procs adjust the tray or plants variables, and make sure that the stat doesn't go out of bounds./// /obj/machinery/hydroponics/proc/adjustNutri(adjustamt) - nutrilevel = CLAMP(nutrilevel + adjustamt, 0, maxnutri) + nutrilevel = clamp(nutrilevel + adjustamt, 0, maxnutri) /obj/machinery/hydroponics/proc/adjustWater(adjustamt) - waterlevel = CLAMP(waterlevel + adjustamt, 0, maxwater) + waterlevel = clamp(waterlevel + adjustamt, 0, maxwater) if(adjustamt>0) adjustToxic(-round(adjustamt/4))//Toxicity dilutation code. The more water you put in, the lesser the toxin concentration. /obj/machinery/hydroponics/proc/adjustHealth(adjustamt) if(myseed && !dead) - plant_health = CLAMP(plant_health + adjustamt, 0, myseed.endurance) + plant_health = clamp(plant_health + adjustamt, 0, myseed.endurance) /obj/machinery/hydroponics/proc/adjustToxic(adjustamt) - toxic = CLAMP(toxic + adjustamt, 0, 100) + toxic = clamp(toxic + adjustamt, 0, 100) /obj/machinery/hydroponics/proc/adjustPests(adjustamt) - pestlevel = CLAMP(pestlevel + adjustamt, 0, 10) + pestlevel = clamp(pestlevel + adjustamt, 0, 10) /obj/machinery/hydroponics/proc/adjustWeeds(adjustamt) - weedlevel = CLAMP(weedlevel + adjustamt, 0, 10) + weedlevel = clamp(weedlevel + adjustamt, 0, 10) /obj/machinery/hydroponics/proc/spawnplant() // why would you put strange reagent in a hydro tray you monster I bet you also feed them blood var/list/livingplants = list(/mob/living/simple_animal/hostile/tree, /mob/living/simple_animal/hostile/killertomato) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index aa0e789721..5e49a32a23 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -211,7 +211,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) /// Setters procs /// /obj/item/seeds/proc/adjust_yield(adjustamt) if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable - yield = CLAMP(yield + adjustamt, 0, 10) + yield = clamp(yield + adjustamt, 0, 10) if(yield <= 0 && get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism)) yield = 1 // Mushrooms always have a minimum yield of 1. @@ -220,39 +220,39 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) C.value = yield /obj/item/seeds/proc/adjust_lifespan(adjustamt) - lifespan = CLAMP(lifespan + adjustamt, 10, 100) + lifespan = clamp(lifespan + adjustamt, 10, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/lifespan) if(C) C.value = lifespan /obj/item/seeds/proc/adjust_endurance(adjustamt) - endurance = CLAMP(endurance + adjustamt, 10, 100) + endurance = clamp(endurance + adjustamt, 10, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/endurance) if(C) C.value = endurance /obj/item/seeds/proc/adjust_production(adjustamt) if(yield != -1) - production = CLAMP(production + adjustamt, 1, 10) + production = clamp(production + adjustamt, 1, 10) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/production) if(C) C.value = production /obj/item/seeds/proc/adjust_potency(adjustamt) if(potency != -1) - potency = CLAMP(potency + adjustamt, 0, 100) + potency = clamp(potency + adjustamt, 0, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/potency) if(C) C.value = potency /obj/item/seeds/proc/adjust_weed_rate(adjustamt) - weed_rate = CLAMP(weed_rate + adjustamt, 0, 10) + weed_rate = clamp(weed_rate + adjustamt, 0, 10) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate) if(C) C.value = weed_rate /obj/item/seeds/proc/adjust_weed_chance(adjustamt) - weed_chance = CLAMP(weed_chance + adjustamt, 0, 67) + weed_chance = clamp(weed_chance + adjustamt, 0, 67) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_chance) if(C) C.value = weed_chance @@ -261,7 +261,7 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) /obj/item/seeds/proc/set_yield(adjustamt) if(yield != -1) // Unharvestable shouldn't suddenly turn harvestable - yield = CLAMP(adjustamt, 0, 10) + yield = clamp(adjustamt, 0, 10) if(yield <= 0 && get_gene(/datum/plant_gene/trait/plant_type/fungal_metabolism)) yield = 1 // Mushrooms always have a minimum yield of 1. @@ -270,39 +270,39 @@ obj/item/seeds/proc/is_gene_forbidden(typepath) C.value = yield /obj/item/seeds/proc/set_lifespan(adjustamt) - lifespan = CLAMP(adjustamt, 10, 100) + lifespan = clamp(adjustamt, 10, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/lifespan) if(C) C.value = lifespan /obj/item/seeds/proc/set_endurance(adjustamt) - endurance = CLAMP(adjustamt, 10, 100) + endurance = clamp(adjustamt, 10, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/endurance) if(C) C.value = endurance /obj/item/seeds/proc/set_production(adjustamt) if(yield != -1) - production = CLAMP(adjustamt, 1, 10) + production = clamp(adjustamt, 1, 10) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/production) if(C) C.value = production /obj/item/seeds/proc/set_potency(adjustamt) if(potency != -1) - potency = CLAMP(adjustamt, 0, 100) + potency = clamp(adjustamt, 0, 100) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/potency) if(C) C.value = potency /obj/item/seeds/proc/set_weed_rate(adjustamt) - weed_rate = CLAMP(adjustamt, 0, 10) + weed_rate = clamp(adjustamt, 0, 10) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_rate) if(C) C.value = weed_rate /obj/item/seeds/proc/set_weed_chance(adjustamt) - weed_chance = CLAMP(adjustamt, 0, 67) + weed_chance = clamp(adjustamt, 0, 67) var/datum/plant_gene/core/C = get_gene(/datum/plant_gene/core/weed_chance) if(C) C.value = weed_chance diff --git a/code/modules/instruments/songs/_song.dm b/code/modules/instruments/songs/_song.dm index 67feb14457..30d8b7b3a7 100644 --- a/code/modules/instruments/songs/_song.dm +++ b/code/modules/instruments/songs/_song.dm @@ -213,7 +213,7 @@ /datum/song/proc/sanitize_tempo(new_tempo) new_tempo = abs(new_tempo) - return CLAMP(round(new_tempo, world.tick_lag), world.tick_lag, 5 SECONDS) + return clamp(round(new_tempo, world.tick_lag), world.tick_lag, 5 SECONDS) /datum/song/proc/get_bpm() return 600 / tempo @@ -242,22 +242,22 @@ cached_linear_dropoff = volume_decrease_per_decisecond /datum/song/proc/set_volume(volume) - src.volume = CLAMP(volume, max(0, min_volume), min(100, max_volume)) + src.volume = clamp(volume, max(0, min_volume), min(100, max_volume)) update_sustain() updateDialog() /datum/song/proc/set_dropoff_volume(volume) - sustain_dropoff_volume = CLAMP(volume, INSTRUMENT_MIN_SUSTAIN_DROPOFF, 100) + sustain_dropoff_volume = clamp(volume, INSTRUMENT_MIN_SUSTAIN_DROPOFF, 100) update_sustain() updateDialog() /datum/song/proc/set_exponential_drop_rate(drop) - sustain_exponential_dropoff = CLAMP(drop, INSTRUMENT_EXP_FALLOFF_MIN, INSTRUMENT_EXP_FALLOFF_MAX) + sustain_exponential_dropoff = clamp(drop, INSTRUMENT_EXP_FALLOFF_MIN, INSTRUMENT_EXP_FALLOFF_MAX) update_sustain() updateDialog() /datum/song/proc/set_linear_falloff_duration(duration) - sustain_linear_duration = CLAMP(duration, 0.1, INSTRUMENT_MAX_TOTAL_SUSTAIN) + sustain_linear_duration = clamp(duration, 0.1, INSTRUMENT_MAX_TOTAL_SUSTAIN) update_sustain() updateDialog() diff --git a/code/modules/instruments/songs/editor.dm b/code/modules/instruments/songs/editor.dm index 873ff0e1a7..d9595797d7 100644 --- a/code/modules/instruments/songs/editor.dm +++ b/code/modules/instruments/songs/editor.dm @@ -230,7 +230,7 @@ else if(href_list["setnoteshift"]) var/amount = input(usr, "Set note shift", "Note Shift") as null|num if(!isnull(amount)) - note_shift = CLAMP(amount, note_shift_min, note_shift_max) + note_shift = clamp(amount, note_shift_min, note_shift_max) else if(href_list["setsustainmode"]) var/choice = input(usr, "Choose a sustain mode", "Sustain Mode") as null|anything in list("Linear", "Exponential") diff --git a/code/modules/instruments/songs/play_synthesized.dm b/code/modules/instruments/songs/play_synthesized.dm index 2573da324a..5e7c5652a0 100644 --- a/code/modules/instruments/songs/play_synthesized.dm +++ b/code/modules/instruments/songs/play_synthesized.dm @@ -52,8 +52,8 @@ if(!num) //it's an accidental accents[key] = oct_acc //if they misspelled it/fucked up that's on them lmao, no safety checks. else //octave - octaves[key] = CLAMP(num, octave_min, octave_max) - compiled_chord += CLAMP((note_offset_lookup[key] + octaves[key] * 12 + accent_lookup[accents[key]]), key_min, key_max) + octaves[key] = clamp(num, octave_min, octave_max) + compiled_chord += clamp((note_offset_lookup[key] + octaves[key] * 12 + accent_lookup[accents[key]]), key_min, key_max) compiled_chord += tempodiv //this goes last if(length(compiled_chord)) compiled_chords[++compiled_chords.len] = compiled_chord diff --git a/code/modules/integrated_electronics/core/assemblies.dm b/code/modules/integrated_electronics/core/assemblies.dm index e144e4dbe6..ef63ba97f8 100644 --- a/code/modules/integrated_electronics/core/assemblies.dm +++ b/code/modules/integrated_electronics/core/assemblies.dm @@ -79,7 +79,9 @@ for(var/I in assembly_components) var/obj/item/integrated_circuit/IC = I - . += IC.external_examine(user) + var/text = IC.external_examine(user) + if(text) + . += text if(opened) interact(user) diff --git a/code/modules/integrated_electronics/core/integrated_circuit.dm b/code/modules/integrated_electronics/core/integrated_circuit.dm index 0709b179d2..f90b584d76 100644 --- a/code/modules/integrated_electronics/core/integrated_circuit.dm +++ b/code/modules/integrated_electronics/core/integrated_circuit.dm @@ -36,7 +36,9 @@ a creative player the means to solve many problems. Circuits are held inside an /obj/item/integrated_circuit/examine(mob/user) interact(user) . = ..() - . += external_examine(user) + var/text = external_examine(user) + if(text) + . += text // Can be called via electronic_assembly/attackby() /obj/item/integrated_circuit/proc/additem(var/obj/item/I, var/mob/living/user) @@ -57,7 +59,7 @@ a creative player the means to solve many problems. Circuits are held inside an var/datum/integrated_io/activate/A = activators[k] if(A.linked.len) to_chat(user, "The '[A]' is connected to [A.get_linked_to_desc()].") - any_examine(user) + to_chat(user, any_examine(user)) interact(user) // This should be used when someone is examining from an 'outside' perspective, e.g. reading a screen or LED. diff --git a/code/modules/integrated_electronics/core/special_pins/index_pin.dm b/code/modules/integrated_electronics/core/special_pins/index_pin.dm index 06267eec61..e904c4c6d0 100644 --- a/code/modules/integrated_electronics/core/special_pins/index_pin.dm +++ b/code/modules/integrated_electronics/core/special_pins/index_pin.dm @@ -14,7 +14,7 @@ new_data = 0 if(isnum(new_data)) - data = CLAMP(round(new_data), 0, IC_MAX_LIST_LENGTH) + data = clamp(round(new_data), 0, IC_MAX_LIST_LENGTH) holder.on_data_written() /datum/integrated_io/index/display_pin_type() diff --git a/code/modules/integrated_electronics/subtypes/atmospherics.dm b/code/modules/integrated_electronics/subtypes/atmospherics.dm index 6b4f46f83d..219e30c57f 100644 --- a/code/modules/integrated_electronics/subtypes/atmospherics.dm +++ b/code/modules/integrated_electronics/subtypes/atmospherics.dm @@ -308,7 +308,7 @@ obj/item/integrated_circuit/atmospherics/connector/portableConnectorReturnAir() /obj/item/integrated_circuit/atmospherics/pump/filter/on_data_written() var/amt = get_pin_data(IC_INPUT, 5) - target_pressure = CLAMP(amt, 0, PUMP_MAX_PRESSURE) + target_pressure = clamp(amt, 0, PUMP_MAX_PRESSURE) /obj/item/integrated_circuit/atmospherics/pump/filter/do_work() activate_pin(2) diff --git a/code/modules/integrated_electronics/subtypes/data_transfer.dm b/code/modules/integrated_electronics/subtypes/data_transfer.dm index 8e1c715d83..8db1db4e00 100644 --- a/code/modules/integrated_electronics/subtypes/data_transfer.dm +++ b/code/modules/integrated_electronics/subtypes/data_transfer.dm @@ -125,7 +125,7 @@ /obj/item/integrated_circuit/transfer/pulsedemultiplexer/do_work() var/output_index = get_pin_data(IC_INPUT, 1) - if(output_index == CLAMP(output_index, 1, number_of_pins)) + if(output_index == clamp(output_index, 1, number_of_pins)) activate_pin(round(output_index + 1 ,1)) /obj/item/integrated_circuit/transfer/pulsedemultiplexer/medium diff --git a/code/modules/integrated_electronics/subtypes/input.dm b/code/modules/integrated_electronics/subtypes/input.dm index 0be6fd8686..49e6855b38 100644 --- a/code/modules/integrated_electronics/subtypes/input.dm +++ b/code/modules/integrated_electronics/subtypes/input.dm @@ -389,8 +389,8 @@ activate_pin(3) return var/turf/T = get_turf(assembly) - var/target_x = CLAMP(get_pin_data(IC_INPUT, 1), 0, world.maxx) - var/target_y = CLAMP(get_pin_data(IC_INPUT, 2), 0, world.maxy) + var/target_x = clamp(get_pin_data(IC_INPUT, 1), 0, world.maxx) + var/target_y = clamp(get_pin_data(IC_INPUT, 2), 0, world.maxy) var/turf/A = locate(target_x, target_y, T.z) set_pin_data(IC_OUTPUT, 1, null) if(!A || !(A in view(T))) @@ -532,7 +532,7 @@ var/rad = get_pin_data(IC_INPUT, 2) if(isnum(rad)) - rad = CLAMP(rad, 0, 8) + rad = clamp(rad, 0, 8) radius = rad /obj/item/integrated_circuit/input/advanced_locator_list/do_work() @@ -594,7 +594,7 @@ /obj/item/integrated_circuit/input/advanced_locator/on_data_written() var/rad = get_pin_data(IC_INPUT, 2) if(isnum(rad)) - rad = CLAMP(rad, 0, 8) + rad = clamp(rad, 0, 8) radius = rad /obj/item/integrated_circuit/input/advanced_locator/do_work() diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm index d1cd852651..fd4e6abfc5 100644 --- a/code/modules/integrated_electronics/subtypes/manipulation.dm +++ b/code/modules/integrated_electronics/subtypes/manipulation.dm @@ -236,7 +236,7 @@ var/mode = get_pin_data(IC_INPUT, 2) switch(ord) if(1) - mode = CLAMP(mode, GRAB_PASSIVE, max_grab) + mode = clamp(mode, GRAB_PASSIVE, max_grab) if(AM) if(check_target(AM, exclude_contents = TRUE)) acting_object.investigate_log("grabbed ([AM]) using [src].", INVESTIGATE_CIRCUIT) @@ -329,9 +329,9 @@ // If the item is in a grabber circuit we'll update the grabber's outputs after we've thrown it. var/obj/item/integrated_circuit/manipulation/grabber/G = A.loc - var/x_abs = CLAMP(T.x + target_x_rel, 0, world.maxx) - var/y_abs = CLAMP(T.y + target_y_rel, 0, world.maxy) - var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1) + var/x_abs = clamp(T.x + target_x_rel, 0, world.maxx) + var/y_abs = clamp(T.y + target_y_rel, 0, world.maxy) + var/range = round(clamp(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1) //remove damage A.throwforce = 0 A.embedding = list("embed_chance" = 0) @@ -447,7 +447,7 @@ if(!S) activate_pin(4) return - if(materials.insert_item(S, CLAMP(get_pin_data(IC_INPUT, 2),0,100), multiplier = 1) ) + if(materials.insert_item(S, clamp(get_pin_data(IC_INPUT, 2),0,100), multiplier = 1) ) AfterMaterialInsert() activate_pin(3) else @@ -458,7 +458,7 @@ for(var/I in 1 to mtypes.len) var/datum/material/M = materials.materials[mtypes[I]] if(M) - var/U = CLAMP(get_pin_data(IC_INPUT, I+2),-100000,100000) + var/U = clamp(get_pin_data(IC_INPUT, I+2),-100000,100000) if(!U) continue if(!mt) //Invalid input diff --git a/code/modules/integrated_electronics/subtypes/output.dm b/code/modules/integrated_electronics/subtypes/output.dm index 6005709dde..47b6e151cb 100644 --- a/code/modules/integrated_electronics/subtypes/output.dm +++ b/code/modules/integrated_electronics/subtypes/output.dm @@ -112,7 +112,7 @@ var/brightness = get_pin_data(IC_INPUT, 2) if(new_color && isnum(brightness)) - brightness = CLAMP(brightness, 0, 10) + brightness = clamp(brightness, 0, 10) light_rgb = new_color light_brightness = brightness @@ -151,7 +151,7 @@ var/selected_sound = sounds[ID] if(!selected_sound) return - vol = CLAMP(vol ,0 , 100) + vol = clamp(vol ,0 , 100) playsound(get_turf(src), selected_sound, vol, freq, -1) var/atom/A = get_object() A.investigate_log("played a sound ([selected_sound]) as [type].", INVESTIGATE_CIRCUIT) diff --git a/code/modules/integrated_electronics/subtypes/reagents.dm b/code/modules/integrated_electronics/subtypes/reagents.dm index 0fc9f58db8..663ba9fe16 100644 --- a/code/modules/integrated_electronics/subtypes/reagents.dm +++ b/code/modules/integrated_electronics/subtypes/reagents.dm @@ -94,7 +94,7 @@ else direction_mode = SYRINGE_INJECT if(isnum(new_amount)) - new_amount = CLAMP(new_amount, 0, volume) + new_amount = clamp(new_amount, 0, volume) transfer_amount = new_amount @@ -222,7 +222,7 @@ else direction_mode = SYRINGE_INJECT if(isnum(new_amount)) - new_amount = CLAMP(new_amount, 0, 50) + new_amount = clamp(new_amount, 0, 50) transfer_amount = new_amount /obj/item/integrated_circuit/reagent/pump/do_work() @@ -468,7 +468,7 @@ else direction_mode = SYRINGE_INJECT if(isnum(new_amount)) - new_amount = CLAMP(new_amount, 0, 50) + new_amount = clamp(new_amount, 0, 50) transfer_amount = new_amount /obj/item/integrated_circuit/reagent/filter/do_work() diff --git a/code/modules/integrated_electronics/subtypes/smart.dm b/code/modules/integrated_electronics/subtypes/smart.dm index d0c47f0950..5dc866c556 100644 --- a/code/modules/integrated_electronics/subtypes/smart.dm +++ b/code/modules/integrated_electronics/subtypes/smart.dm @@ -57,8 +57,8 @@ activate_pin(3) return var/turf/T = get_turf(assembly) - var/target_x = CLAMP(get_pin_data(IC_INPUT, 1), 0, world.maxx) - var/target_y = CLAMP(get_pin_data(IC_INPUT, 2), 0, world.maxy) + var/target_x = clamp(get_pin_data(IC_INPUT, 1), 0, world.maxx) + var/target_y = clamp(get_pin_data(IC_INPUT, 2), 0, world.maxy) var/turf/A = locate(target_x, target_y, T.z) set_pin_data(IC_OUTPUT, 1, null) if(!A||A==T) diff --git a/code/modules/integrated_electronics/subtypes/time.dm b/code/modules/integrated_electronics/subtypes/time.dm index 1f1d5444bb..cae43718c2 100644 --- a/code/modules/integrated_electronics/subtypes/time.dm +++ b/code/modules/integrated_electronics/subtypes/time.dm @@ -64,7 +64,7 @@ /obj/item/integrated_circuit/time/delay/custom/do_work() var/delay_input = get_pin_data(IC_INPUT, 1) if(delay_input && isnum(delay_input) ) - var/new_delay = CLAMP(delay_input ,1 ,36000) //An hour. + var/new_delay = clamp(delay_input ,1 ,36000) //An hour. delay = new_delay ..() @@ -119,7 +119,7 @@ /obj/item/integrated_circuit/time/ticker/custom/on_data_written() var/delay_input = get_pin_data(IC_INPUT, 2) if(delay_input && isnum(delay_input) ) - var/new_delay = CLAMP(delay_input ,1 ,1 HOURS) + var/new_delay = clamp(delay_input ,1 ,1 HOURS) delay = new_delay ..() diff --git a/code/modules/integrated_electronics/subtypes/trig.dm b/code/modules/integrated_electronics/subtypes/trig.dm index cefa25e945..75580911c3 100644 --- a/code/modules/integrated_electronics/subtypes/trig.dm +++ b/code/modules/integrated_electronics/subtypes/trig.dm @@ -71,7 +71,7 @@ var/result = null var/A = get_pin_data(IC_INPUT, 1) if(!isnull(A)) - result = TAN(A) + result = tan(A) set_pin_data(IC_OUTPUT, 1, result) push_data() diff --git a/code/modules/integrated_electronics/subtypes/weaponized.dm b/code/modules/integrated_electronics/subtypes/weaponized.dm index 02340970af..2f6a2cd841 100644 --- a/code/modules/integrated_electronics/subtypes/weaponized.dm +++ b/code/modules/integrated_electronics/subtypes/weaponized.dm @@ -102,8 +102,8 @@ yo.data = round(yo.data, 1) var/turf/T = get_turf(assembly) - var/target_x = CLAMP(T.x + xo.data, 0, world.maxx) - var/target_y = CLAMP(T.y + yo.data, 0, world.maxy) + var/target_x = clamp(T.x + xo.data, 0, world.maxx) + var/target_y = clamp(T.y + yo.data, 0, world.maxy) assembly.visible_message("[assembly] fires [installed_gun]!") shootAt(locate(target_x, target_y, T.z)) @@ -191,7 +191,7 @@ var/datum/integrated_io/detonation_time = inputs[1] var/dt if(isnum(detonation_time.data) && detonation_time.data > 0) - dt = CLAMP(detonation_time.data, 1, 12)*10 + dt = clamp(detonation_time.data, 1, 12)*10 else dt = 15 addtimer(CALLBACK(attached_grenade, /obj/item/grenade.proc/prime), dt) @@ -293,9 +293,9 @@ // If the item is in a grabber circuit we'll update the grabber's outputs after we've thrown it. var/obj/item/integrated_circuit/manipulation/grabber/G = A.loc - var/x_abs = CLAMP(T.x + target_x_rel, 0, world.maxx) - var/y_abs = CLAMP(T.y + target_y_rel, 0, world.maxy) - var/range = round(CLAMP(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1) + var/x_abs = clamp(T.x + target_x_rel, 0, world.maxx) + var/y_abs = clamp(T.y + target_y_rel, 0, world.maxy) + var/range = round(clamp(sqrt(target_x_rel*target_x_rel+target_y_rel*target_y_rel),0,8),1) assembly.visible_message("\The [assembly] has thrown [A]!") log_attack("[assembly] [REF(assembly)] has thrown [A] with lethal force.") A.forceMove(drop_location()) @@ -324,7 +324,7 @@ /obj/item/integrated_circuit/weaponized/stun/do_work() - var/stunforce = CLAMP(get_pin_data(IC_INPUT, 1),1,70) + var/stunforce = clamp(get_pin_data(IC_INPUT, 1),1,70) var/mob/living/L = assembly.loc if(attempt_stun(L,stunforce)) activate_pin(2) diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index ee441c21f7..e40c278e92 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -66,6 +66,11 @@ // How much threat this job is worth in dynamic. Is subtracted if the player's not an antag, added if they are. var/threat = 0 + /// Starting skill levels. + var/list/starting_skills + /// Skill affinities to set + var/list/skill_affinities + //Only override this proc //H is usually a human unless an /equip override transformed it /datum/job/proc/after_spawn(mob/living/H, mob/M, latejoin = FALSE) @@ -142,7 +147,6 @@ return TRUE //Available in 0 days = available right now = player is old enough to play. return FALSE - /datum/job/proc/available_in_days(client/C) if(!C) return 0 @@ -166,6 +170,17 @@ /datum/job/proc/radio_help_message(mob/M) to_chat(M, "Prefix your message with :h to speak on your department's radio. To see other prefixes, look closely at your headset.") +/datum/job/proc/standard_assign_skills(datum/mind/M) + if(!starting_skills) + return + for(var/skill in starting_skills) + M.skill_holder.boost_skill_value_to(skill, starting_skills[skill]) + // do wipe affinities though + M.skill_holder.skill_affinities = list() + for(var/skill in skill_affinities) + M.skill_holder.skill_affinities[skill] = skill_affinities[skill] + UNSETEMPTY(M.skill_holder.skill_affinities) //if we didn't set any. + /datum/outfit/job name = "Standard Gear" diff --git a/code/modules/jobs/job_types/chemist.dm b/code/modules/jobs/job_types/chemist.dm index 44b0e90ec8..571785526b 100644 --- a/code/modules/jobs/job_types/chemist.dm +++ b/code/modules/jobs/job_types/chemist.dm @@ -19,6 +19,9 @@ display_order = JOB_DISPLAY_ORDER_CHEMIST threat = 1.5 + starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL) + skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL) + /datum/outfit/job/chemist name = "Chemist" jobtype = /datum/job/chemist diff --git a/code/modules/jobs/job_types/chief_medical_officer.dm b/code/modules/jobs/job_types/chief_medical_officer.dm index 8dd7fafab3..478c33551d 100644 --- a/code/modules/jobs/job_types/chief_medical_officer.dm +++ b/code/modules/jobs/job_types/chief_medical_officer.dm @@ -29,6 +29,9 @@ blacklisted_quirks = list(/datum/quirk/mute, /datum/quirk/brainproblems, /datum/quirk/insanity) threat = 2 + starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL) + skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL) + /datum/outfit/job/cmo name = "Chief Medical Officer" jobtype = /datum/job/cmo diff --git a/code/modules/jobs/job_types/geneticist.dm b/code/modules/jobs/job_types/geneticist.dm index 2e8b18d772..4fb989f6e8 100644 --- a/code/modules/jobs/job_types/geneticist.dm +++ b/code/modules/jobs/job_types/geneticist.dm @@ -19,6 +19,8 @@ display_order = JOB_DISPLAY_ORDER_GENETICIST threat = 1.5 + starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL) + /datum/outfit/job/geneticist name = "Geneticist" jobtype = /datum/job/geneticist diff --git a/code/modules/jobs/job_types/medical_doctor.dm b/code/modules/jobs/job_types/medical_doctor.dm index 3eaa2ae10a..0e8b2e645b 100644 --- a/code/modules/jobs/job_types/medical_doctor.dm +++ b/code/modules/jobs/job_types/medical_doctor.dm @@ -17,6 +17,9 @@ display_order = JOB_DISPLAY_ORDER_MEDICAL_DOCTOR threat = 0.5 + starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL) + skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL) + /datum/outfit/job/doctor name = "Medical Doctor" jobtype = /datum/job/doctor diff --git a/code/modules/jobs/job_types/paramedic.dm b/code/modules/jobs/job_types/paramedic.dm index df6e1431ae..e8098daddc 100644 --- a/code/modules/jobs/job_types/paramedic.dm +++ b/code/modules/jobs/job_types/paramedic.dm @@ -19,6 +19,9 @@ threat = 0.5 + starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL) + skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL) + /datum/outfit/job/paramedic name = "Paramedic" jobtype = /datum/job/paramedic diff --git a/code/modules/jobs/job_types/virologist.dm b/code/modules/jobs/job_types/virologist.dm index 4ba65dff59..78f0ba4272 100644 --- a/code/modules/jobs/job_types/virologist.dm +++ b/code/modules/jobs/job_types/virologist.dm @@ -20,6 +20,9 @@ threat = 1.5 + starting_skills = list(/datum/skill/numerical/surgery = STARTING_SKILL_SURGERY_MEDICAL) + skill_affinities = list(/datum/skill/numerical/surgery = STARTING_SKILL_AFFINITY_SURGERY_MEDICAL) + /datum/outfit/job/virologist name = "Virologist" jobtype = /datum/job/virologist diff --git a/code/modules/language/language_holder.dm b/code/modules/language/language_holder.dm index b307e66b39..f31ea9022b 100644 --- a/code/modules/language/language_holder.dm +++ b/code/modules/language/language_holder.dm @@ -74,7 +74,7 @@ var/datum/language_holder/other if(istype(thing, /datum/language_holder)) other = thing - else if(ismovableatom(thing)) + else if(ismovable(thing)) var/atom/movable/AM = thing other = AM.get_language_holder() else if(istype(thing, /datum/mind)) @@ -94,7 +94,7 @@ language_menu.ui_interact(user) /datum/language_holder/proc/get_atom() - if(ismovableatom(owner)) + if(ismovable(owner)) . = owner else if(istype(owner, /datum/mind)) var/datum/mind/M = owner diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 008724b10f..144037b3a7 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -267,7 +267,7 @@ GLOBAL_LIST(cachedbooks) // List of our cached book datums dat += "(Order book by SS13BN)

" dat += "" dat += "" - dat += libcomp_menu[CLAMP(page,1,libcomp_menu.len)] + dat += libcomp_menu[clamp(page,1,libcomp_menu.len)] dat += "" dat += "
AUTHORTITLECATEGORY
<<<< >>>>
" dat += "
(Return to main menu)
" diff --git a/code/modules/lighting/lighting_atom.dm b/code/modules/lighting/lighting_atom.dm index 8712a66290..779dd9c3ea 100644 --- a/code/modules/lighting/lighting_atom.dm +++ b/code/modules/lighting/lighting_atom.dm @@ -38,7 +38,7 @@ if (!light_power || !light_range) // We won't emit light anyways, destroy the light source. QDEL_NULL(light) else - if (!ismovableatom(loc)) // We choose what atom should be the top atom of the light here. + if (!ismovable(loc)) // We choose what atom should be the top atom of the light here. . = src else . = loc diff --git a/code/modules/mapping/map_template.dm b/code/modules/mapping/map_template.dm index 3e361179de..873c10fc02 100644 --- a/code/modules/mapping/map_template.dm +++ b/code/modules/mapping/map_template.dm @@ -55,11 +55,11 @@ SSmachines.setup_template_powernets(cables) SSair.setup_template_machinery(atmos_machines) -/datum/map_template/proc/load_new_z() +/datum/map_template/proc/load_new_z(list/traits = list(ZTRAIT_AWAY = TRUE)) var/x = round((world.maxx - width)/2) var/y = round((world.maxy - height)/2) - var/datum/space_level/level = SSmapping.add_new_zlevel(name, list(ZTRAIT_AWAY = TRUE)) + var/datum/space_level/level = SSmapping.add_new_zlevel(name, traits) var/datum/parsed_map/parsed = load_map(file(mappath), x, y, level.z_value, no_changeturf=(SSatoms.initialized == INITIALIZATION_INSSATOMS), placeOnTop=TRUE) var/list/bounds = parsed.bounds if(!bounds) @@ -121,6 +121,6 @@ //for your ever biggening badminnery kevinz000 //❤ - Cyberboss -/proc/load_new_z_level(var/file, var/name) +/proc/load_new_z_level(file, name, list/traits) var/datum/map_template/template = new(file, name) - template.load_new_z() + return template.load_new_z(traits) diff --git a/code/modules/mapping/reader.dm b/code/modules/mapping/reader.dm index 86b501c455..e7d7fd4898 100644 --- a/code/modules/mapping/reader.dm +++ b/code/modules/mapping/reader.dm @@ -93,7 +93,7 @@ gridSet.ycrd = text2num(dmmRegex.group[4]) gridSet.zcrd = text2num(dmmRegex.group[5]) - bounds[MAP_MINX] = min(bounds[MAP_MINX], CLAMP(gridSet.xcrd, x_lower, x_upper)) + bounds[MAP_MINX] = min(bounds[MAP_MINX], clamp(gridSet.xcrd, x_lower, x_upper)) bounds[MAP_MINZ] = min(bounds[MAP_MINZ], gridSet.zcrd) bounds[MAP_MAXZ] = max(bounds[MAP_MAXZ], gridSet.zcrd) @@ -113,15 +113,15 @@ if(gridLines.len && gridLines[gridLines.len] == "") gridLines.Cut(gridLines.len) // Remove only one blank line at the end. - bounds[MAP_MINY] = min(bounds[MAP_MINY], CLAMP(gridSet.ycrd, y_lower, y_upper)) + bounds[MAP_MINY] = min(bounds[MAP_MINY], clamp(gridSet.ycrd, y_lower, y_upper)) gridSet.ycrd += gridLines.len - 1 // Start at the top and work down - bounds[MAP_MAXY] = max(bounds[MAP_MAXY], CLAMP(gridSet.ycrd, y_lower, y_upper)) + bounds[MAP_MAXY] = max(bounds[MAP_MAXY], clamp(gridSet.ycrd, y_lower, y_upper)) var/maxx = gridSet.xcrd if(gridLines.len) //Not an empty map maxx = max(maxx, gridSet.xcrd + length(gridLines[1]) / key_len - 1) - bounds[MAP_MAXX] = CLAMP(max(bounds[MAP_MAXX], maxx), x_lower, x_upper) + bounds[MAP_MAXX] = clamp(max(bounds[MAP_MAXX], maxx), x_lower, x_upper) CHECK_TICK // Indicate failure to parse any coordinates by nulling bounds diff --git a/code/modules/mining/equipment/regenerative_core.dm b/code/modules/mining/equipment/regenerative_core.dm index c14aa097bb..47a1d84f58 100644 --- a/code/modules/mining/equipment/regenerative_core.dm +++ b/code/modules/mining/equipment/regenerative_core.dm @@ -65,7 +65,7 @@ qdel(src) /obj/item/organ/regenerative_core/on_life() - ..() + . = ..() if(owner.health < owner.crit_threshold) ui_action_click() diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 56e1a04b95..4dd86a847a 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -428,7 +428,7 @@ /obj/item/projectile/hook/on_hit(atom/target) . = ..() - if(ismovableatom(target)) + if(ismovable(target)) var/atom/movable/A = target if(A.anchored) return @@ -833,13 +833,13 @@ force = 0 var/ghost_counter = ghost_check() - force = CLAMP((ghost_counter * 4), 0, 75) + force = clamp((ghost_counter * 4), 0, 75) user.visible_message("[user] strikes with the force of [ghost_counter] vengeful spirits!") return ..() /obj/item/melee/ghost_sword/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) var/ghost_counter = ghost_check() - final_block_chance += CLAMP((ghost_counter * 5), 0, 75) + final_block_chance += clamp((ghost_counter * 5), 0, 75) owner.visible_message("[owner] is protected by a ring of [ghost_counter] ghosts!") return ..() diff --git a/code/modules/mining/machine_silo.dm b/code/modules/mining/machine_silo.dm index c0356dd1ab..09246abc46 100644 --- a/code/modules/mining/machine_silo.dm +++ b/code/modules/mining/machine_silo.dm @@ -116,7 +116,7 @@ GLOBAL_LIST_EMPTY(silo_access_logs) var/list/logs = GLOB.silo_access_logs[REF(src)] var/len = LAZYLEN(logs) var/num_pages = 1 + round((len - 1) / 30) - var/page = CLAMP(log_page, 1, num_pages) + var/page = clamp(log_page, 1, num_pages) if(num_pages > 1) for(var/i in 1 to num_pages) if(i == page) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 0182dec254..bcb196a103 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -194,7 +194,7 @@ prize_list += list( new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/mining, 250), new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250), - new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/monkeycube, 300), + new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/cube/monkey, 300), new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350), new /datum/data/mining_equipment("Royal Cape of the Liberator", /obj/item/bedsheet/rd/royal_cape, 500), new /datum/data/mining_equipment("Grey Slime Extract", /obj/item/slime_extract/grey, 1000), diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index d04c0104e5..e89bbef58d 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -87,7 +87,7 @@ if(istype(new_material)) chosen = new_material if(href_list["chooseAmt"]) - coinsToProduce = CLAMP(coinsToProduce + text2num(href_list["chooseAmt"]), 0, 1000) + coinsToProduce = clamp(coinsToProduce + text2num(href_list["chooseAmt"]), 0, 1000) updateUsrDialog() if(href_list["makeCoins"]) var/temp_coins = coinsToProduce diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 35b1a69761..f7e1f24b63 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -392,6 +392,8 @@ character.update_parallax_teleport() + job.standard_assign_skills(character.mind) + SSticker.minds += character.mind var/mob/living/carbon/human/humanc diff --git a/code/modules/mob/dead/new_player/preferences_setup.dm b/code/modules/mob/dead/new_player/preferences_setup.dm index b669e30a06..317efc2c1f 100644 --- a/code/modules/mob/dead/new_player/preferences_setup.dm +++ b/code/modules/mob/dead/new_player/preferences_setup.dm @@ -23,11 +23,7 @@ if(!pref_species) var/rando_race = pick(GLOB.roundstart_races) pref_species = new rando_race() - features = random_features(pref_species?.id) - if(gender == MALE || gender != FEMALE) - features["body_model"] = gender - else if(gender == PLURAL) - features["body_model"] = pick(MALE,FEMALE) + features = random_features(pref_species?.id, gender) age = rand(AGE_MIN,AGE_MAX) /datum/preferences/proc/update_preview_icon(equip_job = TRUE) diff --git a/code/modules/mob/dead/new_player/sprite_accessories/pines.dm b/code/modules/mob/dead/new_player/sprite_accessories/spines.dm similarity index 100% rename from code/modules/mob/dead/new_player/sprite_accessories/pines.dm rename to code/modules/mob/dead/new_player/sprite_accessories/spines.dm diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index b2d02d8fa2..b8e56f3d7c 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -570,7 +570,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp views |= i var/new_view = input("Choose your new view", "Modify view range", 7) as null|anything in views if(new_view) - client.change_view(CLAMP(new_view, 7, max_view)) + client.change_view(clamp(new_view, 7, max_view)) else client.change_view(CONFIG_GET(string/default_view)) @@ -937,3 +937,20 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp spawners_menu = new(src) spawners_menu.ui_interact(src) + +/mob/dead/observer/verb/game_info() + set name = "Game info" + set desc = "Shows various info relating to the game mode, antagonists etc." + set category = "Ghost" + if(!started_as_observer && can_reenter_corpse) + to_chat(src, "You cannot see this info unless you are an observer or you've chosen Do Not Resuscitate!") + return + var/list/stuff = list("[SSticker.mode.name]") + stuff += "Antagonists:\n" + for(var/datum/antagonist/A in GLOB.antagonists) + if(A.owner) + stuff += "[A.owner] the [A.name]" + var/ghost_info = SSticker.mode.ghost_info() + if(ghost_info) + stuff += ghost_info + to_chat(src,stuff.Join("\n")) diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 9f7d2067de..fad3a7e534 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -333,7 +333,8 @@ I.moveToNullspace() else I.forceMove(newloc) - I.dropped(src) + if(I.dropped(src) == ITEM_RELOCATED_BY_DROPPED) + return FALSE return TRUE //Outdated but still in use apparently. This should at least be a human proc. diff --git a/code/modules/mob/living/brain/brain_item.dm b/code/modules/mob/living/brain/brain_item.dm index f32d84ae73..90621ecd3f 100644 --- a/code/modules/mob/living/brain/brain_item.dm +++ b/code/modules/mob/living/brain/brain_item.dm @@ -229,7 +229,7 @@ var/adjusted_amount if(amount >= 0 && maximum) var/brainloss = get_brain_damage() - var/new_brainloss = CLAMP(brainloss + amount, 0, maximum) + var/new_brainloss = clamp(brainloss + amount, 0, maximum) if(brainloss > new_brainloss) //brainloss is over the cap already return 0 adjusted_amount = new_brainloss - brainloss @@ -245,23 +245,17 @@ . = adjusted_amount */ -/obj/item/organ/brain/on_life() - if(damage >= BRAIN_DAMAGE_DEATH) //rip - to_chat(owner, "The last spark of life in your brain fizzles out...") - owner.death() - brain_death = TRUE - return - ..() - -/obj/item/organ/brain/on_death() - if(damage <= BRAIN_DAMAGE_DEATH) //rip - brain_death = FALSE - ..() - - /obj/item/organ/brain/applyOrganDamage(var/d, var/maximum = maxHealth) - ..() - + . = ..() + if(!. || !owner) + return + if(damage >= BRAIN_DAMAGE_DEATH) //rip + if(owner.stat != DEAD) + to_chat(owner, "The last spark of life in your brain fizzles out...") + owner.death() + brain_death = TRUE + else + brain_death = FALSE /obj/item/organ/brain/check_damage_thresholds(mob/M) . = ..() diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index bd24a4b4c4..bf9854e0b4 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -12,6 +12,13 @@ bubble_icon = "alien" type_of_meat = /obj/item/reagent_containers/food/snacks/meat/slab/xeno + /// How much brute damage without armor piercing they do against mobs in melee + var/meleeSlashHumanPower = 20 + /// How much power they have for DefaultCombatKnockdown when attacking humans + var/meleeKnockdownPower = 100 + /// How much brute damage they do to simple animals + var/meleeSlashSAPower = 35 + var/obj/item/card/id/wear_id = null // Fix for station bounced radios -- Skie var/has_fine_manipulation = 0 var/move_delay_add = 0 // movement delay to add diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm index 183bf07e8c..072c4e0231 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/drone.dm @@ -4,6 +4,7 @@ maxHealth = 125 health = 125 icon_state = "aliend" + meleeKnockdownPower = 80 /mob/living/carbon/alien/humanoid/drone/Initialize() AddAbility(new/obj/effect/proc_holder/alien/evolve(null)) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index faea8e9bbc..85204e5ab9 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -1,9 +1,12 @@ /mob/living/carbon/alien/humanoid/hunter name = "alien hunter" caste = "h" - maxHealth = 125 - health = 125 + maxHealth = 170 + health = 170 icon_state = "alienh" + meleeKnockdownPower = 75 + meleeSlashHumanPower = 20 + meleeSlashSAPower = 45 var/obj/screen/leap_icon = null /mob/living/carbon/alien/humanoid/hunter/create_internal_organs() @@ -68,6 +71,7 @@ else L.visible_message("[src] pounces on [L]!", "[src] pounces on you!") L.DefaultCombatKnockdown(100) + L.Stagger(4 SECONDS) sleep(2)//Runtime prevention (infinite bump() calls on hulks) step_towards(src,L) diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm index 7c6443cfae..67cf6f7d25 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/sentinel.dm @@ -1,9 +1,10 @@ /mob/living/carbon/alien/humanoid/sentinel name = "alien sentinel" caste = "s" - maxHealth = 150 - health = 150 + maxHealth = 140 + health = 140 icon_state = "aliens" + meleeSlashHumanPower = 15 /mob/living/carbon/alien/humanoid/sentinel/Initialize() AddAbility(new /obj/effect/proc_holder/alien/sneak) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 048b5062ec..c813ce40f0 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -112,7 +112,6 @@ return A return FALSE - /mob/living/carbon/alien/humanoid/check_breath(datum/gas_mixture/breath) if(breath && breath.total_moles() > 0 && !sneaking) playsound(get_turf(src), pick('sound/voice/lowHiss2.ogg', 'sound/voice/lowHiss3.ogg', 'sound/voice/lowHiss4.ogg'), 50, 0, -5) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm index 1d613db07a..5ebf6210d0 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_defense.dm @@ -1,4 +1,3 @@ - /mob/living/carbon/alien/humanoid/grabbedby(mob/living/carbon/user, supress_message = 0) if(user == src && pulling && grab_state >= GRAB_AGGRESSIVE && !pulling.anchored && iscarbon(pulling)) devour_mob(pulling, devour_time = 60) diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index fd6a73ae7b..67c9285377 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -1,5 +1,3 @@ - - /mob/living/carbon/alien/humanoid/proc/adjust_body_temperature(current, loc_temp, boost) var/temperature = current var/difference = abs(current-loc_temp) //get difference diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm index 6141a97c12..1200220ce4 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm @@ -11,6 +11,10 @@ pressure_resistance = 200 //Because big, stompy xenos should not be blown around like paper. butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/slab/xeno = 20, /obj/item/stack/sheet/animalhide/xeno = 3) + meleeKnockdownPower = 125 + meleeSlashHumanPower = 30 + meleeSlashSAPower = 60 + var/alt_inhands_file = 'icons/mob/alienqueen.dmi' /mob/living/carbon/alien/humanoid/royal/can_inject(mob/user, error_msg, target_zone, penetrate_thick = FALSE, bypass_immunity = FALSE) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index fb26a40350..93050a4f9d 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -6,6 +6,7 @@ mob_size = MOB_SIZE_SMALL density = FALSE hud_type = /datum/hud/larva + mouse_opacity = MOUSE_OPACITY_OPAQUE maxHealth = 25 health = 25 diff --git a/code/modules/mob/living/carbon/alien/organs.dm b/code/modules/mob/living/carbon/alien/organs.dm index b57f9653a9..8485fece85 100644 --- a/code/modules/mob/living/carbon/alien/organs.dm +++ b/code/modules/mob/living/carbon/alien/organs.dm @@ -77,6 +77,9 @@ alien_powers = list(/obj/effect/proc_holder/alien/transfer) /obj/item/organ/alien/plasmavessel/on_life() + . = ..() + if(!.) + return //If there are alien weeds on the ground then heal if needed or give some plasma if(locate(/obj/structure/alien/weeds) in owner.loc) if(owner.health >= owner.maxHealth) diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index 5352329f99..0e8764a372 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -23,6 +23,8 @@ /obj/item/organ/body_egg/alien_embryo/on_life() . = ..() + if(!owner) + return switch(stage) if(2, 3) if(prob(2)) diff --git a/code/modules/mob/living/carbon/alien/status_procs.dm b/code/modules/mob/living/carbon/alien/status_procs.dm index 4a63a72686..71d61cab25 100644 --- a/code/modules/mob/living/carbon/alien/status_procs.dm +++ b/code/modules/mob/living/carbon/alien/status_procs.dm @@ -20,5 +20,5 @@ /mob/living/carbon/alien/AdjustStun(amount, updating = 1, ignore_canstun = 0) . = ..() if(!.) - move_delay_add = CLAMP(move_delay_add + round(amount/2), 0, 10) + move_delay_add = clamp(move_delay_add + round(amount/2), 0, 10) */ diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 25f0cb5b89..cef445113b 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -7,6 +7,7 @@ update_body_parts() //to update the carbon's new bodyparts appearance GLOB.carbon_list += src blood_volume = (BLOOD_VOLUME_NORMAL * blood_ratio) + add_movespeed_modifier(/datum/movespeed_modifier/carbon_crawling) /mob/living/carbon/Destroy() //This must be done first, so the mob ghosts correctly before DNA etc is nulled @@ -98,6 +99,8 @@ /mob/living/carbon/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) . = ..() var/hurt = TRUE + if(GetComponent(/datum/component/tackler)) + return if(throwingdatum?.thrower && iscyborg(throwingdatum.thrower)) var/mob/living/silicon/robot/R = throwingdatum.thrower if(!R.emagged) @@ -572,9 +575,9 @@ become_husk("burn") med_hud_set_health() if(stat == SOFT_CRIT) - add_movespeed_modifier(MOVESPEED_ID_CARBON_SOFTCRIT, TRUE, multiplicative_slowdown = SOFTCRIT_ADD_SLOWDOWN) + add_movespeed_modifier(/datum/movespeed_modifier/carbon_softcrit) else - remove_movespeed_modifier(MOVESPEED_ID_CARBON_SOFTCRIT, TRUE) + remove_movespeed_modifier(/datum/movespeed_modifier/carbon_softcrit) /mob/living/carbon/update_stamina() var/stam = getStaminaLoss() diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index 689ab56842..15413f76d4 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -63,3 +63,4 @@ var/damageoverlaytemp = 0 var/drunkenness = 0 //Overall drunkenness - check handle_alcohol() in life.dm for effects + var/tackling = FALSE //Whether or not we are tackling, this will prevent the knock into effects for carbons diff --git a/code/modules/mob/living/carbon/damage_procs.dm b/code/modules/mob/living/carbon/damage_procs.dm index 414f339b28..adca193ce0 100644 --- a/code/modules/mob/living/carbon/damage_procs.dm +++ b/code/modules/mob/living/carbon/damage_procs.dm @@ -38,7 +38,7 @@ adjustCloneLoss(damage_amount, forced = forced) if(STAMINA) if(BP) - if(damage > 0 ? BP.receive_damage(0, 0, damage_amount) : BP.heal_damage(0, 0, abs(damage_amount))) + if(damage > 0 ? BP.receive_damage(0, 0, damage_amount) : BP.heal_damage(0, 0, abs(damage_amount), FALSE, FALSE)) update_damage_overlays() else adjustStaminaLoss(damage_amount, forced = forced) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 94aba6851a..7f5f912ff6 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -768,7 +768,7 @@ return else if(hud_used.healths) - var/health_amount = min(health, maxHealth - CLAMP(getStaminaLoss()-50, 0, 80))//CIT CHANGE - makes staminaloss have less of an impact on the health hud + var/health_amount = min(health, maxHealth - clamp(getStaminaLoss()-50, 0, 80))//CIT CHANGE - makes staminaloss have less of an impact on the health hud if(..(health_amount)) //not dead switch(hal_screwyhud) if(SCREWYHUD_CRIT) @@ -1041,7 +1041,7 @@ return FALSE /mob/living/carbon/human/proc/clear_shove_slowdown() - remove_movespeed_modifier(MOVESPEED_ID_SHOVE) + remove_movespeed_modifier(/datum/movespeed_modifier/shove) var/active_item = get_active_held_item() if(is_type_in_typecache(active_item, GLOB.shove_disarming_types)) visible_message("[src.name] regains their grip on \the [active_item]!", "You regain your grip on \the [active_item]", null, COMBAT_MESSAGE_RANGE) @@ -1050,17 +1050,17 @@ . = ..() if(HAS_TRAIT(src, TRAIT_IGNORESLOWDOWN)) - remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN) - remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING) + remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown) + remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying) return var/stambufferinfluence = (bufferedstam*(100/stambuffer))*0.2 //CIT CHANGE - makes stamina buffer influence movedelay var/health_deficiency = ((100 + stambufferinfluence) - health + (getStaminaLoss()*0.75))//CIT CHANGE - reduces the impact of staminaloss and makes stamina buffer influence it if(health_deficiency >= 40) - add_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN, override = TRUE, multiplicative_slowdown = ((health_deficiency-39) / 75), blacklisted_movetypes = FLOATING|FLYING) - add_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING, override = TRUE, multiplicative_slowdown = ((health_deficiency-39) / 25), movetypes = FLYING, blacklisted_movetypes = FLOATING) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown, TRUE, (health_deficiency-39) / 75) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying, TRUE, (health_deficiency-39) / 25) else - remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN) - remove_movespeed_modifier(MOVESPEED_ID_DAMAGE_SLOWDOWN_FLYING) + remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown) + remove_movespeed_modifier(/datum/movespeed_modifier/damage_slowdown_flying) /mob/living/carbon/human/do_after_coefficent() . = ..() diff --git a/code/modules/mob/living/carbon/human/human_block.dm b/code/modules/mob/living/carbon/human/human_block.dm index b1a5153ce5..8fe0376a08 100644 --- a/code/modules/mob/living/carbon/human/human_block.dm +++ b/code/modules/mob/living/carbon/human/human_block.dm @@ -1,8 +1,8 @@ /mob/living/carbon/human/get_blocking_items() . = ..() if(wear_suit) - . += wear_suit + . |= wear_suit if(w_uniform) - . += w_uniform + . |= w_uniform if(wear_neck) - . += wear_neck + . |= wear_neck diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 324420a7dd..856c57687f 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -155,7 +155,7 @@ if(M.a_intent == INTENT_HARM) if (w_uniform) w_uniform.add_fingerprint(M) - var/damage = prob(90) ? 20 : 0 + var/damage = prob(90) ? M.meleeSlashHumanPower : 0 if(!damage) playsound(loc, 'sound/weapons/slashmiss.ogg', 50, 1, -1) visible_message("[M] has lunged at [src]!", \ @@ -182,10 +182,7 @@ "[M] disarmed [src]!") else playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) - if(!lying) //CITADEL EDIT - DefaultCombatKnockdown(100, TRUE, FALSE, 30, 25) - else - DefaultCombatKnockdown(100) + DefaultCombatKnockdown(M.meleeKnockdownPower) log_combat(M, src, "tackled") visible_message("[M] has tackled down [src]!", \ "[M] has tackled down [src]!") diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index a26bdd99cd..09dfa602e1 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -1,11 +1,13 @@ /mob/living/carbon/human/get_movespeed_modifiers() var/list/considering = ..() - . = considering if(HAS_TRAIT(src, TRAIT_IGNORESLOWDOWN)) - for(var/id in .) - var/list/data = .[id] - if(data[MOVESPEED_DATA_INDEX_FLAGS] & IGNORE_NOSLOW) - .[id] = data + . = list() + for(var/id in considering) + var/datum/movespeed_modifier/M = considering[id] + if(M.flags & IGNORE_NOSLOW || M.multiplicative_slowdown < 0) + .[id] = M + return + return considering /mob/living/carbon/human/movement_delay() . = ..() diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 32e492f5fa..683c3e18fd 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -331,7 +331,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(mutant_bodyparts["meat_type"]) //I can't believe it's come to the meat H.type_of_meat = GLOB.meat_types[H.dna.features["meat_type"]] - C.add_movespeed_modifier(MOVESPEED_ID_SPECIES, TRUE, 100, override=TRUE, multiplicative_slowdown=speedmod, movetypes=(~FLYING)) + C.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/species, TRUE, multiplicative_slowdown = speedmod) SEND_SIGNAL(C, COMSIG_SPECIES_GAIN, src, old_species) @@ -349,7 +349,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) for(var/X in inherent_traits) REMOVE_TRAIT(C, X, SPECIES_TRAIT) - C.remove_movespeed_modifier(MOVESPEED_ID_SPECIES) + C.remove_movespeed_modifier(/datum/movespeed_modifier/species) if(mutant_bodyparts["meat_type"]) C.type_of_meat = GLOB.meat_types[C.dna.features["meat_type"]] @@ -1299,14 +1299,14 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(H.overeatduration < 100) to_chat(H, "You feel fit again!") REMOVE_TRAIT(H, TRAIT_FAT, OBESITY) - H.remove_movespeed_modifier(MOVESPEED_ID_FAT) + H.remove_movespeed_modifier(/datum/movespeed_modifier/obesity) H.update_inv_w_uniform() H.update_inv_wear_suit() else if(H.overeatduration >= 100) to_chat(H, "You suddenly feel blubbery!") ADD_TRAIT(H, TRAIT_FAT, OBESITY) - H.add_movespeed_modifier(MOVESPEED_ID_FAT, multiplicative_slowdown = 1.5) + H.add_movespeed_modifier(/datum/movespeed_modifier/obesity) H.update_inv_w_uniform() H.update_inv_wear_suit() @@ -1362,9 +1362,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) if(!HAS_TRAIT(H, TRAIT_NOHUNGER)) var/hungry = (500 - H.nutrition) / 5 //So overeat would be 100 and default level would be 80 if(hungry >= 70) - H.add_movespeed_modifier(MOVESPEED_ID_HUNGRY, override = TRUE, multiplicative_slowdown = (hungry / 50)) + H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/hunger, multiplicative_slowdown = (hungry / 50)) else - H.remove_movespeed_modifier(MOVESPEED_ID_HUNGRY) + H.remove_movespeed_modifier(/datum/movespeed_modifier/hunger) switch(H.nutrition) if(NUTRITION_LEVEL_FULL to INFINITY) @@ -1615,7 +1615,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) "You hear a slap." ) return FALSE - + else user.do_attack_animation(target, ATTACK_EFFECT_DISARM) @@ -1623,10 +1623,10 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) user.adjustStaminaLossBuffered(1) else user.adjustStaminaLossBuffered(3) - + if(attacker_style && attacker_style.disarm_act(user,target)) return TRUE - + if(target.w_uniform) target.w_uniform.add_fingerprint(user) //var/randomized_zone = ran_zone(user.zone_selected) CIT CHANGE - comments out to prevent compiling errors @@ -1659,7 +1659,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) randn -= 25 //if you are a pugilist, you're slapping that item from them pretty reliably if(HAS_TRAIT(target, TRAIT_PUGILIST)) randn += 25 //meanwhile, pugilists are less likely to get disarmed - + if(randn <= 35)//CIT CHANGE - changes this back to a 35% chance to accomodate for the above being commented out in favor of right-click pushing var/obj/item/I = null if(target.pulling) @@ -1932,8 +1932,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) var/obj/item/target_held_item = target.get_active_held_item() if(!is_type_in_typecache(target_held_item, GLOB.shove_disarming_types)) target_held_item = null - if(!target.has_movespeed_modifier(MOVESPEED_ID_SHOVE)) - target.add_movespeed_modifier(MOVESPEED_ID_SHOVE, multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH) + if(!target.has_movespeed_modifier(/datum/movespeed_modifier/shove)) + target.add_movespeed_modifier(/datum/movespeed_modifier/shove) if(target_held_item) if(!HAS_TRAIT(target_held_item, TRAIT_NODROP)) target.visible_message("[target.name]'s grip on \the [target_held_item] loosens!", @@ -2084,7 +2084,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold") SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "hot", /datum/mood_event/hot) - H.remove_movespeed_modifier(MOVESPEED_ID_COLD) + H.remove_movespeed_modifier(/datum/movespeed_modifier/cold) var/burn_damage var/firemodifier = H.fire_stacks / 50 @@ -2101,8 +2101,8 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) else if(H.bodytemperature < BODYTEMP_COLD_DAMAGE_LIMIT && !HAS_TRAIT(H, TRAIT_RESISTCOLD)) SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot") SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "cold", /datum/mood_event/cold) - //Sorry for the nasty oneline but I don't want to assign a variable on something run pretty frequently - H.add_movespeed_modifier(MOVESPEED_ID_COLD, override = TRUE, multiplicative_slowdown = ((BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR), blacklisted_movetypes = FLOATING) + //Apply cold slowdown + H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/cold, multiplicative_slowdown = ((BODYTEMP_COLD_DAMAGE_LIMIT - H.bodytemperature) / COLD_SLOWDOWN_FACTOR)) switch(H.bodytemperature) if(200 to BODYTEMP_COLD_DAMAGE_LIMIT) H.apply_damage(COLD_DAMAGE_LEVEL_1*coldmod*H.physiology.cold_mod, BURN) @@ -2112,7 +2112,7 @@ GLOBAL_LIST_EMPTY(roundstart_race_names) H.apply_damage(COLD_DAMAGE_LEVEL_3*coldmod*H.physiology.cold_mod, BURN) else - H.remove_movespeed_modifier(MOVESPEED_ID_COLD) + H.remove_movespeed_modifier(/datum/movespeed_modifier/cold) SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "cold") SEND_SIGNAL(H, COMSIG_CLEAR_MOOD_EVENT, "hot") diff --git a/code/modules/mob/living/carbon/human/species_types/dwarves.dm b/code/modules/mob/living/carbon/human/species_types/dwarves.dm index 235dacc70a..57a973bf22 100644 --- a/code/modules/mob/living/carbon/human/species_types/dwarves.dm +++ b/code/modules/mob/living/carbon/human/species_types/dwarves.dm @@ -6,7 +6,7 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) // name = "Dwarf" id = "dwarf" //Also called Homo sapiens pumilionis default_color = "FFFFFF" - species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,NO_UNDERWEAR) + species_traits = list(EYECOLOR,HAIR,FACEHAIR,LIPS,NO_UNDERWEAR,TRAIT_DWARF) inherent_traits = list() limbs_id = "human" use_skintones = USE_SKINTONES_GRAYSCALE_CUSTOM @@ -36,7 +36,6 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) // H.transform = H.transform.Scale(1, 0.8) //We use scale, and yeah. Dwarves can become gnomes with DWARFISM. RegisterSignal(C, COMSIG_MOB_SAY, .proc/handle_speech) //We register handle_speech is being used. - /datum/species/dwarf/on_species_loss(mob/living/carbon/H, datum/species/new_species) . = ..() H.transform = H.transform.Scale(1, 1.25) //And we undo it. @@ -102,12 +101,11 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) // /obj/item/organ/dwarfgland/on_life() //Primary loop to hook into to start delayed loops for other loops.. . = ..() - dwarf_cycle_ticker() + if(owner && owner.stat != DEAD) + dwarf_cycle_ticker() //Handles the delayed tick cycle by just adding on increments per each on_life() tick /obj/item/organ/dwarfgland/proc/dwarf_cycle_ticker() - if(owner.stat == DEAD) - return //We make sure they are not dead, so they don't increment any tickers. dwarf_eth_ticker++ dwarf_filth_ticker++ @@ -170,7 +168,7 @@ GLOBAL_LIST_INIT(dwarf_last, world.file2list("strings/names/dwarf_last.txt")) // for(var/datum/reagent/R in owner.reagents.reagent_list) if(istype(R, /datum/reagent/consumable/ethanol)) var/datum/reagent/consumable/ethanol/E = R - stored_alcohol = CLAMP(stored_alcohol + E.boozepwr / 50, 0, max_alcohol) + stored_alcohol = clamp(stored_alcohol + E.boozepwr / 50, 0, max_alcohol) var/heal_amt = heal_rate stored_alcohol -= alcohol_rate //Subtracts alcohol_Rate from stored alcohol so EX: 250 - 0.25 per each loop that occurs. if(stored_alcohol > 400) //If they are over 400 they start regenerating 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 abc2288e9b..7a5e347060 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -397,7 +397,7 @@ var/new_y = P.starting.y + pick(0, 0, 0, 0, 0, -1, 1, -2, 2) var/turf/target = get_turf(P.starting) // redirect the projectile - P.preparePixelProjectile(locate(CLAMP(target.x + new_x, 1, world.maxx), CLAMP(target.y + new_y, 1, world.maxy), H.z), H) + P.preparePixelProjectile(locate(clamp(target.x + new_x, 1, world.maxx), clamp(target.y + new_y, 1, world.maxy), H.z), H) return BULLET_ACT_FORCE_PIERCE return ..() diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 775f36cfc7..10a29c72c1 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -606,7 +606,7 @@ var/max_D = CONFIG_GET(number/penis_max_inches_prefs) var/new_length = input(owner, "Penis length in inches:\n([min_D]-[max_D])", "Genital Alteration") as num|null if(new_length) - H.dna.features["cock_length"] = CLAMP(round(new_length), min_D, max_D) + H.dna.features["cock_length"] = clamp(round(new_length), min_D, max_D) H.update_genitals() H.apply_overlay() H.give_genital(/obj/item/organ/genital/testicles) diff --git a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm index 9a6bc2659d..46c37a5b03 100644 --- a/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/lizardpeople.dm @@ -91,4 +91,9 @@ if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail_lizard"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines C.dna.features["tail_lizard"] = "Smooth" C.update_body() + if(C.dna.features["legs"] != "digitigrade") + C.dna.features["legs"] = "digitigrade" + for(var/obj/item/bodypart/leggie in C.bodyparts) + if(leggie.body_zone == BODY_ZONE_L_LEG || leggie.body_zone == BODY_ZONE_R_LEG) + leggie.update_limb(FALSE, C) return ..() diff --git a/code/modules/mob/living/carbon/human/species_types/vampire.dm b/code/modules/mob/living/carbon/human/species_types/vampire.dm index f37e718462..f720aa7f8a 100644 --- a/code/modules/mob/living/carbon/human/species_types/vampire.dm +++ b/code/modules/mob/living/carbon/human/species_types/vampire.dm @@ -106,8 +106,8 @@ to_chat(victim, "[H] is draining your blood!") to_chat(H, "You drain some blood!") playsound(H, 'sound/items/drink.ogg', 30, 1, -2) - victim.blood_volume = CLAMP(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) - H.blood_volume = CLAMP(H.blood_volume + drained_blood, 0, BLOOD_VOLUME_MAXIMUM) + victim.blood_volume = clamp(victim.blood_volume - drained_blood, 0, BLOOD_VOLUME_MAXIMUM) + H.blood_volume = clamp(H.blood_volume + drained_blood, 0, BLOOD_VOLUME_MAXIMUM) if(!victim.blood_volume) to_chat(H, "You finish off [victim]'s blood supply!") diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 8097859aac..00a0991e19 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -235,7 +235,7 @@ //TOXINS/PLASMA if(Toxins_partialpressure > safe_tox_max) var/ratio = (breath_gases[/datum/gas/plasma]/safe_tox_max) * 10 - adjustToxLoss(CLAMP(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE)) + adjustToxLoss(clamp(ratio, MIN_TOXIC_GAS_DAMAGE, MAX_TOXIC_GAS_DAMAGE)) throw_alert("too_much_tox", /obj/screen/alert/too_much_tox) else clear_alert("too_much_tox") diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm index d3e5941e4e..6242fa56be 100644 --- a/code/modules/mob/living/carbon/monkey/monkey.dm +++ b/code/modules/mob/living/carbon/monkey/monkey.dm @@ -65,12 +65,11 @@ /mob/living/carbon/monkey/on_reagent_change() . = ..() - remove_movespeed_modifier(MOVESPEED_ID_MONKEY_REAGENT_SPEEDMOD, TRUE) var/amount if(reagents.has_reagent(/datum/reagent/medicine/morphine)) amount = -1 if(amount) - add_movespeed_modifier(MOVESPEED_ID_MONKEY_REAGENT_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = amount) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/monkey_reagent_speedmod, TRUE, amount) /mob/living/carbon/monkey/updatehealth() . = ..() @@ -78,7 +77,7 @@ var/health_deficiency = (100 - health) if(health_deficiency >= 45) slow += (health_deficiency / 25) - add_movespeed_modifier(MOVESPEED_ID_MONKEY_HEALTH_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = slow) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/monkey_health_speedmod, TRUE, slow) /mob/living/carbon/monkey/adjust_bodytemperature(amount) . = ..() @@ -87,7 +86,7 @@ slow += (283.222 - bodytemperature) / 10 * 1.75 if(slow <= 0) return - add_movespeed_modifier(MOVESPEED_ID_MONKEY_TEMPERATURE_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = amount) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/monkey_temperature_speedmod, TRUE, slow) /mob/living/carbon/monkey/Stat() ..() @@ -99,7 +98,6 @@ if(changeling) stat("Chemical Storage", "[changeling.chem_charges]/[changeling.chem_storage]") stat("Absorbed DNA", changeling.absorbedcount) - return /mob/living/carbon/monkey/verb/removeinternal() diff --git a/code/modules/mob/living/carbon/status_procs.dm b/code/modules/mob/living/carbon/status_procs.dm index 6c497bb8d4..a47bb7fb4a 100644 --- a/code/modules/mob/living/carbon/status_procs.dm +++ b/code/modules/mob/living/carbon/status_procs.dm @@ -23,10 +23,10 @@ clear_alert("high") /mob/living/carbon/adjust_disgust(amount) - disgust = CLAMP(disgust+amount, 0, DISGUST_LEVEL_MAXEDOUT) + disgust = clamp(disgust+amount, 0, DISGUST_LEVEL_MAXEDOUT) /mob/living/carbon/set_disgust(amount) - disgust = CLAMP(amount, 0, DISGUST_LEVEL_MAXEDOUT) + disgust = clamp(amount, 0, DISGUST_LEVEL_MAXEDOUT) ////////////////////////////////////////TRAUMAS///////////////////////////////////////// diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm index d5e1fa6fc4..3257b0e3bf 100644 --- a/code/modules/mob/living/damage_procs.dm +++ b/code/modules/mob/living/damage_procs.dm @@ -88,7 +88,7 @@ if(EFFECT_STUN) Stun(effect * hit_percent) if(EFFECT_KNOCKDOWN) - DefaultCombatKnockdown(effect * hit_percent, override_stamdmg = knockdown_stammax ? CLAMP(knockdown_stamoverride, 0, knockdown_stammax-getStaminaLoss()) : knockdown_stamoverride) + DefaultCombatKnockdown(effect * hit_percent, override_stamdmg = knockdown_stammax ? clamp(knockdown_stamoverride, 0, knockdown_stammax-getStaminaLoss()) : knockdown_stamoverride) if(EFFECT_UNCONSCIOUS) Unconscious(effect * hit_percent) if(EFFECT_IRRADIATE) @@ -140,7 +140,7 @@ /mob/living/proc/adjustBruteLoss(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - bruteloss = CLAMP((bruteloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) + bruteloss = clamp((bruteloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() return amount @@ -151,7 +151,7 @@ /mob/living/proc/adjustOxyLoss(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - oxyloss = CLAMP((oxyloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) + oxyloss = clamp((oxyloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() return amount @@ -170,7 +170,7 @@ /mob/living/proc/adjustToxLoss(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - toxloss = CLAMP((toxloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) + toxloss = clamp((toxloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() return amount @@ -189,7 +189,7 @@ /mob/living/proc/adjustFireLoss(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - fireloss = CLAMP((fireloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) + fireloss = clamp((fireloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() return amount @@ -200,7 +200,7 @@ /mob/living/proc/adjustCloneLoss(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - cloneloss = CLAMP((cloneloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) + cloneloss = clamp((cloneloss + (amount * CONFIG_GET(number/damage_multiplier))), 0, maxHealth * 2) if(updating_health) updatehealth() return amount diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 22a0da2cf6..89f8381087 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -68,7 +68,7 @@ var/obj/O = A if(ObjBump(O)) return - if(ismovableatom(A)) + if(ismovable(A)) var/atom/movable/AM = A if(PushAM(AM, move_force)) return @@ -645,7 +645,7 @@ attempt_resist_grab(FALSE) // Return as we should only resist one thing at a time. Give clickdelay if the grab wasn't passive. return old_gs? TRUE : FALSE - + // unbuckling yourself. stops the chain if you try it. if(buckled && last_special <= world.time) log_combat(src, buckled, "resisted buckle") @@ -1030,7 +1030,7 @@ update_fire() /mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person - fire_stacks = CLAMP(fire_stacks + add_fire_stacks, -20, 20) + fire_stacks = clamp(fire_stacks + add_fire_stacks, -20, 20) if(on_fire && fire_stacks <= 0) ExtinguishMob() diff --git a/code/modules/mob/living/living_block.dm b/code/modules/mob/living/living_block.dm index d9e3309e47..d39abb1250 100644 --- a/code/modules/mob/living/living_block.dm +++ b/code/modules/mob/living/living_block.dm @@ -57,7 +57,7 @@ if(real_attack) for(var/obj/item/I in tocheck) // i don't like this too - var/final_block_chance = I.block_chance - (CLAMP((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example + var/final_block_chance = I.block_chance - (clamp((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example var/results = I.run_block(src, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, return_list) . |= results if((results & BLOCK_SUCCESS) && !(results & BLOCK_CONTINUE_CHAIN)) @@ -65,12 +65,13 @@ else for(var/obj/item/I in tocheck) // i don't like this too - var/final_block_chance = I.block_chance - (CLAMP((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example + var/final_block_chance = I.block_chance - (clamp((armour_penetration-I.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example I.check_block(src, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, return_list) /// Gets an unsortedlist of objects to run block checks on. /mob/living/proc/get_blocking_items() . = list() + SEND_SIGNAL(src, COMSIG_LIVING_GET_BLOCKING_ITEMS, .) for(var/obj/item/I in held_items) // this is a bad check but i am not removing it until a better catchall is made if(istype(I, /obj/item/clothing)) @@ -85,11 +86,13 @@ /// Runs block and returns flag for do_run_block to process. /obj/item/proc/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) - SEND_SIGNAL(src, COMSIG_ITEM_RUN_BLOCK, owner, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, block_return) + . = SEND_SIGNAL(src, COMSIG_ITEM_RUN_BLOCK, owner, object, damage, attack_text, attack_type, armour_penetration, attacker, def_zone, final_block_chance, block_return) + if(. & BLOCK_SUCCESS) + return if(prob(final_block_chance)) owner.visible_message("[owner] blocks [attack_text] with [src]!") - return BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL - return BLOCK_NONE + return . | BLOCK_SUCCESS | BLOCK_PHYSICAL_EXTERNAL + return . | BLOCK_NONE /// Returns block information using list/block_return. Used for check_block() on mobs. /obj/item/proc/check_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 7d220739d5..39a94232a3 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -88,9 +88,9 @@ /obj/item/proc/get_volume_by_throwforce_and_or_w_class() if(throwforce && w_class) - return CLAMP((throwforce + w_class) * 5, 30, 100)// Add the item's throwforce to its weight class and multiply by 5, then clamp the value between 30 and 100 + return clamp((throwforce + w_class) * 5, 30, 100)// Add the item's throwforce to its weight class and multiply by 5, then clamp the value between 30 and 100 else if(w_class) - return CLAMP(w_class * 8, 20, 100) // Multiply the item's weight class by 8, then clamp the value between 20 and 100 + return clamp(w_class * 8, 20, 100) // Multiply the item's weight class by 8, then clamp the value between 20 and 100 else return 0 diff --git a/code/modules/mob/living/living_mobility.dm b/code/modules/mob/living/living_mobility.dm index 49d4a20887..32038a6102 100644 --- a/code/modules/mob/living/living_mobility.dm +++ b/code/modules/mob/living/living_mobility.dm @@ -94,11 +94,13 @@ if(should_be_lying) mobility_flags &= ~MOBILITY_STAND + setMovetype(movement_type | CRAWLING) if(!lying) //force them on the ground lying = pick(90, 270) if(has_gravity() && !buckled) playsound(src, "bodyfall", 20, 1) else + setMovetype(movement_type & ~CRAWLING) mobility_flags |= MOBILITY_STAND lying = 0 @@ -161,8 +163,8 @@ if(!has_legs && has_arms < 2) limbless_slowdown += 6 - (has_arms * 3) if(limbless_slowdown) - add_movespeed_modifier(MOVESPEED_ID_LIVING_LIMBLESS, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=limbless_slowdown, blacklisted_movetypes = FLYING|FLOATING) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/limbless, multiplicative_slowdown = limbless_slowdown) else - remove_movespeed_modifier(MOVESPEED_ID_LIVING_LIMBLESS, update=TRUE) + remove_movespeed_modifier(/datum/movespeed_modifier/limbless) return mobility_flags diff --git a/code/modules/mob/living/living_movement.dm b/code/modules/mob/living/living_movement.dm index ec291094fe..ddcf3e6292 100644 --- a/code/modules/mob/living/living_movement.dm +++ b/code/modules/mob/living/living_movement.dm @@ -36,38 +36,26 @@ sprint_stamina_cost = CONFIG_GET(number/movedelay/sprint_stamina_cost) return ..() -/mob/living/movement_delay(ignorewalk = 0) - . = ..() - if(!CHECK_MOBILITY(src, MOBILITY_STAND)) - . += 6 - /// whether or not we can slide under another living mob. defaults to if we're not dense. CanPass should check "overriding circumstances" like buckled mobs/having PASSMOB flag, etc. /mob/living/proc/can_move_under_living(mob/living/other) return !density /mob/living/proc/update_move_intent_slowdown() - var/mod = 0 - if(m_intent == MOVE_INTENT_WALK) - mod = CONFIG_GET(number/movedelay/walk_delay) - else - mod = CONFIG_GET(number/movedelay/run_delay) - if(!isnum(mod)) - mod = 1 - add_movespeed_modifier(MOVESPEED_ID_MOB_WALK_RUN_CONFIG_SPEED, TRUE, 100, override = TRUE, multiplicative_slowdown = mod) + add_movespeed_modifier((m_intent == MOVE_INTENT_WALK)? /datum/movespeed_modifier/config_walk_run/walk : /datum/movespeed_modifier/config_walk_run/run) /mob/living/proc/update_turf_movespeed(turf/open/T) - if(isopenturf(T) && !is_flying()) - add_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = T.slowdown) + if(isopenturf(T)) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/turf_slowdown, multiplicative_slowdown = T.slowdown) else - remove_movespeed_modifier(MOVESPEED_ID_LIVING_TURF_SPEEDMOD) + remove_movespeed_modifier(/datum/movespeed_modifier/turf_slowdown) /mob/living/proc/update_pull_movespeed() if(pulling && isliving(pulling)) var/mob/living/L = pulling if(drag_slowdown && L.lying && !L.buckled && grab_state < GRAB_AGGRESSIVE) - add_movespeed_modifier(MOVESPEED_ID_PRONE_DRAGGING, multiplicative_slowdown = PULL_PRONE_SLOWDOWN) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/bulky_drag, multiplicative_slowdown = PULL_PRONE_SLOWDOWN) return - remove_movespeed_modifier(MOVESPEED_ID_PRONE_DRAGGING) + remove_movespeed_modifier(/datum/movespeed_modifier/bulky_drag) /mob/living/canZMove(dir, turf/target) return can_zTravel(target, dir) && (movement_type & FLYING) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index d178af9fb0..e959144ed5 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -869,7 +869,7 @@ if(istype(A, /obj/machinery/camera)) current = A if(client) - if(ismovableatom(A)) + if(ismovable(A)) if(A != GLOB.ai_camera_room_landmark) end_multicam() client.perspective = EYE_PERSPECTIVE @@ -1016,7 +1016,7 @@ if("Yes.") src.ghostize(FALSE, penalize = TRUE) var/announce_rank = "Artificial Intelligence," - if(GLOB.announcement_systems.len) + if(GLOB.announcement_systems.len) // Sends an announcement the AI has cryoed. var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) announcer.announce("CRYOSTORAGE", src.real_name, announce_rank, list()) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 26fa3b505d..4b1b108b0e 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -154,7 +154,7 @@ /mob/living/silicon/pai/proc/process_hack() if(cable && cable.machine && istype(cable.machine, /obj/machinery/door) && cable.machine == hackdoor && get_dist(src, hackdoor) <= 1) - hackprogress = CLAMP(hackprogress + 4, 0, 100) + hackprogress = clamp(hackprogress + 4, 0, 100) else temp = "Door Jack: Connection to airlock has been lost. Hack aborted." hackprogress = 0 @@ -273,9 +273,9 @@ /mob/living/silicon/pai/Process_Spacemove(movement_dir = 0) . = ..() if(!.) - add_movespeed_modifier(MOVESPEED_ID_PAI_SPACEWALK_SPEEDMOD, TRUE, 100, multiplicative_slowdown = 2) + add_movespeed_modifier(/datum/movespeed_modifier/pai_spacewalk) return TRUE - remove_movespeed_modifier(MOVESPEED_ID_PAI_SPACEWALK_SPEEDMOD, TRUE) + remove_movespeed_modifier(/datum/movespeed_modifier/pai_spacewalk) return TRUE /mob/living/silicon/pai/examine(mob/user) @@ -301,7 +301,7 @@ update_stat() /mob/living/silicon/pai/process() - emitterhealth = CLAMP((emitterhealth + emitterregen), -50, emittermaxhealth) + emitterhealth = clamp((emitterhealth + emitterregen), -50, emittermaxhealth) /obj/item/paicard/attackby(obj/item/W, mob/user, params) ..() diff --git a/code/modules/mob/living/silicon/pai/pai_defense.dm b/code/modules/mob/living/silicon/pai/pai_defense.dm index 0477492c0a..ba162ecf2c 100644 --- a/code/modules/mob/living/silicon/pai/pai_defense.dm +++ b/code/modules/mob/living/silicon/pai/pai_defense.dm @@ -69,7 +69,7 @@ return FALSE //No we're not flammable /mob/living/silicon/pai/proc/take_holo_damage(amount) - emitterhealth = CLAMP((emitterhealth - amount), -50, emittermaxhealth) + emitterhealth = clamp((emitterhealth - amount), -50, emittermaxhealth) if(emitterhealth < 0) fold_in(force = TRUE) if(amount > 0) diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index cf67517c52..e04943a8c5 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -21,7 +21,7 @@ if(cell && cell.charge) if(cell.charge <= 100) uneq_all() - var/amt = CLAMP((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell. + var/amt = clamp((lamp_intensity - 2) * 2,1,cell.charge) //Always try to use at least one charge per tick, but allow it to completely drain the cell. cell.use(amt) //Usage table: 1/tick if off/lowest setting, 4 = 4/tick, 6 = 8/tick, 8 = 12/tick, 10 = 16/tick else uneq_all() diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 4ef5993d2d..b389e386d4 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -237,7 +237,7 @@ return if(!CONFIG_GET(flag/disable_secborg) && GLOB.security_level < CONFIG_GET(number/minimum_secborg_alert)) - to_chat(src, "NOTICE: Due to local station regulations, the security cyborg module and its variants are only available during [num2seclevel(CONFIG_GET(number/minimum_secborg_alert))] alert and greater.") + to_chat(src, "NOTICE: Due to local station regulations, the security cyborg module and its variants are only available during [NUM2SECLEVEL(CONFIG_GET(number/minimum_secborg_alert))] alert and greater.") var/list/modulelist = list("Standard" = /obj/item/robot_module/standard, \ "Engineering" = /obj/item/robot_module/engineering, \ diff --git a/code/modules/mob/living/silicon/silicon_defense.dm b/code/modules/mob/living/silicon/silicon_defense.dm index 9b3db8af62..dced5ae869 100644 --- a/code/modules/mob/living/silicon/silicon_defense.dm +++ b/code/modules/mob/living/silicon/silicon_defense.dm @@ -1,3 +1,5 @@ +/mob/living/silicon/KnockToFloor(disarm_items = FALSE, silent = TRUE, updating = TRUE) + return /mob/living/silicon/grippedby(mob/living/user, instant = FALSE) return //can't upgrade a simple pull into a more aggressive grab. diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index f4feab8824..fe18d48718 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -61,11 +61,10 @@ "[M] [response_disarm] [name]!", null, COMBAT_MESSAGE_RANGE) log_combat(M, src, "disarmed") else - var/damage = rand(15, 30) visible_message("[M] has slashed at [src]!", \ "[M] has slashed at [src]!", null, COMBAT_MESSAGE_RANGE) playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1) - attack_threshold_check(damage) + attack_threshold_check(M.meleeSlashSAPower) log_combat(M, src, "attacked") /mob/living/simple_animal/attack_larva(mob/living/carbon/alien/larva/L) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index 0e48723f37..adb49938e1 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -19,6 +19,11 @@ path_image_color = "#993299" weather_immunities = list("lava","ash") + var/clean_time = 50 //How long do we take to clean? + var/broom = FALSE //Do we have an speed buff from a broom? + var/adv_mop = FALSE //Do we have a cleaning buff from a better mop? + + var/blood = 1 var/trash = 0 var/pests = 0 @@ -75,6 +80,26 @@ to_chat(user, "Please close the access panel before locking it.") else to_chat(user, "\The [src] doesn't seem to respect your authority.") + + if(istype(W, /obj/item/mop/advanced)) + if(bot_core.allowed(user) && open && adv_mop == TRUE) + to_chat(user, "You replace \the [src] old mop with a new better one!") + adv_mop = TRUE + clean_time = 20 //2.5 the speed! + window_name = "Automatic Station Cleaner v2.1 BETA" //New! + qdel(W) + else + to_chat(user, "\the [src] already has this mop!") + + if(istype(W, /obj/item/twohanded/broom)) + if(bot_core.allowed(user) && open && broom == TRUE) + to_chat(user, "You add to \the [src] a broom speeding it up!") + broom = TRUE + base_speed = 1 //2x faster! + qdel(W) + else + to_chat(user, "\the [src] already has a broom!") + else return ..() @@ -221,7 +246,7 @@ icon_state = "cleanbot-c" visible_message("[src] begins to clean up [A].") mode = BOT_CLEANING - spawn(50) + spawn(clean_time) if(mode == BOT_CLEANING) if(A && isturf(A.loc)) var/atom/movable/AM = A diff --git a/code/modules/mob/living/simple_animal/bot/medbot.dm b/code/modules/mob/living/simple_animal/bot/medbot.dm index ab7c632214..e4e81bb5db 100644 --- a/code/modules/mob/living/simple_animal/bot/medbot.dm +++ b/code/modules/mob/living/simple_animal/bot/medbot.dm @@ -264,6 +264,9 @@ if((last_newpatient_speak + 300) < world.time) //Don't spam these messages! var/list/messagevoice = list("Hey, [H.name]! Hold on, I'm coming." = 'sound/voice/medbot/coming.ogg',"Wait [H.name]! I want to help!" = 'sound/voice/medbot/help.ogg',"[H.name], you appear to be injured!" = 'sound/voice/medbot/injured.ogg') var/message = pick(messagevoice) + if(prob(1) && ISINRANGE_EX(H.getFireLoss(), 0, 20)) + message = "Notices your minor burns*OwO what's this?" + messagevoice[message] = 'sound/voice/medbot/owo.ogg' speak(message) playsound(loc, messagevoice[message], 50, 0) last_newpatient_speak = world.time diff --git a/code/modules/mob/living/simple_animal/corpse.dm b/code/modules/mob/living/simple_animal/corpse.dm index 2e0e9dadb4..585bf58d95 100644 --- a/code/modules/mob/living/simple_animal/corpse.dm +++ b/code/modules/mob/living/simple_animal/corpse.dm @@ -20,7 +20,7 @@ uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/armor/vest shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas head = /obj/item/clothing/head/helmet/swat @@ -39,7 +39,7 @@ uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/space/hardsuit/syndi shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas/syndicate back = /obj/item/tank/jetpack/oxygen @@ -59,7 +59,7 @@ uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/space/hardsuit/syndi/elite shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas/syndicate back = /obj/item/tank/jetpack/oxygen/harness @@ -130,7 +130,7 @@ uniform = /obj/item/clothing/under/syndicate/camo suit = /obj/item/clothing/suit/armor/bulletproof shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat ears = /obj/item/radio/headset head = /obj/item/clothing/head/helmet/alt mask = /obj/item/clothing/mask/balaclava @@ -177,7 +177,7 @@ uniform = /obj/item/clothing/under/rank/security/officer suit = /obj/item/clothing/suit/armor/vest shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat ears = /obj/item/radio/headset mask = /obj/item/clothing/mask/gas/sechailer/swat head = /obj/item/clothing/head/helmet/swat/nanotrasen diff --git a/code/modules/mob/living/simple_animal/damage_procs.dm b/code/modules/mob/living/simple_animal/damage_procs.dm index 0cc097dc08..90fdeb0a62 100644 --- a/code/modules/mob/living/simple_animal/damage_procs.dm +++ b/code/modules/mob/living/simple_animal/damage_procs.dm @@ -2,7 +2,7 @@ /mob/living/simple_animal/proc/adjustHealth(amount, updating_health = TRUE, forced = FALSE) if(!forced && (status_flags & GODMODE)) return FALSE - bruteloss = round(CLAMP(bruteloss + amount, 0, maxHealth),DAMAGE_PRECISION) + bruteloss = round(clamp(bruteloss + amount, 0, maxHealth),DAMAGE_PRECISION) if(updating_health) updatehealth() return amount diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm index 9e1ae48bdd..cce5edc513 100644 --- a/code/modules/mob/living/simple_animal/friendly/crab.dm +++ b/code/modules/mob/living/simple_animal/friendly/crab.dm @@ -11,7 +11,7 @@ blood_volume = 350 speak_chance = 1 turns_per_move = 5 - butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/rawcrab = 1) + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat/rawcrab = 4) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "stomps" diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm index 3b9700bb58..2045e194d2 100644 --- a/code/modules/mob/living/simple_animal/hostile/alien.dm +++ b/code/modules/mob/living/simple_animal/hostile/alien.dm @@ -175,7 +175,7 @@ AddElement(/datum/element/cleaning) /mob/living/simple_animal/hostile/alien/maid/AttackingTarget() - if(ismovableatom(target)) + if(ismovable(target)) if(istype(target, /obj/effect/decal/cleanable)) visible_message("[src] cleans up \the [target].") qdel(target) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 9c89ff4a4f..ced56f0705 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -7,7 +7,7 @@ icon_living = "carp" icon_dead = "carp_dead" icon_gib = "carp_gib" - threat = 0.2 + threat = 0.1 mob_biotypes = MOB_ORGANIC|MOB_BEAST speak_chance = 0 turns_per_move = 5 diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index 439bedf3cc..f19aa0a2a7 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -186,10 +186,10 @@ . = ..() if(slowed_by_webs) if(!(locate(/obj/structure/spider/stickyweb) in loc)) - remove_movespeed_modifier(MOVESPEED_ID_TARANTULA_WEB) + remove_movespeed_modifier(/datum/movespeed_modifier/tarantula_web) slowed_by_webs = FALSE else if(locate(/obj/structure/spider/stickyweb) in loc) - add_movespeed_modifier(MOVESPEED_ID_TARANTULA_WEB, priority=100, multiplicative_slowdown=3) + add_movespeed_modifier(/datum/movespeed_modifier/tarantula_web) slowed_by_webs = TRUE //midwives are the queen of the spiders, can send messages to all them and web faster. That rare round where you get a queen spider and turn your 'for honor' players into 'r6siege' players will be a fun one. diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 5e75088f53..d2680fbf61 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -65,10 +65,10 @@ Difficulty: Hard /mob/living/simple_animal/hostile/megafauna/bubblegum/Life() ..() - move_to_delay = CLAMP(round((health/maxHealth) * 10), 3, 10) + move_to_delay = clamp(round((health/maxHealth) * 10), 3, 10) /mob/living/simple_animal/hostile/megafauna/bubblegum/OpenFire() - anger_modifier = CLAMP(((maxHealth - health)/50),0,20) + anger_modifier = clamp(((maxHealth - health)/50),0,20) if(charging) return ranged_cooldown = world.time + ranged_cooldown_time diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 83d27e7ea6..73fb9d4e48 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -56,7 +56,7 @@ Difficulty: Very Hard L.dust() /mob/living/simple_animal/hostile/megafauna/colossus/OpenFire() - anger_modifier = CLAMP(((maxHealth - health)/50),0,20) + anger_modifier = clamp(((maxHealth - health)/50),0,20) ranged_cooldown = world.time + 120 if(enrage(target)) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 4644992ad0..159f8a7f5c 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -105,7 +105,7 @@ Difficulty: Medium /mob/living/simple_animal/hostile/megafauna/dragon/OpenFire() if(swooping) return - anger_modifier = CLAMP(((maxHealth - health)/50),0,20) + anger_modifier = clamp(((maxHealth - health)/50),0,20) ranged_cooldown = world.time + ranged_cooldown_time if(prob(15 + anger_modifier) && !client) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index a9d42373a2..477c2ce3aa 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -191,7 +191,7 @@ Difficulty: Normal /mob/living/simple_animal/hostile/megafauna/hierophant/proc/calculate_rage() //how angry we are overall did_reset = FALSE //oh hey we're doing SOMETHING, clearly we might need to heal if we recall - anger_modifier = CLAMP(((maxHealth - health) / 42),0,50) + anger_modifier = clamp(((maxHealth - health) / 42),0,50) burst_range = initial(burst_range) + round(anger_modifier * 0.08) beam_range = initial(beam_range) + round(anger_modifier * 0.12) diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm index 89d9919981..8487564c98 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/hivelord.dm @@ -200,7 +200,7 @@ /mob/living/simple_animal/hostile/asteroid/hivelordbrood/legion/proc/infest(mob/living/carbon/human/H) visible_message("[name] burrows into the flesh of [H]!") var/mob/living/simple_animal/hostile/asteroid/hivelord/legion/L - if(H.dna.check_mutation(DWARFISM)) //dwarf legions aren't just fluff! + if(HAS_TRAIT(H, TRAIT_DWARF)) //dwarf legions aren't just fluff! L = new /mob/living/simple_animal/hostile/asteroid/hivelord/legion/dwarf(H.loc) else L = new(H.loc) diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index 13a4d1793e..5111b0b180 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -1,5 +1,13 @@ - - +/** + * Kudzu Flower Bud + * + * A flower created by flowering kudzu which spawns a venus human trap after a certain amount of time has passed. + * + * A flower created by kudzu with the flowering mutation. Spawns a venus human trap after 2 minutes under normal circumstances. + * Also spawns 4 vines going out in diagonal directions from the bud. Any living creature not aligned with plants is damaged by these vines. + * Once it grows a venus human trap, the bud itself will destroy itself. + * + */ /obj/structure/alien/resin/flower_bud_enemy //inheriting basic attack/damage stuff from alien structures name = "flower bud" desc = "A large pulsating plant..." @@ -9,9 +17,9 @@ opacity = 0 canSmoothWith = list() smooth = SMOOTH_FALSE + /// The amount of time it takes to create a venus human trap, in deciseconds var/growth_time = 1200 - /obj/structure/alien/resin/flower_bud_enemy/Initialize() . = ..() var/list/anchors = list() @@ -25,36 +33,49 @@ B.sleep_time = 10 //these shouldn't move, so let's slow down updates to 1 second (any slower and the deletion of the vines would be too slow) addtimer(CALLBACK(src, .proc/bear_fruit), growth_time) +/** + * Spawns a venus human trap, then qdels itself. + * + * Displays a message, spawns a human venus trap, then qdels itself. + */ /obj/structure/alien/resin/flower_bud_enemy/proc/bear_fruit() - visible_message("the plant has borne fruit!") + visible_message("The plant has borne fruit!") new /mob/living/simple_animal/hostile/venus_human_trap(get_turf(src)) qdel(src) - /obj/effect/ebeam/vine name = "thick vine" mouse_opacity = MOUSE_OPACITY_ICON desc = "A thick vine, painful to the touch." - /obj/effect/ebeam/vine/Crossed(atom/movable/AM) + . = ..() if(isliving(AM)) var/mob/living/L = AM - if(!("vines" in L.faction)) + if(!isvineimmune(L)) L.adjustBruteLoss(5) to_chat(L, "You cut yourself on the thorny vines.") - - +/** + * Venus Human Trap + * + * The result of a kudzu flower bud, these enemies use vines to drag prey close to them for attack. + * + * A carnivorious plant which uses vines to catch and ensnare prey. Spawns from kudzu flower buds. + * Each one has a maximum of four vines, which can be attached to a variety of things. Carbons are stunned when a vine is attached to them, and movable entities are pulled closer over time. + * Attempting to attach a vine to something with a vine already attached to it will pull all movable targets closer on command. + * Once the prey is in melee range, melee attacks from the venus human trap heals itself for 10% of its max health, assuming the target is alive. + * Akin to certain spiders, venus human traps can also be possessed and controlled by ghosts. + * + */ /mob/living/simple_animal/hostile/venus_human_trap name = "venus human trap" desc = "Now you know how the fly feels." icon_state = "venus_human_trap" - threat = 1 layer = SPACEVINE_MOB_LAYER health = 50 maxHealth = 50 - ranged = 1 + ranged = TRUE harm_intent_damage = 5 obj_damage = 60 melee_damage_lower = 25 @@ -63,65 +84,110 @@ attack_sound = 'sound/weapons/bladeslice.ogg' atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) unsuitable_atmos_damage = 0 + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE faction = list("hostile","vines","plants") - var/list/grasping = list() - var/max_grasps = 4 - var/grasp_chance = 20 - var/grasp_pull_chance = 85 - var/grasp_range = 4 - del_on_death = 1 + initial_language_holder = /datum/language_holder/venus + del_on_death = TRUE + /// A list of all the plant's vines + var/list/vines = list() + /// The maximum amount of vines a plant can have at one time + var/max_vines = 4 + /// How far away a plant can attach a vine to something + var/vine_grab_distance = 5 + /// Whether or not this plant is ghost possessable + var/playable_plant = FALSE //Normal plants can **not** have players. -/mob/living/simple_animal/hostile/venus_human_trap/Destroy() - for(var/L in grasping) - var/datum/beam/B = grasping[L] - if(B) - qdel(B) - grasping = null - return ..() +/mob/living/simple_animal/hostile/venus_human_trap/ghost_playable + playable_plant = TRUE //For admins that want to buss some harmless plants -/mob/living/simple_animal/hostile/venus_human_trap/handle_automated_action() - if(..()) - for(var/mob/living/L in grasping) - if(L.stat == DEAD) - var/datum/beam/B = grasping[L] - if(B) - B.End() - grasping -= L - - //Can attack+pull multiple times per cycle - if(L.Adjacent(src)) - L.attack_animal(src) - else - if(prob(grasp_pull_chance)) - setDir(get_dir(src,L) )//staaaare - step(L,get_dir(L,src)) //reel them in - L.DefaultCombatKnockdown(60) //you can't get away now~ - - if(grasping.len < max_grasps) - grasping: - for(var/mob/living/L in view(grasp_range, src)) - if(L == src || faction_check_mob(L) || (L in grasping) || L == target) - continue - for(var/t in getline(src,L)) - for(var/a in t) - var/atom/A = a - if(A.density && A != L) - continue grasping - if(prob(grasp_chance)) - to_chat(L, "\The [src] has you entangled!") - grasping[L] = Beam(L, "vine", time=INFINITY, maxdistance=5, beam_type=/obj/effect/ebeam/vine) - - break //only take 1 new victim per cycle +/mob/living/simple_animal/hostile/venus_human_trap/Life() + . = ..() + pull_vines() +/mob/living/simple_animal/hostile/venus_human_trap/AttackingTarget() + . = ..() + if(isliving(target)) + var/mob/living/L = target + if(L.stat != DEAD) + adjustHealth(-maxHealth * 0.1) /mob/living/simple_animal/hostile/venus_human_trap/OpenFire(atom/the_target) - var/dist = get_dist(src,the_target) - Beam(the_target, "vine", time=dist*2, maxdistance=dist+2, beam_type=/obj/effect/ebeam/vine) - the_target.attack_animal(src) + for(var/datum/beam/B in vines) + if(B.target == the_target) + pull_vines() + ranged_cooldown = world.time + (ranged_cooldown_time * 0.5) + return + if(get_dist(src,the_target) > vine_grab_distance || vines.len == max_vines) + return + for(var/turf/T in getline(src,target)) + if (T.density) + return + for(var/obj/O in T) + if(O.density) + return + var/datum/beam/newVine = Beam(the_target, "vine", time=INFINITY, maxdistance = vine_grab_distance, beam_type=/obj/effect/ebeam/vine) + RegisterSignal(newVine, COMSIG_PARENT_QDELETING, .proc/remove_vine, newVine) + vines += newVine + if(isliving(the_target)) + var/mob/living/L = the_target + L.Paralyze(20) + ranged_cooldown = world.time + ranged_cooldown_time -/mob/living/simple_animal/hostile/venus_human_trap/CanAttack(atom/the_target) +/mob/living/simple_animal/hostile/venus_human_trap/Login() + . = ..() + to_chat(src, "You a venus human trap! Protect the kudzu at all costs, and feast on those who oppose you!") + +/mob/living/simple_animal/hostile/venus_human_trap/attack_ghost(mob/user) . = ..() if(.) - if(the_target in grasping) - return 0 + return + humanize_plant(user) + +/** + * Sets a ghost to control the plant if the plant is eligible + * + * Asks the interacting ghost if they would like to control the plant. + * If they answer yes, and another ghost hasn't taken control, sets the ghost to control the plant. + * Arguments: + * * mob/user - The ghost to possibly control the plant + */ + +/mob/living/simple_animal/hostile/venus_human_trap/proc/humanize_plant(mob/user) + if(key || !playable_plant || stat) + return + var/plant_ask = alert("Become a venus human trap?", "Are you reverse vegan?", "Yes", "No") + if(plant_ask == "No" || QDELETED(src)) + return + if(key) + to_chat(user, "Someone else already took this plant!") + return + key = user.key + log_game("[key_name(src)] took control of [name].") + +/** + * Manages how the vines should affect the things they're attached to. + * + * Pulls all movable targets of the vines closer to the plant + * If the target is on the same tile as the plant, destroy the vine + * Removes any QDELETED vines from the vines list. + */ +/mob/living/simple_animal/hostile/venus_human_trap/proc/pull_vines() + for(var/datum/beam/B in vines) + if(istype(B.target, /atom/movable)) + var/atom/movable/AM = B.target + if(!AM.anchored) + step(AM,get_dir(AM,src)) + if(get_dist(src,B.target) == 0) + B.End() + +/** + * Removes a vine from the list. + * + * Removes the vine from our list. + * Called specifically when the vine is about to be destroyed, so we don't have any null references. + * Arguments: + * * datum/beam/vine - The vine to be removed from the list. + */ +mob/living/simple_animal/hostile/venus_human_trap/proc/remove_vine(datum/beam/vine, force) + vines -= vine diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 3feed2129b..def6327461 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -128,7 +128,7 @@ /mob/living/simple_animal/updatehealth() ..() - health = CLAMP(health, 0, maxHealth) + health = clamp(health, 0, maxHealth) /mob/living/simple_animal/update_stat() if(status_flags & GODMODE) @@ -292,8 +292,8 @@ /mob/living/simple_animal/proc/update_simplemob_varspeed() if(speed == 0) - remove_movespeed_modifier(MOVESPEED_ID_SIMPLEMOB_VARSPEED, TRUE) - add_movespeed_modifier(MOVESPEED_ID_SIMPLEMOB_VARSPEED, TRUE, 100, multiplicative_slowdown = speed, override = TRUE) + remove_movespeed_modifier(/datum/movespeed_modifier/simplemob_varspeed) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/simplemob_varspeed, multiplicative_slowdown = speed) /mob/living/simple_animal/Stat() ..() diff --git a/code/modules/mob/living/simple_animal/slime/powers.dm b/code/modules/mob/living/simple_animal/slime/powers.dm index 4f8e271d6f..d5da6d76fc 100644 --- a/code/modules/mob/living/simple_animal/slime/powers.dm +++ b/code/modules/mob/living/simple_animal/slime/powers.dm @@ -190,7 +190,7 @@ step_away(M,src) M.Friends = Friends.Copy() babies += M - M.mutation_chance = CLAMP(mutation_chance+(rand(5,-5)),0,100) + M.mutation_chance = clamp(mutation_chance+(rand(5,-5)),0,100) SSblackbox.record_feedback("tally", "slime_babies_born", 1, M.colour) var/mob/living/simple_animal/slime/new_slime = pick(babies) diff --git a/code/modules/mob/living/simple_animal/slime/slime.dm b/code/modules/mob/living/simple_animal/slime/slime.dm index 8594d53bd1..dd454c4243 100644 --- a/code/modules/mob/living/simple_animal/slime/slime.dm +++ b/code/modules/mob/living/simple_animal/slime/slime.dm @@ -147,25 +147,25 @@ /mob/living/simple_animal/slime/on_reagent_change() . = ..() - remove_movespeed_modifier(MOVESPEED_ID_SLIME_REAGENTMOD, TRUE) + remove_movespeed_modifier(/datum/movespeed_modifier/slime_reagentmod) var/amount = 0 if(reagents.has_reagent(/datum/reagent/medicine/morphine)) // morphine slows slimes down amount = 2 if(reagents.has_reagent(/datum/reagent/consumable/frostoil)) // Frostoil also makes them move VEEERRYYYYY slow amount = 5 if(amount) - add_movespeed_modifier(MOVESPEED_ID_SLIME_REAGENTMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = amount) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_reagentmod, multiplicative_slowdown = amount) /mob/living/simple_animal/slime/updatehealth() . = ..() - remove_movespeed_modifier(MOVESPEED_ID_SLIME_HEALTHMOD, FALSE) + remove_movespeed_modifier(/datum/movespeed_modifier/slime_healthmod) var/health_deficiency = (100 - health) var/mod = 0 if(health_deficiency >= 45) mod += (health_deficiency / 25) if(health <= 0) mod += 2 - add_movespeed_modifier(MOVESPEED_ID_SLIME_HEALTHMOD, TRUE, 100, multiplicative_slowdown = mod) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_healthmod, multiplicative_slowdown = mod) /mob/living/simple_animal/slime/adjust_bodytemperature() . = ..() @@ -173,9 +173,8 @@ if(bodytemperature >= 330.23) // 135 F or 57.08 C mod = -1 // slimes become supercharged at high temperatures else if(bodytemperature < 183.222) - mod = (283.222 - bodytemperature) / 10 * 1.75 - if(mod) - add_movespeed_modifier(MOVESPEED_ID_SLIME_TEMPMOD, TRUE, 100, override = TRUE, multiplicative_slowdown = mod) + mod = min(15, (283.222 - bodytemperature) / 10 * 1.75) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/slime_tempmod, multiplicative_slowdown = mod) /mob/living/simple_animal/slime/ObjBump(obj/O) if(!client && powerlevel > 0) diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index 1375d88948..0d41347179 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -622,10 +622,40 @@ tod = STATION_TIME_TIMESTAMP("hh:mm:ss", world.time) update_stat() +///Unignores all slowdowns that lack the IGNORE_NOSLOW flag. /mob/living/proc/unignore_slowdown(source) REMOVE_TRAIT(src, TRAIT_IGNORESLOWDOWN, source) - update_movespeed(FALSE) + update_movespeed() +///Ignores all slowdowns that lack the IGNORE_NOSLOW flag. /mob/living/proc/ignore_slowdown(source) ADD_TRAIT(src, TRAIT_IGNORESLOWDOWN, source) - update_movespeed(FALSE) + update_movespeed() + +///Ignores specific slowdowns. Accepts a list of slowdowns. +/mob/living/proc/add_movespeed_mod_immunities(source, slowdown_type, update = TRUE) + if(islist(slowdown_type)) + for(var/listed_type in slowdown_type) + if(ispath(listed_type)) + listed_type = "[listed_type]" //Path2String + LAZYADDASSOC(movespeed_mod_immunities, listed_type, source) + else + if(ispath(slowdown_type)) + slowdown_type = "[slowdown_type]" //Path2String + LAZYADDASSOC(movespeed_mod_immunities, slowdown_type, source) + if(update) + update_movespeed() + +///Unignores specific slowdowns. Accepts a list of slowdowns. +/mob/living/proc/remove_movespeed_mod_immunities(source, slowdown_type, update = TRUE) + if(islist(slowdown_type)) + for(var/listed_type in slowdown_type) + if(ispath(listed_type)) + listed_type = "[listed_type]" //Path2String + LAZYREMOVEASSOC(movespeed_mod_immunities, listed_type, source) + else + if(ispath(slowdown_type)) + slowdown_type = "[slowdown_type]" //Path2String + LAZYREMOVEASSOC(movespeed_mod_immunities, slowdown_type, source) + if(update) + update_movespeed() diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index fd786c8631..b5dc25e4dc 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -284,7 +284,7 @@ mob/visible_message(message, self_message, blind_message, vision_distance = DEFA /mob/proc/reset_perspective(atom/A) if(client) if(A) - if(ismovableatom(A)) + if(ismovable(A)) //Set the the thing unless it's us if(A != src) client.perspective = EYE_PERSPECTIVE @@ -1033,17 +1033,22 @@ GLOBAL_VAR_INIT(exploit_warn_spam_prevention, 0) /// Updates the grab state of the mob and updates movespeed /mob/setGrabState(newstate) . = ..() - if(grab_state == GRAB_PASSIVE) - remove_movespeed_modifier(MOVESPEED_ID_MOB_GRAB_STATE, update=TRUE) - else - add_movespeed_modifier(MOVESPEED_ID_MOB_GRAB_STATE, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=grab_state*3, blacklisted_movetypes=FLOATING) + switch(grab_state) + if(GRAB_PASSIVE) + remove_movespeed_modifier(MOVESPEED_ID_MOB_GRAB_STATE) + if(GRAB_AGGRESSIVE) + add_movespeed_modifier(/datum/movespeed_modifier/grab_slowdown/aggressive) + if(GRAB_NECK) + add_movespeed_modifier(/datum/movespeed_modifier/grab_slowdown/neck) + if(GRAB_KILL) + add_movespeed_modifier(/datum/movespeed_modifier/grab_slowdown/kill) /mob/proc/update_equipment_speed_mods() var/speedies = equipped_speed_mods() if(!speedies) - remove_movespeed_modifier(MOVESPEED_ID_MOB_EQUIPMENT, update=TRUE) + remove_movespeed_modifier(/datum/movespeed_modifier/equipment_speedmod, update=TRUE) else - add_movespeed_modifier(MOVESPEED_ID_MOB_EQUIPMENT, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=speedies, blacklisted_movetypes=FLOATING) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/equipment_speedmod, multiplicative_slowdown = speedies) /// Gets the combined speed modification of all worn items /// Except base mob type doesnt really wear items diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm index bf9dad1bc7..825f015ef4 100644 --- a/code/modules/mob/mob_defines.dm +++ b/code/modules/mob/mob_defines.dm @@ -10,6 +10,8 @@ throwforce = 10 blocks_emissive = EMISSIVE_BLOCK_GENERIC + vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of mob in openspace. + var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE var/datum/mind/mind var/list/datum/action/actions = list() @@ -42,8 +44,11 @@ var/lying_prev = 0 var/is_shifted = FALSE - //MOVEMENT SPEED + /// List of movement speed modifiers applying to this mob var/list/movespeed_modification //Lazy list, see mob_movespeed.dm + /// List of movement speed modifiers ignored by this mob. List -> List (id) -> List (sources) + var/list/movespeed_mod_immunities //Lazy list, see mob_movespeed.dm + /// The calculated mob speed slowdown based on the modifiers list var/cached_multiplicative_slowdown ///////////////// diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index ffc0970bdf..fdc60b30cb 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -80,12 +80,12 @@ var/oldloc = mob.loc if(L.confused) - var/newdir = 0 - if(L.confused > 40) + var/newdir = NONE + if((L.confused > 50) && prob(min(L.confused * 0.5, 50))) newdir = pick(GLOB.alldirs) - else if(prob(L.confused * 1.5)) + else if(prob(L.confused)) newdir = angle2dir(dir2angle(direction) + pick(90, -90)) - else if(prob(L.confused * 3)) + else if(prob(L.confused * 2)) newdir = angle2dir(dir2angle(direction) + pick(45, -45)) if(newdir) direction = newdir @@ -251,9 +251,9 @@ /mob/proc/update_gravity(has_gravity, override=FALSE) var/speed_change = max(0, has_gravity - STANDARD_GRAVITY) if(!speed_change) - remove_movespeed_modifier(MOVESPEED_ID_MOB_GRAVITY, update=TRUE) + remove_movespeed_modifier(/datum/movespeed_modifier/gravity) else - add_movespeed_modifier(MOVESPEED_ID_MOB_GRAVITY, update=TRUE, priority=100, override=TRUE, multiplicative_slowdown=speed_change, blacklisted_movetypes=FLOATING) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/gravity, multiplicative_slowdown = speed_change) //bodypart selection - Cyberboss //8 toggles through head - eyes - mouth diff --git a/code/modules/mob/mob_movespeed.dm b/code/modules/mob/mob_movespeed.dm deleted file mode 100644 index a0be8ff7cb..0000000000 --- a/code/modules/mob/mob_movespeed.dm +++ /dev/null @@ -1,126 +0,0 @@ - -/*Current movespeed modification list format: list(id = list( - priority, - flags, - legacy slowdown/speedup amount, - movetype_flags, - blacklisted_movetypes, - conflict - )) -*/ - -//ANY ADD/REMOVE DONE IN UPDATE_MOVESPEED MUST HAVE THE UPDATE ARGUMENT SET AS FALSE! -/mob/proc/add_movespeed_modifier(id, update=TRUE, priority=0, flags=NONE, override=FALSE, multiplicative_slowdown=0, movetypes=ALL, blacklisted_movetypes=NONE, conflict=FALSE) - var/list/temp = list(priority, flags, multiplicative_slowdown, movetypes, blacklisted_movetypes, conflict) //build the modification list - var/resort = TRUE - if(LAZYACCESS(movespeed_modification, id)) - var/list/existing_data = movespeed_modification[id] - if(movespeed_modifier_identical_check(existing_data, temp)) - return FALSE - if(!override) - return FALSE - if(priority == existing_data[MOVESPEED_DATA_INDEX_PRIORITY]) - resort = FALSE // We don't need to re-sort if we're replacing something already there and it's the same priority - LAZYSET(movespeed_modification, id, temp) - if(update) - update_movespeed(resort) - return TRUE - -/mob/proc/remove_movespeed_modifier(id, update = TRUE) - if(!LAZYACCESS(movespeed_modification, id)) - return FALSE - LAZYREMOVE(movespeed_modification, id) - UNSETEMPTY(movespeed_modification) - if(update) - update_movespeed(FALSE) - return TRUE - -/mob/vv_edit_var(var_name, var_value) - var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown)) - var/diff - if(slowdown_edit && isnum(cached_multiplicative_slowdown) && isnum(var_value)) - remove_movespeed_modifier(MOVESPEED_ID_ADMIN_VAREDIT) - diff = var_value - cached_multiplicative_slowdown - . = ..() - if(. && slowdown_edit && isnum(diff)) - add_movespeed_modifier(MOVESPEED_ID_ADMIN_VAREDIT, TRUE, 100, override = TRUE, multiplicative_slowdown = diff) - -/mob/proc/has_movespeed_modifier(id) - return LAZYACCESS(movespeed_modification, id) - -/mob/proc/update_config_movespeed() - add_movespeed_modifier(MOVESPEED_ID_CONFIG_SPEEDMOD, FALSE, 100, override = TRUE, multiplicative_slowdown = get_config_multiplicative_speed()) - -/mob/proc/get_config_multiplicative_speed() - if(!islist(GLOB.mob_config_movespeed_type_lookup) || !GLOB.mob_config_movespeed_type_lookup[type]) - return 0 - else - return GLOB.mob_config_movespeed_type_lookup[type] - -/mob/proc/update_movespeed(resort = TRUE) - if(resort) - sort_movespeed_modlist() - . = 0 - var/list/conflict_tracker = list() - for(var/id in get_movespeed_modifiers()) - var/list/data = movespeed_modification[id] - if(!(data[MOVESPEED_DATA_INDEX_MOVETYPE] & movement_type)) // We don't affect any of these move types, skip - continue - if(data[MOVESPEED_DATA_INDEX_BL_MOVETYPE] & movement_type) // There's a movetype here that disables this modifier, skip - continue - var/conflict = data[MOVESPEED_DATA_INDEX_CONFLICT] - var/amt = data[MOVESPEED_DATA_INDEX_MULTIPLICATIVE_SLOWDOWN] - if(conflict) - // Conflicting modifiers prioritize the larger slowdown or the larger speedup - // We purposefuly don't handle mixing speedups and slowdowns on the same id - if(abs(conflict_tracker[conflict]) < abs(amt)) - conflict_tracker[conflict] = amt - else - continue - . += amt - cached_multiplicative_slowdown = . - -/mob/proc/get_movespeed_modifiers() - return movespeed_modification - -/mob/proc/movespeed_modifier_identical_check(list/mod1, list/mod2) - if(!islist(mod1) || !islist(mod2) || mod1.len < MOVESPEED_DATA_INDEX_MAX || mod2.len < MOVESPEED_DATA_INDEX_MAX) - return FALSE - for(var/i in 1 to MOVESPEED_DATA_INDEX_MAX) - if(mod1[i] != mod2[i]) - return FALSE - return TRUE - -/mob/proc/total_multiplicative_slowdown() - . = 0 - for(var/id in get_movespeed_modifiers()) - var/list/data = movespeed_modification[id] - . += data[MOVESPEED_DATA_INDEX_MULTIPLICATIVE_SLOWDOWN] - -/proc/movespeed_data_null_check(list/data) //Determines if a data list is not meaningful and should be discarded. - . = TRUE - if(data[MOVESPEED_DATA_INDEX_MULTIPLICATIVE_SLOWDOWN]) - . = FALSE - -/mob/proc/sort_movespeed_modlist() //Verifies it too. Sorts highest priority (first applied) to lowest priority (last applied) - if(!movespeed_modification) - return - var/list/assembled = list() - for(var/our_id in movespeed_modification) - var/list/our_data = movespeed_modification[our_id] - if(!islist(our_data) || (our_data.len < MOVESPEED_DATA_INDEX_PRIORITY) || movespeed_data_null_check(our_data)) - movespeed_modification -= our_id - continue - var/our_priority = our_data[MOVESPEED_DATA_INDEX_PRIORITY] - var/resolved = FALSE - for(var/their_id in assembled) - var/list/their_data = assembled[their_id] - if(their_data[MOVESPEED_DATA_INDEX_PRIORITY] < our_priority) - assembled.Insert(assembled.Find(their_id), our_id) - assembled[our_id] = our_data - resolved = TRUE - break - if(!resolved) - assembled[our_id] = our_data - movespeed_modification = assembled - UNSETEMPTY(movespeed_modification) \ No newline at end of file diff --git a/code/modules/mob/status_procs.dm b/code/modules/mob/status_procs.dm index 10abf460c6..cf86e962bd 100644 --- a/code/modules/mob/status_procs.dm +++ b/code/modules/mob/status_procs.dm @@ -20,7 +20,7 @@ dizziness = max(amount, 0) /** - * Sets a mob's blindness to an amount if it was not above it already, similar to how status effects work + * Sets a mob's blindness to an amount if it was not above it already, similar to how status effects work */ /mob/proc/blind_eyes(amount) var/old_blind = eye_blind || HAS_TRAIT(src, TRAIT_BLIND) @@ -90,8 +90,8 @@ return var/obj/screen/plane_master/game_world/GW = locate(/obj/screen/plane_master/game_world) in client.screen var/obj/screen/plane_master/floor/F = locate(/obj/screen/plane_master/floor) in client.screen - GW.add_filter("blurry_eyes", 2, EYE_BLUR(CLAMP(eye_blurry*0.1,0.6,3))) - F.add_filter("blurry_eyes", 2, EYE_BLUR(CLAMP(eye_blurry*0.1,0.6,3))) + GW.add_filter("blurry_eyes", 2, EYE_BLUR(clamp(eye_blurry*0.1,0.6,3))) + F.add_filter("blurry_eyes", 2, EYE_BLUR(clamp(eye_blurry*0.1,0.6,3))) /mob/proc/remove_eyeblur() if(!client) @@ -120,4 +120,4 @@ ///Adjust the body temperature of a mob, with min/max settings /mob/proc/adjust_bodytemperature(amount,min_temp=0,max_temp=INFINITY) if(bodytemperature >= min_temp && bodytemperature <= max_temp) - bodytemperature = CLAMP(bodytemperature + amount,min_temp,max_temp) + bodytemperature = clamp(bodytemperature + amount,min_temp,max_temp) diff --git a/code/modules/movespeed/_movespeed_modifier.dm b/code/modules/movespeed/_movespeed_modifier.dm new file mode 100644 index 0000000000..0976f4d067 --- /dev/null +++ b/code/modules/movespeed/_movespeed_modifier.dm @@ -0,0 +1,217 @@ +/*! Movespeed modification datums. + + How move speed for mobs works + +Move speed is now calculated by using modifier datums which are added to mobs. Some of them (nonvariable ones) are globally cached, the variable ones are instanced and changed based on need. + +This gives us the ability to have multiple sources of movespeed, reliabily keep them applied and remove them when they should be + +THey can have unique sources and a bunch of extra fancy flags that control behaviour + +Previously trying to update move speed was a shot in the dark that usually meant mobs got stuck going faster or slower + +Movespeed modification list is a simple key = datum system. Key will be the datum's ID if it is overridden to not be null, or type if it is not. + +DO NOT override datum IDs unless you are going to have multiple types that must overwrite each other. It's more efficient to use types, ID functionality is only kept for cases where dynamic creation of modifiers need to be done. + +When update movespeed is called, the list of items is iterated, according to flags priority and a bunch of conditions +this spits out a final calculated value which is used as a modifer to last_move + modifier for calculating when a mob +can next move + +Key procs +* [add_movespeed_modifier](mob.html#proc/add_movespeed_modifier) +* [remove_movespeed_modifier](mob.html#proc/remove_movespeed_modifier) +* [has_movespeed_modifier](mob.html#proc/has_movespeed_modifier) +* [update_movespeed](mob.html#proc/update_movespeed) +*/ + +/datum/movespeed_modifier + /// Whether or not this is a variable modifier. Variable modifiers can NOT be ever auto-cached. ONLY CHECKED VIA INITIAL(), EFFECTIVELY READ ONLY (and for very good reason) + var/variable = FALSE + + /// Unique ID. You can never have different modifications with the same ID. By default, this SHOULD NOT be set. Only set it for cases where you're dynamically making modifiers/need to have two types overwrite each other. If unset, uses path (converted to text) as ID. + var/id + + /// Higher ones override lower priorities. This is NOT used for ID, ID must be unique, if it isn't unique the newer one overwrites automatically if overriding. + var/priority = 0 + var/flags = NONE + + /// Multiplicative slowdown + var/multiplicative_slowdown = 0 + + /// Movetypes this applies to + var/movetypes = ALL + + /// Movetypes this never applies to + var/blacklisted_movetypes = NONE + + /// Other modification datums this conflicts with. + var/conflicts_with + +/datum/movespeed_modifier/New() + . = ..() + if(!id) + id = "[type]" //We turn the path into a string. + +GLOBAL_LIST_EMPTY(movespeed_modification_cache) + +/// Grabs a STATIC MODIFIER datum from cache. YOU MUST NEVER EDIT THESE DATUMS, OR IT WILL AFFECT ANYTHING ELSE USING IT TOO! +/proc/get_cached_movespeed_modifier(modtype) + if(!ispath(modtype, /datum/movespeed_modifier)) + CRASH("[modtype] is not a movespeed modification typepath.") + var/datum/movespeed_modifier/M = modtype + if(initial(M.variable)) + CRASH("[modtype] is a variable modifier, and can never be cached.") + M = GLOB.movespeed_modification_cache[modtype] + if(!M) + M = GLOB.movespeed_modification_cache[modtype] = new modtype + return M + +///Add a move speed modifier to a mob. If a variable subtype is passed in as the first argument, it will make a new datum. If ID conflicts, it will overwrite the old ID. +/mob/proc/add_movespeed_modifier(datum/movespeed_modifier/type_or_datum, update = TRUE) + if(ispath(type_or_datum)) + if(!initial(type_or_datum.variable)) + type_or_datum = get_cached_movespeed_modifier(type_or_datum) + else + type_or_datum = new type_or_datum + var/datum/movespeed_modifier/existing = LAZYACCESS(movespeed_modification, type_or_datum.id) + if(existing) + if(existing == type_or_datum) //same thing don't need to touch + return TRUE + remove_movespeed_modifier(existing, FALSE) + if(length(movespeed_modification)) + BINARY_INSERT(type_or_datum.id, movespeed_modification, datum/movespeed_modifier, type_or_datum, priority, COMPARE_VALUE) + LAZYSET(movespeed_modification, type_or_datum.id, type_or_datum) + if(update) + update_movespeed() + return TRUE + +/// Remove a move speed modifier from a mob, whether static or variable. +/mob/proc/remove_movespeed_modifier(datum/movespeed_modifier/type_id_datum, update = TRUE) + var/key + if(ispath(type_id_datum)) + key = initial(type_id_datum.id) || "[type_id_datum]" //id if set, path set to string if not. + else if(!istext(type_id_datum)) //if it isn't text it has to be a datum, as it isn't a type. + key = type_id_datum.id + else //assume it's an id + key = type_id_datum + if(!LAZYACCESS(movespeed_modification, key)) + return FALSE + LAZYREMOVE(movespeed_modification, key) + if(update) + update_movespeed(FALSE) + return TRUE + +/*! Used for variable slowdowns like hunger/health loss/etc, works somewhat like the old list-based modification adds. Returns the modifier datum if successful + How this SHOULD work is: + 1. Ensures type_id_datum one way or another refers to a /variable datum. This makes sure it can't be cached. This includes if it's already in the modification list. + 2. Instantiate a new datum if type_id_datum isn't already instantiated + in the list, using the type. Obviously, wouldn't work for ID only. + 3. Add the datum if necessary using the regular add proc + 4. If any of the rest of the args are not null (see: multiplicative slowdown), modify the datum + 5. Update if necessary +*/ +/mob/proc/add_or_update_variable_movespeed_modifier(datum/movespeed_modifier/type_id_datum, update = TRUE, multiplicative_slowdown) + var/modified = FALSE + var/inject = FALSE + var/datum/movespeed_modifier/final + if(istext(type_id_datum)) + final = LAZYACCESS(movespeed_modification, type_id_datum) + if(!final) + CRASH("Couldn't find existing modification when provided a text ID.") + else if(ispath(type_id_datum)) + if(!initial(type_id_datum.variable)) + CRASH("Not a variable modifier") + final = LAZYACCESS(movespeed_modification, initial(type_id_datum.id) || "[type_id_datum]") + if(!final) + final = new type_id_datum + inject = TRUE + modified = TRUE + else + if(!initial(type_id_datum.variable)) + CRASH("Not a variable modifier") + final = type_id_datum + if(!LAZYACCESS(movespeed_modification, final.id)) + inject = TRUE + modified = TRUE + if(!isnull(multiplicative_slowdown)) + final.multiplicative_slowdown = multiplicative_slowdown + modified = TRUE + if(inject) + add_movespeed_modifier(final, FALSE) + if(update && modified) + update_movespeed(TRUE) + return final + +/// Handles the special case of editing the movement var +/mob/vv_edit_var(var_name, var_value) + var/slowdown_edit = (var_name == NAMEOF(src, cached_multiplicative_slowdown)) + var/diff + if(slowdown_edit && isnum(cached_multiplicative_slowdown) && isnum(var_value)) + remove_movespeed_modifier(/datum/movespeed_modifier/admin_varedit) + diff = var_value - cached_multiplicative_slowdown + . = ..() + if(. && slowdown_edit && isnum(diff)) + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/admin_varedit, multiplicative_slowdown = diff) + +///Is there a movespeed modifier for this mob +/mob/proc/has_movespeed_modifier(datum/movespeed_modifier/datum_type_id) + var/key + if(ispath(datum_type_id)) + key = initial(datum_type_id.id) || "[datum_type_id]" + else if(istext(datum_type_id)) + key = datum_type_id + else + key = datum_type_id.id + return LAZYACCESS(movespeed_modification, key) + +/// Set or update the global movespeed config on a mob +/mob/proc/update_config_movespeed() + add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/mob_config_speedmod, multiplicative_slowdown = get_config_multiplicative_speed()) + +/// Get the global config movespeed of a mob by type +/mob/proc/get_config_multiplicative_speed() + if(!islist(GLOB.mob_config_movespeed_type_lookup) || !GLOB.mob_config_movespeed_type_lookup[type]) + return 0 + else + return GLOB.mob_config_movespeed_type_lookup[type] + +/// Go through the list of movespeed modifiers and calculate a final movespeed. ANY ADD/REMOVE DONE IN UPDATE_MOVESPEED MUST HAVE THE UPDATE ARGUMENT SET AS FALSE! +/mob/proc/update_movespeed() + . = 0 + var/list/conflict_tracker = list() + for(var/key in get_movespeed_modifiers()) + var/datum/movespeed_modifier/M = movespeed_modification[key] + if(!(M.movetypes & movement_type)) // We don't affect any of these move types, skip + continue + if(M.blacklisted_movetypes & movement_type) // There's a movetype here that disables this modifier, skip + continue + var/conflict = M.conflicts_with + var/amt = M.multiplicative_slowdown + if(conflict) + // Conflicting modifiers prioritize the larger slowdown or the larger speedup + // We purposefuly don't handle mixing speedups and slowdowns on the same id + if(abs(conflict_tracker[conflict]) < abs(amt)) + conflict_tracker[conflict] = amt + else + continue + . += amt + cached_multiplicative_slowdown = . + +/// Get the move speed modifiers list of the mob +/mob/proc/get_movespeed_modifiers() + . = LAZYCOPY(movespeed_modification) + for(var/id in movespeed_mod_immunities) + . -= id + +/// Calculate the total slowdown of all movespeed modifiers +/mob/proc/total_multiplicative_slowdown() + . = 0 + for(var/id in get_movespeed_modifiers()) + var/datum/movespeed_modifier/M = movespeed_modification[id] + . += M.multiplicative_slowdown + +/// Checks if a move speed modifier is valid and not missing any data +/proc/movespeed_data_null_check(datum/movespeed_modifier/M) //Determines if a data list is not meaningful and should be discarded. + . = TRUE + if(M.multiplicative_slowdown) + . = FALSE diff --git a/code/modules/movespeed/modifiers/components.dm b/code/modules/movespeed/modifiers/components.dm new file mode 100644 index 0000000000..436b85e2e1 --- /dev/null +++ b/code/modules/movespeed/modifiers/components.dm @@ -0,0 +1,21 @@ +/datum/movespeed_modifier/shrink_ray + movetypes = GROUND + multiplicative_slowdown = 4 + flags = IGNORE_NOSLOW + +/datum/movespeed_modifier/snail_crawl + multiplicative_slowdown = -7 + movetypes = GROUND + +/datum/movespeed_modifier/sanity + id = MOVESPEED_ID_SANITY + blacklisted_movetypes = FLYING + +/datum/movespeed_modifier/sanity/insane + multiplicative_slowdown = 1.5 + +/datum/movespeed_modifier/sanity/crazy + multiplicative_slowdown = 1 + +/datum/movespeed_modifier/sanity/disturbed + multiplicative_slowdown = 0.5 diff --git a/code/modules/movespeed/modifiers/innate.dm b/code/modules/movespeed/modifiers/innate.dm new file mode 100644 index 0000000000..a0357ddf0f --- /dev/null +++ b/code/modules/movespeed/modifiers/innate.dm @@ -0,0 +1,20 @@ +/datum/movespeed_modifier/strained_muscles + multiplicative_slowdown = -1 + blacklisted_movetypes = (FLYING|FLOATING) + +/datum/movespeed_modifier/pai_spacewalk + multiplicative_slowdown = 2 + flags = IGNORE_NOSLOW + +/datum/movespeed_modifier/species + movetypes = ~FLYING + variable = TRUE + +/datum/movespeed_modifier/dna_vault_speedup + blacklisted_movetypes = (FLYING|FLOATING) + multiplicative_slowdown = -1 + +/datum/movespeed_modifier/small_stride + blacklisted_movetypes = (FLOATING|CRAWLING) + variable = TRUE + flags = IGNORE_NOSLOW diff --git a/code/modules/movespeed/modifiers/items.dm b/code/modules/movespeed/modifiers/items.dm new file mode 100644 index 0000000000..94dc2a1553 --- /dev/null +++ b/code/modules/movespeed/modifiers/items.dm @@ -0,0 +1,12 @@ +/datum/movespeed_modifier/jetpack + conflicts_with = MOVE_CONFLICT_JETPACK + movetypes = FLOATING + +/datum/movespeed_modifier/jetpack/cybernetic + multiplicative_slowdown = -0.5 + +/datum/movespeed_modifier/jetpack/fullspeed + multiplicative_slowdown = -2 + +/datum/movespeed_modifier/die_of_fate + multiplicative_slowdown = 1 diff --git a/code/modules/movespeed/modifiers/misc.dm b/code/modules/movespeed/modifiers/misc.dm new file mode 100644 index 0000000000..55c1aef527 --- /dev/null +++ b/code/modules/movespeed/modifiers/misc.dm @@ -0,0 +1,6 @@ +/datum/movespeed_modifier/admin_varedit + variable = TRUE + +/datum/movespeed_modifier/yellow_orb + multiplicative_slowdown = -2 + blacklisted_movetypes = (FLYING|FLOATING) diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm new file mode 100644 index 0000000000..aa60966591 --- /dev/null +++ b/code/modules/movespeed/modifiers/mobs.dm @@ -0,0 +1,120 @@ +/datum/movespeed_modifier/obesity + multiplicative_slowdown = 1.5 + +/datum/movespeed_modifier/monkey_reagent_speedmod + blacklisted_movetypes = FLOATING + variable = TRUE + +/datum/movespeed_modifier/monkey_health_speedmod + blacklisted_movetypes = FLOATING + variable = TRUE + +/datum/movespeed_modifier/monkey_temperature_speedmod + blacklisted_movetypes = FLOATING + variable = TRUE + +/datum/movespeed_modifier/hunger + variable = TRUE + +/datum/movespeed_modifier/slaughter + multiplicative_slowdown = -1 + +/datum/movespeed_modifier/damage_slowdown + blacklisted_movetypes = FLOATING|FLYING + variable = TRUE + +/datum/movespeed_modifier/damage_slowdown_flying + movetypes = FLOATING + variable = TRUE + +/datum/movespeed_modifier/equipment_speedmod + variable = TRUE + blacklisted_movetypes = FLOATING + +/datum/movespeed_modifier/grab_slowdown + id = MOVESPEED_ID_MOB_GRAB_STATE + blacklisted_movetypes = FLOATING + +/datum/movespeed_modifier/grab_slowdown/aggressive + multiplicative_slowdown = 3 + +/datum/movespeed_modifier/grab_slowdown/neck + multiplicative_slowdown = 6 + +/datum/movespeed_modifier/grab_slowdown/kill + multiplicative_slowdown = 9 + +/datum/movespeed_modifier/slime_reagentmod + variable = TRUE + +/datum/movespeed_modifier/slime_healthmod + variable = TRUE + +/datum/movespeed_modifier/config_walk_run + multiplicative_slowdown = 1 + id = MOVESPEED_ID_MOB_WALK_RUN + flags = IGNORE_NOSLOW + +/datum/movespeed_modifier/config_walk_run/proc/sync() + +/datum/movespeed_modifier/config_walk_run/walk/sync() + var/mod = CONFIG_GET(number/movedelay/walk_delay) + multiplicative_slowdown = isnum(mod)? mod : initial(multiplicative_slowdown) + +/datum/movespeed_modifier/config_walk_run/run/sync() + var/mod = CONFIG_GET(number/movedelay/run_delay) + multiplicative_slowdown = isnum(mod)? mod : initial(multiplicative_slowdown) + +/datum/movespeed_modifier/turf_slowdown + movetypes = GROUND + blacklisted_movetypes = (FLYING|FLOATING) + variable = TRUE + +/datum/movespeed_modifier/bulky_drag + variable = TRUE + +/datum/movespeed_modifier/cold + blacklisted_movetypes = FLOATING + variable = TRUE + +/datum/movespeed_modifier/shove + multiplicative_slowdown = SHOVE_SLOWDOWN_STRENGTH + +/datum/movespeed_modifier/human_carry + variable = TRUE + +/datum/movespeed_modifier/limbless + variable = TRUE + movetypes = GROUND + flags = IGNORE_NOSLOW + +/datum/movespeed_modifier/simplemob_varspeed + variable = TRUE + flags = IGNORE_NOSLOW + +/datum/movespeed_modifier/tarantula_web + multiplicative_slowdown = 3 + +/datum/movespeed_modifier/gravity + blacklisted_movetypes = FLOATING + variable = TRUE + flags = IGNORE_NOSLOW + +/datum/movespeed_modifier/carbon_softcrit + multiplicative_slowdown = SOFTCRIT_ADD_SLOWDOWN + +/datum/movespeed_modifier/slime_tempmod + variable = TRUE + +/datum/movespeed_modifier/carbon_crawling + multiplicative_slowdown = CRAWLING_ADD_SLOWDOWN + movetypes = CRAWLING + flags = IGNORE_NOSLOW + +/datum/movespeed_modifier/mob_config_speedmod + variable = TRUE + flags = IGNORE_NOSLOW + +/datum/movespeed_modifier/liver_cirrhosis + blacklisted_movetypes = FLOATING + variable = TRUE diff --git a/code/modules/movespeed/modifiers/reagents.dm b/code/modules/movespeed/modifiers/reagents.dm new file mode 100644 index 0000000000..b6c2458670 --- /dev/null +++ b/code/modules/movespeed/modifiers/reagents.dm @@ -0,0 +1,14 @@ +/datum/movespeed_modifier/reagent + blacklisted_movetypes = (FLYING|FLOATING) + +/datum/movespeed_modifier/reagent/stimulants + multiplicative_slowdown = -0.5 + +/datum/movespeed_modifier/reagent/changelinghaste + multiplicative_slowdown = -2 + +/datum/movespeed_modifier/reagent/skooma + multiplicative_slowdown = -1 + +/datum/movespeed_modifier/reagent/nitryl + multiplicative_slowdown = -1 diff --git a/code/modules/movespeed/modifiers/status_effects.dm b/code/modules/movespeed/modifiers/status_effects.dm new file mode 100644 index 0000000000..4c710cb483 --- /dev/null +++ b/code/modules/movespeed/modifiers/status_effects.dm @@ -0,0 +1,44 @@ +/datum/movespeed_modifier/status_effect/bloodchill + multiplicative_slowdown = 3 + +/datum/movespeed_modifier/status_effect/bonechill + multiplicative_slowdown = 3 + +/datum/movespeed_modifier/status_effect/tarfoot + multiplicative_slowdown = 0.5 + blacklisted_movetypes = (FLYING|FLOATING) + +/datum/movespeed_modifier/status_effect/sepia + variable = TRUE + blacklisted_movetypes = (FLYING|FLOATING) + +/datum/movespeed_modifier/status_effect/mesmerize + blacklisted_movetypes = CRAWLING + multiplicative_slowdown = 5 + priority = 64 + +/datum/movespeed_modifier/status_effect/tased + multiplicative_slowdown = 1.5 + priority = 50 + +/datum/movespeed_modifier/status_effect/tased/no_combat_mode + multiplicative_slowdown = 8 + priority = 100 + +/datum/movespeed_modifier/status_effect/electrostaff + multiplicative_slowdown = 1 + movetypes = GROUND + +//no comment. +/datum/movespeed_modifier/status_effect/breast_hypertrophy + blacklisted_movetypes = FLOATING + variable = TRUE + +//this shouldn't even exist. +/datum/movespeed_modifier/status_effect/penis_hypertrophy + blacklisted_movetypes = FLOATING + variable = TRUE + +/datum/movespeed_modifier/status_effect/mkultra + multiplicative_slowdown = -2 + blacklisted_movetypes= FLYING|FLOATING diff --git a/code/modules/photography/camera/camera.dm b/code/modules/photography/camera/camera.dm index b7b7bc36b7..f039dc32b2 100644 --- a/code/modules/photography/camera/camera.dm +++ b/code/modules/photography/camera/camera.dm @@ -53,8 +53,8 @@ return var/desired_x = input(user, "How high do you want the camera to shoot, between [picture_size_x_min] and [picture_size_x_max]?", "Zoom", picture_size_x) as num var/desired_y = input(user, "How wide do you want the camera to shoot, between [picture_size_y_min] and [picture_size_y_max]?", "Zoom", picture_size_y) as num - picture_size_x = min(CLAMP(desired_x, picture_size_x_min, picture_size_x_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) - picture_size_y = min(CLAMP(desired_y, picture_size_y_min, picture_size_y_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) + picture_size_x = min(clamp(desired_x, picture_size_x_min, picture_size_x_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) + picture_size_y = min(clamp(desired_y, picture_size_y_min, picture_size_y_max), CAMERA_PICTURE_SIZE_HARD_LIMIT) return TRUE /obj/item/camera/attack(mob/living/carbon/human/M, mob/user) @@ -155,8 +155,8 @@ if(!isturf(target_turf)) blending = FALSE return FALSE - size_x = CLAMP(size_x, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) - size_y = CLAMP(size_y, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) + size_x = clamp(size_x, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) + size_y = clamp(size_y, 0, CAMERA_PICTURE_SIZE_HARD_LIMIT) var/list/desc = list("This is a photo of an area of [size_x+1] meters by [size_y+1] meters.") var/ai_user = isAI(user) var/list/seen diff --git a/code/modules/photography/camera/camera_image_capturing.dm b/code/modules/photography/camera/camera_image_capturing.dm index f25d80c050..5bd9c108d1 100644 --- a/code/modules/photography/camera/camera_image_capturing.dm +++ b/code/modules/photography/camera/camera_image_capturing.dm @@ -4,7 +4,7 @@ if(istype(A)) appearance = A.appearance dir = A.dir - if(ismovableatom(A)) + if(ismovable(A)) var/atom/movable/AM = A step_x = AM.step_x step_y = AM.step_y @@ -68,7 +68,7 @@ for(var/atom/A in sorted) var/xo = (A.x - center.x) * world.icon_size + A.pixel_x + xcomp var/yo = (A.y - center.y) * world.icon_size + A.pixel_y + ycomp - if(ismovableatom(A)) + if(ismovable(A)) var/atom/movable/AM = A xo += AM.step_x yo += AM.step_y diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 1b23b1bb5d..7eabeafcb1 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -208,7 +208,7 @@ GLOB.apcs_list -= src if(malfai && operating) - malfai.malf_picker.processing_time = CLAMP(malfai.malf_picker.processing_time - 10,0,1000) + malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000) area.power_light = FALSE area.power_equip = FALSE area.power_environ = FALSE @@ -1350,7 +1350,7 @@ lighting = autoset(lighting, 0) environ = autoset(environ, 0) area.poweralert(0, src) - + else if(cell_percent < 15 && longtermpower < 0) // <15%, turn off lighting & equipment equipment = autoset(equipment, 2) lighting = autoset(lighting, 2) @@ -1447,7 +1447,7 @@ /obj/machinery/power/apc/proc/set_broken() if(malfai && operating) - malfai.malf_picker.processing_time = CLAMP(malfai.malf_picker.processing_time - 10,0,1000) + malfai.malf_picker.processing_time = clamp(malfai.malf_picker.processing_time - 10,0,1000) stat |= BROKEN operating = FALSE if(occupier) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index ed90ed407f..eecc1394de 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -217,7 +217,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/proc/surplus() if(powernet) - return CLAMP(powernet.avail-powernet.load, 0, powernet.avail) + return clamp(powernet.avail-powernet.load, 0, powernet.avail) else return 0 @@ -233,7 +233,7 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/proc/delayed_surplus() if(powernet) - return CLAMP(powernet.newavail - powernet.delayedload, 0, powernet.newavail) + return clamp(powernet.newavail - powernet.delayedload, 0, powernet.newavail) else return 0 @@ -533,7 +533,7 @@ By design, d1 is the smallest direction and d2 is the highest if(affecting && affecting.status == BODYPART_ROBOTIC) if(user == H) user.visible_message("[user] starts to fix some of the wires in [H]'s [affecting.name].", "You start fixing some of the wires in [H]'s [affecting.name].") - if(!do_after(user, H, 50)) + if(!do_mob(user, H, 50)) return if(item_heal_robotic(H, user, 0, 15)) use(1) @@ -565,7 +565,7 @@ By design, d1 is the smallest direction and d2 is the highest return var/obj/item/restraints/handcuffs/cable/result = new(get_turf(user)) user.put_in_hands(result) - result.color = color + result.color = color to_chat(user, "You make some restraints out of cable") //add cables to the stack @@ -848,4 +848,4 @@ By design, d1 is the smallest direction and d2 is the highest . = ..() var/list/cable_colors = GLOB.cable_colors color = pick(cable_colors) - + diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 93fe7e8fa6..cc321fdb4d 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -157,7 +157,7 @@ /obj/item/stock_parts/cell/proc/get_electrocute_damage() if(charge >= 1000) - return CLAMP(round(charge/10000), 10, 90) + rand(-5,5) + return clamp(round(charge/10000), 10, 90) + rand(-5,5) else return 0 @@ -334,7 +334,7 @@ . = ..() if(. & EMP_PROTECT_SELF) return - charge = CLAMP((charge-(10000/severity)),0,maxcharge) + charge = clamp((charge-(10000/severity)),0,maxcharge) /obj/item/stock_parts/cell/emergency_light name = "miniature power cell" diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 02ff4127eb..7ad9f3a6ce 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -314,7 +314,7 @@ . = ..() SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays) if(on && status == LIGHT_OK) - SSvis_overlays.add_vis_overlay(src, overlayicon, base_state, EMISSIVE_LAYER, EMISSIVE_PLANE, dir, CLAMP(light_power*250, 30, 200)) + SSvis_overlays.add_vis_overlay(src, overlayicon, base_state, EMISSIVE_LAYER, EMISSIVE_PLANE, dir, clamp(light_power*250, 30, 200)) // update the icon_state and luminosity of the light depending on its state diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index fba526edbd..4cec49945a 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -42,7 +42,7 @@ /obj/machinery/power/proc/surplus() if(powernet) - return CLAMP(powernet.avail-powernet.load, 0, powernet.avail) + return clamp(powernet.avail-powernet.load, 0, powernet.avail) else return 0 @@ -58,7 +58,7 @@ /obj/machinery/power/proc/delayed_surplus() if(powernet) - return CLAMP(powernet.newavail - powernet.delayedload, 0, powernet.newavail) + return clamp(powernet.newavail - powernet.delayedload, 0, powernet.newavail) else return 0 diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm index 3b70383bee..65d5202ff4 100644 --- a/code/modules/power/powernet.dm +++ b/code/modules/power/powernet.dm @@ -96,6 +96,6 @@ /datum/powernet/proc/get_electrocute_damage() if(avail >= 1000) - return CLAMP(round(avail/10000), 10, 90) + rand(-5,5) + return clamp(round(avail/10000), 10, 90) + rand(-5,5) else return 0 \ No newline at end of file diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index c471047682..ed3a098dae 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -201,7 +201,7 @@ // if(defer_powernet_rebuild != 2) // defer_powernet_rebuild = 1 for(var/atom/X in urange(consume_range,src,1)) - if(isturf(X) || ismovableatom(X)) + if(isturf(X) || ismovable(X)) consume(X) // if(defer_powernet_rebuild != 2) // defer_powernet_rebuild = 0 diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index 47de07cd71..41ed28f0a5 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -220,7 +220,7 @@ . += "smes-og[clevel]" /obj/machinery/power/smes/proc/chargedisplay() - return CLAMP(round(5.5*charge/capacity),0,5) + return clamp(round(5.5*charge/capacity),0,5) /obj/machinery/power/smes/process() if(stat & BROKEN) @@ -372,7 +372,7 @@ target = text2num(target) . = TRUE if(.) - input_level = CLAMP(target, 0, input_level_max) + input_level = clamp(target, 0, input_level_max) log_smes(usr) if("output") var/target = params["target"] @@ -394,7 +394,7 @@ target = text2num(target) . = TRUE if(.) - output_level = CLAMP(target, 0, output_level_max) + output_level = clamp(target, 0, output_level_max) log_smes(usr) /obj/machinery/power/smes/proc/log_smes(mob/user) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 73ea3ccd59..89452affcb 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -28,10 +28,8 @@ /obj/machinery/power/solar/Initialize(mapload, obj/item/solar_assembly/S) . = ..() panel = new() -#if DM_VERSION >= 513 panel.vis_flags = VIS_INHERIT_ID|VIS_INHERIT_ICON|VIS_INHERIT_PLANE vis_contents += panel -#endif panel.icon = icon panel.icon_state = "solar_panel" panel.layer = FLY_LAYER @@ -170,7 +168,7 @@ else //dot product of sun and panel -- Lambert's Cosine Law . = cos(azimuth_current - sun_azimuth) - . = CLAMP(round(., 0.01), 0, 1) + . = clamp(round(., 0.01), 0, 1) sunfrac = . /obj/machinery/power/solar/process() @@ -385,7 +383,7 @@ if(adjust) value = azimuth_rate + adjust if(value != null) - azimuth_rate = round(CLAMP(value, -2 * SSsun.base_rotation, 2 * SSsun.base_rotation), 0.01) + azimuth_rate = round(clamp(value, -2 * SSsun.base_rotation, 2 * SSsun.base_rotation), 0.01) return TRUE return FALSE if(action == "tracking") @@ -464,7 +462,7 @@ ///Rotates the panel to the passed angles /obj/machinery/power/solar_control/proc/set_panels(azimuth) - azimuth = CLAMP(round(azimuth, 0.01), -360, 719.99) + azimuth = clamp(round(azimuth, 0.01), -360, 719.99) if(azimuth >= 360) azimuth -= 360 if(azimuth < 0) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index f91dc43990..92d97365b3 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -346,7 +346,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) else if(takes_damage) //causing damage - damage = max(damage + (max(CLAMP(removed.total_moles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0) + damage = max(damage + (max(clamp(removed.total_moles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0) damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500) * DAMAGE_INCREASE_MULTIPLIER, 0) damage = max(damage + (max(combined_gas - MOLE_PENALTY_THRESHOLD, 0)/80) * DAMAGE_INCREASE_MULTIPLIER, 0) @@ -389,10 +389,10 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) mole_heat_penalty = max(combined_gas / MOLE_HEAT_PENALTY, 0.25) if (combined_gas > POWERLOSS_INHIBITION_MOLE_THRESHOLD && co2comp > POWERLOSS_INHIBITION_GAS_THRESHOLD) - powerloss_dynamic_scaling = CLAMP(powerloss_dynamic_scaling + CLAMP(co2comp - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1) + powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling + clamp(co2comp - powerloss_dynamic_scaling, -0.02, 0.02), 0, 1) else - powerloss_dynamic_scaling = CLAMP(powerloss_dynamic_scaling - 0.05,0, 1) - powerloss_inhibitor = CLAMP(1-(powerloss_dynamic_scaling * CLAMP(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1) + powerloss_dynamic_scaling = clamp(powerloss_dynamic_scaling - 0.05,0, 1) + powerloss_inhibitor = clamp(1-(powerloss_dynamic_scaling * clamp(combined_gas/POWERLOSS_INHIBITION_MOLE_BOOST_THRESHOLD,1 ,1.5)),0 ,1) if(matter_power) var/removed_matter = max(matter_power/MATTER_POWER_CONVERSION, 40) @@ -442,7 +442,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) var/D = sqrt(1 / max(1, get_dist(l, src))) l.hallucination += power_calc * config_hallucination_power * D - l.hallucination = CLAMP(0, 200, l.hallucination) + l.hallucination = clamp(0, 200, l.hallucination) for(var/mob/living/l in range(src, round((power / 100) ** 0.25))) var/rads = (power / 10) * sqrt( 1 / max(get_dist(l, src),1) ) @@ -452,7 +452,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) if ((100-get_integrity()) < 75) power = (power_calc * ((100 - (0.15*(100-get_integrity()) - 5)**2) / 100)) + power_calc*0.1 else - power = power_calc * (((100-get_integrity())^((3*(100-get_integrity()))/1000) + 2*(100-get_integrity()))/100) //new and improved, more linear + power = power_calc * (((100-get_integrity())**((3*(100-get_integrity()))/1000) + 2*(100-get_integrity()))/100) //new and improved, more linear //power = power_calc * ((((100-get_integrity())**1.3)-(2*(100-get_integrity())))/100) if(power > POWER_PENALTY_THRESHOLD || damage > damage_penalty_point) @@ -466,7 +466,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) supermatter_zap(src, 5, min(power*2, 20000)) else if (damage > damage_penalty_point && prob(20)) playsound(src.loc, 'sound/weapons/emitter2.ogg', 100, 1, extrarange = 10) - supermatter_zap(src, 5, CLAMP(power*2, 4000, 20000)) + supermatter_zap(src, 5, clamp(power*2, 4000, 20000)) if(prob(15) && power > POWER_PENALTY_THRESHOLD) supermatter_pull(src, power/750) @@ -736,7 +736,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) /obj/machinery/power/supermatter_crystal/proc/supermatter_pull(turf/center, pull_range = 10) playsound(src.loc, 'sound/weapons/marauder.ogg', 100, 1, extrarange = 7) for(var/atom/P in orange(pull_range,center)) - if(ismovableatom(P)) + if(ismovable(P)) var/atom/movable/pulled_object = P if(ishuman(P)) var/mob/living/carbon/human/H = P diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 1b08693d1c..e98fe3c88e 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -65,7 +65,7 @@ pixel_x = -32 pixel_y = -32 for (var/ball in orbiting_balls) - var/range = rand(1, CLAMP(orbiting_balls.len, 3, 7)) + var/range = rand(1, clamp(orbiting_balls.len, 3, 7)) tesla_zap(ball, range, TESLA_MINI_POWER/7*range) else energy = 0 // ensure we dont have miniballs of miniballs diff --git a/code/modules/projectiles/ammunition/ballistic/pistol.dm b/code/modules/projectiles/ammunition/ballistic/pistol.dm index 58a5bfb497..461166ab0d 100644 --- a/code/modules/projectiles/ammunition/ballistic/pistol.dm +++ b/code/modules/projectiles/ammunition/ballistic/pistol.dm @@ -1,28 +1,28 @@ // 10mm (Stechkin) /obj/item/ammo_casing/c10mm - name = ".10mm bullet casing" + name = "10mm bullet casing" desc = "A 10mm bullet casing." caliber = "10mm" projectile_type = /obj/item/projectile/bullet/c10mm /obj/item/ammo_casing/c10mm/ap - name = ".10mm armor-piercing bullet casing" + name = "10mm armor-piercing bullet casing" desc = "A 10mm armor-piercing bullet casing." projectile_type = /obj/item/projectile/bullet/c10mm_ap /obj/item/ammo_casing/c10mm/hp - name = ".10mm hollow-point bullet casing" + name = "10mm hollow-point bullet casing" desc = "A 10mm hollow-point bullet casing." projectile_type = /obj/item/projectile/bullet/c10mm_hp /obj/item/ammo_casing/c10mm/fire - name = ".10mm incendiary bullet casing" + name = "10mm incendiary bullet casing" desc = "A 10mm incendiary bullet casing." projectile_type = /obj/item/projectile/bullet/incendiary/c10mm /obj/item/ammo_casing/c10mm/soporific - name = ".10mm soporific bullet casing" + name = "10mm soporific bullet casing" desc = "A 10mm soporific bullet casing." projectile_type = /obj/item/projectile/bullet/c10mm/soporific diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm index 39e3ca06ff..994b0f7f01 100644 --- a/code/modules/projectiles/ammunition/energy/special.dm +++ b/code/modules/projectiles/ammunition/energy/special.dm @@ -3,6 +3,10 @@ select_name = "ion" fire_sound = 'sound/weapons/ionrifle.ogg' +/obj/item/ammo_casing/energy/ion/hos + projectile_type = /obj/item/projectile/ion + e_cost = 200 + /obj/item/ammo_casing/energy/declone projectile_type = /obj/item/projectile/energy/declone select_name = "declone" diff --git a/code/modules/projectiles/ammunition/energy/stun.dm b/code/modules/projectiles/ammunition/energy/stun.dm index 2abc472138..f063672654 100644 --- a/code/modules/projectiles/ammunition/energy/stun.dm +++ b/code/modules/projectiles/ammunition/energy/stun.dm @@ -16,9 +16,6 @@ fire_sound = 'sound/weapons/gunshot.ogg' e_cost = 100 -/obj/item/ammo_casing/energy/electrode/hos - projectile_type = /obj/item/projectile/energy/electrode/security/hos - e_cost = 200 /obj/item/ammo_casing/energy/electrode/old e_cost = 1000 diff --git a/code/modules/projectiles/boxes_magazines/_box_magazine.dm b/code/modules/projectiles/boxes_magazines/_box_magazine.dm index 4f37cf3ba9..594734c86a 100644 --- a/code/modules/projectiles/boxes_magazines/_box_magazine.dm +++ b/code/modules/projectiles/boxes_magazines/_box_magazine.dm @@ -112,11 +112,7 @@ update_icon() /obj/item/ammo_box/update_icon() - switch(multiple_sprites) - if(1) - icon_state = "[initial(icon_state)]-[stored_ammo.len]" - if(2) - icon_state = "[initial(icon_state)]-[stored_ammo.len ? "[max_ammo]" : "0"]" + . = ..() desc = "[initial(desc)] There are [stored_ammo.len] shell\s left!" for (var/material in bullet_cost) var/material_amount = bullet_cost[material] @@ -124,6 +120,13 @@ custom_materials[material] = material_amount set_custom_materials(custom_materials)//make sure we setup the correct properties again +/obj/item/ammo_box/update_icon_state() + switch(multiple_sprites) + if(1) + icon_state = "[initial(icon_state)]-[stored_ammo.len]" + if(2) + icon_state = "[initial(icon_state)]-[stored_ammo.len ? "[max_ammo]" : "0"]" + //Behavior for magazines /obj/item/ammo_box/magazine/proc/ammo_count() return stored_ammo.len diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 7fb17ced57..4894a8d8eb 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -41,9 +41,12 @@ to_chat(user, "You're too exhausted for that.")//CIT CHANGE - ditto return//CIT CHANGE - ditto pump(user, TRUE) - recentpump = world.time + 10 - if(istype(user))//CIT CHANGE - makes pumping shotguns cost a lil bit of stamina. - user.adjustStaminaLossBuffered(2) //CIT CHANGE - DITTO. make this scale inversely to the strength stat when stats/skills are added + if(HAS_TRAIT(user, TRAIT_FAST_PUMP)) + recentpump = world.time + 2 + else + recentpump = world.time + 10 + if(istype(user))//CIT CHANGE - makes pumping shotguns cost a lil bit of stamina. + user.adjustStaminaLossBuffered(2) //CIT CHANGE - DITTO. make this scale inversely to the strength stat when stats/skills are added return /obj/item/gun/ballistic/shotgun/blow_up(mob/user) @@ -90,7 +93,7 @@ fire_delay = 7 mag_type = /obj/item/ammo_box/magazine/internal/shot/riot sawn_desc = "Come with me if you want to live." - unique_reskin = list("Tatical" = "riotshotgun", + unique_reskin = list("Tactical" = "riotshotgun", "Wood Stock" = "wood_riotshotgun" ) @@ -212,7 +215,7 @@ fire_delay = 5 mag_type = /obj/item/ammo_box/magazine/internal/shot/com w_class = WEIGHT_CLASS_HUGE - unique_reskin = list("Tatical" = "cshotgun", + unique_reskin = list("Tactical" = "cshotgun", "Slick" = "cshotgun_slick" ) diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm index e0c84e7047..ff3f127817 100644 --- a/code/modules/projectiles/guns/energy.dm +++ b/code/modules/projectiles/guns/energy.dm @@ -232,7 +232,7 @@ ..() if(!automatic_charge_overlays) return - var/ratio = can_shoot() ? CEILING(CLAMP(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0 + var/ratio = can_shoot() ? CEILING(clamp(cell.charge / cell.maxcharge, 0, 1) * charge_sections, 1) : 0 // Sets the ratio to 0 if the gun doesn't have enough charge to fire, or if it's power cell is removed. // TG issues #5361 & #47908 if(ratio == old_ratio && !force_update) diff --git a/code/modules/projectiles/guns/energy/energy_gun.dm b/code/modules/projectiles/guns/energy/energy_gun.dm index efe107a3f8..71ee8bc5ef 100644 --- a/code/modules/projectiles/guns/energy/energy_gun.dm +++ b/code/modules/projectiles/guns/energy/energy_gun.dm @@ -52,13 +52,16 @@ /obj/item/gun/energy/e_gun/hos name = "\improper X-01 MultiPhase Energy Gun" - desc = "This is an expensive, modern recreation of an antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time." + desc = "This is an expensive, modern recreation of an antique laser gun. This gun has several unique firemodes, but lacks the ability to recharge over time in exchange for inbuilt advanced firearm EMP shielding." icon_state = "hoslaser" force = 10 - ammo_type = list(/obj/item/ammo_casing/energy/electrode/hos, /obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser/hos) + ammo_type = list(/obj/item/ammo_casing/energy/disabler, /obj/item/ammo_casing/energy/laser/hos, /obj/item/ammo_casing/energy/ion/hos) ammo_x_offset = 4 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF +/obj/item/gun/energy/e_gun/hos/emp_act(severity) + return + /obj/item/gun/energy/e_gun/dragnet name = "\improper DRAGnet" desc = "The \"Dynamic Rapid-Apprehension of the Guilty\" net is a revolution in law enforcement technology." diff --git a/code/modules/projectiles/guns/misc/beam_rifle.dm b/code/modules/projectiles/guns/misc/beam_rifle.dm index f230dc7fea..f8ddcb5aae 100644 --- a/code/modules/projectiles/guns/misc/beam_rifle.dm +++ b/code/modules/projectiles/guns/misc/beam_rifle.dm @@ -318,7 +318,7 @@ AC.sync_stats() /obj/item/gun/energy/beam_rifle/proc/delay_penalty(amount) - aiming_time_left = CLAMP(aiming_time_left + amount, 0, aiming_time) + aiming_time_left = clamp(aiming_time_left + amount, 0, aiming_time) /obj/item/ammo_casing/energy/beam_rifle name = "particle acceleration lens" @@ -369,11 +369,11 @@ HS_BB.stun = projectile_stun HS_BB.impact_structure_damage = impact_structure_damage HS_BB.aoe_mob_damage = aoe_mob_damage - HS_BB.aoe_mob_range = CLAMP(aoe_mob_range, 0, 15) //Badmin safety lock + HS_BB.aoe_mob_range = clamp(aoe_mob_range, 0, 15) //Badmin safety lock HS_BB.aoe_fire_chance = aoe_fire_chance HS_BB.aoe_fire_range = aoe_fire_range HS_BB.aoe_structure_damage = aoe_structure_damage - HS_BB.aoe_structure_range = CLAMP(aoe_structure_range, 0, 15) //Badmin safety lock + HS_BB.aoe_structure_range = clamp(aoe_structure_range, 0, 15) //Badmin safety lock HS_BB.wall_devastate = wall_devastate HS_BB.wall_pierce_amount = wall_pierce_amount HS_BB.structure_pierce_amount = structure_piercing @@ -465,7 +465,7 @@ else target.ex_act(EXPLODE_HEAVY) return TRUE - if(ismovableatom(target)) + if(ismovable(target)) var/atom/movable/AM = target if(AM.density && !AM.CanPass(src, get_turf(target)) && !ismob(AM)) if(structure_pierce < structure_pierce_amount) diff --git a/code/modules/projectiles/pins.dm b/code/modules/projectiles/pins.dm index e754a9c070..8a1db49762 100644 --- a/code/modules/projectiles/pins.dm +++ b/code/modules/projectiles/pins.dm @@ -241,3 +241,87 @@ to_chat(user, "The pin beeps, refusing to fire.") return FALSE return TRUE + +/obj/item/firing_pin/security_level + name = "security level firing pin" + desc = "A sophisticated firing pin that authorizes operation based on its settings and current security level." + icon_state = "firing_pin_sec_level" + var/min_sec_level = SEC_LEVEL_GREEN + var/max_sec_level = SEC_LEVEL_DELTA + var/only_lethals = FALSE + var/can_toggle = TRUE + +/obj/item/firing_pin/security_level/Initialize() + . = ..() + fail_message = "INVALID SECURITY LEVEL. CURRENT: [uppertext(NUM2SECLEVEL(GLOB.security_level))]. \ + MIN: [uppertext(NUM2SECLEVEL(min_sec_level))]. MAX: [uppertext(NUM2SECLEVEL(max_sec_level))]. \ + ONLY LETHALS: [only_lethals ? "YES" : "NO"]." + update_icon() + +/obj/item/firing_pin/security_level/examine(mob/user) + . = ..() + var/lethal = only_lethals ? "only lethal " : "" + if(min_sec_level != max_sec_level) + . += "It's currently set to disallow [lethal]operation when the security level isn't between [NUM2SECLEVEL(min_sec_level)] and [NUM2SECLEVEL(max_sec_level)]." + else + . += "It's currently set to disallow [lethal]operation when the security level isn't [NUM2SECLEVEL(min_sec_level)]." + if(can_toggle) + . += "You can use a multitool to modify its settings." + +/obj/item/firing_pin/security_level/multitool_act(mob/living/user, obj/item/I) + . = TRUE + if(!can_toggle || !user.canUseTopic(src, BE_CLOSE)) + return + var/selection = alert(user, "Which setting would you want to modify?", "Firing Pin Settings", "Minimum Level Setting", "Maximum Level Setting", "Lethals Only Toggle") + if(QDELETED(src) || QDELETED(user) || !user.canUseTopic(src, BE_CLOSE)) + return + var/static/list/till_designs_pr_isnt_merged = list("green", "blue", "amber", "red", "delta") + switch(selection) + if("Minimum Level Setting") + var/input = input(user, "Input the new minimum level setting.", "Firing Pin Settings", NUM2SECLEVEL(min_sec_level)) as null|anything in till_designs_pr_isnt_merged + if(!input) + return + min_sec_level = till_designs_pr_isnt_merged.Find(input) - 1 + if(min_sec_level > max_sec_level) + max_sec_level = SEC_LEVEL_DELTA + if("Maximum Level Setting") + var/input = input(user, "Input the new maximum level setting.", "Firing Pin Settings", NUM2SECLEVEL(max_sec_level)) as null|anything in till_designs_pr_isnt_merged + if(!input) + return + max_sec_level = till_designs_pr_isnt_merged.Find(input) - 1 + if(max_sec_level < max_sec_level) + min_sec_level = SEC_LEVEL_GREEN + if("Lethals Only Toggle") + only_lethals = !only_lethals + + fail_message = "INVALID SECURITY LEVEL. CURRENT: [uppertext(NUM2SECLEVEL(GLOB.security_level))]. \ + MIN: [uppertext(NUM2SECLEVEL(min_sec_level))]. MAX: [uppertext(NUM2SECLEVEL(max_sec_level))]. \ + ONLY LETHALS: [only_lethals ? "YES" : "NO"]." + update_icon() + +/obj/item/firing_pin/security_level/update_overlays() + . = ..() + var/offset = 0 + for(var/level in list(min_sec_level, max_sec_level)) + var/mutable_appearance/overlay = mutable_appearance(icon, "pin_sec_level_overlay") + overlay.pixel_x += offset + offset += 4 + switch(level) + if(SEC_LEVEL_GREEN) + overlay.color = "#b2ff59" //light green + if(SEC_LEVEL_BLUE) + overlay.color = "#99ccff" //light blue + if(SEC_LEVEL_AMBER) + overlay.color = "#ffae42" //light yellow/orange + if(SEC_LEVEL_RED) + overlay.color = "#ff3f34" //light red + else + overlay.color = "#fe59c2" //neon fuchsia + . += overlay + var/mutable_appearance/overlay = mutable_appearance(icon, "pin_sec_level_overlay") + overlay.pixel_x += offset + overlay.color = only_lethals ? "#b2ff59" : "#ff3f34" + . += overlay + +/obj/item/firing_pin/security_level/pin_auth(mob/living/user) + return (only_lethals && !(gun.chambered?.harmful)) || ISINRANGE(GLOB.security_level, min_sec_level, max_sec_level) diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index 6094a7aa46..f55ce75baa 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -224,7 +224,7 @@ /obj/item/projectile/proc/vol_by_damage() if(src.damage) - return CLAMP((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then CLAMP the value between 30 and 100 + return clamp((src.damage) * 0.67, 30, 100)// Multiply projectile damage by 0.67, then CLAMP the value between 30 and 100 else return 50 //if the projectile doesn't do damage, play its hitsound at 50% volume @@ -255,7 +255,7 @@ def_zone = ran_zone(def_zone, max(100-(7*distance), 5) * zone_accuracy_factor) //Lower accurancy/longer range tradeoff. 7 is a balanced number to use. if(isturf(A) && hitsound_wall) - var/volume = CLAMP(vol_by_damage() + 20, 0, 100) + var/volume = clamp(vol_by_damage() + 20, 0, 100) if(suppressed) volume = 5 playsound(loc, hitsound_wall, volume, 1, -1) @@ -315,6 +315,8 @@ objs += O var/obj/O = safepick(objs) if(O) + if(length(O.buckled_mobs)) + return pick(O.buckled_mobs) return O //Nothing else is here that we can hit, hit the turf if we haven't. if(!(T in permutated) && can_hit_target(T, permutated, T == original, TRUE)) @@ -392,7 +394,7 @@ stack_trace("WARNING: Projectile [type] deleted due to being unable to resolve a target after angle was null!") qdel(src) return - var/turf/target = locate(CLAMP(starting + xo, 1, world.maxx), CLAMP(starting + yo, 1, world.maxy), starting.z) + var/turf/target = locate(clamp(starting + xo, 1, world.maxx), clamp(starting + yo, 1, world.maxy), starting.z) setAngle(Get_Angle(src, target)) original_angle = Angle if(!nondirectional_sprite) @@ -525,10 +527,10 @@ if(!homing_target) return FALSE var/datum/point/PT = RETURN_PRECISE_POINT(homing_target) - PT.x += CLAMP(homing_offset_x, 1, world.maxx) - PT.y += CLAMP(homing_offset_y, 1, world.maxy) + PT.x += clamp(homing_offset_x, 1, world.maxx) + PT.y += clamp(homing_offset_y, 1, world.maxy) var/angle = closer_angle_difference(Angle, angle_between_points(RETURN_PRECISE_POINT(src), PT)) - setAngle(Angle + CLAMP(angle, -homing_turn_speed, homing_turn_speed)) + setAngle(Angle + clamp(angle, -homing_turn_speed, homing_turn_speed)) /obj/item/projectile/proc/set_homing_target(atom/A) if(!A || (!isturf(A) && !isturf(A.loc))) @@ -622,7 +624,7 @@ var/ox = round(screenviewX/2) - user.client.pixel_x //"origin" x var/oy = round(screenviewY/2) - user.client.pixel_y //"origin" y - angle = ATAN2(y - oy, x - ox) + angle = arctan(y - oy, x - ox) return list(angle, p_x, p_y) /obj/item/projectile/Crossed(atom/movable/AM) //A mob moving on a tile with a projectile is hit by it. diff --git a/code/modules/projectiles/projectile/bullets/dart_syringe.dm b/code/modules/projectiles/projectile/bullets/dart_syringe.dm index 06d94414be..25809cc7ca 100644 --- a/code/modules/projectiles/projectile/bullets/dart_syringe.dm +++ b/code/modules/projectiles/projectile/bullets/dart_syringe.dm @@ -60,11 +60,11 @@ if(R.overdose_threshold == 0 || emptrig == TRUE) //Is there a possible OD? M.reagents.add_reagent(R.type, R.volume) else - var/transVol = CLAMP(R.volume, 0, (R.overdose_threshold - M.reagents.get_reagent_amount(R.type)) -1) + var/transVol = clamp(R.volume, 0, (R.overdose_threshold - M.reagents.get_reagent_amount(R.type)) -1) M.reagents.add_reagent(R.type, transVol) else if(!R.overdose_threshold == 0) - var/transVol = CLAMP(R.volume, 0, R.overdose_threshold-1) + var/transVol = clamp(R.volume, 0, R.overdose_threshold-1) M.reagents.add_reagent(R.type, transVol) else M.reagents.add_reagent(R.type, R.volume) diff --git a/code/modules/projectiles/projectile/bullets/shotgun.dm b/code/modules/projectiles/projectile/bullets/shotgun.dm index 4411334883..ff95b65a49 100644 --- a/code/modules/projectiles/projectile/bullets/shotgun.dm +++ b/code/modules/projectiles/projectile/bullets/shotgun.dm @@ -51,7 +51,7 @@ /obj/item/projectile/bullet/shotgun_meteorslug/on_hit(atom/target, blocked = FALSE) . = ..() - if(ismovableatom(target)) + if(ismovable(target)) var/atom/movable/M = target var/atom/throw_target = get_edge_target_turf(M, get_dir(src, get_step_away(M, src))) M.safe_throw_at(throw_target, 3, 2) diff --git a/code/modules/projectiles/projectile/special/ion.dm b/code/modules/projectiles/projectile/special/ion.dm index ae0888d3df..9755269031 100644 --- a/code/modules/projectiles/projectile/special/ion.dm +++ b/code/modules/projectiles/projectile/special/ion.dm @@ -3,7 +3,7 @@ icon_state = "ion" damage = 0 damage_type = BURN - nodamage = 1 + nodamage = TRUE flag = "energy" impact_effect_type = /obj/effect/temp_visual/impact_effect/ion var/emp_radius = 1 @@ -14,4 +14,4 @@ return BULLET_ACT_HIT /obj/item/projectile/ion/weak - emp_radius = 0 + emp_radius = 0 \ No newline at end of file diff --git a/code/modules/projectiles/projectile/special/neurotoxin.dm b/code/modules/projectiles/projectile/special/neurotoxin.dm index a72d078384..2f6a55a7d0 100644 --- a/code/modules/projectiles/projectile/special/neurotoxin.dm +++ b/code/modules/projectiles/projectile/special/neurotoxin.dm @@ -1,8 +1,9 @@ /obj/item/projectile/bullet/neurotoxin name = "neurotoxin spit" icon_state = "neurotoxin" - damage = 5 + damage = 15 damage_type = TOX + var/stagger_duration = 8 SECONDS /obj/item/projectile/bullet/neurotoxin/on_hit(atom/target, blocked = FALSE) if(isalien(target)) @@ -10,5 +11,6 @@ nodamage = TRUE else if(iscarbon(target)) var/mob/living/L = target - L.DefaultCombatKnockdown(100, TRUE, FALSE, 30, 25) + L.KnockToFloor(TRUE) + L.Stagger(stagger_duration) return ..() diff --git a/code/modules/reagents/chemistry/holder.dm b/code/modules/reagents/chemistry/holder.dm index 89dd229407..f4c06f39cc 100644 --- a/code/modules/reagents/chemistry/holder.dm +++ b/code/modules/reagents/chemistry/holder.dm @@ -728,7 +728,7 @@ return //Make sure things are limited, but superacids/bases can push forward the reaction - pH = CLAMP(pH, 0, 14) + pH = clamp(pH, 0, 14) //return said amount to compare for next step. return (reactedVol) @@ -849,7 +849,7 @@ /datum/reagents/proc/adjust_thermal_energy(J, min_temp = 2.7, max_temp = 1000) var/S = specific_heat() - chem_temp = CLAMP(chem_temp + (J / (S * total_volume)), min_temp, max_temp) + chem_temp = clamp(chem_temp + (J / (S * total_volume)), min_temp, max_temp) if(istype(my_atom, /obj/item/reagent_containers)) var/obj/item/reagent_containers/RC = my_atom RC.temp_check() @@ -877,7 +877,7 @@ for (var/datum/reagent/reagentgas in reagent_list) R.add_reagent(reagentgas, amount/5) remove_reagent(reagentgas, amount/5) - s.set_up(R, CLAMP(amount/10, 0, 2), T) + s.set_up(R, clamp(amount/10, 0, 2), T) s.start() return FALSE @@ -995,7 +995,7 @@ RC.pH_check()//checks beaker resilience) //clamp the removal amount to be between current reagent amount //and zero, to prevent removing more than the holder has stored - amount = CLAMP(amount, 0, R.volume) + amount = clamp(amount, 0, R.volume) R.volume -= amount update_total() if(!safety)//So it does not handle reactions when it need not to diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index 63e9d724a4..8572d30efe 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -151,7 +151,7 @@ target = text2num(target) . = TRUE if(.) - target_temperature = CLAMP(target, 0, 1000) + target_temperature = clamp(target, 0, 1000) if("eject") on = FALSE replace_beaker(usr) diff --git a/code/modules/reagents/chemistry/reagents.dm b/code/modules/reagents/chemistry/reagents.dm index 5eb5b94de9..a85ac8b085 100644 --- a/code/modules/reagents/chemistry/reagents.dm +++ b/code/modules/reagents/chemistry/reagents.dm @@ -51,7 +51,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) var/inverse_chem // What chem is metabolised when purity is below inverse_chem_val, this shouldn't be made, but if it does, well, I guess I'll know about it. var/metabolizing = FALSE var/chemical_flags // See fermi/readme.dm REAGENT_DEAD_PROCESS, REAGENT_DONOTSPLIT, REAGENT_ONLYINVERSE, REAGENT_ONMOBMERGE, REAGENT_INVISIBLE, REAGENT_FORCEONNEW, REAGENT_SNEAKYNAME - var/value = 0 //How much does it sell for in cargo? + var/value = REAGENT_VALUE_NONE //How much does it sell for in cargo? /datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references . = ..() @@ -62,7 +62,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent()) return 0 if(method == VAPOR) //smoke, foam, spray if(M.reagents) - var/modifier = CLAMP((1 - touch_protection), 0, 1) + var/modifier = clamp((1 - touch_protection), 0, 1) var/amount = round(reac_volume*modifier, 0.1) if(amount >= 0.5) M.reagents.add_reagent(type, amount) diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm index abe5c7de46..464557f617 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm @@ -14,6 +14,7 @@ taste_description = "alcohol" var/boozepwr = 65 //Higher numbers equal higher hardness, higher hardness equals more intense alcohol poisoning pH = 7.33 + value = REAGENT_VALUE_VERY_COMMON //don't bother tweaking all drinks values, way too many can easily be done roundstart or with an upgraded dispenser. /* Boozepwr Chart @@ -88,7 +89,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of beer" glass_desc = "A freezing pint of beer." pH = 4 - value = 0.1 /datum/reagent/consumable/ethanol/beer/light name = "Light Beer" @@ -98,7 +98,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of light beer" glass_desc = "A freezing pint of watery light beer." pH = 5 - value = 0.3 /datum/reagent/consumable/ethanol/beer/green name = "Green Beer" @@ -109,7 +108,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of green beer" glass_desc = "A freezing pint of green beer. Festive." pH = 6 - value = 0.3 /datum/reagent/consumable/ethanol/beer/green/on_mob_life(mob/living/carbon/M) if(M.color != color) @@ -129,7 +127,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "DAMN, THIS THING LOOKS ROBUST!" shot_glass_icon_state = "shotglasscream" pH = 6 - value = 0.1 /datum/reagent/consumable/ethanol/kahlua/on_mob_life(mob/living/carbon/M) @@ -152,7 +149,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." shot_glass_icon_state = "shotglassbrown" pH = 4.5 - value = 0.1 /datum/reagent/consumable/ethanol/thirteenloko name = "Thirteen Loko" @@ -167,7 +163,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "thirteen_loko_glass" glass_name = "glass of Thirteen Loko" glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass." - value = 0.3 /datum/reagent/consumable/ethanol/thirteenloko/on_mob_life(mob/living/carbon/M) M.drowsyness = max(0,M.drowsyness-7) @@ -229,7 +224,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "The glass contain wodka. Xynta." shot_glass_icon_state = "shotglassclear" pH = 8.1 - value = 0.1 /datum/reagent/consumable/ethanol/vodka/on_mob_life(mob/living/carbon/M) M.radiation = max(M.radiation-2,0) @@ -245,7 +239,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "glass_brown" glass_name = "glass of bilk" glass_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." - value = 0.5 /datum/reagent/consumable/ethanol/bilk/on_mob_life(mob/living/carbon/M) if(M.getBruteLoss() && prob(10)) @@ -264,7 +257,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Three Mile Island Ice Tea" glass_desc = "A glass of this is sure to prevent a meltdown." pH = 3.5 - value = 1 + value = REAGENT_VALUE_RARE /datum/reagent/consumable/ethanol/threemileisland/on_mob_life(mob/living/carbon/M) M.set_drugginess(50) @@ -280,7 +273,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of gin" glass_desc = "A crystal clear glass of Griffeater gin." pH = 6.9 - value = 0.1 /datum/reagent/consumable/ethanol/rum name = "Rum" @@ -293,7 +285,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Now you want to Pray for a pirate suit, don't you?" shot_glass_icon_state = "shotglassbrown" pH = 6.5 - value = 0.1 /datum/reagent/consumable/ethanol/tequila name = "Tequila" @@ -306,7 +297,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Now all that's missing is the weird colored shades!" shot_glass_icon_state = "shotglassgold" pH = 4 - value = 0.1 /datum/reagent/consumable/ethanol/vermouth name = "Vermouth" @@ -319,7 +309,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "You wonder why you're even drinking this straight." shot_glass_icon_state = "shotglassclear" pH = 3.25 - value = 0.1 /datum/reagent/consumable/ethanol/wine name = "Wine" @@ -332,7 +321,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "A very classy looking drink." shot_glass_icon_state = "shotglassred" pH = 3.45 - value = 0.1 /datum/reagent/consumable/ethanol/lizardwine name = "Lizard wine" @@ -342,7 +330,7 @@ All effects don't start immediately, but rather get worse over time; the rate is quality = DRINK_FANTASTIC taste_description = "scaley sweetness" pH = 3 - value = 2 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/consumable/ethanol/grappa name = "Grappa" @@ -354,7 +342,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of grappa" glass_desc = "A fine drink originally made to prevent waste by using the leftovers from winemaking." pH = 3.5 - value = 0.1 /datum/reagent/consumable/ethanol/cognac name = "Cognac" @@ -367,7 +354,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Damn, you feel like some kind of French aristocrat just by holding this." shot_glass_icon_state = "shotglassbrown" pH = 3.5 - value = 0.1 /datum/reagent/consumable/ethanol/absinthe name = "Absinthe" @@ -379,7 +365,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of absinthe" glass_desc = "It's as strong as it smells." shot_glass_icon_state = "shotglassgreen" - value = 0.1 /datum/reagent/consumable/ethanol/absinthe/on_mob_life(mob/living/carbon/M) if(prob(10) && !HAS_TRAIT(M, TRAIT_ALCOHOL_TOLERANCE)) @@ -395,6 +380,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "glass_brown2" glass_name = "Hooch" glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/hooch/on_mob_life(mob/living/carbon/M) if(M.mind && M.mind.assigned_role == "Assistant") @@ -412,7 +398,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of ale" glass_desc = "A freezing pint of delicious Ale." pH = 4.5 - value = 0.1 /datum/reagent/consumable/ethanol/goldschlager name = "Goldschlager" @@ -425,7 +410,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "glass of goldschlager" glass_desc = "100% proof that teen girls will drink anything with gold in it." shot_glass_icon_state = "shotglassgold" - value = 0.5 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/patron name = "Patron" @@ -439,7 +424,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Drinking patron in the bar, with all the subpar ladies." shot_glass_icon_state = "shotglassclear" pH = 4.5 - value = 0.1 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/gintonic name = "Gin and Tonic" @@ -452,7 +437,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Gin and Tonic" glass_desc = "A mild but still great cocktail. Drink up, like a true Englishman." pH = 3 - value = 0.5 /datum/reagent/consumable/ethanol/rum_coke name = "Rum and Coke" @@ -465,7 +449,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Rum and Coke" glass_desc = "The classic go-to of space-fratboys." pH = 4 - value = 1 /datum/reagent/consumable/ethanol/cuba_libre name = "Cuba Libre" @@ -477,8 +460,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "cubalibreglass" glass_name = "Cuba Libre" glass_desc = "A classic mix of rum, cola, and lime. A favorite of revolutionaries everywhere!" - value = 0.5 - /datum/reagent/consumable/ethanol/cuba_libre/on_mob_life(mob/living/carbon/M) if(M.mind && M.mind.has_antag_datum(/datum/antagonist/rev)) //Cuba Libre, the traditional drink of revolutions! Heals revolutionaries. @@ -499,7 +480,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "whiskeycolaglass" glass_name = "whiskey cola" glass_desc = "An innocent-looking mixture of cola and Whiskey. Delicious." - value = 0.5 /datum/reagent/consumable/ethanol/martini name = "Classic Martini" @@ -511,7 +491,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "martiniglass" glass_name = "Classic Martini" glass_desc = "Damn, the bartender even stirred it, not shook it." - value = 1 /datum/reagent/consumable/ethanol/vodkamartini name = "Vodka Martini" @@ -523,7 +502,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "martiniglass" glass_name = "Vodka martini" glass_desc ="A bastardisation of the classic martini. Still great." - value = 1 /datum/reagent/consumable/ethanol/white_russian @@ -536,7 +514,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "whiterussianglass" glass_name = "White Russian" glass_desc = "A very nice looking drink. But that's just, like, your opinion, man." - value = 1 /datum/reagent/consumable/ethanol/screwdrivercocktail name = "Screwdriver" @@ -548,7 +525,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "screwdriverglass" glass_name = "Screwdriver" glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." - value = 1 /datum/reagent/consumable/ethanol/screwdrivercocktail/on_mob_life(mob/living/carbon/M) if(M.mind && (M.mind.assigned_role in list("Station Engineer", "Atmospheric Technician", "Chief Engineer"))) //Engineers lose radiation poisoning at a massive rate. @@ -564,7 +540,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "booger" glass_name = "Booger" glass_desc = "Ewww..." - value = 0.3 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/bloody_mary name = "Bloody Mary" @@ -576,7 +552,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "bloodymaryglass" glass_name = "Bloody Mary" glass_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." - value = 1.3 /datum/reagent/consumable/ethanol/bloody_mary/on_mob_life(mob/living/carbon/C) if(AmBloodsucker(C)) @@ -595,7 +570,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "bravebullglass" glass_name = "Brave Bull" glass_desc = "Tequila and Coffee liqueur, brought together in a mouthwatering mixture. Drink up." - value = 2 var/tough_text /datum/reagent/consumable/ethanol/brave_bull/on_mob_metabolize(mob/living/M) @@ -619,7 +593,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "tequilasunriseglass" glass_name = "tequila Sunrise" glass_desc = "Oh great, now you feel nostalgic about sunrises back on Terra..." - value = 2 var/obj/effect/light_holder /datum/reagent/consumable/ethanol/tequila_sunrise/on_mob_metabolize(mob/living/M) @@ -649,7 +622,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Toxins Special" glass_desc = "Whoah, this thing is on FIRE!" shot_glass_icon_state = "toxinsspecialglass" - value = 2 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/toxins_special/on_mob_life(var/mob/living/M) M.adjust_bodytemperature(15 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp. @@ -668,7 +641,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." pH = 2 overdose_threshold = 40 - value = 3 var/datum/brain_trauma/special/beepsky/B /datum/reagent/consumable/ethanol/beepsky_smash/on_mob_metabolize(mob/living/carbon/M) @@ -709,7 +681,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "irishcreamglass" glass_name = "Irish Cream" glass_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" - value = 1 /datum/reagent/consumable/ethanol/manly_dorf name = "The Manly Dorf" @@ -721,14 +692,13 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "manlydorfglass" glass_name = "The Manly Dorf" glass_desc = "A manly concoction made from Ale and Beer. Intended for true men only." - value = 2 var/dorf_mode /datum/reagent/consumable/ethanol/manly_dorf/on_mob_metabolize(mob/living/M) var/real_dorf = isdwarf(M) //_species(H, /datum/species/dwarf) if(ishuman(M)) var/mob/living/carbon/human/H = M - if(H.dna.check_mutation(DWARFISM) || HAS_TRAIT(H, TRAIT_ALCOHOL_TOLERANCE) || real_dorf) + if(HAS_TRAIT(H, TRAIT_DWARF) || HAS_TRAIT(H, TRAIT_ALCOHOL_TOLERANCE || real_dorf)) to_chat(H, "Now THAT is MANLY!") if(real_dorf) boozepwr = 100 // Don't want dwarves to die because of a low booze power @@ -752,7 +722,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "longislandicedteaglass" glass_name = "Long Island Iced Tea" glass_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." - value = 1 /datum/reagent/consumable/ethanol/moonshine name = "Moonshine" @@ -763,7 +732,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "glass_clear" glass_name = "Moonshine" glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night." - value = 2 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/b52 name = "B-52" @@ -776,7 +745,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "B-52" glass_desc = "Kahlua, Irish Cream, and cognac. You will get bombed." shot_glass_icon_state = "b52glass" - value = 5.2 /datum/reagent/consumable/ethanol/b52/on_mob_metabolize(mob/living/M) playsound(M, 'sound/effects/explosion_distant.ogg', 100, FALSE) @@ -791,7 +759,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "irishcoffeeglass" glass_name = "Irish Coffee" glass_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." - value = 2 /datum/reagent/consumable/ethanol/margarita name = "Margarita" @@ -803,7 +770,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "margaritaglass" glass_name = "Margarita" glass_desc = "On the rocks with salt on the rim. Arriba~!" - value = 2 /datum/reagent/consumable/ethanol/black_russian name = "Black Russian" @@ -815,7 +781,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "blackrussianglass" glass_name = "Black Russian" glass_desc = "For the lactose-intolerant. Still as classy as a White Russian." - value = 3 /datum/reagent/consumable/ethanol/manhattan @@ -828,7 +793,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "manhattanglass" glass_name = "Manhattan" glass_desc = "The Detective's undercover drink of choice. He never could stomach gin..." - value = 3 /datum/reagent/consumable/ethanol/manhattan_proj @@ -841,7 +805,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "proj_manhattanglass" glass_name = "Manhattan Project" glass_desc = "A scientist's drink of choice, for thinking how to blow up the station." - value = 6 + value = REAGENT_VALUE_RARE /datum/reagent/consumable/ethanol/manhattan_proj/on_mob_life(mob/living/carbon/M) @@ -858,7 +822,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "whiskeysodaglass2" glass_name = "whiskey soda" glass_desc = "Ultimate refreshment." - value = 1 /datum/reagent/consumable/ethanol/antifreeze name = "Anti-freeze" @@ -870,7 +833,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "antifreeze" glass_name = "Anti-freeze" glass_desc = "The ultimate refreshment." - value = 3 /datum/reagent/consumable/ethanol/antifreeze/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(20 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 20) //310.15 is the normal bodytemp. @@ -886,7 +848,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "b&p" glass_name = "Barefoot" glass_desc = "Barefoot and pregnant." - value = 4 /datum/reagent/consumable/ethanol/barefoot/on_mob_life(mob/living/carbon/M) if(ishuman(M)) //Barefoot causes the imbiber to quickly regenerate brute trauma if they're not wearing shoes. @@ -906,7 +867,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "snowwhite" glass_name = "Snow White" glass_desc = "A cold refreshment." - value = 1 /datum/reagent/consumable/ethanol/demonsblood //Prevents the imbiber from being dragged into a pool of blood by a slaughter demon. name = "Demon's Blood" @@ -918,7 +878,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "demonsblood" glass_name = "Demons Blood" glass_desc = "Just looking at this thing makes the hair at the back of your neck stand up." - value = 2 /datum/reagent/consumable/ethanol/devilskiss //If eaten by a slaughter demon, the demon will regret it. name = "Devil's Kiss" @@ -930,7 +889,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "devilskiss" glass_name = "Devils Kiss" glass_desc = "Creepy time!" - value = 2 /datum/reagent/consumable/ethanol/vodkatonic name = "Vodka and Tonic" @@ -942,7 +900,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "vodkatonicglass" glass_name = "vodka and tonic" glass_desc = "For when a gin and tonic isn't Russian enough." - value = 1 /datum/reagent/consumable/ethanol/ginfizz name = "Gin Fizz" @@ -954,7 +911,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "ginfizzglass" glass_name = "gin fizz" glass_desc = "Refreshingly lemony, deliciously dry." - value = 1 /datum/reagent/consumable/ethanol/bahama_mama name = "Bahama Mama" @@ -966,7 +922,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "bahama_mama" glass_name = "Bahama Mama" glass_desc = "A tropical cocktail with a complex blend of flavors." - value = 2 /datum/reagent/consumable/ethanol/singulo name = "Singulo" @@ -978,7 +933,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "singulo" glass_name = "Singulo" glass_desc = "A blue-space beverage." - value = 4 /datum/reagent/consumable/ethanol/sbiten name = "Sbiten" @@ -990,7 +944,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "sbitenglass" glass_name = "Sbiten" glass_desc = "A spicy mix of Vodka and Spice. Very hot." - value = 2 /datum/reagent/consumable/ethanol/sbiten/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(50 * TEMPERATURE_DAMAGE_COEFFICIENT, 0 ,BODYTEMP_HEAT_DAMAGE_LIMIT) //310.15 is the normal bodytemp. @@ -1006,7 +959,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "red_meadglass" glass_name = "Red Mead" glass_desc = "A True Viking's Beverage, though its color is strange." - value = 5 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/mead name = "Mead" @@ -1019,7 +972,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "meadglass" glass_name = "Mead" glass_desc = "A Viking's Beverage, though a cheap one." - value = 1 /datum/reagent/consumable/ethanol/iced_beer name = "Iced Beer" @@ -1030,7 +982,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "iced_beerglass" glass_name = "iced beer" glass_desc = "A beer so frosty, the air around it freezes." - value = 1 /datum/reagent/consumable/ethanol/iced_beer/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) //310.15 is the normal bodytemp. @@ -1045,7 +996,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "grogglass" glass_name = "Grog" glass_desc = "A fine and cepa drink for Space." - value = 2.1 /datum/reagent/consumable/ethanol/aloe name = "Aloe" @@ -1057,7 +1007,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "aloe" glass_name = "Aloe" glass_desc = "Very, very, very good." - value = 1 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/andalusia name = "Andalusia" @@ -1069,7 +1019,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "andalusia" glass_name = "Andalusia" glass_desc = "A nice, strangely named drink." - value = 1 /datum/reagent/consumable/ethanol/alliescocktail name = "Allies Cocktail" @@ -1081,7 +1030,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "alliescocktail" glass_name = "Allies cocktail" glass_desc = "A drink made from your allies." - value = 4 /datum/reagent/consumable/ethanol/acid_spit name = "Acid Spit" @@ -1093,7 +1041,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "acidspitglass" glass_name = "Acid Spit" glass_desc = "A drink from Nanotrasen. Made from live aliens." - value = 3 /datum/reagent/consumable/ethanol/amasec name = "Amasec" @@ -1105,7 +1052,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "amasecglass" glass_name = "Amasec" glass_desc = "Always handy before COMBAT!!!" - value = 2 /datum/reagent/consumable/ethanol/changelingsting name = "Changeling Sting" @@ -1117,14 +1063,13 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "changelingsting" glass_name = "Changeling Sting" glass_desc = "A stingy drink." - value = 1.5 /datum/reagent/consumable/ethanol/changelingsting/on_mob_life(mob/living/carbon/M) if(M.mind) //Changeling Sting assists in the recharging of changeling chemicals. var/datum/antagonist/changeling/changeling = M.mind.has_antag_datum(/datum/antagonist/changeling) if(changeling) changeling.chem_charges += metabolization_rate - changeling.chem_charges = CLAMP(changeling.chem_charges, 0, changeling.chem_storage) + changeling.chem_charges = clamp(changeling.chem_charges, 0, changeling.chem_storage) return ..() /datum/reagent/consumable/ethanol/irishcarbomb @@ -1137,7 +1082,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "irishcarbomb" glass_name = "Irish Car Bomb" glass_desc = "An Irish car bomb." - value = 5 /datum/reagent/consumable/ethanol/syndicatebomb name = "Syndicate Bomb" @@ -1149,7 +1093,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "syndicatebomb" glass_name = "Syndicate Bomb" glass_desc = "A syndicate bomb." - value = 2 /datum/reagent/consumable/ethanol/syndicatebomb/on_mob_life(mob/living/carbon/M) if(prob(5)) @@ -1177,7 +1120,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "erikasurprise" glass_name = "Erika Surprise" glass_desc = "The surprise is, it's green!" - value = 4 /datum/reagent/consumable/ethanol/driestmartini name = "Driest Martini" @@ -1190,7 +1132,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "driestmartiniglass" glass_name = "Driest Martini" glass_desc = "Only for the experienced. You think you see sand floating in the glass." - value = 5 /datum/reagent/consumable/ethanol/bananahonk name = "Banana Honk" @@ -1203,7 +1144,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "bananahonkglass" glass_name = "Banana Honk" glass_desc = "A drink from Clown Heaven." - value = 8 /datum/reagent/consumable/ethanol/bananahonk/on_mob_life(mob/living/carbon/M) if((ishuman(M) && M.job == "Clown") || ismonkey(M)) @@ -1222,7 +1162,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "silencerglass" glass_name = "Silencer" glass_desc = "A drink from Mime Heaven." - value = 2 /datum/reagent/consumable/ethanol/silencer/on_mob_life(mob/living/carbon/M) if(ishuman(M) && M.job == "Mime") @@ -1240,7 +1179,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "drunkenblumpkin" glass_name = "Drunken Blumpkin" glass_desc = "A drink for the drunks." - value = 3 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/whiskey_sour //Requested since we had whiskey cola and soda but not sour. name = "Whiskey Sour" @@ -1252,7 +1191,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "whiskey_sour" glass_name = "whiskey sour" glass_desc = "Lemon juice mixed with whiskey and a dash of sugar. Surprisingly satisfying." - value = 2 /datum/reagent/consumable/ethanol/hcider name = "Hard Cider" @@ -1265,7 +1203,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "hard cider" glass_desc = "Tastes like autumn... no wait, fall!" shot_glass_icon_state = "shotglassbrown" - value = 3 /datum/reagent/consumable/ethanol/fetching_fizz //A reference to one of my favorite games of all time. Pulls nearby ores to the imbiber! name = "Fetching Fizz" @@ -1278,7 +1215,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "fetching_fizz" glass_name = "Fetching Fizz" glass_desc = "Induces magnetism in the imbiber. Started as a barroom prank but evolved to become popular with miners and scrappers. Metallic aftertaste." - value = 2 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/consumable/ethanol/fetching_fizz/on_mob_life(mob/living/carbon/M) for(var/obj/item/stack/ore/O in orange(3, M)) @@ -1297,7 +1234,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "hearty_punch" glass_name = "Hearty Punch" glass_desc = "Aromatic beverage served piping hot. According to folk tales it can almost wake the dead." - value = 1 + value = REAGENT_VALUE_RARE //considering the low recipe yield. /datum/reagent/consumable/ethanol/hearty_punch/on_mob_life(mob/living/carbon/M) if(M.health <= 0) @@ -1318,8 +1255,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "glass_brown2" glass_name = "Bacchus' Blessing" glass_desc = "You didn't think it was possible for a liquid to be so utterly revolting. Are you sure about this...?" - value = 8 - + value = REAGENT_VALUE_RARE /datum/reagent/consumable/ethanol/atomicbomb name = "Atomic Bomb" @@ -1331,7 +1267,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "atomicbombglass" glass_name = "Atomic Bomb" glass_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing." - value = 3.56 + value = REAGENT_VALUE_RARE /datum/reagent/consumable/ethanol/atomicbomb/on_mob_life(mob/living/carbon/M) M.set_drugginess(50) @@ -1360,7 +1296,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "gargleblasterglass" glass_name = "Pan-Galactic Gargle Blaster" glass_desc = "Like having your brain smashed out by a slice of lemon wrapped around a large gold brick." - value = 5 /datum/reagent/consumable/ethanol/gargle_blaster/on_mob_life(mob/living/carbon/M) M.dizziness +=1.5 @@ -1393,7 +1328,7 @@ All effects don't start immediately, but rather get worse over time; the rate is impure_chem = /datum/reagent/consumable/ethanol/neuroweak inverse_chem_val = 0.5 //Clear conversion inverse_chem = /datum/reagent/consumable/ethanol/neuroweak - value = 4 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/consumable/ethanol/neurotoxin/proc/pickt() return (pick(TRAIT_PARALYSIS_L_ARM,TRAIT_PARALYSIS_R_ARM,TRAIT_PARALYSIS_R_LEG,TRAIT_PARALYSIS_L_LEG)) @@ -1434,7 +1369,6 @@ All effects don't start immediately, but rather get worse over time; the rate is description = "A mostly safe alcoholic drink for the true daredevils. Counteracts Neurotoxins." boozepwr = 60 pH = 8 - value = 3 /datum/reagent/consumable/ethanol/neuroweak/on_mob_life(mob/living/carbon/M) if(holder.has_reagent(/datum/reagent/consumable/ethanol/neurotoxin)) @@ -1460,7 +1394,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "hippiesdelightglass" glass_name = "Hippie's Delight" glass_desc = "A drink enjoyed by people during the 1960's." - value = 1.96 + value = REAGENT_VALUE_RARE /datum/reagent/consumable/ethanol/hippies_delight/on_mob_life(mob/living/carbon/M) M.slurring = max(M.slurring,50) @@ -1504,8 +1438,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "nog3" glass_name = "eggnog" glass_desc = "The traditional way to get absolutely hammered at a Christmas party." - value = 4 - /datum/reagent/consumable/ethanol/narsour name = "Nar'Sour" @@ -1517,7 +1449,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "narsour" glass_name = "Nar'Sour" glass_desc = "A new hit cocktail inspired by THE ARM Breweries will have you shouting Fuu ma'jin in no time!" - value = 6.66 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/consumable/ethanol/narsour/on_mob_life(mob/living/carbon/M) M.cultslurring = min(M.cultslurring + 3, 3) @@ -1534,7 +1466,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "cogchamp" glass_name = "CogChamp" glass_desc = "Not even Ratvar's Four Generals could withstand this! Qevax Jryy!" - value = 8.13 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/consumable/ethanol/cogchamp/on_mob_life(mob/living/carbon/M) M.clockcultslurring = min(M.clockcultslurring + 3, 3) @@ -1550,7 +1482,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "glass_orange" glass_name = "Triple Sec" glass_desc = "A glass of straight Triple Sec." - value = 1.5 /datum/reagent/consumable/ethanol/creme_de_menthe name = "Creme de Menthe" @@ -1561,7 +1492,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "glass_green" glass_name = "Creme de Menthe" glass_desc = "You can almost feel the first breath of spring just looking at it." - value = 2 /datum/reagent/consumable/ethanol/creme_de_cacao name = "Creme de Cacao" @@ -1572,7 +1502,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "glass_brown" glass_name = "Creme de Cacao" glass_desc = "A million hazing lawsuits and alcohol poisonings have started with this humble ingredient." - value = 1 /datum/reagent/consumable/ethanol/creme_de_coconut name = "Creme de Coconut" @@ -1594,7 +1523,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "quadruple_sec" glass_name = "Quadruple Sec" glass_desc = "An intimidating and lawful beverage dares you to violate the law and make its day. Still can't drink it on duty, though." - value = 3.04 /datum/reagent/consumable/ethanol/quadruple_sec/on_mob_life(mob/living/carbon/M) if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) //Securidrink in line with the screwderiver for engineers or nothing for mimes. @@ -1613,7 +1541,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "quintuple_sec" glass_name = "Quintuple Sec" glass_desc = "Now you are become law, destroyer of clowns." - value = 4.01 + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/consumable/ethanol/quintuple_sec/on_mob_life(mob/living/carbon/M) if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) //Securidrink in line with the screwderiver for engineers or nothing for mimes but STRONG.. @@ -1657,7 +1585,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "grasshopper" glass_name = "Grasshopper" glass_desc = "You weren't aware edible beverages could be that green." - value = 1 /datum/reagent/consumable/ethanol/stinger name = "Stinger" @@ -1669,7 +1596,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "stinger" glass_name = "Stinger" glass_desc = "You wonder what would happen if you pointed this at a heat source..." - value = 1 /datum/reagent/consumable/ethanol/bastion_bourbon name = "Bastion Bourbon" @@ -1684,7 +1610,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_desc = "If you're feeling low, count on the buttery flavor of our own bastion bourbon." shot_glass_icon_state = "shotglassgreen" pH = 4 - value = 8 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/consumable/ethanol/bastion_bourbon/on_mob_metabolize(mob/living/L) var/heal_points = 10 @@ -1721,7 +1647,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Squirt Cider" glass_desc = "Squirt cider will toughen you right up. Too bad about the musty aftertaste." shot_glass_icon_state = "shotglassgreen" - value = 1 /datum/reagent/consumable/ethanol/squirt_cider/on_mob_life(mob/living/carbon/M) M.satiety += 5 //for context, vitamins give 30 satiety per tick @@ -1738,7 +1663,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "fringe_weaver" glass_name = "Fringe Weaver" glass_desc = "It's a wonder it doesn't spill out of the glass." - value = 1 /datum/reagent/consumable/ethanol/sugar_rush name = "Sugar Rush" @@ -1751,7 +1675,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "sugar_rush" glass_name = "Sugar Rush" glass_desc = "If you can't mix a Sugar Rush, you can't tend bar." - value = 1 /datum/reagent/consumable/ethanol/sugar_rush/on_mob_life(mob/living/carbon/M) M.satiety -= 10 //junky as hell! a whole glass will keep you from being able to eat junk food @@ -1768,7 +1691,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "crevice_spike" glass_name = "Crevice Spike" glass_desc = "It'll either knock the drunkenness out of you or knock you out cold. Both, probably." - value = 1 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/crevice_spike/on_mob_metabolize(mob/living/L) //damage only applies when drink first enters system and won't again until drink metabolizes out L.adjustBruteLoss(3 * min(5,volume)) //minimum 3 brute damage on ingestion to limit non-drink means of injury - a full 5 unit gulp of the drink trucks you for the full 15 @@ -1782,7 +1705,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "sakecup" glass_name = "cup of sake" glass_desc = "A traditional cup of sake." - value = 0.1 /datum/reagent/consumable/ethanol/peppermint_patty name = "Peppermint Patty" @@ -1794,7 +1716,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "peppermint_patty" glass_name = "Peppermint Patty" glass_desc = "A boozy minty hot cocoa that warms your belly on a cold night." - value = 2 /datum/reagent/consumable/ethanol/peppermint_patty/on_mob_life(mob/living/carbon/M) M.apply_status_effect(/datum/status_effect/throat_soothed) @@ -1812,7 +1733,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_name = "Alexander" glass_desc = "A creamy, indulgent delight that is stronger than it seems." var/obj/item/shield/mighty_shield - value = 1 /datum/reagent/consumable/ethanol/alexander/on_mob_metabolize(mob/living/L) if(ishuman(L)) @@ -1844,7 +1764,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "sidecar" glass_name = "Sidecar" glass_desc = "The one ride you'll gladly give up the wheel for." - value = 1 /datum/reagent/consumable/ethanol/between_the_sheets name = "Between the Sheets" @@ -1856,7 +1775,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "between_the_sheets" glass_name = "Between the Sheets" glass_desc = "The only drink that comes with a label reminding you of Nanotrasen's zero-tolerance promiscuity policy." - value = 2 /datum/reagent/consumable/ethanol/between_the_sheets/on_mob_life(mob/living/L) ..() @@ -1881,7 +1799,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "kamikaze" glass_name = "Kamikaze" glass_desc = "Divinely windy." - value = 1 /datum/reagent/consumable/ethanol/mojito name = "Mojito" @@ -1893,7 +1810,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "mojito" glass_name = "Mojito" glass_desc = "A drink that looks as refreshing as it tastes." - value = 1 /datum/reagent/consumable/ethanol/moscow_mule name = "Moscow Mule" @@ -1914,7 +1830,6 @@ All effects don't start immediately, but rather get worse over time; the rate is taste_description = "utter bitterness" glass_name = "glass of fernet" glass_desc = "A glass of pure Fernet. Only an absolute madman would drink this alone." - value = 0.1 /datum/reagent/consumable/ethanol/fernet/on_mob_life(mob/living/carbon/M) if(M.nutrition <= NUTRITION_LEVEL_STARVING) @@ -1933,7 +1848,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "godlyblend" glass_name = "glass of fernet cola" glass_desc = "A sawed-off cola bottle filled with Fernet Cola. Nothing better after eating like a lardass." - value = 1 /datum/reagent/consumable/ethanol/fernet_cola/on_mob_life(mob/living/carbon/M) if(M.nutrition <= NUTRITION_LEVEL_STARVING) @@ -1943,7 +1857,6 @@ All effects don't start immediately, but rather get worse over time; the rate is return ..() /datum/reagent/consumable/ethanol/fanciulli - name = "Fanciulli" description = "What if the Manhattan coctail ACTUALLY used a bitter herb liquour? Helps you sobers up." //also causes a bit of stamina damage to symbolize the afterdrink lazyness color = "#CA933F" // rgb: 202, 147, 63 @@ -1953,7 +1866,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "fanciulli" glass_name = "glass of fanciulli" glass_desc = "A glass of Fanciulli. It's just Manhattan with Fernet." - value = 1 /datum/reagent/consumable/ethanol/fanciulli/on_mob_life(mob/living/carbon/M) M.nutrition = max(M.nutrition - 5, 0) @@ -1966,7 +1878,6 @@ All effects don't start immediately, but rather get worse over time; the rate is . = TRUE ..() - /datum/reagent/consumable/ethanol/branca_menta name = "Branca Menta" description = "A refreshing mixture of bitter Fernet with mint creme liquour." @@ -1977,7 +1888,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state= "minted_fernet" glass_name = "glass of branca menta" glass_desc = "A glass of Branca Menta, perfect for those lazy and hot sunday summer afternoons." //Get lazy literally by drinking this - value = 1 /datum/reagent/consumable/ethanol/branca_menta/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT, T0C) @@ -2000,7 +1910,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "blank_paper" glass_name = "glass of blank paper" glass_desc = "A fizzy cocktail for those looking to start fresh." - value = 1 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/consumable/ethanol/blank_paper/on_mob_life(mob/living/carbon/M) if(ishuman(M) && M.job == "Mime") @@ -2017,7 +1927,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "champagne_glass" glass_name = "Champagne" glass_desc = "The flute clearly displays the slowly rising bubbles." - value = 1 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/wizz_fizz name = "Wizz Fizz" @@ -2029,7 +1939,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "wizz_fizz" glass_name = "Wizz Fizz" glass_desc = "The glass bubbles and froths with an almost magical intensity." - value = 1 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/wizz_fizz/on_mob_life(mob/living/carbon/M) //A healing drink similar to Quadruple Sec, Ling Stings, and Screwdrivers for the Wizznerds; the check is consistent with the changeling sting @@ -2049,7 +1959,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "bug_spray" glass_name = "Bug Spray" glass_desc = "Your eyes begin to water as the sting of alcohol reaches them." - value = 1 /datum/reagent/consumable/ethanol/bug_spray/on_mob_life(mob/living/carbon/M) //Bugs should not drink Bug spray. @@ -2071,7 +1980,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "applejack_glass" glass_name = "Applejack" glass_desc = "You feel like you could drink this all neight." - value = 0.1 /datum/reagent/consumable/ethanol/jack_rose name = "Jack Rose" @@ -2083,7 +1991,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "jack_rose" glass_name = "Jack Rose" glass_desc = "Enough of these, and you really will start to suppose your toeses are roses." - value = 1 /datum/reagent/consumable/ethanol/turbo name = "Turbo" @@ -2095,7 +2002,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "turbo" glass_name = "Turbo" glass_desc = "A turbulent cocktail for outlaw hoverbikers." - value = 0.3 + value = REAGENT_VALUE_RARE /datum/reagent/consumable/ethanol/turbo/on_mob_life(mob/living/carbon/M) if(prob(4)) @@ -2113,7 +2020,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "old_timer" glass_name = "Old Timer" glass_desc = "WARNING! May cause premature aging!" - value = 2 + value = REAGENT_VALUE_UNCOMMON //Parsnip juice? Really? lol /datum/reagent/consumable/ethanol/old_timer/on_mob_life(mob/living/carbon/M) if(prob(20)) @@ -2146,7 +2053,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "rubberneck" glass_name = "Rubberneck" glass_desc = "A popular drink amongst those adhering to an all synthetic diet." - value = 1 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/duplex name = "Duplex" @@ -2158,7 +2065,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "duplex" glass_name = "Duplex" glass_desc = "To imbibe one component separately from the other is consider a great faux pas." - value = 1 /datum/reagent/consumable/ethanol/trappist name = "Trappist Beer" @@ -2170,7 +2076,6 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "trappistglass" glass_name = "Trappist Beer" glass_desc = "boozy Catholicism in a glass." - value = 1 /datum/reagent/consumable/ethanol/trappist/on_mob_life(mob/living/carbon/M) if(M.mind.isholy) @@ -2188,8 +2093,8 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "blazaamglass" glass_name = "Blazaam" glass_desc = "The glass seems to be sliding between realities. Doubles as a Berenstain remover." + value = REAGENT_VALUE_UNCOMMON var/stored_teleports = 0 - value = 4 /datum/reagent/consumable/ethanol/blazaam/on_mob_life(mob/living/carbon/M) if(M.drunkenness > 40) @@ -2211,7 +2116,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "planet_cracker" glass_name = "Planet Cracker" glass_desc = "Although historians believe the drink was originally created to commemorate the end of an important conflict in man's past, its origins have largely been forgotten and it is today seen more as a general symbol of human supremacy." - value = 1 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/consumable/ethanol/mauna_loa name = "Mauna Loa" @@ -2223,6 +2128,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "mauna_loa" glass_name = "Mauna Loa" glass_desc = "Lavaland in a drink... mug... volcano... thing." + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/mauna_loa/on_mob_life(mob/living/carbon/M) // Heats the user up while the reagent is in the body. Occasionally makes you burst into flames. @@ -2236,13 +2142,14 @@ All effects don't start immediately, but rather get worse over time; the rate is name = "Commander and Chief" description = "A cocktail for the captain on the go." color = "#ffffc9" + can_synth = FALSE boozepwr = 50 quality = DRINK_FANTASTIC taste_description = "duty and responsibility" glass_icon_state = "commander_and_chief" glass_name = "Commander and Chief" glass_desc = "The gems of this majestic chalice represent the departments and their Heads." - value = 10 + value = REAGENT_VALUE_AMAZING /datum/reagent/consumable/ethanol/commander_and_chief/on_mob_life(mob/living/carbon/M) if(M.mind && HAS_TRAIT(M.mind, TRAIT_CAPTAIN_METABOLISM)) @@ -2281,6 +2188,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "hellfire" glass_name = "Hellfire" glass_desc = "An amber colored drink that isn't quite as hot as it looks." + value = REAGENT_VALUE_UNCOMMON /datum/reagent/consumable/ethanol/hellfire/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(30 * TEMPERATURE_DAMAGE_COEFFICIENT, 0, BODYTEMP_NORMAL + 30) @@ -2296,6 +2204,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "sins_delight" glass_name = "Sin's Delight" glass_desc = "You can smell the seven sins rolling off the top of the glass." + value = REAGENT_VALUE_RARE /datum/reagent/consumable/ethanol/strawberry_daiquiri name = "Strawberry Daiquiri" @@ -2328,6 +2237,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "miami_vice" glass_name = "Miami Vice" glass_desc = "Strawberries and coconut, like yin and yang." + value = REAGENT_VALUE_UNCOMMON /datum/reagent/consumable/ethanol/malibu_sunset name = "Malibu Sunset" @@ -2350,6 +2260,7 @@ All effects don't start immediately, but rather get worse over time; the rate is glass_icon_state = "hotlime_miami" glass_name = "Hotlime Miami" glass_desc = "This looks very aesthetically pleasing." + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ethanol/hotlime_miami/on_mob_life(mob/living/carbon/M) M.set_drugginess(50) @@ -2580,7 +2491,6 @@ All effects don't start immediately, but rather get worse over time; the rate is var/list/names = list("null fruit" = 1) //Names of the fruits used. Associative list where name is key, value is the percentage of that fruit. var/list/tastes = list("bad coding" = 1) //List of tastes. See above. pH = 4 - value = 4 /datum/reagent/consumable/ethanol/fruit_wine/on_new(list/data) names = data["names"] diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm index ebbce61c57..62aea28009 100644 --- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm @@ -165,6 +165,7 @@ metabolization_rate = INFINITY color = "#FF4DD2" taste_description = "laughter" + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/consumable/laughter/on_mob_life(mob/living/carbon/M) M.emote("laugh") @@ -177,6 +178,7 @@ metabolization_rate = 1.5 * REAGENTS_METABOLISM color = "#FF4DD2" taste_description = "laughter" + value = REAGENT_VALUE_RARE /datum/reagent/consumable/superlaughter/on_mob_life(mob/living/carbon/M) if(prob(30)) @@ -210,6 +212,7 @@ glass_name = "glass of milk" glass_desc = "White and nutritious goodness!" pH = 6.5 + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M) if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER)) @@ -231,6 +234,7 @@ glass_icon_state = "glass_white" glass_name = "glass of soy milk" glass_desc = "White and nutritious soy goodness!" + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/consumable/soymilk/on_mob_life(mob/living/carbon/M) if(M.getBruteLoss() && prob(20)) @@ -324,17 +328,18 @@ glass_icon_state = "lemonpitcher" glass_name = "pitcher of lemonade" glass_desc = "This drink leaves you feeling nostalgic for some reason." + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/consumable/tea/arnold_palmer name = "Arnold Palmer" description = "Encourages the patient to go golfing." color = "#FFB766" quality = DRINK_NICE - nutriment_factor = 2 taste_description = "bitter tea" glass_icon_state = "arnold_palmer" glass_name = "Arnold Palmer" glass_desc = "You feel like taking a few golf swings after a few swigs of this." + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/carbon/M) if(prob(5)) @@ -384,6 +389,7 @@ /datum/reagent/consumable/space_cola name = "Cola" description = "A refreshing beverage." + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#100800" // rgb: 16, 8, 0 taste_description = "cola" glass_icon_state = "glass_brown" @@ -404,6 +410,7 @@ glass_icon_state = "nuka_colaglass" glass_name = "glass of Nuka Cola" glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland." + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/nuka_cola/on_mob_life(mob/living/carbon/M) M.Jitter(20) @@ -418,6 +425,7 @@ /datum/reagent/consumable/spacemountainwind name = "SM Wind" description = "Blows right through you like a space wind." + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#102000" // rgb: 16, 32, 0 taste_description = "sweet citrus soda" glass_icon_state = "Space_mountain_wind_glass" @@ -435,6 +443,7 @@ /datum/reagent/consumable/dr_gibb name = "Dr. Gibb" description = "A delicious blend of 42 different flavours." + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#102000" // rgb: 16, 32, 0 taste_description = "cherry soda" // FALSE ADVERTISING glass_icon_state = "dr_gibb_glass" @@ -449,6 +458,7 @@ /datum/reagent/consumable/space_up name = "Space-Up" description = "Tastes like a hull breach in your mouth." + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#00FF00" // rgb: 0, 255, 0 taste_description = "cherry soda" glass_icon_state = "space-up_glass" @@ -463,6 +473,7 @@ /datum/reagent/consumable/lemon_lime name = "Lemon Lime" description = "A tangy substance made of 0.5% natural citrus!" + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#8CFF00" // rgb: 135, 255, 0 taste_description = "tangy lime and lemon soda" glass_icon_state = "glass_yellow" @@ -476,6 +487,7 @@ /datum/reagent/consumable/pwr_game name = "Pwr Game" description = "The only drink with the PWR that true gamers crave." + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#9385bf" // rgb: 58, 52, 75 taste_description = "sweet and salty tang" glass_icon_state = "glass_red" @@ -489,6 +501,7 @@ /datum/reagent/consumable/shamblers name = "Shambler's Juice" description = "~Shake me up some of that Shambler's Juice!~" + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#f00060" // rgb: 94, 0, 38 taste_description = "carbonated metallic soda" glass_icon_state = "glass_red" @@ -502,6 +515,7 @@ /datum/reagent/consumable/buzz_fuzz name = "Buzz Fuzz" description = "~A Hive of Flavour!~ NOTICE: Addicting." + nutriment_factor = 0 addiction_threshold = 26 //A can and a sip color = "#8CFF00" // rgb: 135, 255, 0 taste_description = "carbonated honey and pollen" @@ -552,6 +566,7 @@ glass_icon_state = "grey_bull_glass" glass_name = "glass of Grey Bull" glass_desc = "Surprisingly it isnt grey." + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/grey_bull/on_mob_metabolize(mob/living/L) ..() @@ -572,6 +587,7 @@ /datum/reagent/consumable/sodawater name = "Soda Water" description = "A can of club soda. Why not make a scotch and soda?" + nutriment_factor = 0 color = "#619494" // rgb: 97, 148, 148 taste_description = "carbonated water" glass_icon_state = "glass_clear" @@ -604,6 +620,7 @@ /datum/reagent/consumable/ice name = "Ice" description = "Frozen water, your dentist wouldn't like you chewing this." + nutriment_factor = 0 //Its water why would this even geive nutriments? reagent_state = SOLID color = "#619494" // rgb: 97, 148, 148 taste_description = "ice" @@ -624,6 +641,7 @@ glass_icon_state = "soy_latte" glass_name = "soy latte" glass_desc = "A nice and refreshing beverage while you're reading." + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/consumable/soy_latte/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) @@ -645,6 +663,7 @@ glass_icon_state = "cafe_latte" glass_name = "cafe latte" glass_desc = "A nice, strong and refreshing beverage while you're reading." + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/carbon/M) M.dizziness = max(0,M.dizziness-5) @@ -666,6 +685,7 @@ glass_icon_state = "doctorsdelightglass" glass_name = "Doctor's Delight" glass_desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger." + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/doctor_delight/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-0.5, 0) @@ -688,6 +708,7 @@ glass_icon_state = "chocolatepudding" glass_name = "chocolate pudding" glass_desc = "Tasty." + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/vanillapudding name = "Vanilla Pudding" @@ -699,50 +720,55 @@ glass_icon_state = "vanillapudding" glass_name = "vanilla pudding" glass_desc = "Tasty." + value = REAGENT_VALUE_UNCOMMON //real vanilla. /datum/reagent/consumable/cherryshake name = "Cherry Shake" description = "A cherry flavored milkshake." color = "#FFB6C1" quality = DRINK_VERYGOOD - nutriment_factor = 4 * REAGENTS_METABOLISM + nutriment_factor = 2 * REAGENTS_METABOLISM taste_description = "creamy cherry" glass_icon_state = "cherryshake" glass_name = "cherry shake" glass_desc = "A cherry flavored milkshake." + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/bluecherryshake name = "Blue Cherry Shake" description = "An exotic milkshake." color = "#00F1FF" quality = DRINK_VERYGOOD - nutriment_factor = 4 * REAGENTS_METABOLISM + nutriment_factor = 2 * REAGENTS_METABOLISM taste_description = "creamy blue cherry" glass_icon_state = "bluecherryshake" glass_name = "blue cherry shake" glass_desc = "An exotic blue milkshake." + value = REAGENT_VALUE_UNCOMMON /datum/reagent/consumable/pumpkin_latte name = "Pumpkin Latte" description = "A mix of pumpkin juice and coffee." color = "#F4A460" quality = DRINK_VERYGOOD - nutriment_factor = 3 * REAGENTS_METABOLISM + nutriment_factor = 2 * REAGENTS_METABOLISM taste_description = "creamy pumpkin" glass_icon_state = "pumpkin_latte" glass_name = "pumpkin latte" glass_desc = "A mix of coffee and pumpkin juice." + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/gibbfloats name = "Gibb Floats" description = "Ice cream on top of a Dr. Gibb glass." color = "#B22222" quality = DRINK_NICE - nutriment_factor = 3 * REAGENTS_METABOLISM + nutriment_factor = 1 * REAGENTS_METABOLISM taste_description = "creamy cherry" glass_icon_state = "gibbfloats" glass_name = "Gibbfloat" glass_desc = "Dr. Gibb with ice cream on top." + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/consumable/pumpkinjuice name = "Pumpkin Juice" @@ -755,6 +781,7 @@ description = "Juiced from real blumpkin." color = "#00BFFF" taste_description = "a mouthful of pool water" + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/consumable/triple_citrus name = "Triple Citrus" @@ -784,6 +811,7 @@ color = "#7D4E29" quality = DRINK_NICE taste_description = "chocolate milk" + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/consumable/menthol name = "Menthol" @@ -812,6 +840,7 @@ color = "#FFA500" taste_description = "parsnip" glass_name = "glass of parsnip juice" + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/peachjuice //Intended to be extremely rare due to being the limiting ingredients in the blazaam drink name = "Peach Juice" @@ -837,6 +866,7 @@ glass_icon_state = "cream_soda" glass_name = "Cream Soda" glass_desc = "A classic space-American vanilla flavored soft drink." + value = REAGENT_VALUE_VERY_COMMON //just a little vanilla /datum/reagent/consumable/cream_soda/on_mob_life(mob/living/carbon/M) M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL) @@ -845,6 +875,7 @@ /datum/reagent/consumable/sol_dry name = "Sol Dry" description = "A soothing, mellow drink made from ginger." + nutriment_factor = 0.5 * REAGENTS_METABOLISM color = "#f7d26a" quality = DRINK_NICE taste_description = "sweet ginger spice" @@ -864,6 +895,7 @@ glass_icon_state = "red_queen" glass_name = "Red Queen" glass_desc = "DRINK ME." + value = REAGENT_VALUE_COMMON //growth serum. var/current_size = RESIZE_DEFAULT_SIZE /datum/reagent/consumable/red_queen/on_mob_life(mob/living/carbon/H) @@ -889,10 +921,11 @@ description = "A drink of a bygone era of milk and artificial sweetener back on a rock." color = "#f76aeb"//rgb(247, 106, 235) glass_icon_state = "pinkmilk" - quality = DRINK_FANTASTIC //Love drink + quality = DRINK_VERYGOOD taste_description = "sweet strawberry and milk cream" glass_name = "tall glass of strawberry milk" glass_desc = "Delicious flavored strawberry syrup mixed with milk." + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/consumable/tea/pinkmilk/on_mob_life(mob/living/carbon/M) if(prob(15)) @@ -905,7 +938,7 @@ description = "A timeless classic!" color = "#f76aeb"//rgb(247, 106, 235) glass_icon_state = "pinktea" - quality = DRINK_FANTASTIC //Love drink + quality = DRINK_VERYGOOD taste_description = "sweet tea with a hint of strawberry" glass_name = "mug of strawberry tea" glass_desc = "Delicious traditional tea flavored with strawberries." @@ -948,6 +981,7 @@ glass_icon_state = "monkey_energy_glass" glass_name = "glass of Monkey Energy" glass_desc = "You can unleash the ape, but without the pop of the can?" + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/monkey_energy/on_mob_life(mob/living/carbon/M) M.Jitter(20) @@ -965,3 +999,4 @@ glass_icon_state = "glass_yellow" glass_name = "glass of bungo juice" glass_desc = "Exotic! You feel like you are on vacation already." + value = REAGENT_VALUE_COMMON diff --git a/code/modules/reagents/chemistry/reagents/drug_reagents.dm b/code/modules/reagents/chemistry/reagents/drug_reagents.dm index c96feec4e2..ef4b7f3a53 100644 --- a/code/modules/reagents/chemistry/reagents/drug_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drug_reagents.dm @@ -1,6 +1,5 @@ /datum/reagent/drug name = "Drug" - value = 12 metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "bitterness" var/trippy = TRUE //Does this drug make you trip? @@ -11,7 +10,7 @@ /datum/reagent/drug/space_drugs name = "Space drugs" - value = 6 + value = REAGENT_VALUE_VERY_COMMON description = "An illegal chemical compound used as drug." color = "#60A584" // rgb: 96, 165, 132 overdose_threshold = 30 @@ -38,7 +37,6 @@ /datum/reagent/drug/nicotine name = "Nicotine" - value = 0 description = "Slightly reduces stun times. If overdosed it will deal toxin and oxygen damage." reagent_state = LIQUID color = "#60A584" // rgb: 96, 165, 132 @@ -66,6 +64,7 @@ overdose_threshold = 20 addiction_threshold = 10 pH = 10 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/drug/crank/on_mob_life(mob/living/carbon/M) if(prob(5)) @@ -112,6 +111,7 @@ overdose_threshold = 20 addiction_threshold = 15 pH = 9 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/drug/krokodil/on_mob_life(mob/living/carbon/M) @@ -167,6 +167,7 @@ var/jitter = TRUE var/confusion = TRUE pH = 5 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/drug/methamphetamine/on_mob_metabolize(mob/living/L) ..() @@ -196,7 +197,7 @@ . = 1 /datum/reagent/drug/methamphetamine/overdose_process(mob/living/M) - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i in 1 to 4) step(M, pick(GLOB.cardinals)) if(prob(20)) @@ -223,7 +224,7 @@ ..() /datum/reagent/drug/methamphetamine/addiction_act_stage3(mob/living/M) - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 4, i++) step(M, pick(GLOB.cardinals)) M.Jitter(15) @@ -233,7 +234,7 @@ ..() /datum/reagent/drug/methamphetamine/addiction_act_stage4(mob/living/carbon/human/M) - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 8, i++) step(M, pick(GLOB.cardinals)) M.Jitter(20) @@ -250,6 +251,7 @@ overdose_threshold = 35 jitter = FALSE brain_damage = FALSE + value = REAGENT_VALUE_RARE /datum/reagent/drug/bath_salts name = "Bath Salts" @@ -261,6 +263,7 @@ taste_description = "salt" // because they're bathsalts? var/datum/brain_trauma/special/psychotic_brawling/bath_salts/rage pH = 8.2 + value = REAGENT_VALUE_RARE /datum/reagent/drug/bath_salts/on_mob_metabolize(mob/living/L) ..() @@ -285,7 +288,7 @@ M.adjustStaminaLoss(-5, 0) M.adjustOrganLoss(ORGAN_SLOT_BRAIN, 4) M.hallucination += 5 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) step(M, pick(GLOB.cardinals)) step(M, pick(GLOB.cardinals)) ..() @@ -293,7 +296,7 @@ /datum/reagent/drug/bath_salts/overdose_process(mob/living/M) M.hallucination += 5 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i in 1 to 8) step(M, pick(GLOB.cardinals)) if(prob(20)) @@ -304,7 +307,7 @@ /datum/reagent/drug/bath_salts/addiction_act_stage1(mob/living/M) M.hallucination += 10 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 8, i++) step(M, pick(GLOB.cardinals)) M.Jitter(5) @@ -315,7 +318,7 @@ /datum/reagent/drug/bath_salts/addiction_act_stage2(mob/living/M) M.hallucination += 20 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 8, i++) step(M, pick(GLOB.cardinals)) M.Jitter(10) @@ -327,7 +330,7 @@ /datum/reagent/drug/bath_salts/addiction_act_stage3(mob/living/M) M.hallucination += 30 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 12, i++) step(M, pick(GLOB.cardinals)) M.Jitter(15) @@ -339,7 +342,7 @@ /datum/reagent/drug/bath_salts/addiction_act_stage4(mob/living/carbon/human/M) M.hallucination += 30 - if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovableatom(M.loc)) + if(CHECK_MOBILITY(M, MOBILITY_MOVE) && !ismovable(M.loc)) for(var/i = 0, i < 16, i++) step(M, pick(GLOB.cardinals)) M.Jitter(50) @@ -357,6 +360,7 @@ reagent_state = LIQUID color = "#78FFF0" pH = 9.2 + value = REAGENT_VALUE_RARE /datum/reagent/drug/aranesp/on_mob_life(mob/living/carbon/M) var/high_message = pick("You feel amped up.", "You feel ready.", "You feel like you can push it to the limit.") @@ -378,6 +382,7 @@ addiction_threshold = 10 overdose_threshold = 20 pH = 10.5 + value = REAGENT_VALUE_RARE /datum/reagent/drug/happiness/on_mob_add(mob/living/L) ..() @@ -457,10 +462,11 @@ addiction_stage3_end = 40 addiction_stage4_end = 240 pH = 12.5 + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/drug/skooma/on_mob_metabolize(mob/living/L) . = ..() - L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING)) + L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/skooma) L.next_move_modifier *= 2 if(ishuman(L)) var/mob/living/carbon/human/H = L @@ -473,7 +479,7 @@ /datum/reagent/drug/skooma/on_mob_end_metabolize(mob/living/L) . = ..() - L.remove_movespeed_modifier(type) + L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/skooma) L.next_move_modifier *= 0.5 if(ishuman(L)) var/mob/living/carbon/human/H = L @@ -521,3 +527,35 @@ if(prob(40)) M.emote(pick("twitch","drool","moan")) ..() + +/datum/reagent/syndicateadrenals + name = "Syndicate Adrenaline" + description = "Regenerates your stamina and increases your reaction time." + color = "#E62111" + overdose_threshold = 6 + value = REAGENT_VALUE_VERY_RARE + +/datum/reagent/syndicateadrenals/on_mob_life(mob/living/M) + M.adjustStaminaLoss(-5*REM) + . = ..() + +/datum/reagent/syndicateadrenals/on_mob_metabolize(mob/living/M) + . = ..() + if(istype(M)) + M.next_move_modifier *= 0.5 + to_chat(M, "You feel an intense surge of energy rushing through your veins.") + +/datum/reagent/syndicateadrenals/on_mob_end_metabolize(mob/living/M) + . = ..() + if(istype(M)) + M.next_move_modifier *= 2 + to_chat(M, "You feel as though the world around you is going faster.") + +/datum/reagent/syndicateadrenals/overdose_start(mob/living/M) + to_chat(M, "You feel an intense pain in your chest...") + +/datum/reagent/syndicateadrenals/overdose_process(mob/living/M) + if(iscarbon(M)) + var/mob/living/carbon/C = M + if(!C.undergoing_cardiac_arrest()) + C.set_heartattack(TRUE) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 39b687c64a..c7ff3f01c9 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -11,7 +11,7 @@ name = "Consumable" taste_description = "generic food" taste_mult = 4 - value = 0.1 + value = REAGENT_VALUE_VERY_COMMON var/nutriment_factor = 1 * REAGENTS_METABOLISM var/quality = 0 //affects mood, typically higher for mixed drinks with more complex recipes @@ -35,15 +35,13 @@ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "quality_drink", /datum/mood_event/quality_fantastic) if (RACE_DRINK) SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "quality_drink", /datum/mood_event/race_drink) - if (FOOD_AMAZING) - SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "quality_food", /datum/mood_event/amazingtaste) return ..() /datum/reagent/consumable/nutriment name = "Nutriment" description = "All the vitamins, minerals, and carbohydrates the body needs in pure form." reagent_state = SOLID - nutriment_factor = 15 * REAGENTS_METABOLISM + nutriment_factor = 10 * REAGENTS_METABOLISM color = "#664330" // rgb: 102, 67, 48 var/brute_heal = 1 @@ -92,8 +90,8 @@ /datum/reagent/consumable/nutriment/vitamin name = "Vitamin" description = "All the best vitamins, minerals, and carbohydrates the body needs in pure form." - value = 0.5 - + value = REAGENT_VALUE_COMMON + nutriment_factor = 15 * REAGENTS_METABOLISM //The are the best food for you! brute_heal = 1 burn_heal = 1 @@ -107,9 +105,9 @@ description = "A variety of cooking oil derived from fat or plants. Used in food preparation and frying." color = "#EADD6B" //RGB: 234, 221, 107 (based off of canola oil) taste_mult = 0.8 - value = 1 + value = REAGENT_VALUE_COMMON taste_description = "oil" - nutriment_factor = 7 * REAGENTS_METABOLISM //Not very healthy on its own + nutriment_factor = 5 * REAGENTS_METABOLISM //Not very healthy on its own metabolization_rate = 10 * REAGENTS_METABOLISM var/fry_temperature = 450 //Around ~350 F (117 C) which deep fryers operate around in the real world var/boiling //Used in mob life to determine if the oil kills, and only on touch application @@ -153,11 +151,11 @@ reagent_state = SOLID color = "#FFFFFF" // rgb: 255, 255, 255 taste_mult = 1.5 // stop sugar drowning out other flavours - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 3 * REAGENTS_METABOLISM metabolization_rate = 2 * REAGENTS_METABOLISM overdose_threshold = 200 // Hyperglycaemic shock taste_description = "sweetness" - value = 1 + value = REAGENT_VALUE_NONE /datum/reagent/consumable/sugar/overdose_start(mob/living/M) to_chat(M, "You go into hyperglycaemic shock! Lay off the twinkies!") @@ -179,21 +177,21 @@ /datum/reagent/consumable/soysauce name = "Soysauce" description = "A salty sauce made from the soy plant." - nutriment_factor = 2 * REAGENTS_METABOLISM color = "#792300" // rgb: 121, 35, 0 taste_description = "umami" + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/ketchup name = "Ketchup" description = "Ketchup, catsup, whatever. It's tomato paste." - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 3 * REAGENTS_METABOLISM color = "#731008" // rgb: 115, 16, 8 taste_description = "ketchup" /datum/reagent/consumable/mustard name = "Mustard" description = "Mustard, mostly used on hotdogs, corndogs and burgers." - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 3 * REAGENTS_METABOLISM color = "#DDED26" // rgb: 221, 237, 38 taste_description = "mustard" @@ -233,7 +231,7 @@ description = "A special oil that noticably chills the body. Extracted from Icepeppers and slimes." color = "#8BA6E9" // rgb: 139, 166, 233 taste_description = "mint" - value = 2 + value = REAGENT_VALUE_COMMON pH = 13 //HMM! I wonder /datum/reagent/consumable/frostoil/on_mob_life(mob/living/carbon/M) @@ -378,14 +376,13 @@ name = "Coco Powder" description = "A fatty, bitter paste made from coco beans." reagent_state = SOLID - nutriment_factor = 5 * REAGENTS_METABOLISM + nutriment_factor = 3 * REAGENTS_METABOLISM color = "#302000" // rgb: 48, 32, 0 taste_description = "bitterness" /datum/reagent/consumable/hot_coco name = "Hot Chocolate" description = "Made with love! And coco beans." - nutriment_factor = 3 * REAGENTS_METABOLISM color = "#660000" // rgb: 221, 202, 134 taste_description = "creamy chocolate" glass_icon_state = "chocolateglass" @@ -403,6 +400,7 @@ metabolization_rate = 0.2 * REAGENTS_METABOLISM taste_description = "mushroom" pH = 11 + value = REAGENT_VALUE_COMMON /datum/reagent/drug/mushroomhallucinogen/on_mob_life(mob/living/carbon/M) M.slurring = max(M.slurring,50) @@ -433,6 +431,7 @@ color = "#FEFEFE" taste_description = "garlic" metabolization_rate = 0.15 * REAGENTS_METABOLISM + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/garlic/on_mob_life(mob/living/carbon/M) if(isvampire(M)) //incapacitating but not lethal. Unfortunately, vampires cannot vomit. @@ -463,7 +462,7 @@ M.emote("scream") if(prob(min(5, current_cycle)) && iscarbon(M)) var/mob/living/carbon/C - C.vomit() + C.vomit() if(INJECT) if(prob(min(20, current_cycle))) to_chat(M, "You feel like your veins are boiling!") @@ -472,10 +471,10 @@ ..() /datum/reagent/consumable/sprinkles name = "Sprinkles" - value = 3 description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops." color = "#FF00FF" // rgb: 255, 0, 255 taste_description = "childhood whimsy" + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/sprinkles/on_mob_life(mob/living/carbon/M) if(M.mind && HAS_TRAIT(M.mind, TRAIT_LAW_ENFORCEMENT_METABOLISM)) @@ -487,15 +486,15 @@ name = "Peanut Butter" description = "A popular food paste made from ground dry-roasted peanuts." color = "#C29261" - value = 3 - nutriment_factor = 15 * REAGENTS_METABOLISM + value = REAGENT_VALUE_UNCOMMON + nutriment_factor = 10 * REAGENTS_METABOLISM taste_description = "peanuts" /datum/reagent/consumable/cornoil name = "Corn Oil" description = "An oil derived from various types of corn." - nutriment_factor = 20 * REAGENTS_METABOLISM - value = 4 + nutriment_factor = 12 * REAGENTS_METABOLISM + value = REAGENT_VALUE_UNCOMMON color = "#302000" // rgb: 48, 32, 0 taste_description = "slime" @@ -513,7 +512,7 @@ /datum/reagent/consumable/enzyme name = "Universal Enzyme" - value = 1 + value = REAGENT_VALUE_COMMON description = "A universal enzyme used in the preperation of certain chemicals and foods." color = "#365E30" // rgb: 54, 94, 48 taste_description = "sweetness" @@ -549,7 +548,6 @@ /datum/reagent/consumable/flour name = "Flour" - value = 0.5 description = "This is what you rub all over yourself to pretend to be a ghost." reagent_state = SOLID color = "#FFFFFF" // rgb: 0, 0, 0 @@ -566,19 +564,18 @@ name = "Cherry Jelly" description = "Totally the best. Only to be spread on foods with excellent lateral symmetry." color = "#801E28" // rgb: 128, 30, 40 - value = 1 + value = REAGENT_VALUE_COMMON taste_description = "cherry" /datum/reagent/consumable/bluecherryjelly name = "Blue Cherry Jelly" description = "Blue and tastier kind of cherry jelly." color = "#00F0FF" - value = 12 + value = REAGENT_VALUE_UNCOMMON taste_description = "blue cherry" /datum/reagent/consumable/rice name = "Rice" - value = 0.5 description = "tiny nutritious grains" reagent_state = SOLID nutriment_factor = 3 * REAGENTS_METABOLISM @@ -587,7 +584,7 @@ /datum/reagent/consumable/vanilla name = "Vanilla Powder" - value = 1 + value = REAGENT_VALUE_UNCOMMON description = "A fatty, bitter paste made from vanilla pods." reagent_state = SOLID nutriment_factor = 5 * REAGENTS_METABOLISM @@ -596,7 +593,6 @@ /datum/reagent/consumable/eggyolk name = "Egg Yolk" - value = 1 description = "It's full of protein." nutriment_factor = 3 * REAGENTS_METABOLISM color = "#FFB500" @@ -604,14 +600,13 @@ /datum/reagent/consumable/corn_starch name = "Corn Starch" - value = 2 description = "A slippery solution." color = "#f7f6e4" taste_description = "slime" /datum/reagent/consumable/corn_syrup name = "Corn Syrup" - value = 1 + value = REAGENT_VALUE_UNCOMMON description = "Decays into sugar." color = "#fff882" metabolization_rate = 3 * REAGENTS_METABOLISM @@ -625,8 +620,8 @@ name = "honey" description = "Sweet sweet honey that decays into sugar. Has antibacterial and natural healing properties." color = "#d3a308" - value = 15 - nutriment_factor = 15 * REAGENTS_METABOLISM + value = REAGENT_VALUE_COMMON + nutriment_factor = 10 * REAGENTS_METABOLISM metabolization_rate = 1 * REAGENTS_METABOLISM taste_description = "sweetness" @@ -653,6 +648,7 @@ color = "#DFDFDF" value = 5 taste_description = "mayonnaise" + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/tearjuice name = "Tear Juice" @@ -660,6 +656,7 @@ color = "#c0c9a0" taste_description = "bitterness" pH = 5 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/tearjuice/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(!istype(M)) @@ -696,8 +693,9 @@ name = "Stabilized Nutriment" description = "A bioengineered protien-nutrient structure designed to decompose in high saturation. In layman's terms, it won't get you fat." reagent_state = SOLID - nutriment_factor = 15 * REAGENTS_METABOLISM + nutriment_factor = 12 * REAGENTS_METABOLISM color = "#664330" // rgb: 102, 67, 48 + value = REAGENT_VALUE_RARE /datum/reagent/consumable/nutriment/stabilized/on_mob_life(mob/living/carbon/M) if(M.nutrition > NUTRITION_LEVEL_FULL - 25) @@ -713,6 +711,7 @@ color = "#1d043d" taste_description = "bitter mushroom" pH = 12 + value = REAGENT_VALUE_RARE /datum/reagent/consumable/entpoly/on_mob_life(mob/living/carbon/M) if(current_cycle >= 10) @@ -733,6 +732,7 @@ color = "#b5a213" taste_description = "tingling mushroom" pH = 11.2 + value = REAGENT_VALUE_RARE /datum/reagent/consumable/tinlux/reaction_mob(mob/living/M) M.set_light(2) @@ -747,6 +747,7 @@ nutriment_factor = 3 * REAGENTS_METABOLISM taste_description = "fruity mushroom" pH = 10.4 + value = REAGENT_VALUE_RARE /datum/reagent/consumable/vitfro/on_mob_life(mob/living/carbon/M) if(prob(80)) @@ -807,11 +808,12 @@ /datum/reagent/consumable/caramel name = "Caramel" description = "Who would have guessed that heated sugar could be so delicious?" - nutriment_factor = 10 * REAGENTS_METABOLISM + nutriment_factor = 4 * REAGENTS_METABOLISM color = "#D98736" taste_mult = 2 taste_description = "caramel" reagent_state = SOLID + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/secretsauce name = "secret sauce" @@ -819,10 +821,20 @@ nutriment_factor = 2 * REAGENTS_METABOLISM color = "#792300" taste_description = "indescribable" - quality = FOOD_AMAZING taste_mult = 100 can_synth = FALSE pH = 6.1 + value = REAGENT_VALUE_AMAZING + +/datum/reagent/consumable/secretsauce/reaction_obj(obj/O, reac_volume) + //splashing any amount above or equal to 1u of secret sauce onto a piece of food turns its quality to 100 + if(reac_volume >= 1 && isfood(O)) + var/obj/item/reagent_containers/food/splashed_food = O + splashed_food.adjust_food_quality(100) + // if it's a customisable food, we need to edit its total quality too, to prevent its quality resetting from adding more ingredients! + if(istype(O, /obj/item/reagent_containers/food/snacks/customizable)) + var/obj/item/reagent_containers/food/snacks/customizable/splashed_custom_food = O + splashed_custom_food.total_quality += 10000 /datum/reagent/consumable/char name = "Char" @@ -833,6 +845,7 @@ taste_mult = 6 taste_description = "smoke" overdose_threshold = 25 + value = REAGENT_VALUE_COMMON /datum/reagent/consumable/char/overdose_process(mob/living/carbon/M) if(prob(10)) @@ -845,3 +858,4 @@ color = "#78280A" // rgb: 120 40, 10 taste_mult = 2.5 //sugar's 1.5, capsacin's 1.5, so a good middle ground. taste_description = "smokey sweetness" + value = REAGENT_VALUE_COMMON diff --git a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm index ecceb6e8bf..e4973dd2d5 100644 --- a/code/modules/reagents/chemistry/reagents/medicine_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/medicine_reagents.dm @@ -7,8 +7,8 @@ /datum/reagent/medicine name = "Medicine" - value = 2 taste_description = "bitterness" + value = REAGENT_VALUE_VERY_COMMON //Low prices, spess medical companies are cheapstakes and products are taxed honk... /datum/reagent/medicine/on_mob_life(mob/living/carbon/M) current_cycle++ @@ -19,6 +19,7 @@ description = "Leporazine will effectively regulate a patient's body temperature, ensuring it never leaves safe levels." pH = 8.4 color = "#82b8aa" + value = REAGENT_VALUE_COMMON /datum/reagent/medicine/leporazine/on_mob_life(mob/living/carbon/M) if(M.bodytemperature > BODYTEMP_NORMAL) @@ -33,6 +34,7 @@ color = "#ffffff" can_synth = FALSE taste_description = "badmins" + value = REAGENT_VALUE_GLORIOUS /datum/reagent/medicine/adminordrazine/on_mob_life(mob/living/carbon/M) M.reagents.remove_all_type(/datum/reagent/toxin, 5*REM, 0, 1) @@ -101,6 +103,7 @@ description = "Reduces drowsiness, hallucinations, and Histamine from body." color = "#EC536D" // rgb: 236, 83, 109 pH = 5.2 + value = REAGENT_VALUE_COMMON /datum/reagent/medicine/synaphydramine/on_mob_life(mob/living/carbon/M) M.drowsyness = max(M.drowsyness-5, 0) @@ -131,6 +134,7 @@ color = "#0000C8" taste_description = "sludge" pH = 11 + value = REAGENT_VALUE_COMMON /datum/reagent/medicine/cryoxadone/on_mob_life(mob/living/carbon/M) var/power = -0.00003 * (M.bodytemperature ** 2) + 3 @@ -152,6 +156,7 @@ taste_description = "muscle" metabolization_rate = 1.5 * REAGENTS_METABOLISM pH = 13 + value = REAGENT_VALUE_COMMON /datum/reagent/medicine/clonexadone/on_mob_life(mob/living/carbon/M) if(M.bodytemperature < T0C) @@ -167,6 +172,7 @@ color = "#f7832a" taste_description = "spicy jelly" pH = 12 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/medicine/pyroxadone/on_mob_life(mob/living/carbon/M) if(M.bodytemperature > BODYTEMP_HEAT_DAMAGE_LIMIT) @@ -198,7 +204,7 @@ overdose_threshold = 30 taste_description = "fish" pH = 12.2 - value = 20 + value = REAGENT_VALUE_RARE /datum/reagent/medicine/rezadone/on_mob_life(mob/living/carbon/M) M.setCloneLoss(0) //Rezadone is almost never used in favor of cryoxadone. Hopefully this will change that. @@ -239,7 +245,13 @@ color = "#ffeac9" metabolization_rate = 5 * REAGENTS_METABOLISM overdose_threshold = 50 - value = 3 + +/datum/reagent/medicine/silver_sulfadiazine/reaction_obj(obj/O, reac_volume) + if(istype(O, /obj/item/stack/medical/gauze)) + var/obj/item/stack/medical/gauze/G = O + reac_volume = min((reac_volume / 10), G.amount) + new/obj/item/stack/medical/ointment(get_turf(G), reac_volume) + G.use(reac_volume) /datum/reagent/medicine/silver_sulfadiazine/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1) if(iscarbon(M) && M.stat != DEAD) @@ -277,7 +289,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 25 pH = 10.7 - value = 4 + value = REAGENT_VALUE_COMMON /datum/reagent/medicine/oxandrolone/on_mob_life(mob/living/carbon/M) if(M.getFireLoss() > 25) @@ -301,7 +313,6 @@ pH = 6.7 metabolization_rate = 5 * REAGENTS_METABOLISM overdose_threshold = 50 - value = 3 /datum/reagent/medicine/styptic_powder/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1) if(iscarbon(M) && M.stat != DEAD) @@ -317,6 +328,12 @@ SEND_SIGNAL(M, COMSIG_ADD_MOOD_EVENT, "painful_medicine", /datum/mood_event/painful_medicine) ..() +/datum/reagent/medicine/styptic_powder/reaction_obj(obj/O, reac_volume) + if(istype(O, /obj/item/stack/medical/gauze)) + var/obj/item/stack/medical/gauze/G = O + reac_volume = min((reac_volume / 10), G.amount) + new/obj/item/stack/medical/bruise_pack(get_turf(G), reac_volume) + G.use(reac_volume) /datum/reagent/medicine/styptic_powder/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-2*REM, 0) @@ -343,7 +360,6 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) var/last_added = 0 var/maximum_reachable = BLOOD_VOLUME_NORMAL - 10 //So that normal blood regeneration can continue with salglu active pH = 5.5 - value = 1 /datum/reagent/medicine/salglu_solution/on_mob_life(mob/living/carbon/M) if((HAS_TRAIT(M, TRAIT_NOMARROW))) @@ -384,6 +400,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) color = "#6D6374" metabolization_rate = 0.4 * REAGENTS_METABOLISM pH = 2.6 + value = REAGENT_VALUE_COMMON /datum/reagent/medicine/mine_salve/on_mob_life(mob/living/carbon/C) C.hal_screwyhud = SCREWYHUD_HEALTHY @@ -424,7 +441,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) pH = 11.5 metabolization_rate = 5 * REAGENTS_METABOLISM overdose_threshold = 40 - value = 6 + value = REAGENT_VALUE_COMMON /datum/reagent/medicine/synthflesh/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message = 1) if(iscarbon(M)) @@ -461,7 +478,6 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "ash" pH = 5 - value = 1 /datum/reagent/medicine/charcoal/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(-2*REM, 0) @@ -480,7 +496,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 30 pH = 2 - value = 5 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/medicine/omnizine/on_mob_life(mob/living/carbon/M) M.adjustToxLoss(-0.5*REM, 0) @@ -537,6 +553,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) color = "#003153" // RGB 0, 49, 83 metabolization_rate = 0.5 * REAGENTS_METABOLISM pH = 8.9 + value = REAGENT_VALUE_COMMON //uncraftable /datum/reagent/medicine/prussian_blue/on_mob_life(mob/living/carbon/M) if(M.radiation > 0) @@ -550,6 +567,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) color = "#E6FFF0" metabolization_rate = 0.5 * REAGENTS_METABOLISM pH = 1 //One of the best buffers, NEVERMIND! + value = REAGENT_VALUE_UNCOMMON var/healtoxinlover = FALSE /datum/reagent/medicine/pen_acid/on_mob_life(mob/living/carbon/M) @@ -568,6 +586,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) color = "#91D865" healtoxinlover = TRUE pH = 12//invert + value = REAGENT_VALUE_RARE /datum/reagent/medicine/sal_acid name = "Salicyclic Acid" @@ -577,6 +596,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 25 pH = 2.1 + value = REAGENT_VALUE_COMMON /datum/reagent/medicine/sal_acid/on_mob_life(mob/living/carbon/M) @@ -688,6 +708,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) color = "#64FFE6" metabolization_rate = 0.5 * REAGENTS_METABOLISM pH = 11.5 + value = REAGENT_VALUE_COMMON /datum/reagent/medicine/diphenhydramine/on_mob_life(mob/living/carbon/M) if(prob(10)) @@ -708,10 +729,10 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) /datum/reagent/medicine/morphine/on_mob_metabolize(mob/living/L) ..() - L.ignore_slowdown(type) + L.add_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod)) /datum/reagent/medicine/morphine/on_mob_end_metabolize(mob/living/L) - L.unignore_slowdown(type) + L.remove_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod)) ..() /datum/reagent/medicine/morphine/on_mob_life(mob/living/carbon/M) @@ -803,6 +824,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 35 pH = 12 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/medicine/atropine/on_mob_life(mob/living/carbon/M) if(M.health < 0) @@ -867,6 +889,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "magnets" pH = 0 + value = REAGENT_VALUE_RARE /datum/reagent/medicine/strange_reagent/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(M.stat == DEAD) @@ -990,14 +1013,15 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) metabolization_rate = 0.5 * REAGENTS_METABOLISM overdose_threshold = 60 pH = 8.7 + value = REAGENT_VALUE_RARE /datum/reagent/medicine/stimulants/on_mob_metabolize(mob/living/L) ..() - L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-0.5, blacklisted_movetypes=(FLYING|FLOATING)) + L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/stimulants) ADD_TRAIT(L, TRAIT_TASED_RESISTANCE, type) /datum/reagent/medicine/stimulants/on_mob_end_metabolize(mob/living/L) - L.remove_movespeed_modifier(type) + L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/stimulants) REMOVE_TRAIT(L, TRAIT_TASED_RESISTANCE, type) ..() @@ -1154,6 +1178,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) reagent_state = LIQUID color = "#91D865" taste_description = "jelly" + value = REAGENT_VALUE_COMMON /datum/reagent/medicine/regen_jelly/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-1.5*REM, FALSE) @@ -1169,6 +1194,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) reagent_state = SOLID color = "#555555" pH = 11 + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/medicine/syndicate_nanites/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-5*REM, FALSE) //A ton of healing - this is a 50 telecrystal investment. @@ -1189,6 +1215,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) reagent_state = SOLID color = "#555555" pH = 11 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/medicine/lesser_syndicate_nanites/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-3*REM, FALSE) // hidden gold shh @@ -1212,6 +1239,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) overdose_threshold = 30 taste_description = "jelly" pH = 11.8 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/medicine/neo_jelly/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-1.5*REM, FALSE) @@ -1234,6 +1262,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) color = rgb(255, 175, 0) overdose_threshold = 25 pH = 11 + value = REAGENT_VALUE_COMMON //not any higher. Ambrosia is a milestone for hydroponics already. /datum/reagent/medicine/earthsblood/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(-3 * REM, FALSE) @@ -1261,6 +1290,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) color = "#27870a" metabolization_rate = 0.4 * REAGENTS_METABOLISM pH = 4.3 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/medicine/haloperidol/on_mob_life(mob/living/carbon/M) for(var/datum/reagent/drug/R in M.reagents.reagent_list) @@ -1283,6 +1313,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) overdose_threshold = 3 //To prevent people stacking massive amounts of a very strong healing reagent can_synth = FALSE pH = 14 + value = REAGENT_VALUE_AMAZING /datum/reagent/medicine/lavaland_extract/on_mob_life(mob/living/carbon/M) M.heal_bodypart_damage(5,5) @@ -1302,6 +1333,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) description = "Reduces the duration of unconciousness, knockdown and stuns. Restores stamina, but deals toxin damage when overdosed." color = "#918e53" overdose_threshold = 30 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/medicine/changelingadrenaline/on_mob_metabolize(mob/living/L) ..() @@ -1329,13 +1361,14 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) description = "Drastically increases movement speed, but deals toxin damage." color = "#669153" metabolization_rate = 1 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/medicine/changelinghaste/on_mob_metabolize(mob/living/L) ..() - L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-2, blacklisted_movetypes=(FLYING|FLOATING)) + L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/changelinghaste) /datum/reagent/medicine/changelinghaste/on_mob_end_metabolize(mob/living/L) - L.remove_movespeed_modifier(type) + L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/changelinghaste) ..() /datum/reagent/medicine/changelinghaste/on_mob_life(mob/living/carbon/M) @@ -1365,14 +1398,15 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) /datum/reagent/medicine/muscle_stimulant name = "Muscle Stimulant" description = "A potent chemical that allows someone under its influence to be at full physical ability even when under massive amounts of pain." + value = REAGENT_VALUE_RARE /datum/reagent/medicine/muscle_stimulant/on_mob_metabolize(mob/living/M) . = ..() - M.ignore_slowdown(type) + M.add_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod)) /datum/reagent/medicine/muscle_stimulant/on_mob_end_metabolize(mob/living/M) . = ..() - M.unignore_slowdown(type) + M.remove_movespeed_mod_immunities(type, list(/datum/movespeed_modifier/damage_slowdown, /datum/movespeed_modifier/damage_slowdown_flying, /datum/movespeed_modifier/monkey_health_speedmod)) /datum/reagent/medicine/modafinil name = "Modafinil" @@ -1382,6 +1416,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) metabolization_rate = 0.1 * REAGENTS_METABOLISM overdose_threshold = 20 // with the random effects this might be awesome or might kill you at less than 10u (extensively tested) taste_description = "salt" // it actually does taste salty + value = REAGENT_VALUE_RARE var/overdose_progress = 0 // to track overdose progress pH = 7.89 @@ -1448,6 +1483,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 30 pH = 9.12 + value = REAGENT_VALUE_COMMON /datum/reagent/medicine/psicodine/on_mob_add(mob/living/L) ..() @@ -1480,6 +1516,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) reagent_state = SOLID color = "#FFFFD0" metabolization_rate = 1.5 * REAGENTS_METABOLISM + value = REAGENT_VALUE_UNCOMMON /datum/reagent/medicine/silibinin/on_mob_life(mob/living/carbon/M) M.adjustOrganLoss(ORGAN_SLOT_LIVER, -2)//Add a chance to cure liver trauma once implemented. @@ -1494,6 +1531,7 @@ datum/reagent/medicine/styptic_powder/overdose_start(mob/living/M) metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 50 taste_description = "numbing bitterness" + value = REAGENT_VALUE_RARE /datum/reagent/medicine/polypyr/on_mob_life(mob/living/carbon/M) //I wanted a collection of small positive effects, this is as hard to obtain as coniine after all. M.adjustOrganLoss(ORGAN_SLOT_LUNGS, -0.25) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index e66ebc5f20..5fb27bd074 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -1,7 +1,7 @@ /datum/reagent/blood data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_HUMAN, "blood_type"= null,"resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null,"quirks"=null) name = "Blood" - value = 1 + value = REAGENT_VALUE_UNCOMMON // $$$ blood ""donations"" $$$ color = BLOOD_COLOR_HUMAN // rgb: 200, 0, 0 description = "Blood from some creature." metabolization_rate = 5 //fast rate so it disappears fast. @@ -140,8 +140,9 @@ data = list("donor"=null,"viruses"=null,"blood_DNA"="REPLICATED", "bloodcolor" = BLOOD_COLOR_SYNTHETIC, "blood_type"="SY","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) name = "Synthetic Blood" description = "A synthetically produced imitation of blood." - taste_description = "oily" + taste_description = "oil" color = BLOOD_COLOR_SYNTHETIC // rgb: 11, 7, 48 + value = REAGENT_VALUE_NONE /datum/reagent/blood/jellyblood data = list("donor"=null,"viruses"=null,"blood_DNA"=null, "bloodcolor" = BLOOD_COLOR_SLIME, "blood_type"="GEL","resistances"=null,"trace_chem"=null,"mind"=null,"ckey"=null,"gender"=null,"real_name"=null,"cloneable"=null,"factions"=null) @@ -158,6 +159,7 @@ description = "This highly resembles blood, but it doesnt actually function like it, resembling more ketchup, with a more blood-like consistency." taste_description = "sap" //Like tree sap? pH = 7.45 + value = REAGENT_VALUE_NONE /datum/reagent/blood/jellyblood/on_mob_life(mob/living/carbon/M) if(prob(10)) @@ -271,9 +273,9 @@ /datum/reagent/water/reaction_obj(obj/O, reac_volume) O.extinguish() O.acid_level = 0 - // Monkey cube - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) - var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O + // cubes + if(istype(O, /obj/item/reagent_containers/food/snacks/cube)) + var/obj/item/reagent_containers/food/snacks/cube/cube = O cube.Expand() // Dehydrated carp @@ -387,6 +389,7 @@ description = "Something that shouldn't exist on this plane of existence." taste_description = "suffering" pH = 6.5 + value = REAGENT_VALUE_RARE /datum/reagent/fuel/unholywater/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == TOUCH || method == VAPOR) @@ -423,6 +426,7 @@ name = "Hell Water" description = "YOUR FLESH! IT BURNS!" taste_description = "burning" + value = REAGENT_VALUE_VERY_RARE /datum/reagent/hellwater/on_mob_life(mob/living/carbon/M) M.fire_stacks = min(5,M.fire_stacks + 3) @@ -437,6 +441,7 @@ name = "Zelus Oil" description = "Oil blessed by a greater being." taste_description = "metallic oil" + value = REAGENT_VALUE_RARE /datum/reagent/fuel/holyoil/on_mob_life(mob/living/carbon/M) if(is_servant_of_ratvar(M)) @@ -475,6 +480,7 @@ name = "Godblood" description = "Slowly heals all damage types. Has a rather high overdose threshold. Glows with mysterious power." overdose_threshold = 150 + value = REAGENT_VALUE_RARE /datum/reagent/lube name = "Space Lube" @@ -591,6 +597,7 @@ color = "#5EFF3B" //RGB: 94, 255, 59 metabolization_rate = INFINITY //So it instantly removes all of itself taste_description = "slime" + value = REAGENT_VALUE_RARE var/datum/species/race = /datum/species/human var/mutationtext = "The pain subsides. You feel... human." @@ -750,6 +757,7 @@ color = "#5EFF3B" //RGB: 94, 255, 59 taste_description = "slime" metabolization_rate = 0.2 + value = REAGENT_VALUE_RARE /datum/reagent/slime_toxin/on_mob_life(mob/living/carbon/human/H) ..() @@ -786,6 +794,7 @@ color = "#5EFF3B" //RGB: 94, 255, 59 metabolization_rate = INFINITY taste_description = "slime" + value = REAGENT_VALUE_RARE /datum/reagent/mulligan/on_mob_life(mob/living/carbon/human/H) ..() @@ -800,6 +809,7 @@ description = "An advanced corruptive toxin produced by slimes." color = "#13BC5E" // rgb: 19, 188, 94 taste_description = "slime" + value = REAGENT_VALUE_VERY_RARE /datum/reagent/aslimetoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume) if(method != TOUCH) @@ -811,6 +821,7 @@ color = "#5EFF3B" //RGB: 94, 255, 59 can_synth = FALSE taste_description = "decay" + value = REAGENT_VALUE_GLORIOUS /datum/reagent/gluttonytoxin/reaction_mob(mob/living/L, method=TOUCH, reac_volume) L.ForceContractDisease(new /datum/disease/transformation/morph(), FALSE, TRUE) @@ -1034,6 +1045,14 @@ // +20% success propability on each step, useful while operating in less-than-perfect conditions ..() +/datum/reagent/space_cleaner/sterilizine/reaction_obj(obj/O, reac_volume) + if(istype(O, /obj/item/stack/medical/gauze)) + var/obj/item/stack/medical/gauze/G = O + reac_volume = min((reac_volume / 10), G.amount) + new/obj/item/stack/medical/gauze/adv(get_turf(G), reac_volume) + G.use(reac_volume) + + /datum/reagent/iron name = "Iron" description = "Pure iron is a metal." @@ -1113,6 +1132,7 @@ color = "#0000CC" taste_description = "fizzling blue" pH = 12 + value = REAGENT_VALUE_RARE /datum/reagent/bluespace/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == TOUCH || method == VAPOR) @@ -1239,6 +1259,7 @@ metabolization_rate = 1.5 * REAGENTS_METABOLISM taste_description = "acid" pH = 2 + value = REAGENT_VALUE_RARE /datum/reagent/space_cleaner/ez_clean/on_mob_life(mob/living/carbon/M) M.adjustBruteLoss(3.33) @@ -1290,6 +1311,7 @@ color = "#535E66" // rgb: 83, 94, 102 can_synth = FALSE taste_description = "sludge" + value = REAGENT_VALUE_GLORIOUS /datum/reagent/nanomachines/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) @@ -1301,6 +1323,7 @@ color = "#535E66" // rgb: 83, 94, 102 can_synth = FALSE taste_description = "sludge" + value = REAGENT_VALUE_GLORIOUS /datum/reagent/xenomicrobes/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) @@ -1313,6 +1336,7 @@ can_synth = FALSE taste_description = "slime" pH = 11 + value = REAGENT_VALUE_GLORIOUS /datum/reagent/fungalspores/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) @@ -1340,6 +1364,7 @@ color = "#664B63" // rgb: 102, 75, 99 taste_description = "metal" pH = 11.8 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/ammonia name = "Ammonia" @@ -1417,6 +1442,7 @@ metabolization_rate = 1.5 * REAGENTS_METABOLISM color = "E1A116" taste_description = "sourness" + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/stimulum/on_mob_metabolize(mob/living/L) ..() @@ -1442,13 +1468,14 @@ color = "90560B" taste_description = "burning" pH = 2 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/nitryl/on_mob_metabolize(mob/living/L) ..() - L.add_movespeed_modifier(type, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING)) + L.add_movespeed_modifier(/datum/movespeed_modifier/reagent/nitryl) /datum/reagent/nitryl/on_mob_end_metabolize(mob/living/L) - L.remove_movespeed_modifier(type) + L.remove_movespeed_modifier(/datum/movespeed_modifier/reagent/nitryl) ..() /////////////////////////Coloured Crayon Powder//////////////////////////// @@ -1463,6 +1490,7 @@ color = "#FFFFFF" // rgb: 207, 54, 0 taste_description = "the back of class" no_mob_color = TRUE + value = REAGENT_VALUE_NONE /datum/reagent/colorful_reagent/crayonpowder/New() description = "\an [colorname] powder made by grinding down crayons, good for colouring chemical reagents." @@ -1633,6 +1661,7 @@ color = "#FFFF00" var/list/random_color_list = list("#00aedb","#a200ff","#f47835","#d41243","#d11141","#00b159","#00aedb","#f37735","#ffc425","#008744","#0057e7","#d62d20","#ffa700") taste_description = "rainbows" + value = REAGENT_VALUE_RARE var/no_mob_color = FALSE /datum/reagent/colorful_reagent/on_mob_life(mob/living/carbon/M) @@ -1662,6 +1691,7 @@ color = "#ff00dd" var/list/potential_colors = list("0ad","a0f","f73","d14","d14","0b5","0ad","f73","fc2","084","05e","d22","fa0") // fucking hair code taste_description = "sourness" + value = REAGENT_VALUE_RARE /datum/reagent/hair_dye/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == TOUCH || method == VAPOR) @@ -1677,6 +1707,7 @@ reagent_state = LIQUID color = "#fac34b" taste_description = "sourness" + value = REAGENT_VALUE_UNCOMMON /datum/reagent/barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == TOUCH || method == VAPOR) @@ -1694,6 +1725,7 @@ reagent_state = LIQUID color = "#ffaf00" taste_description = "sourness" + value = REAGENT_VALUE_RARE /datum/reagent/concentrated_barbers_aid/reaction_mob(mob/living/M, method=TOUCH, reac_volume) if(method == TOUCH || method == VAPOR) @@ -1726,6 +1758,7 @@ color = "#A70FFF" taste_description = "dryness" pH = 10.7 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/drying_agent/reaction_turf(turf/open/T, reac_volume) if(istype(T)) @@ -1863,6 +1896,7 @@ color = "#00ff80" taste_description = "strange honey" pH = 3 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/royal_bee_jelly/on_mob_life(mob/living/carbon/M) if(prob(2)) @@ -1884,6 +1918,7 @@ can_synth = FALSE taste_description = "brains" pH = 0.5 + value = REAGENT_VALUE_GLORIOUS /datum/reagent/romerol/reaction_mob(mob/living/carbon/human/H, method=TOUCH, reac_volume) // Silently add the zombie infection organ to be activated upon death @@ -1897,6 +1932,7 @@ description = "An experimental serum which causes rapid muscular growth in Hominidae. Side-affects may include hypertrichosis, violent outbursts, and an unending affinity for bananas." reagent_state = LIQUID color = "#00f041" + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/magillitis/on_mob_life(mob/living/carbon/M) ..() @@ -1908,6 +1944,7 @@ description = "A commercial chemical designed to help older men in the bedroom."//not really it just makes you a giant color = "#ff0000"//strong red. rgb 255, 0, 0 var/current_size = RESIZE_DEFAULT_SIZE + value = REAGENT_VALUE_COMMON taste_description = "bitterness" // apparently what viagra tastes like /datum/reagent/growthserum/on_mob_life(mob/living/carbon/H) @@ -1978,6 +2015,7 @@ color = "#AAAAAA55" taste_description = "water" metabolization_rate = 0.25 * REAGENTS_METABOLISM + value = REAGENT_VALUE_RARE pH = 15 /datum/reagent/pax/on_mob_metabolize(mob/living/L) @@ -1994,6 +2032,7 @@ color = "#FAFF00" taste_description = "acrid cinnamon" metabolization_rate = 0.2 * REAGENTS_METABOLISM + value = REAGENT_VALUE_UNCOMMON /datum/reagent/bz_metabolites/on_mob_metabolize(mob/living/L) ..() @@ -2014,18 +2053,20 @@ name = "synth-pax" description = "A colorless liquid that suppresses violence on the subjects. Cheaper to synthetize, but wears out faster than normal Pax." metabolization_rate = 1.5 * REAGENTS_METABOLISM + value = REAGENT_VALUE_COMMON /datum/reagent/peaceborg_confuse name = "Dizzying Solution" description = "Makes the target off balance and dizzy" metabolization_rate = 1.5 * REAGENTS_METABOLISM taste_description = "dizziness" + value = REAGENT_VALUE_COMMON /datum/reagent/peaceborg_confuse/on_mob_life(mob/living/carbon/M) if(M.confused < 6) - M.confused = CLAMP(M.confused + 3, 0, 5) + M.confused = clamp(M.confused + 3, 0, 5) if(M.dizziness < 6) - M.dizziness = CLAMP(M.dizziness + 3, 0, 5) + M.dizziness = clamp(M.dizziness + 3, 0, 5) if(prob(20)) to_chat(M, "You feel confused and disorientated.") ..() @@ -2035,6 +2076,7 @@ description = "An extremely weak stamina-toxin that tires out the target. Completely harmless." metabolization_rate = 1.5 * REAGENTS_METABOLISM taste_description = "tiredness" + value = REAGENT_VALUE_COMMON /datum/reagent/peaceborg_tire/on_mob_life(mob/living/carbon/M) var/healthcomp = (100 - M.health) //DOES NOT ACCOUNT FOR ADMINBUS THINGS THAT MAKE YOU HAVE MORE THAN 200/210 HEALTH, OR SOMETHING OTHER THAN A HUMAN PROCESSING THIS. @@ -2050,6 +2092,7 @@ color = "#9A6750" //RGB: 154, 103, 80 taste_description = "inner peace" can_synth = FALSE + value = REAGENT_VALUE_GLORIOUS /datum/reagent/tranquility/reaction_mob(mob/living/L, method=TOUCH, reac_volume, show_message = 1, touch_protection = 0) if(method==PATCH || method==INGEST || method==INJECT || (method == VAPOR && prob(min(reac_volume,100)*(1 - touch_protection)))) @@ -2060,6 +2103,7 @@ description = "The primary precursor for an ancient feline delicacy known as skooma. While it has no notable effects on it's own, mixing it with morphine in a chilled container may yield interesting results." color = "#FAEAFF" taste_description = "synthetic catnip" + value = REAGENT_VALUE_UNCOMMON /datum/reagent/moonsugar/on_mob_life(mob/living/carbon/M) if(prob(20)) @@ -2076,6 +2120,7 @@ var/datum/dna/original_dna var/reagent_ticks = 0 chemical_flags = REAGENT_INVISIBLE + value = REAGENT_VALUE_GLORIOUS /datum/reagent/changeling_string/on_mob_metabolize(mob/living/carbon/C) if(ishuman(C) && C.dna && data["desired_dna"]) @@ -2111,6 +2156,7 @@ taste_description = "grass" description = "A colorless liquid that makes people more peaceful and felines more happy." metabolization_rate = 1.75 * REAGENTS_METABOLISM + value = REAGENT_VALUE_COMMON /datum/reagent/pax/catnip/on_mob_life(mob/living/carbon/M) if(prob(20)) diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm index 939d5c9707..67ff61610d 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm @@ -5,6 +5,7 @@ reagent_state = SOLID color = "#550000" taste_description = "sweet tasting metal" + value = REAGENT_VALUE_COMMON /datum/reagent/thermite/reaction_turf(turf/T, reac_volume) if(reac_volume >= 1) @@ -21,13 +22,14 @@ description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol." color = "#808080" // rgb: 128, 128, 128 taste_description = "oil" + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/stabilizing_agent name = "Stabilizing Agent" description = "Keeps unstable chemicals stable. This does not work on everything." reagent_state = LIQUID color = "#FFFF00" - value = 3 + value = REAGENT_VALUE_VERY_COMMON taste_description = "metal" /datum/reagent/clf3 @@ -37,6 +39,7 @@ color = "#FFC8C8" metabolization_rate = 4 taste_description = "burning" + value = REAGENT_VALUE_COMMON /datum/reagent/clf3/on_mob_life(mob/living/carbon/M) M.adjust_fire_stacks(2) @@ -79,13 +82,14 @@ reagent_state = LIQUID color = "#5A64C8" taste_description = "air and bitterness" + value = REAGENT_VALUE_UNCOMMON /datum/reagent/liquid_dark_matter name = "Liquid Dark Matter" description = "Sucks everything into the detonation point." reagent_state = LIQUID color = "#210021" - value = 10 + value = REAGENT_VALUE_UNCOMMON taste_description = "compressed bitterness" /datum/reagent/blackpowder @@ -93,9 +97,9 @@ description = "Explodes. Violently." reagent_state = LIQUID color = "#000000" - value = 5 metabolization_rate = 0.05 taste_description = "salt" + value = REAGENT_VALUE_RARE /datum/reagent/blackpowder/on_mob_life(mob/living/carbon/M) ..() @@ -115,6 +119,7 @@ reagent_state = LIQUID color = "#C8C8C8" taste_description = "salt" + value = REAGENT_VALUE_UNCOMMON /datum/reagent/smoke_powder name = "Smoke Powder" @@ -122,6 +127,7 @@ reagent_state = LIQUID color = "#C8C8C8" taste_description = "smoke" + value = REAGENT_VALUE_COMMON /datum/reagent/sonic_powder name = "Sonic Powder" @@ -129,6 +135,7 @@ reagent_state = LIQUID color = "#C8C8C8" taste_description = "loud noises" + value = REAGENT_VALUE_UNCOMMON /datum/reagent/phlogiston name = "Phlogiston" @@ -136,6 +143,7 @@ reagent_state = LIQUID color = "#FA00AF" taste_description = "burning" + value = REAGENT_VALUE_UNCOMMON /datum/reagent/phlogiston/reaction_mob(mob/living/M, method=TOUCH, reac_volume) M.adjust_fire_stacks(1) @@ -156,8 +164,8 @@ description = "Very flammable." reagent_state = LIQUID color = "#FA00AF" - value = 1 taste_description = "burning" + value = REAGENT_VALUE_COMMON /datum/reagent/napalm/on_mob_life(mob/living/carbon/M) M.adjust_fire_stacks(1) @@ -174,7 +182,7 @@ color = "#0000DC" metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "bitterness" - + value = REAGENT_VALUE_COMMON /datum/reagent/cryostylane/on_mob_life(mob/living/carbon/M) //TODO: code freezing into an ice cube if(M.reagents.has_reagent(/datum/reagent/oxygen)) @@ -193,6 +201,7 @@ color = "#64FAC8" metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "bitterness" + value = REAGENT_VALUE_COMMON /datum/reagent/pyrosium/on_mob_life(mob/living/carbon/M) if(M.reagents.has_reagent(/datum/reagent/oxygen)) @@ -208,6 +217,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM taste_description = "charged metal" var/shock_timer = 0 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/teslium/on_mob_life(mob/living/carbon/M) shock_timer++ @@ -242,6 +252,7 @@ reagent_state = LIQUID color = "#A6FAFF55" taste_description = "the inside of a fire extinguisher" + value = REAGENT_VALUE_UNCOMMON /datum/reagent/firefighting_foam/reaction_turf(turf/open/T, reac_volume) if (!istype(T)) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index 305d12b3c5..3169d2d3aa 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -7,6 +7,7 @@ color = "#CF3600" // rgb: 207, 54, 0 taste_description = "bitterness" taste_mult = 1.2 + value = REAGENT_VALUE_COMMON //Encouraging people to mix toxins for reasons beyond harming each other or mixing reagents such as pen acid. var/toxpwr = 1.5 /datum/reagent/toxin/on_mob_life(mob/living/carbon/M) @@ -21,6 +22,7 @@ color = "#792300" // rgb: 121, 35, 0 toxpwr = 2.5 taste_description = "mushroom" + value = REAGENT_VALUE_UNCOMMON pH = 13 /datum/reagent/toxin/mutagen @@ -30,6 +32,7 @@ toxpwr = 0 taste_description = "slime" taste_mult = 0.9 + value = REAGENT_VALUE_VERY_COMMON pH = 2.3 /datum/reagent/toxin/mutagen/reaction_mob(mob/living/carbon/M, method=TOUCH, reac_volume) @@ -60,6 +63,7 @@ color = "#8228A0" toxpwr = 3 pH = 4 + value = REAGENT_VALUE_RARE //sheets are worth more /datum/reagent/toxin/plasma/on_mob_life(mob/living/carbon/C) if(holder.has_reagent(/datum/reagent/medicine/epinephrine)) @@ -92,6 +96,7 @@ toxpwr = 0 taste_description = "acid" pH = 1.2 + value = REAGENT_VALUE_RARE /datum/reagent/toxin/lexorin/on_mob_life(mob/living/carbon/C) . = TRUE @@ -114,6 +119,7 @@ taste_description = "slime" taste_mult = 1.3 pH = 10 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/toxin/slimejelly/on_mob_life(mob/living/carbon/M) if(prob(10)) @@ -132,6 +138,7 @@ toxpwr = 0 taste_description = "mint" pH = 8 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/toxin/minttoxin/on_mob_life(mob/living/carbon/M) if(HAS_TRAIT(M, TRAIT_FAT)) @@ -145,6 +152,7 @@ toxpwr = 2 taste_description = "fish" pH = 12 + value = REAGENT_VALUE_RARE /datum/reagent/toxin/zombiepowder name = "Zombie Powder" @@ -155,6 +163,7 @@ taste_description = "death" var/fakedeath_active = FALSE pH = 13 + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/toxin/zombiepowder/on_mob_metabolize(mob/living/L) ..() @@ -193,6 +202,7 @@ toxpwr = 0.8 taste_description = "death" pH = 14.5 + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/toxin/ghoulpowder/on_mob_metabolize(mob/living/L) ..() @@ -214,6 +224,7 @@ toxpwr = 0 taste_description = "sourness" pH = 11 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/toxin/mindbreaker/on_mob_life(mob/living/carbon/M) M.hallucination += 5 @@ -226,6 +237,7 @@ toxpwr = 1 taste_mult = 1 pH = 2.7 + value = REAGENT_VALUE_NONE /datum/reagent/toxin/plantbgone/reaction_obj(obj/O, reac_volume) if(istype(O, /obj/structure/alien/weeds)) @@ -250,6 +262,7 @@ description = "A harmful toxic mixture to kill weeds. Do not ingest!" color = "#4B004B" // rgb: 75, 0, 75 pH = 3 + value = REAGENT_VALUE_NONE /datum/reagent/toxin/pestkiller name = "Pest Killer" @@ -257,6 +270,7 @@ color = "#4B004B" // rgb: 75, 0, 75 toxpwr = 1 pH = 3.2 + value = REAGENT_VALUE_NONE /datum/reagent/toxin/pestkiller/reaction_mob(mob/living/M, method=TOUCH, reac_volume) ..() @@ -270,6 +284,7 @@ color = "#9ACD32" toxpwr = 1 pH = 11 + value = REAGENT_VALUE_RARE /datum/reagent/toxin/spore/on_mob_life(mob/living/carbon/C) C.damageoverlaytemp = 60 @@ -284,6 +299,7 @@ toxpwr = 0.5 taste_description = "burning" pH = 13 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/toxin/spore_burning/on_mob_life(mob/living/carbon/M) M.adjust_fire_stacks(2) @@ -323,6 +339,7 @@ glass_name = "glass of beer" glass_desc = "A freezing pint of beer." pH = 2 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/toxin/fakebeer/on_mob_life(mob/living/carbon/M) switch(current_cycle) @@ -340,6 +357,7 @@ color = "#5B2E0D" // rgb: 91, 46, 13 toxpwr = 0.5 pH = 4.2 + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/toxin/teapowder name = "Ground Tea Leaves" @@ -348,6 +366,7 @@ color = "#7F8400" // rgb: 127, 132, 0 toxpwr = 0.5 pH = 4.9 + value = REAGENT_VALUE_VERY_COMMON /datum/reagent/toxin/mutetoxin //the new zombie powder. name = "Mute Toxin" @@ -367,6 +386,7 @@ color = "#6E2828" data = 15 toxpwr = 0 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/toxin/staminatoxin/on_mob_life(mob/living/carbon/M) M.adjustStaminaLoss(REM * data, 0) @@ -381,6 +401,7 @@ color = "#787878" metabolization_rate = 0.125 * REAGENTS_METABOLISM toxpwr = 0 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/toxin/polonium/on_mob_life(mob/living/carbon/M) M.radiation += 4 @@ -394,6 +415,7 @@ metabolization_rate = 0.25 * REAGENTS_METABOLISM overdose_threshold = 30 toxpwr = 0 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/toxin/histamine/on_mob_life(mob/living/carbon/M) if(prob(50)) @@ -441,6 +463,7 @@ color = "#F0FFF0" metabolization_rate = 0.25 * REAGENTS_METABOLISM toxpwr = 0 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/toxin/venom/on_mob_life(mob/living/carbon/M) toxpwr = 0.2*volume @@ -476,6 +499,7 @@ color = "#00B4FF" metabolization_rate = 0.125 * REAGENTS_METABOLISM toxpwr = 1.25 + value = REAGENT_VALUE_UNCOMMON /datum/reagent/toxin/cyanide/on_mob_life(mob/living/carbon/M) if(prob(5)) @@ -494,6 +518,7 @@ metabolization_rate = 0.25 * REAGENTS_METABOLISM toxpwr = 0.5 taste_description = "bad cooking" + value = REAGENT_VALUE_NONE /datum/reagent/toxin/condensed_cooking_oil name = "Condensed Cooking Oil" @@ -504,9 +529,10 @@ toxpwr = 0 taste_mult = -2 taste_description = "awful cooking" + value = REAGENT_VALUE_NONE /datum/reagent/toxin/condensed_cooking_oil/on_mob_life(mob/living/carbon/M) - if(prob(15)) + if(prob(5)) M.vomit() else if(prob(40)) @@ -551,6 +577,7 @@ color = "#7F10C0" metabolization_rate = 0.5 * REAGENTS_METABOLISM toxpwr = 2.5 + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/toxin/initropidril/on_mob_life(mob/living/carbon/C) if(prob(25)) @@ -582,6 +609,7 @@ metabolization_rate = 0.25 * REAGENTS_METABOLISM toxpwr = 0 taste_mult = 0 // undetectable, I guess? + value = REAGENT_VALUE_VERY_RARE /datum/reagent/toxin/pancuronium/on_mob_life(mob/living/carbon/M) if(current_cycle >= 10) @@ -598,6 +626,7 @@ color = "#6496FA" metabolization_rate = 0.75 * REAGENTS_METABOLISM toxpwr = 0 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/toxin/sodium_thiopental/on_mob_life(mob/living/carbon/M) if(current_cycle >= 10) @@ -626,6 +655,7 @@ color = "#FFFFFF" toxpwr = 0 metabolization_rate = 0.5 * REAGENTS_METABOLISM + value = REAGENT_VALUE_RARE /datum/reagent/toxin/amanitin/on_mob_end_metabolize(mob/living/M) var/toxdamage = current_cycle*3*REM @@ -656,6 +686,7 @@ color = "#7DC3A0" metabolization_rate = 0.06 * REAGENTS_METABOLISM toxpwr = 1.75 + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/toxin/coniine/on_mob_life(mob/living/carbon/M) M.losebreath += 5 @@ -670,6 +701,7 @@ overdose_threshold = 29 toxpwr = 0 taste_description = "vomit" + value = REAGENT_VALUE_VERY_RARE /datum/reagent/toxin/spewium/on_mob_life(mob/living/carbon/C) .=..() @@ -693,6 +725,7 @@ color = "#191919" metabolization_rate = 0.125 * REAGENTS_METABOLISM toxpwr = 1 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/toxin/curare/on_mob_life(mob/living/carbon/M) if(current_cycle >= 11) @@ -708,6 +741,7 @@ color = "#C8C8C8" //RGB: 200, 200, 200 metabolization_rate = 0.2 * REAGENTS_METABOLISM toxpwr = 0 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/toxin/heparin/on_mob_life(mob/living/carbon/M) if(ishuman(M)) @@ -726,6 +760,7 @@ metabolization_rate = 0.6 * REAGENTS_METABOLISM toxpwr = 0.5 taste_description = "spinning" + value = REAGENT_VALUE_VERY_RARE /datum/reagent/toxin/rotatium/on_mob_life(mob/living/carbon/M) if(M.hud_used) @@ -752,6 +787,7 @@ metabolization_rate = 0.8 * REAGENTS_METABOLISM toxpwr = 0.25 taste_description = "skewing" + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/toxin/skewium/on_mob_life(mob/living/carbon/M) /* @@ -788,6 +824,7 @@ color = "#3C5133" metabolization_rate = 0.08 * REAGENTS_METABOLISM toxpwr = 0.15 + value = REAGENT_VALUE_VERY_RARE /datum/reagent/toxin/anacea/on_mob_life(mob/living/carbon/M) var/remove_amt = 5 @@ -809,6 +846,7 @@ taste_description = "acid" self_consuming = TRUE pH = 2.75 + value = REAGENT_VALUE_NONE /datum/reagent/toxin/acid/reaction_mob(mob/living/carbon/C, method=TOUCH, reac_volume) if(!istype(C)) @@ -840,6 +878,7 @@ color = "#5050FF" toxpwr = 2 acidpwr = 42.0 + value = REAGENT_VALUE_COMMON /datum/reagent/toxin/acid/fluacid/on_mob_life(mob/living/carbon/M) M.adjustFireLoss(current_cycle/10, 0) @@ -853,6 +892,7 @@ metabolization_rate = 0 //stays in the system until active. var/actual_metaboliztion_rate = REAGENTS_METABOLISM toxpwr = 0 + value = REAGENT_VALUE_VERY_RARE var/actual_toxpwr = 5 var/delay = 30 @@ -871,6 +911,7 @@ color = "#F0F8FF" // rgb: 240, 248, 255 toxpwr = 0 taste_description = "stillness" + value = REAGENT_VALUE_RARE /datum/reagent/toxin/mimesbane/on_mob_metabolize(mob/living/L) ADD_TRAIT(L, TRAIT_EMOTEMUTE, type) @@ -885,6 +926,7 @@ toxpwr = 0 taste_description = "bone hurting" overdose_threshold = 20 + value = REAGENT_VALUE_VERY_RARE //because it's very funny. /datum/reagent/toxin/bonehurtingjuice/on_mob_add(mob/living/carbon/M) M.say("oof ouch my bones", forced = /datum/reagent/toxin/bonehurtingjuice) @@ -944,6 +986,7 @@ toxpwr = 0 taste_description = "brain hurting" metabolization_rate = 5 + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/toxin/brainhurtingjuice/on_mob_life(mob/living/carbon/M) if(prob(50)) @@ -962,6 +1005,7 @@ metabolization_rate = 0.5 * REAGENTS_METABOLISM toxpwr = 0 taste_description = "tannin" + value = REAGENT_VALUE_RARE /datum/reagent/toxin/bungotoxin/on_mob_life(mob/living/carbon/M) M.adjustOrganLoss(ORGAN_SLOT_HEART, 3) diff --git a/code/modules/reagents/chemistry/recipes/medicine.dm b/code/modules/reagents/chemistry/recipes/medicine.dm index 0b32952d20..9cf9acb424 100644 --- a/code/modules/reagents/chemistry/recipes/medicine.dm +++ b/code/modules/reagents/chemistry/recipes/medicine.dm @@ -105,7 +105,7 @@ if(St.purity < 1) St.volume *= St.purity St.purity = 1 - var/amount = CLAMP(0.002, 0, N.volume) + var/amount = clamp(0.002, 0, N.volume) N.volume -= amount St.data["grown_volume"] = St.data["grown_volume"] + added_volume St.name = "[initial(St.name)] [round(St.data["grown_volume"], 0.1)]u colony" diff --git a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm index 2c8be10ace..8782d65f76 100644 --- a/code/modules/reagents/chemistry/recipes/pyrotechnics.dm +++ b/code/modules/reagents/chemistry/recipes/pyrotechnics.dm @@ -195,7 +195,7 @@ return holder.remove_reagent(/datum/reagent/sorium, multiplier*4) var/turf/T = get_turf(holder.my_atom) - var/range = CLAMP(sqrt(multiplier*4), 1, 6) + var/range = clamp(sqrt(multiplier*4), 1, 6) goonchem_vortex(T, 1, range) /datum/chemical_reaction/sorium_vortex @@ -206,7 +206,7 @@ /datum/chemical_reaction/sorium_vortex/on_reaction(datum/reagents/holder, multiplier) var/turf/T = get_turf(holder.my_atom) - var/range = CLAMP(sqrt(multiplier), 1, 6) + var/range = clamp(sqrt(multiplier), 1, 6) goonchem_vortex(T, 1, range) /datum/chemical_reaction/liquid_dark_matter @@ -220,7 +220,7 @@ return holder.remove_reagent(/datum/reagent/liquid_dark_matter, multiplier*3) var/turf/T = get_turf(holder.my_atom) - var/range = CLAMP(sqrt(multiplier*3), 1, 6) + var/range = clamp(sqrt(multiplier*3), 1, 6) goonchem_vortex(T, 0, range) /datum/chemical_reaction/ldm_vortex @@ -231,7 +231,7 @@ /datum/chemical_reaction/ldm_vortex/on_reaction(datum/reagents/holder, multiplier) var/turf/T = get_turf(holder.my_atom) - var/range = CLAMP(sqrt(multiplier/2), 1, 6) + var/range = clamp(sqrt(multiplier/2), 1, 6) goonchem_vortex(T, 0, range) /datum/chemical_reaction/flash_powder diff --git a/code/modules/reagents/chemistry/recipes/slime_extracts.dm b/code/modules/reagents/chemistry/recipes/slime_extracts.dm index eb473950d5..ead47e2a42 100644 --- a/code/modules/reagents/chemistry/recipes/slime_extracts.dm +++ b/code/modules/reagents/chemistry/recipes/slime_extracts.dm @@ -42,7 +42,7 @@ /datum/chemical_reaction/slime/slimemonkey/on_reaction(datum/reagents/holder) for(var/i in 1 to 3) - new /obj/item/reagent_containers/food/snacks/monkeycube(get_turf(holder.my_atom)) + new /obj/item/reagent_containers/food/snacks/cube/monkey(get_turf(holder.my_atom)) ..() //Green diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm index 89de7c409d..f326b94e44 100644 --- a/code/modules/reagents/reagent_containers.dm +++ b/code/modules/reagents/reagent_containers.dm @@ -185,7 +185,7 @@ START_PROCESSING(SSobj, src) else if((reagents.pH < -3) || (reagents.pH > 17)) visible_message("[icon2html(src, viewers(src))] \The [src] is damaged by the super pH and begins to deform!") - reagents.pH = CLAMP(reagents.pH, -3, 17) + reagents.pH = clamp(reagents.pH, -3, 17) container_HP -= 1 diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index 62ca5d658e..7fea8250d9 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -66,7 +66,7 @@ /obj/item/reagent_containers/spray/proc/spray(atom/A) - var/range = CLAMP(get_dist(src, A), 1, current_range) + var/range = clamp(get_dist(src, A), 1, current_range) var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src)) D.create_reagents(amount_per_transfer_from_this, NONE, NO_REAGENTS_VALUE) var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index b8957775b1..1a2742d2a6 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -180,7 +180,7 @@ ///Used by update_icon() and update_overlays() /obj/item/reagent_containers/syringe/proc/get_rounded_vol() if(reagents && reagents.total_volume) - return CLAMP(round((reagents.total_volume / volume * 15),5), 1, 15) + return clamp(round((reagents.total_volume / volume * 15),5), 1, 15) else return 0 diff --git a/code/modules/recycling/conveyor2.dm b/code/modules/recycling/conveyor2.dm index 425c94cd65..600ee4ad14 100644 --- a/code/modules/recycling/conveyor2.dm +++ b/code/modules/recycling/conveyor2.dm @@ -330,7 +330,7 @@ GLOBAL_LIST_EMPTY(conveyors_by_id) desc = "A conveyor control switch assembly." icon = 'icons/obj/recycling.dmi' icon_state = "switch-off" - w_class = WEIGHT_CLASS_BULKY + w_class = WEIGHT_CLASS_NORMAL var/id = "" //inherited by the switch /obj/item/conveyor_switch_construct/Initialize() diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index d6ad1bf042..b47f0de032 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -57,7 +57,7 @@ return ..() /obj/structure/bigDelivery/relay_container_resist(mob/living/user, obj/O) - if(ismovableatom(loc)) + if(ismovable(loc)) var/atom/movable/AM = loc //can't unwrap the wrapped container if it's inside something. AM.relay_container_resist(user, O) return diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index f3ac118134..cfb6d92723 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -36,6 +36,9 @@ other types of metals and chemistry for reagents). var/dangerous_construction = FALSE //notify and log for admin investigations if this is printed. var/departmental_flags = ALL //bitflags for deplathes. var/list/datum/techweb_node/unlocked_by = list() + ///minimum and security levels the design can be printed on. Currently only available for rnd production machinery and mechfab. + var/min_security_level = SEC_LEVEL_GREEN + var/max_security_level = SEC_LEVEL_DELTA var/research_icon //Replaces the item icon in the research console var/research_icon_state var/icon_cache diff --git a/code/modules/research/designs/autoylathe_designs.dm b/code/modules/research/designs/autoylathe_designs.dm index 7811cfdaad..0e572fee7a 100644 --- a/code/modules/research/designs/autoylathe_designs.dm +++ b/code/modules/research/designs/autoylathe_designs.dm @@ -1,5 +1,5 @@ /datum/design/autoylathe - build_type = AUTOYLATHE + build_type = TOYLATHE /datum/design/autoylathe/mech category = list("initial", "Figurines") @@ -558,7 +558,7 @@ /datum/design/foam_x9 name = "Foam Force X9 Rifle" id = "foam_x9" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500) build_path = /obj/item/gun/ballistic/automatic/x9/toy category = list("initial", "Rifles") @@ -566,7 +566,7 @@ /datum/design/foam_dart name = "Box of Foam Darts" id = "foam_dart" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 500, /datum/material/iron = 100) build_path = /obj/item/ammo_box/foambox category = list("initial", "Misc") @@ -574,7 +574,7 @@ /datum/design/foam_magpistol name = "Foam Force Magpistol" id = "magfoam_launcher" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 2000, /datum/material/iron = 250) build_path = /obj/item/gun/ballistic/shotgun/toy/mag category = list("initial", "Pistols") @@ -582,7 +582,7 @@ /datum/design/foam_magrifle name = "Foam Force MagRifle" id = "foam_magrifle" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500) build_path = /obj/item/gun/ballistic/automatic/toy/magrifle category = list("initial", "Rifles") @@ -590,7 +590,7 @@ /datum/design/foam_hyperburst name = "MagTag Hyper Rifle" id = "foam_hyperburst" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 4000, /datum/material/iron = 2000, /datum/material/glass = 1000) build_path = /obj/item/gun/energy/laser/practice/hyperburst category = list("initial", "Rifles") @@ -598,7 +598,7 @@ /datum/design/foam_sp name = "Foam Force Stealth Pistol" id = "foam_sp" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 2000, /datum/material/iron = 1000) build_path = /obj/item/gun/ballistic/automatic/toy/pistol/stealth category = list("initial", "Pistols") @@ -606,7 +606,7 @@ /datum/design/toyray name = "RayTag Gun" id = "toyray" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 2000, /datum/material/iron = 1000, /datum/material/glass = 1000) build_path = /obj/item/gun/energy/laser/practice/raygun category = list("initial", "Pistols") @@ -614,7 +614,7 @@ /datum/design/am4c name = "Foam Force AM4-C Rifle" id = "foam_am4c" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500) build_path = /obj/item/gun/ballistic/automatic/AM4C category = list("initial", "Rifles") @@ -622,7 +622,7 @@ /datum/design/foam_f3 name = "Replica F3 Justicar" id = "foam_f3" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 2000, /datum/material/iron = 250) build_path = /obj/item/toy/gun/justicar category = list("initial", "Pistols") @@ -630,7 +630,7 @@ /datum/design/toy_blaster name = "pump-action plastic blaster" id = "toy_blaster" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 2000, /datum/material/iron = 750, /datum/material/glass = 1000) build_path = /obj/item/gun/energy/pumpaction/toy category = list("initial", "Rifles") @@ -638,7 +638,7 @@ /datum/design/capammo name = "Box of Caps" id = "capammo" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/iron = 10, /datum/material/glass = 10) build_path = /obj/item/toy/ammo/gun category = list("initial", "Misc") @@ -646,7 +646,7 @@ /datum/design/foam_smg name = "Foam Force SMG" id = "foam_smg" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 2000, /datum/material/iron = 250) build_path = /obj/item/gun/ballistic/automatic/toy/unrestricted category = list("initial", "Pistols") @@ -654,7 +654,7 @@ /datum/design/foam_pistol name = "Foam Force Pistol" id = "foam_pistol" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 2000, /datum/material/iron = 250) build_path = /obj/item/gun/ballistic/automatic/toy/pistol/unrestricted category = list("initial", "Pistols") @@ -662,7 +662,7 @@ /datum/design/foam_shotgun name = "Foam Force Shotgun" id = "foam_shotgun" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500) build_path = /obj/item/gun/ballistic/shotgun/toy/unrestricted category = list("initial", "Rifles") @@ -670,7 +670,7 @@ /datum/design/foam_dartred name = "Box of Lastag Red Foam Darts" id = "redfoam_dart" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 500, /datum/material/iron = 100) build_path = /obj/item/ammo_box/foambox/tag/red category = list("initial", "Misc") @@ -678,7 +678,7 @@ /datum/design/foam_dartblue name = "Box of Lastag Blue Foam Darts" id = "bluefoam_dart" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 500, /datum/material/iron = 100) build_path = /obj/item/ammo_box/foambox/tag/blue category = list("initial", "Misc") @@ -686,7 +686,7 @@ /datum/design/foam_bow name = "Foam Force Crossbow" id = "foam_bow" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 2000, /datum/material/iron = 250) build_path = /obj/item/gun/ballistic/shotgun/toy/crossbow category = list("initial", "Pistols") @@ -694,7 +694,7 @@ /datum/design/foam_c20 name = "Donksoft C20R" id = "foam_c20" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500) build_path = /obj/item/gun/ballistic/automatic/c20r/toy/unrestricted category = list("hacked", "Rifles") @@ -702,7 +702,7 @@ /datum/design/foam_l6 name = "Donksoft LMG" id = "foam_LMG" - build_type = AUTOYLATHE + build_type = TOYLATHE materials = list(/datum/material/plastic = 4000, /datum/material/iron = 500) build_path = /obj/item/gun/ballistic/automatic/l6_saw/toy/unrestricted category = list("hacked", "Rifles") diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index e82dffbe07..2cf9df6d50 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -2,6 +2,9 @@ ///////Biogenerator Designs /////// /////////////////////////////////// +//Please be wary to not add inorganic items to the results such as generic glass bottles and metal. +//as they kind of defeat the design of this feature. + /datum/design/milk name = "10u Milk" id = "milk" @@ -18,22 +21,6 @@ make_reagents = list(/datum/reagent/consumable/cream = 10) category = list("initial","Food") -/datum/design/milk_carton - name = "Milk Carton" - id = "milk_carton" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass = 100) - build_path = /obj/item/reagent_containers/food/condiment/milk - category = list("initial","Food") - -/datum/design/cream_carton - name = "Cream Carton" - id = "cream_carton" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass = 300) - build_path = /obj/item/reagent_containers/food/drinks/bottle/cream - category = list("initial","Food") - /datum/design/black_pepper name = "10u Black Pepper" id = "black_pepper" @@ -42,15 +29,6 @@ make_reagents = list(/datum/reagent/consumable/blackpepper = 10) category = list("initial","Food") -/datum/design/pepper_mill - name = "Pepper Mill" - id = "pepper_mill" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass = 50) - build_path = /obj/item/reagent_containers/food/condiment/peppermill - make_reagents = list() - category = list("initial","Food") - /datum/design/enzyme name = "10u Universal Enzyme" id = "enzyme" @@ -59,20 +37,12 @@ make_reagents = list(/datum/reagent/consumable/enzyme = 10) category = list("initial","Food") -/datum/design/flour_sack - name = "Flour Sack" - id = "flour_sack" - build_type = BIOGENERATOR - materials = list(/datum/material/biomass = 150) - build_path = /obj/item/reagent_containers/food/condiment/flour - category = list("initial","Food") - /datum/design/monkey_cube name = "Monkey Cube" id = "mcube" build_type = BIOGENERATOR materials = list(/datum/material/biomass = 250) - build_path = /obj/item/reagent_containers/food/snacks/monkeycube + build_path = /obj/item/reagent_containers/food/snacks/cube/monkey category = list("initial", "Food") /datum/design/smeat @@ -84,43 +54,43 @@ category = list("initial", "Food") /datum/design/ez_nut - name = "E-Z Nutrient" + name = "10u E-Z Nutrient" id = "ez_nut" build_type = BIOGENERATOR - materials = list(/datum/material/biomass = 10) - build_path = /obj/item/reagent_containers/glass/bottle/nutrient/ez + materials = list(/datum/material/biomass = 2) + make_reagents = list(/datum/reagent/plantnutriment/eznutriment = 10) category = list("initial","Botany Chemicals") /datum/design/l4z_nut - name = "Left 4 Zed" + name = "10u Left 4 Zed" id = "l4z_nut" build_type = BIOGENERATOR - materials = list(/datum/material/biomass = 20) - build_path = /obj/item/reagent_containers/glass/bottle/nutrient/l4z + materials = list(/datum/material/biomass = 4) + make_reagents = list(/datum/reagent/plantnutriment/left4zednutriment = 10) category = list("initial","Botany Chemicals") /datum/design/rh_nut - name = "Robust Harvest" + name = "10u Robust Harvest" id = "rh_nut" build_type = BIOGENERATOR - materials = list(/datum/material/biomass = 25) - build_path = /obj/item/reagent_containers/glass/bottle/nutrient/rh + materials = list(/datum/material/biomass = 5) + make_reagents = list(/datum/reagent/plantnutriment/robustharvestnutriment = 10) category = list("initial","Botany Chemicals") /datum/design/weed_killer name = "Weed Killer" id = "weed_killer" build_type = BIOGENERATOR - materials = list(/datum/material/biomass = 50) - build_path = /obj/item/reagent_containers/glass/bottle/killer/weedkiller + materials = list(/datum/material/biomass = 10) + make_reagents = list(/datum/reagent/toxin/plantbgone/weedkiller = 10) category = list("initial","Botany Chemicals") /datum/design/pest_spray name = "Pest Killer" id = "pest_spray" build_type = BIOGENERATOR - materials = list(/datum/material/biomass = 50) - build_path = /obj/item/reagent_containers/glass/bottle/killer/pestkiller + materials = list(/datum/material/biomass = 10) + make_reagents = list(/datum/reagent/toxin/pestkiller = 10) category = list("initial","Botany Chemicals") /datum/design/ammonia @@ -139,13 +109,13 @@ make_reagents = list(/datum/reagent/saltpetre = 10) category = list("initial","Botany Chemicals") -/datum/design/botany_bottle - name = "Empty Bottle" - id = "botany_bottle" +/datum/design/empty_carton + name = "Small Empty Carton Box" + id = "empty_carton" build_type = BIOGENERATOR - materials = list(/datum/material/biomass = 5) - build_path = /obj/item/reagent_containers/glass/bottle/nutrient/empty - category = list("initial", "Botany Chemicals") + materials = list(/datum/material/biomass = 15) + build_path = /obj/item/reagent_containers/food/drinks/bottle/bio_carton + category = list("initial", "Organic Materials") /datum/design/cloth name = "Roll of Cloth" diff --git a/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm b/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm index 6d63df7d4b..06cdef5ecc 100644 --- a/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm +++ b/code/modules/research/designs/machine_desings/machine_designs_all_misc.dm @@ -111,6 +111,6 @@ name = "Machine Design (Autoylathe)" desc = "The circuit board for an autoylathe." id = "autoylathe" - build_path = /obj/item/circuitboard/machine/autoylathe + build_path = /obj/item/circuitboard/machine/autolathe/toy departmental_flags = DEPARTMENTAL_FLAG_ALL category = list("Misc. Machinery") diff --git a/code/modules/research/designs/misc_designs.dm b/code/modules/research/designs/misc_designs.dm index 04b7bbc668..e407277ebf 100644 --- a/code/modules/research/designs/misc_designs.dm +++ b/code/modules/research/designs/misc_designs.dm @@ -635,3 +635,27 @@ build_path = /obj/item/circuitboard/computer/sat_control category = list("Computer Boards") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING + + + +///////////////////////////////////////// +////////////Tackle Gloves//////////////// +///////////////////////////////////////// + +/datum/design/tackle_dolphin + name = "Dolphin Gloves" + id = "tackle_dolphin" + build_type = PROTOLATHE + materials = list(/datum/material/plastic = 2500) + build_path = /obj/item/clothing/gloves/tackler/dolphin + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY + +/datum/design/tackle_rocket + name = "Rocket Gloves" + id = "tackle_rocket" + build_type = PROTOLATHE + materials = list(/datum/material/plasma = 1000, /datum/material/plastic = 2000) + build_path = /obj/item/clothing/gloves/tackler/rocket + category = list("Equipment") + departmental_flags = DEPARTMENTAL_FLAG_SECURITY diff --git a/code/modules/research/designs/nanite_designs.dm b/code/modules/research/designs/nanite_designs.dm index c72ee4fb8c..b157d0c349 100644 --- a/code/modules/research/designs/nanite_designs.dm +++ b/code/modules/research/designs/nanite_designs.dm @@ -529,7 +529,6 @@ ////////////////////NANITE PROTOCOLS////////////////////////////////////// //Note about the category name: The UI cuts the last 8 characters from the category name to remove the " Nanites" in the other categories //Because of this, Protocols was getting cut down to "P", so i had to add some padding -/* /datum/design/nanites/kickstart name = "Kickstart Protocol" desc = "Replication Protocol: the nanites focus on early growth, heavily boosting replication rate for a few minutes after the initial implantation." @@ -557,4 +556,10 @@ id = "offline_nanites" program_type = /datum/nanite_program/protocol/offline category = list("Protocols_Nanites") -*/ + +/datum/design/nanites/synergy + name = "Synergy Protocol" + desc = "Replication Protocol: the nanites syncronize their tasks and processes within a host, leading to an increase in replication speed proportional to the current nanite volume." + id = "synergy_nanites" + program_type = /datum/nanite_program/protocol/synergy + category = list("Protocols_Nanites") diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 42b8a4dcbb..cc02e271f9 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -101,7 +101,7 @@ Note: Must be placed within 3 tiles of the R&D Console if(!istype(loaded_item) || !istype(linked_console)) return FALSE - if (id && id != RESEARCH_MATERIAL_RECLAMATION_ID) + if (id && id != RESEARCH_MATERIAL_RECLAMATION_ID && id != RESEARCH_DEEP_SCAN_ID) var/datum/techweb_node/TN = SSresearch.techweb_node_by_id(id) if(!istype(TN)) return FALSE @@ -125,7 +125,7 @@ Note: Must be placed within 3 tiles of the R&D Console if(destroy_item(loaded_item)) linked_console.stored_research.boost_with_path(SSresearch.techweb_node_by_id(TN.id), dpath) - else + else if(id == RESEARCH_MATERIAL_RECLAMATION_ID) var/list/point_value = techweb_item_point_check(loaded_item) if(linked_console.stored_research.deconstructed_items[loaded_item.type]) point_value = list() @@ -143,6 +143,15 @@ Note: Must be placed within 3 tiles of the R&D Console if(destroy_item(loaded_item)) linked_console.stored_research.add_point_list(point_value) linked_console.stored_research.deconstructed_items[loaded_type] = point_value + else if(id == RESEARCH_DEEP_SCAN_ID) + var/list/return_list = list() + . = SEND_SIGNAL(loaded_item, COMSIG_ITEM_DECONSTRUCTOR_DEEPSCAN, src, user, return_list) + flick("d_analyzer_process", src) + if(. & COMPONENT_DEEPSCAN_UNCOVERED_INFORMATION) + say("New information uncovered from item deep scan[length(return_list)? ": [english_list(return_list)]" : ""].") + else + say("Item deep scan uncovered no new information.") + return TRUE /obj/machinery/rnd/destructive_analyzer/proc/unload_item() diff --git a/code/modules/research/machinery/_production.dm b/code/modules/research/machinery/_production.dm index 41ed6a556e..0550fa9334 100644 --- a/code/modules/research/machinery/_production.dm +++ b/code/modules/research/machinery/_production.dm @@ -3,6 +3,7 @@ desc = "Makes researched and prototype items with materials and energy." layer = BELOW_OBJ_LAYER var/consoleless_interface = TRUE //Whether it can be used without a console. + var/offstation_security_levels = TRUE var/efficiency_coeff = 1 //Materials needed / coeff = actual. var/list/categories = list() var/datum/component/remote_materials/materials @@ -98,6 +99,7 @@ var/obj/item/I = O I.material_flags |= MATERIAL_NO_EFFECTS //Find a better way to do this. I.set_custom_materials(matlist.Copy()) + I.rnd_crafted(src) SSblackbox.record_feedback("nested tally", "item_printed", amount, list("[type]", "[path]")) investigate_log("[key_name(user)] built [amount] of [path] at [src]([type]).", INVESTIGATE_RESEARCH) @@ -134,6 +136,12 @@ if(D.build_type && !(D.build_type & allowed_buildtypes)) say("This machine does not have the necessary manipulation systems for this design. Please contact Nanotrasen Support!") return FALSE + if(!(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z))) + if(GLOB.security_level < D.min_security_level) + say("Minimum security alert level required to print this design not met, please contact the command staff.") + return FALSE + if(GLOB.security_level > D.max_security_level) + say("Exceeded maximum security alert level required to print this design, please contact the command staff.") if(!materials.mat_container) say("No connection to material storage, please contact the quartermaster.") return FALSE @@ -141,7 +149,7 @@ say("Mineral access is on hold, please contact the quartermaster.") return FALSE var/power = 1000 - amount = CLAMP(amount, 1, 50) + amount = clamp(amount, 1, 50) for(var/M in D.materials) power += round(D.materials[M] * amount / 35) power = min(3000, power) @@ -275,15 +283,26 @@ temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]" c = min(c,t) - if (c >= 1) + var/clearance = !(obj_flags & EMAGGED) && (offstation_security_levels || is_station_level(z)) + var/sec_text = "" + if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA)) + sec_text = " (Allowed security levels: " + for(var/n in D.min_security_level to D.max_security_level) + sec_text += NUM2SECLEVEL(n) + if(n + 1 <= D.max_security_level) + sec_text += ", " + sec_text += ")" + + clearance = !clearance || ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level) + if (c >= 1 && clearance) l += "[D.name][RDSCREEN_NOBREAK]" if(c >= 5) l += "x5[RDSCREEN_NOBREAK]" if(c >= 10) l += "x10[RDSCREEN_NOBREAK]" - l += "[temp_material][RDSCREEN_NOBREAK]" + l += "[temp_material][sec_text][RDSCREEN_NOBREAK]" else - l += "[D.name][temp_material][RDSCREEN_NOBREAK]" + l += "[D.name][temp_material][sec_text][RDSCREEN_NOBREAK]" l += "" return l diff --git a/code/modules/research/machinery/circuit_imprinter.dm b/code/modules/research/machinery/circuit_imprinter.dm index 948dad61db..661ebe31c0 100644 --- a/code/modules/research/machinery/circuit_imprinter.dm +++ b/code/modules/research/machinery/circuit_imprinter.dm @@ -30,3 +30,9 @@ total_rating += M.rating * 2 //There is only one. total_rating = max(1, total_rating) efficiency_coeff = total_rating + var/obj/item/circuitboard/machine/circuit_imprinter/C = circuit + offstation_security_levels = C.offstation_security_levels + +/obj/machinery/rnd/production/circuit_imprinter/offstation + offstation_security_levels = FALSE + circuit = /obj/item/circuitboard/machine/circuit_imprinter/offstation diff --git a/code/modules/research/machinery/protolathe.dm b/code/modules/research/machinery/protolathe.dm index 684f27ccad..b1b31a279c 100644 --- a/code/modules/research/machinery/protolathe.dm +++ b/code/modules/research/machinery/protolathe.dm @@ -23,3 +23,12 @@ /obj/machinery/rnd/production/protolathe/disconnect_console() linked_console.linked_lathe = null ..() + +/obj/machinery/rnd/production/protolathe/calculate_efficiency() + . = ..() + var/obj/item/circuitboard/machine/protolathe/C = circuit + offstation_security_levels = C.offstation_security_levels + +/obj/machinery/rnd/production/protolathe/offstation + offstation_security_levels = FALSE + circuit = /obj/item/circuitboard/machine/protolathe/offstation diff --git a/code/modules/research/nanites/extra_settings/number.dm b/code/modules/research/nanites/extra_settings/number.dm index 6e63ae067e..75489635f5 100644 --- a/code/modules/research/nanites/extra_settings/number.dm +++ b/code/modules/research/nanites/extra_settings/number.dm @@ -16,7 +16,7 @@ value = text2num(value) if(!value || !isnum(value)) return - src.value = CLAMP(value, min, max) + src.value = clamp(value, min, max) /datum/nanite_extra_setting/number/get_copy() return new /datum/nanite_extra_setting/number(value, min, max, unit) diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm index 0750d3d268..4650af5c80 100644 --- a/code/modules/research/nanites/nanite_chamber_computer.dm +++ b/code/modules/research/nanites/nanite_chamber_computer.dm @@ -72,14 +72,14 @@ if("set_safety") var/threshold = text2num(params["value"]) if(!isnull(threshold)) - chamber.set_safety(CLAMP(round(threshold, 1),0,500)) + chamber.set_safety(clamp(round(threshold, 1),0,500)) playsound(src, "terminal_type", 25, FALSE) chamber.occupant.investigate_log("'s nanites' safety threshold was set to [threshold] by [key_name(usr)] via [src] at [AREACOORD(src)].", INVESTIGATE_NANITES) . = TRUE if("set_cloud") var/cloud_id = text2num(params["value"]) if(!isnull(cloud_id)) - chamber.set_cloud(CLAMP(round(cloud_id, 1),0,100)) + chamber.set_cloud(clamp(round(cloud_id, 1),0,100)) playsound(src, "terminal_type", 25, FALSE) chamber.occupant.investigate_log("'s nanites' cloud id was set to [cloud_id] by [key_name(usr)] via [src] at [AREACOORD(src)].", INVESTIGATE_NANITES) . = TRUE diff --git a/code/modules/research/nanites/nanite_cloud_controller.dm b/code/modules/research/nanites/nanite_cloud_controller.dm index 439d0c5750..f9d4d71b01 100644 --- a/code/modules/research/nanites/nanite_cloud_controller.dm +++ b/code/modules/research/nanites/nanite_cloud_controller.dm @@ -174,7 +174,7 @@ var/cloud_id = new_backup_id if(!isnull(cloud_id)) playsound(src, 'sound/machines/terminal_prompt.ogg', 50, FALSE) - cloud_id = CLAMP(round(cloud_id, 1),1,100) + cloud_id = clamp(round(cloud_id, 1),1,100) generate_backup(cloud_id, usr) . = TRUE if("delete_backup") diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm index ea4392f236..47ee2447d2 100644 --- a/code/modules/research/nanites/nanite_program_hub.dm +++ b/code/modules/research/nanites/nanite_program_hub.dm @@ -21,7 +21,7 @@ list(name = "Augmentation Nanites"), list(name = "Suppression Nanites"), list(name = "Weaponized Nanites"), - //list(name = "Protocols") B.E.P.I.S Content, which we dont have + list(name = "Protocols") //Moved to default techweb from B.E.P.I.S. research, for now ) /obj/machinery/nanite_program_hub/Initialize() diff --git a/code/modules/research/nanites/nanite_programmer.dm b/code/modules/research/nanites/nanite_programmer.dm index d81880c6d9..5315a7a507 100644 --- a/code/modules/research/nanites/nanite_programmer.dm +++ b/code/modules/research/nanites/nanite_programmer.dm @@ -86,13 +86,13 @@ var/target_code = params["target_code"] switch(target_code) if("activation") - program.activation_code = CLAMP(round(new_code, 1),0,9999) + program.activation_code = clamp(round(new_code, 1),0,9999) if("deactivation") - program.deactivation_code = CLAMP(round(new_code, 1),0,9999) + program.deactivation_code = clamp(round(new_code, 1),0,9999) if("kill") - program.kill_code = CLAMP(round(new_code, 1),0,9999) + program.kill_code = clamp(round(new_code, 1),0,9999) if("trigger") - program.trigger_code = CLAMP(round(new_code, 1),0,9999) + program.trigger_code = clamp(round(new_code, 1),0,9999) . = TRUE if("set_extra_setting") program.set_extra_setting(params["target_setting"], params["value"]) @@ -102,7 +102,7 @@ var/timer = text2num(params["delay"]) if(!isnull(timer)) playsound(src, "terminal_type", 25, FALSE) - timer = CLAMP(round(timer, 1), 0, 3600) + timer = clamp(round(timer, 1), 0, 3600) timer *= 10 //convert to deciseconds program.timer_restart = timer . = TRUE @@ -110,7 +110,7 @@ var/timer = text2num(params["delay"]) if(!isnull(timer)) playsound(src, "terminal_type", 25, FALSE) - timer = CLAMP(round(timer, 1), 0, 3600) + timer = clamp(round(timer, 1), 0, 3600) timer *= 10 //convert to deciseconds program.timer_shutdown = timer . = TRUE @@ -118,7 +118,7 @@ var/timer = text2num(params["delay"]) if(!isnull(timer)) playsound(src, "terminal_type", 25, FALSE) - timer = CLAMP(round(timer, 1), 0, 3600) + timer = clamp(round(timer, 1), 0, 3600) timer *= 10 //convert to deciseconds program.timer_trigger = timer . = TRUE @@ -126,7 +126,7 @@ var/timer = text2num(params["delay"]) if(!isnull(timer)) playsound(src, "terminal_type", 25, FALSE) - timer = CLAMP(round(timer, 1), 0, 3600) + timer = clamp(round(timer, 1), 0, 3600) timer *= 10 //convert to deciseconds program.timer_trigger_delay = timer . = TRUE diff --git a/code/modules/research/nanites/nanite_programs.dm b/code/modules/research/nanites/nanite_programs.dm index 72f969a77e..faa81be0a5 100644 --- a/code/modules/research/nanites/nanite_programs.dm +++ b/code/modules/research/nanites/nanite_programs.dm @@ -290,7 +290,7 @@ qdel(src) ///A nanite program containing a behaviour protocol. Only one protocol of each class can be active at once. -//Currently unused due to us lacking the B.E.P.I.S +//Moved to being 'normally' researched due to lack of B.E.P.I.S. /datum/nanite_program/protocol name = "Nanite Protocol" var/protocol_class = NONE diff --git a/code/modules/research/nanites/nanite_programs/protocols.dm b/code/modules/research/nanites/nanite_programs/protocols.dm index 73976abe09..3830e7c8ba 100644 --- a/code/modules/research/nanites/nanite_programs/protocols.dm +++ b/code/modules/research/nanites/nanite_programs/protocols.dm @@ -105,3 +105,14 @@ /datum/nanite_program/protocol/offline/active_effect() nanites.adjust_nanites(null, boost) + +/datum/nanite_program/protocol/synergy + name = "Synergy Protocol" + desc = "Replication Protocol: the nanites syncronize their tasks and processes within a host, leading to an increase in replication speed proportional to the current nanite volume." + use_rate = 0 + rogue_types = list(/datum/nanite_program/necrotic) + protocol_class = NANITE_PROTOCOL_REPLICATION + var/max_boost = 2 //The maximum boost this program applies to the nanite replication, multiplied with the current nanite 'saturation' percentage + +/datum/nanite_program/protocol/synergy/active_effect() + nanites.adjust_nanites(null, round(max_boost * (nanites.nanite_volume / nanites.max_nanites), 0.1)) diff --git a/code/modules/research/nanites/nanite_programs/utility.dm b/code/modules/research/nanites/nanite_programs/utility.dm index 6352f50b8b..71aa5bf09a 100644 --- a/code/modules/research/nanites/nanite_programs/utility.dm +++ b/code/modules/research/nanites/nanite_programs/utility.dm @@ -160,7 +160,7 @@ if(!host_mob.client) //less brainpower points *= 0.25 SSresearch.science_tech.add_point_list(list(TECHWEB_POINT_TYPE_GENERIC = points)) - + /datum/nanite_program/researchplus name = "Neural Network" desc = "The nanites link the host's brains together forming a neural research network, that becomes more efficient with the amount of total hosts." @@ -184,7 +184,7 @@ SSnanites.neural_network_count-- else SSnanites.neural_network_count -= 0.25 - + /datum/nanite_program/researchplus/active_effect() if(!iscarbon(host_mob)) return @@ -234,7 +234,7 @@ var/spread_cooldown = 0 /datum/nanite_program/spreading/active_effect() - if(spread_cooldown < world.time) + if(world.time < spread_cooldown) return spread_cooldown = world.time + 50 var/list/mob/living/target_hosts = list() diff --git a/code/modules/research/nanites/nanite_programs/weapon.dm b/code/modules/research/nanites/nanite_programs/weapon.dm index bd2b9618de..ae0d8d35aa 100644 --- a/code/modules/research/nanites/nanite_programs/weapon.dm +++ b/code/modules/research/nanites/nanite_programs/weapon.dm @@ -84,7 +84,7 @@ /datum/nanite_program/explosive/on_trigger(comm_message) host_mob.visible_message("[host_mob] starts emitting a high-pitched buzzing, and [host_mob.p_their()] skin begins to glow...",\ "You start emitting a high-pitched buzzing, and your skin begins to glow...") - addtimer(CALLBACK(src, .proc/boom), CLAMP((nanites.nanite_volume * 0.35), 25, 150)) + addtimer(CALLBACK(src, .proc/boom), clamp((nanites.nanite_volume * 0.35), 25, 150)) /datum/nanite_program/explosive/proc/boom() var/nanite_amount = nanites.nanite_volume diff --git a/code/modules/research/nanites/nanite_remote.dm b/code/modules/research/nanites/nanite_remote.dm index 71aecc8f2c..0d9361b534 100644 --- a/code/modules/research/nanites/nanite_remote.dm +++ b/code/modules/research/nanites/nanite_remote.dm @@ -106,7 +106,7 @@ return var/new_code = text2num(params["code"]) if(!isnull(new_code)) - new_code = CLAMP(round(new_code, 1),0,9999) + new_code = clamp(round(new_code, 1),0,9999) code = new_code . = TRUE if("set_relay_code") @@ -114,7 +114,7 @@ return var/new_code = text2num(params["code"]) if(!isnull(new_code)) - new_code = CLAMP(round(new_code, 1),0,9999) + new_code = clamp(round(new_code, 1),0,9999) relay_code = new_code . = TRUE if("update_name") diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index be1b9460b0..9bef00d5bf 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -47,6 +47,9 @@ Nothing else in the console has ID requirements. var/research_control = TRUE + /// Long action cooldown to prevent spam + var/last_long_action = 0 + /obj/machinery/computer/rdconsole/production circuit = /obj/item/circuitboard/computer/rdconsole/production research_control = FALSE @@ -301,15 +304,26 @@ Nothing else in the console has ID requirements. temp_material += " [all_materials[M]/coeff] [CallMaterialName(M)]" c = min(c,t) - if (c >= 1) + var/clearance = !(linked_lathe.obj_flags & EMAGGED) && (linked_lathe.offstation_security_levels || is_station_level(linked_lathe.z)) + var/sec_text = "" + if(clearance && (D.min_security_level > SEC_LEVEL_GREEN || D.max_security_level < SEC_LEVEL_DELTA)) + sec_text = " (Allowed security levels: " + for(var/n in D.min_security_level to D.max_security_level) + sec_text += NUM2SECLEVEL(n) + if(n + 1 <= D.max_security_level) + sec_text += ", " + sec_text += ")" + + clearance = !clearance || ISINRANGE(GLOB.security_level, D.min_security_level, D.max_security_level) + if (c >= 1 && clearance) l += "[D.name][RDSCREEN_NOBREAK]" if(c >= 5) l += "x5[RDSCREEN_NOBREAK]" if(c >= 10) l += "x10[RDSCREEN_NOBREAK]" - l += "[temp_material][RDSCREEN_NOBREAK]" + l += "[temp_material][sec_text][RDSCREEN_NOBREAK]" else - l += "[D.name][temp_material][RDSCREEN_NOBREAK]" + l += "[D.name][temp_material][sec_text][RDSCREEN_NOBREAK]" l += "" l += "" return l @@ -572,10 +586,8 @@ Nothing else in the console has ID requirements. l += "
[icon2html(linked_destroy.loaded_item, usr)][linked_destroy.loaded_item.name] Eject
[RDSCREEN_NOBREAK]" l += "Select a node to boost by deconstructing this item. This item can boost:" - var/anything = FALSE var/list/boostable_nodes = techweb_item_boost_check(linked_destroy.loaded_item) for(var/id in boostable_nodes) - anything = TRUE var/list/worth = boostable_nodes[id] var/datum/techweb_node/N = SSresearch.techweb_node_by_id(id) @@ -609,7 +621,6 @@ Nothing else in the console has ID requirements. // point deconstruction and material reclamation use the same ID to prevent accidentally missing the points var/list/point_values = techweb_item_point_check(linked_destroy.loaded_item) if(point_values) - anything = TRUE l += "
[RDSCREEN_NOBREAK]" if (stored_research.deconstructed_items[linked_destroy.loaded_item.type]) l += "Point Deconstruction" @@ -625,10 +636,8 @@ Nothing else in the console has ID requirements. for (var/M in materials) l += "* [CallMaterialName(M)] x [materials[M]]" l += "
[RDSCREEN_NOBREAK]" - anything = TRUE - if (!anything) - l += "Nothing!" + l += "" l += "" return l @@ -915,6 +924,9 @@ Nothing else in the console has ID requirements. screen = RDSCREEN_MENU say("Ejecting Technology Disk") if(ls["deconstruct"]) + if((last_long_action + 1 SECONDS) > world.time) + return + last_long_action = world.time if(QDELETED(linked_destroy)) say("No Destructive Analyzer Linked!") return @@ -1026,7 +1038,7 @@ Nothing else in the console has ID requirements. autolathe_friendly = FALSE D.category -= "Imported" - if(D.build_type & (AUTOLATHE|PROTOLATHE|CRAFTLATHE)) // Specifically excludes circuit imprinter and mechfab + if(D.build_type & (AUTOLATHE|PROTOLATHE|TOYLATHE)) // Specifically excludes circuit imprinter and mechfab D.build_type = autolathe_friendly ? (D.build_type | AUTOLATHE) : D.build_type D.category |= "Imported" d_disk.blueprints[slot] = D diff --git a/code/modules/research/techweb/_techweb.dm b/code/modules/research/techweb/_techweb.dm index 388fa3785c..ddf6edc9f9 100644 --- a/code/modules/research/techweb/_techweb.dm +++ b/code/modules/research/techweb/_techweb.dm @@ -344,6 +344,7 @@ /datum/techweb/specialized/autounlocking var/design_autounlock_buildtypes = NONE + var/design_autounlock_skip_types = NONE var/design_autounlock_categories = list("initial") //if a design has a buildtype that matches the abovea and either has a category in this or this is null, unlock it. var/node_autounlock_ids = list() //autounlock nodes of this type. @@ -356,7 +357,7 @@ research_node_id(id, TRUE, FALSE) for(var/id in SSresearch.techweb_designs) var/datum/design/D = SSresearch.techweb_design_by_id(id) - if(D.build_type & design_autounlock_buildtypes) + if(D.build_type & (design_autounlock_buildtypes & allowed_buildtypes) && !(D.build_type & design_autounlock_skip_types)) for(var/i in D.category) if(i in design_autounlock_categories) add_design_by_id(D.id) @@ -364,7 +365,16 @@ /datum/techweb/specialized/autounlocking/autolathe design_autounlock_buildtypes = AUTOLATHE - allowed_buildtypes = AUTOLATHE + allowed_buildtypes = AUTOLATHE|TOYLATHE + +/datum/techweb/specialized/autounlocking/autolathe/public + design_autounlock_skip_types = NO_PUBLIC_LATHE + +/datum/techweb/specialized/autounlocking/autolathe/toy + design_autounlock_buildtypes = TOYLATHE + +/datum/techweb/specialized/autounlocking/autolathe/toy/public + design_autounlock_skip_types = NO_PUBLIC_LATHE /datum/techweb/specialized/autounlocking/limbgrower design_autounlock_buildtypes = LIMBGROWER @@ -381,10 +391,6 @@ /datum/techweb/specialized/autounlocking/exofab allowed_buildtypes = MECHFAB -/datum/techweb/specialized/autounlocking/autoylathe - design_autounlock_buildtypes = AUTOYLATHE - allowed_buildtypes = AUTOYLATHE - /datum/techweb/specialized/autounlocking/autobottler design_autounlock_buildtypes = AUTOBOTTLER allowed_buildtypes = AUTOBOTTLER \ No newline at end of file diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 24b9ccf81c..002bb3d64b 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -957,6 +957,14 @@ design_ids = list("spreading_nanites","mindcontrol_nanites","mitosis_nanites") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 10000) +/datum/techweb_node/nanite_replication_protocols + id = "nanite_replication_protocols" + display_name = "Nanite Replication Protocols" + description = "Advanced behaviours that allow nanites to exploit certain circumstances to replicate faster." + prereq_ids = list("nanite_smart") + design_ids = list("kickstart_nanites","factory_nanites","tinker_nanites","offline_nanites","synergy_nanites") + research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 5000) + ////////////////////////Alien technology//////////////////////// /datum/techweb_node/alientech //AYYYYYYYYLMAOO tech id = "alientech" diff --git a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm index 95d6c49529..e153176cbe 100644 --- a/code/modules/research/xenobiology/crossbreeding/_status_effects.dm +++ b/code/modules/research/xenobiology/crossbreeding/_status_effects.dm @@ -191,7 +191,7 @@ alert_type = /obj/screen/alert/status_effect/bloodchill /datum/status_effect/bloodchill/on_apply() - owner.add_movespeed_modifier("bloodchilled", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = 3) + owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill) return ..() /datum/status_effect/bloodchill/tick() @@ -199,7 +199,7 @@ owner.adjustFireLoss(2) /datum/status_effect/bloodchill/on_remove() - owner.remove_movespeed_modifier("bloodchilled") + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bloodchill) return ..() /obj/screen/alert/status_effect/bloodchill @@ -213,7 +213,7 @@ alert_type = /obj/screen/alert/status_effect/bonechill /datum/status_effect/bonechill/on_apply() - owner.add_movespeed_modifier("bonechilled", TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = 3) + owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill) return ..() /datum/status_effect/bonechill/tick() @@ -223,7 +223,7 @@ owner.adjust_bodytemperature(-10) /datum/status_effect/bonechill/on_remove() - owner.remove_movespeed_modifier("bonechilled") + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/bonechill) return ..() /obj/screen/alert/status_effect/bonechill @@ -385,11 +385,11 @@ datum/status_effect/rebreathing/tick() duration = 30 /datum/status_effect/tarfoot/on_apply() - owner.add_movespeed_modifier(MOVESPEED_ID_TARFOOT, update=TRUE, priority=100, multiplicative_slowdown=0.5, blacklisted_movetypes=(FLYING|FLOATING)) + owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot) return ..() /datum/status_effect/tarfoot/on_remove() - owner.remove_movespeed_modifier(MOVESPEED_ID_TARFOOT) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/tarfoot) return ..() /datum/status_effect/spookcookie @@ -624,9 +624,9 @@ datum/status_effect/stabilized/blue/on_remove() O.extinguish() //All shamelessly copied from water's reaction_obj, since I didn't seem to be able to get it here for some reason. O.acid_level = 0 // Monkey cube - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube)) + if(istype(O, /obj/item/reagent_containers/food/snacks/cube)) to_chat(owner, "[linked_extract] kept your hands wet! It makes [O] expand!") - var/obj/item/reagent_containers/food/snacks/monkeycube/cube = O + var/obj/item/reagent_containers/food/snacks/cube/cube = O cube.Expand() // Dehydrated carp @@ -707,15 +707,15 @@ datum/status_effect/stabilized/blue/on_remove() /datum/status_effect/stabilized/sepia/tick() if(prob(50) && mod > -1) mod-- - owner.add_movespeed_modifier(MOVESPEED_ID_SEPIA, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING)) + owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 1) else if(mod < 1) mod++ // yeah a value of 0 does nothing but replacing the trait in place is cheaper than removing and adding repeatedly - owner.add_movespeed_modifier(MOVESPEED_ID_SEPIA, update=TRUE, priority=100, multiplicative_slowdown=0, blacklisted_movetypes=(FLYING|FLOATING)) + owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia, multiplicative_slowdown = 0) return ..() /datum/status_effect/stabilized/sepia/on_remove() - owner.remove_movespeed_modifier(MOVESPEED_ID_SEPIA) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/sepia) return ..() /datum/status_effect/stabilized/cerulean @@ -777,11 +777,11 @@ datum/status_effect/stabilized/blue/on_remove() colour = "red" /datum/status_effect/stabilized/red/on_apply() - owner.ignore_slowdown("slimestatus") - return ..() + . = ..() + owner.add_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod) /datum/status_effect/stabilized/red/on_remove() - owner.unignore_slowdown("slimestatus") + owner.remove_movespeed_mod_immunities(type, /datum/movespeed_modifier/equipment_speedmod) return ..() /datum/status_effect/stabilized/green diff --git a/code/modules/research/xenobiology/crossbreeding/industrial.dm b/code/modules/research/xenobiology/crossbreeding/industrial.dm index bec2c2c1ae..ac9d2e58c5 100644 --- a/code/modules/research/xenobiology/crossbreeding/industrial.dm +++ b/code/modules/research/xenobiology/crossbreeding/industrial.dm @@ -53,7 +53,7 @@ Industrial extracts: /obj/item/slimecross/industrial/grey colour = "grey" - itempath = /obj/item/reagent_containers/food/snacks/monkeycube + itempath = /obj/item/reagent_containers/food/snacks/cube/monkey itemamount = 5 /obj/item/slimecross/industrial/orange diff --git a/code/modules/research/xenobiology/crossbreeding/reproductive.dm b/code/modules/research/xenobiology/crossbreeding/reproductive.dm index 2f6ca9555a..3662f45355 100644 --- a/code/modules/research/xenobiology/crossbreeding/reproductive.dm +++ b/code/modules/research/xenobiology/crossbreeding/reproductive.dm @@ -19,14 +19,14 @@ Reproductive extracts: return if(istype(O, /obj/item/storage/bag/bio)) var/list/inserted = list() - SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/monkeycube, src, 1, null, null, user, inserted) + SEND_SIGNAL(O, COMSIG_TRY_STORAGE_TAKE_TYPE, /obj/item/reagent_containers/food/snacks/cube/monkey, src, 1, null, null, user, inserted) if(inserted.len) - var/obj/item/reagent_containers/food/snacks/monkeycube/M = inserted[1] + var/obj/item/reagent_containers/food/snacks/cube/monkey/M = inserted[1] if(istype(M)) eat_cube(M, user) else to_chat(user, "There are no monkey cubes in the bio bag!") - if(istype(O,/obj/item/reagent_containers/food/snacks/monkeycube)) + if(istype(O,/obj/item/reagent_containers/food/snacks/cube/monkey)) eat_cube(O, user) if(cubes_eaten >= 3) var/cores = rand(1,4) diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 5492e9bc38..ef9c751d57 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -146,7 +146,7 @@ else to_chat(user, "[src] already has the contents of [O] installed!") return - if(istype(O, /obj/item/reagent_containers/food/snacks/monkeycube) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS + if(istype(O, /obj/item/reagent_containers/food/snacks/cube/monkey) && (upgradetier & XENOBIO_UPGRADE_MONKEYS)) //CIT CHANGE - makes monkey-related actions require XENOBIO_UPGRADE_MONKEYS monkeys++ to_chat(user, "You feed [O] to [src]. It now has [monkeys] monkey cubes stored.") qdel(O) @@ -155,7 +155,7 @@ var/obj/item/storage/P = O var/loaded = FALSE for(var/obj/G in P.contents) - if(istype(G, /obj/item/reagent_containers/food/snacks/monkeycube)) + if(istype(G, /obj/item/reagent_containers/food/snacks/cube/monkey)) loaded = TRUE monkeys++ qdel(G) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index a346cd697f..573a735f98 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -83,7 +83,7 @@ /obj/item/slime_extract/grey/activate(mob/living/carbon/human/user, datum/species/jelly/luminescent/species, activation_type) switch(activation_type) if(SLIME_ACTIVATE_MINOR) - var/obj/item/reagent_containers/food/snacks/monkeycube/M = new + var/obj/item/reagent_containers/food/snacks/cube/monkey/M = new if(!user.put_in_active_hand(M)) M.forceMove(user.drop_location()) playsound(user, 'sound/effects/splat.ogg', 50, 1) @@ -801,7 +801,7 @@ return to_chat(user, "You feed the slime the stabilizer. It is now less likely to mutate.") - M.mutation_chance = CLAMP(M.mutation_chance-15,0,100) + M.mutation_chance = clamp(M.mutation_chance-15,0,100) qdel(src) /obj/item/slimepotion/slime/mutator @@ -825,7 +825,7 @@ return to_chat(user, "You feed the slime the mutator. It is now more likely to mutate.") - M.mutation_chance = CLAMP(M.mutation_chance+12,0,100) + M.mutation_chance = clamp(M.mutation_chance+12,0,100) M.mutator_used = TRUE qdel(src) diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index d09c1ce86f..2192b2fddb 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -142,7 +142,7 @@ uniform = /obj/item/clothing/under/syndicate suit = /obj/item/clothing/suit/toggle/labcoat shoes = /obj/item/clothing/shoes/combat - gloves = /obj/item/clothing/gloves/combat + gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/syndicate/alt back = /obj/item/storage/backpack r_pocket = /obj/item/gun/ballistic/automatic/pistol diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index 8a58563407..b9dc9b92d3 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -41,7 +41,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) var/list/data = list() data["waiting"] = waiting data["auth_required"] = event_source ? event_source.event : 0 - data["red_alert"] = (seclevel2num(get_security_level()) >= SEC_LEVEL_RED) ? 1 : 0 + data["red_alert"] = (SECLEVEL2NUM(NUM2SECLEVEL(GLOB.security_level)) >= SEC_LEVEL_RED) ? 1 : 0 data["emergency_maint"] = GLOB.emergency_access data["bsa_unlock"] = GLOB.bsa_unlock return data diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm index 887891ca16..52fafb81be 100644 --- a/code/modules/security_levels/security_levels.dm +++ b/code/modules/security_levels/security_levels.dm @@ -5,20 +5,17 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN) //SEC_LEVEL_RED = code red //SEC_LEVEL_DELTA = code delta + /* + * All security levels, per ascending alert. Nothing too fancy, really. + * Their positions should also match their numerical values. + */ +GLOBAL_LIST_INIT(all_security_levels, list("green", "blue", "amber", "red", "delta")) + //config.alert_desc_blue_downto /proc/set_security_level(level) - switch(level) - if("green") - level = SEC_LEVEL_GREEN - if("blue") - level = SEC_LEVEL_BLUE - if("amber") - level = SEC_LEVEL_AMBER - if("red") - level = SEC_LEVEL_RED - if("delta") - level = SEC_LEVEL_DELTA + if(!isnum(level)) + level = GLOB.all_security_levels.Find(level) //Will not be announced if you try to set to the same level as it already is if(level >= SEC_LEVEL_GREEN && level <= SEC_LEVEL_DELTA && level != GLOB.security_level) @@ -111,46 +108,7 @@ GLOBAL_VAR_INIT(security_level, SEC_LEVEL_GREEN) if(D.red_alert_access) D.visible_message("[D] whirrs as it automatically lifts access requirements!") playsound(D, 'sound/machines/boltsup.ogg', 50, TRUE) - SSblackbox.record_feedback("tally", "security_level_changes", 1, get_security_level()) + SSblackbox.record_feedback("tally", "security_level_changes", 1, NUM2SECLEVEL(GLOB.security_level)) SSnightshift.check_nightshift() else return - -/proc/get_security_level() - switch(GLOB.security_level) - if(SEC_LEVEL_GREEN) - return "green" - if(SEC_LEVEL_BLUE) - return "blue" - if(SEC_LEVEL_AMBER) - return "amber" - if(SEC_LEVEL_RED) - return "red" - if(SEC_LEVEL_DELTA) - return "delta" - -/proc/num2seclevel(num) - switch(num) - if(SEC_LEVEL_GREEN) - return "green" - if(SEC_LEVEL_BLUE) - return "blue" - if(SEC_LEVEL_AMBER) - return "amber" - if(SEC_LEVEL_RED) - return "red" - if(SEC_LEVEL_DELTA) - return "delta" - -/proc/seclevel2num(seclevel) - switch( lowertext(seclevel) ) - if("green") - return SEC_LEVEL_GREEN - if("blue") - return SEC_LEVEL_BLUE - if("amber") - return SEC_LEVEL_AMBER - if("red") - return SEC_LEVEL_RED - if("delta") - return SEC_LEVEL_DELTA diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index cd08b7290a..f3b4cbddc9 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -310,7 +310,7 @@ /obj/docking_port/mobile/emergency/request(obj/docking_port/stationary/S, area/signalOrigin, reason, redAlert, set_coefficient=null, silent = FALSE) if(!isnum(set_coefficient)) - var/security_num = seclevel2num(get_security_level()) + var/security_num = SECLEVEL2NUM(NUM2SECLEVEL(GLOB.security_level)) switch(security_num) if(SEC_LEVEL_GREEN) set_coefficient = 2 diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 2c466564ff..665361af49 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -757,13 +757,13 @@ var/change_per_engine = (1 - ENGINE_COEFF_MIN) / ENGINE_DEFAULT_MAXSPEED_ENGINES // 5 by default if(initial_engines > 0) change_per_engine = (1 - ENGINE_COEFF_MIN) / initial_engines // or however many it had - return CLAMP(1 - delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX) + return clamp(1 - delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX) if(new_value < initial_engines) var/delta = initial_engines - new_value var/change_per_engine = 1 //doesn't really matter should not be happening for 0 engine shuttles if(initial_engines > 0) change_per_engine = (ENGINE_COEFF_MAX - 1) / initial_engines //just linear drop to max delay - return CLAMP(1 + delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX) + return clamp(1 + delta * change_per_engine,ENGINE_COEFF_MIN,ENGINE_COEFF_MAX) /obj/docking_port/mobile/proc/in_flight() diff --git a/code/modules/shuttle/special.dm b/code/modules/shuttle/special.dm index 033187e353..87f9b55aa9 100644 --- a/code/modules/shuttle/special.dm +++ b/code/modules/shuttle/special.dm @@ -122,7 +122,7 @@ /obj/structure/table/abductor/wabbajack/proc/sleeper_dreams(mob/living/sleeper) if(sleeper in sleepers) to_chat(sleeper, "While you slumber, you have the strangest dream, like you can see yourself from the outside.") - sleeper.ghostize(TRUE) + sleeper.ghostize(TRUE, voluntary = TRUE) /obj/structure/table/abductor/wabbajack/left desc = "You sleep so it may wake." diff --git a/code/modules/spells/spell_types/wizard.dm b/code/modules/spells/spell_types/wizard.dm index ace542126c..e9432e2f58 100644 --- a/code/modules/spells/spell_types/wizard.dm +++ b/code/modules/spells/spell_types/wizard.dm @@ -297,7 +297,7 @@ var/mob/living/M = AM M.DefaultCombatKnockdown(stun_amt, override_hardstun = stun_amt * 0.2) to_chat(M, "You're thrown back by [user]!") - AM.throw_at(throwtarget, ((CLAMP((maxthrow - (CLAMP(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time. + AM.throw_at(throwtarget, ((clamp((maxthrow - (clamp(distfromcaster - 2, 0, distfromcaster))), 3, maxthrow))), 1,user)//So stuff gets tossed around at the same time. safety-- /obj/effect/proc_holder/spell/aoe_turf/repulse/xeno //i fixed conflicts only to find out that this is in the WIZARD file instead of the xeno file?! diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 2aae17b0f3..6c21456e63 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -276,7 +276,7 @@ ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, "dna_vault") if(VAULT_SPEED) to_chat(H, "Your legs feel faster.") - H.add_movespeed_modifier(MOVESPEED_ID_DNA_VAULT, update=TRUE, priority=100, multiplicative_slowdown=-1, blacklisted_movetypes=(FLYING|FLOATING)) + H.add_movespeed_modifier(/datum/movespeed_modifier/dna_vault_speedup) if(VAULT_QUICK) to_chat(H, "Your arms move as fast as lightning.") H.next_move_modifier = 0.5 diff --git a/code/modules/surgery/bodyparts/bodyparts.dm b/code/modules/surgery/bodyparts/bodyparts.dm index d6f0866936..dd31145491 100644 --- a/code/modules/surgery/bodyparts/bodyparts.dm +++ b/code/modules/surgery/bodyparts/bodyparts.dm @@ -164,8 +164,8 @@ return FALSE switch(animal_origin) - if(ALIEN_BODYPART,LARVA_BODYPART) //aliens take double burn //nothing can burn with so much snowflake code around - burn *= 2 + if(ALIEN_BODYPART,LARVA_BODYPART) //aliens take some additional burn //nothing can burn with so much snowflake code around + burn *= 1.2 var/can_inflict = max_damage - get_damage() if(can_inflict <= 0) @@ -183,7 +183,7 @@ //We've dealt the physical damages, if there's room lets apply the stamina damage. var/current_damage = get_damage(TRUE) //This time around, count stamina loss too. var/available_damage = max_damage - current_damage - stamina_dam += round(CLAMP(stamina, 0, min(max_stamina_damage - stamina_dam, available_damage)), DAMAGE_PRECISION) + stamina_dam += round(clamp(stamina, 0, min(max_stamina_damage - stamina_dam, available_damage)), DAMAGE_PRECISION) if(disabled && stamina > 10) incoming_stam_mult = max(0.01, incoming_stam_mult/(stamina*0.1)) diff --git a/code/modules/surgery/bodyparts/dismemberment.dm b/code/modules/surgery/bodyparts/dismemberment.dm index 276d4893de..66bca919c4 100644 --- a/code/modules/surgery/bodyparts/dismemberment.dm +++ b/code/modules/surgery/bodyparts/dismemberment.dm @@ -16,7 +16,7 @@ return FALSE var/obj/item/bodypart/affecting = C.get_bodypart(BODY_ZONE_CHEST) - affecting.receive_damage(CLAMP(brute_dam/2 * affecting.body_damage_coeff, 15, 50), CLAMP(burn_dam/2 * affecting.body_damage_coeff, 0, 50)) //Damage the chest based on limb's existing damage + affecting.receive_damage(clamp(brute_dam/2 * affecting.body_damage_coeff, 15, 50), clamp(burn_dam/2 * affecting.body_damage_coeff, 0, 50)) //Damage the chest based on limb's existing damage C.visible_message("[C]'s [src.name] has been violently dismembered!") C.emote("scream") SEND_SIGNAL(C, COMSIG_ADD_MOOD_EVENT, "dismembered", /datum/mood_event/dismembered) diff --git a/code/modules/surgery/organs/appendix.dm b/code/modules/surgery/organs/appendix.dm index 9da20e4921..c737e8bc30 100644 --- a/code/modules/surgery/organs/appendix.dm +++ b/code/modules/surgery/organs/appendix.dm @@ -12,12 +12,10 @@ var/inflamed /obj/item/organ/appendix/on_life() - ..() - if(!(organ_flags & ORGAN_FAILING)) + . = ..() + if(. || !owner) return - var/mob/living/carbon/M = owner - if(M) - M.adjustToxLoss(4, TRUE, TRUE) //forced to ensure people don't use it to gain tox as slime person + owner.adjustToxLoss(4, TRUE, TRUE) //forced to ensure people don't use it to gain tox as slime person /obj/item/organ/appendix/update_icon_state() if(inflamed) diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index daf3324980..e01059204c 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -20,7 +20,28 @@ update_icon() SetSlotFromZone() - items_list = contents.Copy() + for(var/obj/item/I in contents) + add_item(I) + +/obj/item/organ/cyberimp/arm/proc/add_item(obj/item/I) + if(I in items_list) + return + I.forceMove(src) + items_list += I + // ayy only dropped signal for performance, we can't possibly have shitcode that doesn't call it when removing items from a mob, right? + // .. right??! + RegisterSignal(I, COMSIG_ITEM_DROPPED, .proc/magnetic_catch) + +/obj/item/organ/cyberimp/arm/proc/magnetic_catch(datum/source, mob/user) + . = COMPONENT_DROPPED_RELOCATION + var/obj/item/I = source //if someone is misusing the signal, just runtime + if(I in items_list) + if(I in contents) //already in us somehow? i probably shouldn't catch this so it's easier to spot bugs but eh.. + return + I.visible_message("[I] snaps back into [src]!") + I.forceMove(src) + if(I == holder) + holder = null /obj/item/organ/cyberimp/arm/proc/SetSlotFromZone() switch(zone) @@ -62,7 +83,7 @@ . = ..() if(. & EMP_PROTECT_SELF) return - if(prob(15/severity) && owner) + if(owner) to_chat(owner, "[src] is hit by EMP!") // give the owner an idea about why his implant is glitching Retract() @@ -75,29 +96,20 @@ "[holder] snaps back into your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm.", "You hear a short mechanical noise.") - if(istype(holder, /obj/item/assembly/flash/armimplant)) - var/obj/item/assembly/flash/F = holder - F.set_light(0) - owner.transferItemToLoc(holder, src, TRUE) holder = null playsound(get_turf(owner), 'sound/mecha/mechmove03.ogg', 50, 1) -/obj/item/organ/cyberimp/arm/proc/Extend(var/obj/item/item) +/obj/item/organ/cyberimp/arm/proc/Extend(obj/item/item) if(!(item in src)) return holder = item - ADD_TRAIT(holder, TRAIT_NODROP, HAND_REPLACEMENT_TRAIT) holder.resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF holder.slot_flags = null holder.set_custom_materials(null) - if(istype(holder, /obj/item/assembly/flash/armimplant)) - var/obj/item/assembly/flash/F = holder - F.set_light(7) - var/obj/item/arm_item = owner.get_active_held_item() if(arm_item) @@ -223,21 +235,6 @@ icon_state = "arm_taser" contents = newlist(/obj/item/gun/energy/e_gun/advtaser/mounted) -/obj/item/organ/cyberimp/arm/gun/emp_act(severity) - . = ..() - if(. & EMP_PROTECT_SELF) - return - if(prob(30/severity) && owner && !(organ_flags & ORGAN_FAILING)) - Retract() - owner.visible_message("A loud bang comes from [owner]\'s [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm!") - playsound(get_turf(owner), 'sound/weapons/flashbang.ogg', 100, 1) - to_chat(owner, "You feel an explosion erupt inside your [zone == BODY_ZONE_R_ARM ? "right" : "left"] arm as your implant breaks!") - owner.adjust_fire_stacks(20) - owner.IgniteMob() - owner.adjustFireLoss(25) - crit_fail = 1 - organ_flags |= ORGAN_FAILING - /obj/item/organ/cyberimp/arm/flash name = "integrated high-intensity photon projector" //Why not desc = "An integrated projector mounted onto a user's arm that is able to be used as a powerful flash." @@ -275,6 +272,12 @@ desc = "A deployable riot shield to help deal with civil unrest." contents = newlist(/obj/item/shield/riot/implant) +/obj/item/organ/cyberimp/arm/shield/Extend(obj/item/I) + if(I.obj_integrity == 0) //that's how the shield recharge works + to_chat(owner, "[I] is still too unstable to extend. Give it some time!") + return FALSE + return ..() + /obj/item/organ/cyberimp/arm/shield/emag_act() . = ..() if(obj_flags & EMAGGED) diff --git a/code/modules/surgery/organs/augments_chest.dm b/code/modules/surgery/organs/augments_chest.dm index 47a452cc76..46092ff0c2 100644 --- a/code/modules/surgery/organs/augments_chest.dm +++ b/code/modules/surgery/organs/augments_chest.dm @@ -16,7 +16,8 @@ slot = ORGAN_SLOT_STOMACH_AID /obj/item/organ/cyberimp/chest/nutriment/on_life() - if(synthesizing) + . = ..() + if(!. || synthesizing) return if(owner.nutrition <= hunger_threshold) @@ -59,23 +60,25 @@ var/convalescence_time = 0 /obj/item/organ/cyberimp/chest/reviver/on_life() + . = ..() if(reviving) - var/do_heal = world.time < convalescence_time + var/do_heal = . && world.time < convalescence_time if(revive_cost >= MAX_HEAL_COOLDOWN) do_heal = FALSE - else if(owner.stat && owner.stat != DEAD) + else if(owner?.stat && owner.stat != DEAD) do_heal = TRUE else if(!do_heal) convalescence_time = world.time + DEF_CONVALESCENCE_TIME - if(do_heal) + if(. && (do_heal || world.time < convalescence_time)) addtimer(CALLBACK(src, .proc/heal), 3 SECONDS) else cooldown = revive_cost + world.time reviving = FALSE - to_chat(owner, "Your reviver implant shuts down and starts recharging. It will be ready again in [DisplayTimeText(revive_cost)].") + if(owner) + to_chat(owner, "Your reviver implant shuts down and starts recharging. It will be ready again in [DisplayTimeText(revive_cost)].") return - if(cooldown > world.time || owner.stat == CONSCIOUS || owner.stat == DEAD || owner.suiciding) + if(!. || cooldown > world.time || owner.stat == CONSCIOUS || owner.stat == DEAD || owner.suiciding) return revive_cost = 0 @@ -165,14 +168,14 @@ if(allow_thrust(0.01)) ion_trail.start() RegisterSignal(owner, COMSIG_MOVABLE_MOVED, .proc/move_react) - owner.add_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER, priority=100, multiplicative_slowdown=-2, movetypes=FLOATING, conflict=MOVE_CONFLICT_JETPACK) + owner.add_movespeed_modifier(/datum/movespeed_modifier/jetpack/cybernetic) if(!silent) to_chat(owner, "You turn your thrusters set on.") else ion_trail.stop() if(!QDELETED(owner)) UnregisterSignal(owner, COMSIG_MOVABLE_MOVED) - owner.remove_movespeed_modifier(MOVESPEED_ID_CYBER_THRUSTER) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/jetpack/cybernetic) if(!silent) to_chat(owner, "You turn your thrusters set off.") on = FALSE diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index a678482ef3..6705b4c7b4 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -102,8 +102,8 @@ slot = ORGAN_SLOT_BRAIN_ANTISTUN /obj/item/organ/cyberimp/brain/anti_stun/on_life() - ..() - if(crit_fail || !(organ_flags & ORGAN_FAILING)) + . = ..() + if(!. || crit_fail) return owner.adjustStaminaLoss(-3.5, FALSE) //Citadel edit, makes it more useful in Stamina based combat owner.HealAllImmobilityUpTo(STUN_SET_AMOUNT) diff --git a/code/modules/surgery/organs/ears.dm b/code/modules/surgery/organs/ears.dm index 63febd1a9f..c1e33c7dac 100644 --- a/code/modules/surgery/organs/ears.dm +++ b/code/modules/surgery/organs/ears.dm @@ -29,22 +29,17 @@ var/damage_multiplier = 1 /obj/item/organ/ears/on_life() - if(!iscarbon(owner)) - return - ..() - var/mob/living/carbon/C = owner - if((damage < maxHealth) && (organ_flags & ORGAN_FAILING)) //ear damage can be repaired from the failing condition - organ_flags &= ~ORGAN_FAILING + . = ..() // genetic deafness prevents the body from using the ears, even if healthy - if(HAS_TRAIT(C, TRAIT_DEAF)) + if(owner && HAS_TRAIT(owner, TRAIT_DEAF)) deaf = max(deaf, 1) - else if(!(organ_flags & ORGAN_FAILING)) // if this organ is failing, do not clear deaf stacks. + else if(.) // if this organ is failing, do not clear deaf stacks. deaf = max(deaf - 1, 0) if(prob(damage / 20) && (damage > low_threshold)) adjustEarDamage(0, 4) - SEND_SOUND(C, sound('sound/weapons/flash_ring.ogg')) - to_chat(C, "The ringing in your ears grows louder, blocking out any external noises for a moment.") - else if((organ_flags & ORGAN_FAILING) && (deaf == 0)) + SEND_SOUND(owner, sound('sound/weapons/flash_ring.ogg')) + to_chat(owner, "The ringing in your ears grows louder, blocking out any external noises for a moment.") + else if(!. && !deaf) deaf = 1 //stop being not deaf you deaf idiot /obj/item/organ/ears/proc/restoreEars() diff --git a/code/modules/surgery/organs/eyes.dm b/code/modules/surgery/organs/eyes.dm index 6b93995e62..049fc5b5d4 100644 --- a/code/modules/surgery/organs/eyes.dm +++ b/code/modules/surgery/organs/eyes.dm @@ -1,3 +1,7 @@ +#define BLURRY_VISION_ONE 1 +#define BLURRY_VISION_TWO 2 +#define BLIND_VISION_THREE 3 + /obj/item/organ/eyes name = BODY_ZONE_PRECISE_EYES icon_state = "eyeballs" @@ -10,7 +14,7 @@ decay_factor = STANDARD_ORGAN_DECAY maxHealth = 0.5 * STANDARD_ORGAN_THRESHOLD //half the normal health max since we go blind at 30, a permanent blindness at 50 therefore makes sense unless medicine is administered high_threshold = 0.3 * STANDARD_ORGAN_THRESHOLD //threshold at 30 - low_threshold = 0.15 * STANDARD_ORGAN_THRESHOLD //threshold at 15 + low_threshold = 0.2 * STANDARD_ORGAN_THRESHOLD //threshold at 15 low_threshold_passed = "Distant objects become somewhat less tangible." high_threshold_passed = "Everything starts to look a lot less clear." @@ -27,14 +31,17 @@ var/flash_protect = 0 var/see_invisible = SEE_INVISIBLE_LIVING var/lighting_alpha - var/damaged = FALSE //damaged indicates that our eyes are undergoing some level of negative effect + var/eye_damaged = FALSE //indicates that our eyes are undergoing some level of negative effect /obj/item/organ/eyes/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = FALSE) . = ..() if(!.) return - if(damage == initial(damage)) - clear_eye_trauma() + switch(eye_damaged) + if(BLURRY_VISION_ONE, BLURRY_VISION_TWO) + owner.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, eye_damaged) + if(BLIND_VISION_THREE) + owner.become_blind(EYE_DAMAGE) if(ishuman(owner)) var/mob/living/carbon/human/H = owner old_eye_color = H.eye_color @@ -48,46 +55,49 @@ owner.update_sight() /obj/item/organ/eyes/Remove(special = FALSE) - clear_eye_trauma() . = ..() var/mob/living/carbon/C = . - if(!QDELETED(C)) - if(ishuman(C) && eye_color) - var/mob/living/carbon/human/H = C - H.eye_color = old_eye_color - if(!special) - H.dna.species.handle_body(H) + if(QDELETED(C)) + return + switch(eye_damaged) + if(BLURRY_VISION_ONE, BLURRY_VISION_TWO) + C.clear_fullscreen("eye_damage") + if(BLIND_VISION_THREE) + C.cure_blind(EYE_DAMAGE) + if(ishuman(C) && eye_color) + var/mob/living/carbon/human/H = C + H.eye_color = old_eye_color if(!special) - C.update_tint() - C.update_sight() + H.dna.species.handle_body(H) + if(!special) + C.update_tint() + C.update_sight() -/obj/item/organ/eyes/on_life() - ..() - var/mob/living/carbon/C = owner - //since we can repair fully damaged eyes, check if healing has occurred - if((organ_flags & ORGAN_FAILING) && (damage < maxHealth)) - organ_flags &= ~ORGAN_FAILING - C.cure_blind(EYE_DAMAGE) - //various degrees of "oh fuck my eyes", from "point a laser at your eye" to "staring at the Sun" intensities - if(damage > 20) - damaged = TRUE - if(organ_flags & ORGAN_FAILING) - C.become_blind(EYE_DAMAGE) - else if(damage > 30) - C.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 2) + +/obj/item/organ/eyes/applyOrganDamage(d, maximum = maxHealth) + . = ..() + if(!.) + return + var/old_damaged = eye_damaged + switch(damage) + if(INFINITY to maxHealth) + eye_damaged = BLIND_VISION_THREE + if(maxHealth to high_threshold) + eye_damaged = BLURRY_VISION_TWO + if(high_threshold to low_threshold) + eye_damaged = BLURRY_VISION_ONE else - C.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, 1) - //called once since we don't want to keep clearing the screen of eye damage for people who are below 20 damage - else if(damaged) - damaged = FALSE - C.clear_fullscreen("eye_damage") - return - -/obj/item/organ/eyes/proc/clear_eye_trauma() - var/mob/living/carbon/C = owner - C.clear_fullscreen("eye_damage") - C.cure_blind(EYE_DAMAGE) - damaged = FALSE + eye_damaged = FALSE + if(eye_damaged == old_damaged || !owner) + return + if(old_damaged == BLIND_VISION_THREE) + owner.cure_blind(EYE_DAMAGE) + else if(eye_damaged == BLIND_VISION_THREE) + owner.become_blind(EYE_DAMAGE) + if(eye_damaged && eye_damaged != BLIND_VISION_THREE) + owner.overlay_fullscreen("eye_damage", /obj/screen/fullscreen/impaired, eye_damaged) + else + owner.clear_fullscreen("eye_damage") /obj/item/organ/eyes/night_vision name = "shadow eyes" @@ -259,7 +269,7 @@ if(!isnum(range)) return - set_distance(CLAMP(range, 0, max_light_beam_distance)) + set_distance(clamp(range, 0, max_light_beam_distance)) assume_rgb(C) /obj/item/organ/eyes/robotic/glow/proc/assume_rgb(newcolor) @@ -382,4 +392,8 @@ /obj/item/organ/eyes/ipc name = "ipc eyes" - icon_state = "cybernetic_eyeballs" \ No newline at end of file + icon_state = "cybernetic_eyeballs" + +#undef BLURRY_VISION_ONE +#undef BLURRY_VISION_TWO +#undef BLIND_VISION_THREE \ No newline at end of file diff --git a/code/modules/surgery/organs/heart.dm b/code/modules/surgery/organs/heart.dm index ea98ecd32b..1fee605b12 100644 --- a/code/modules/surgery/organs/heart.dm +++ b/code/modules/surgery/organs/heart.dm @@ -15,6 +15,7 @@ // Heart attack code is in code/modules/mob/living/carbon/human/life.dm var/beating = 1 + var/no_pump = FALSE var/icon_base = "heart" attack_verb = list("beat", "thumped") var/beat = BEAT_NONE//is this mob having a heatbeat sound played? if so, which? @@ -66,27 +67,28 @@ return S /obj/item/organ/heart/on_life() - ..() + . = ..() + if(!owner || no_pump) + return if(owner.client && beating) failed = FALSE var/sound/slowbeat = sound('sound/health/slowbeat.ogg', repeat = TRUE) var/sound/fastbeat = sound('sound/health/fastbeat.ogg', repeat = TRUE) - var/mob/living/carbon/H = owner - if(H.health <= H.crit_threshold && beat != BEAT_SLOW) + if(owner.health <= owner.crit_threshold && beat != BEAT_SLOW) beat = BEAT_SLOW - H.playsound_local(get_turf(H), slowbeat,40,0, channel = CHANNEL_HEARTBEAT) + owner.playsound_local(get_turf(owner), slowbeat,40,0, channel = CHANNEL_HEARTBEAT) to_chat(owner, "You feel your heart slow down...") - if(beat == BEAT_SLOW && H.health > H.crit_threshold) - H.stop_sound_channel(CHANNEL_HEARTBEAT) + if(beat == BEAT_SLOW && owner.health > owner.crit_threshold) + owner.stop_sound_channel(CHANNEL_HEARTBEAT) beat = BEAT_NONE - if(H.jitteriness) - if(H.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW)) - H.playsound_local(get_turf(H),fastbeat,40,0, channel = CHANNEL_HEARTBEAT) + if(owner.jitteriness) + if(owner.health > HEALTH_THRESHOLD_FULLCRIT && (!beat || beat == BEAT_SLOW)) + owner.playsound_local(get_turf(owner),fastbeat,40,0, channel = CHANNEL_HEARTBEAT) beat = BEAT_FAST else if(beat == BEAT_FAST) - H.stop_sound_channel(CHANNEL_HEARTBEAT) + owner.stop_sound_channel(CHANNEL_HEARTBEAT) beat = BEAT_NONE if(organ_flags & ORGAN_FAILING) //heart broke, stopped beating, death imminent @@ -107,6 +109,7 @@ obj/item/organ/heart/slime icon_state = "cursedheart-off" icon_base = "cursedheart" decay_factor = 0 + no_pump = TRUE actions_types = list(/datum/action/item_action/organ_action/cursed_heart) var/last_pump = 0 var/add_colour = TRUE //So we're not constantly recreating colour datums @@ -128,6 +131,9 @@ obj/item/organ/heart/slime return ..() /obj/item/organ/heart/cursed/on_life() + . = ..() + if(!owner) + return if(world.time > (last_pump + pump_delay)) if(ishuman(owner) && owner.client) //While this entire item exists to make people suffer, they can't control disconnects. var/mob/living/carbon/human/H = owner @@ -208,6 +214,8 @@ obj/item/organ/heart/slime obj/item/organ/heart/cybernetic/upgraded/on_life() . = ..() + if(!.) + return if(dose_available && owner.health <= owner.crit_threshold && !owner.reagents.has_reagent(rid)) owner.reagents.add_reagent(rid, ramount) used_dose() @@ -233,7 +241,7 @@ obj/item/organ/heart/cybernetic/upgraded/on_life() /obj/item/organ/heart/freedom/on_life() . = ..() - if(owner.health < 5 && world.time > min_next_adrenaline) + if(. && owner.health < 5 && world.time > min_next_adrenaline) min_next_adrenaline = world.time + rand(250, 600) //anywhere from 4.5 to 10 minutes to_chat(owner, "You feel yourself dying, but you refuse to give up!") owner.heal_overall_damage(15, 15) diff --git a/code/modules/surgery/organs/liver.dm b/code/modules/surgery/organs/liver.dm index 117a45cdbc..b24034ca4a 100755 --- a/code/modules/surgery/organs/liver.dm +++ b/code/modules/surgery/organs/liver.dm @@ -25,25 +25,24 @@ var/cachedmoveCalc = 1 /obj/item/organ/liver/on_life() - var/mob/living/carbon/C = owner + . = ..() + if(!. || !owner)//can't process reagents with a failing liver + return - if(istype(C)) - if(!(organ_flags & ORGAN_FAILING))//can't process reagents with a failing liver + if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER)) + //handle liver toxin filtration + for(var/datum/reagent/toxin/T in owner.reagents.reagent_list) + var/thisamount = owner.reagents.get_reagent_amount(T.type) + if (thisamount && thisamount <= toxTolerance) + owner.reagents.remove_reagent(T.type, 1) + else + damage += (thisamount*toxLethality) - if(filterToxins && !HAS_TRAIT(owner, TRAIT_TOXINLOVER)) - //handle liver toxin filtration - for(var/datum/reagent/toxin/T in C.reagents.reagent_list) - var/thisamount = C.reagents.get_reagent_amount(T.type) - if (thisamount && thisamount <= toxTolerance) - C.reagents.remove_reagent(T.type, 1) - else - damage += (thisamount*toxLethality) + //metabolize reagents + owner.reagents.metabolize(owner, can_overdose=TRUE) - //metabolize reagents - C.reagents.metabolize(C, can_overdose=TRUE) - - if(damage > 10 && prob(damage/3))//the higher the damage the higher the probability - to_chat(C, "You feel a dull pain in your abdomen.") + if(damage > 10 && prob(damage/3))//the higher the damage the higher the probability + to_chat(owner, "You feel a dull pain in your abdomen.") /obj/item/organ/liver/prepare_eat() var/obj/S = ..() @@ -52,26 +51,26 @@ /obj/item/organ/liver/applyOrganDamage(d, maximum = maxHealth) . = ..() - if(!.) + if(!. || QDELETED(owner)) return if(damage >= high_threshold) var/move_calc = 1+((round(damage) - high_threshold)/(high_threshold/3)) - owner.add_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = move_calc) + owner.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis, multiplicative_slowdown = move_calc) sizeMoveMod(move_calc, owner) else - owner.remove_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis) sizeMoveMod(1, owner) /obj/item/organ/liver/Insert(mob/living/carbon/M, special = FALSE, drop_if_replaced = TRUE) . = ..() if(. && damage >= high_threshold) var/move_calc = 1+((round(damage) - high_threshold)/(high_threshold/3)) - M.add_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = move_calc) + M.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis, multiplicative_slowdown = move_calc) sizeMoveMod(move_calc, owner) /obj/item/organ/liver/Remove(special = FALSE) if(!QDELETED(owner)) - owner.remove_movespeed_modifier(MOVESPEED_ID_CIRRHOSIS) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/liver_cirrhosis) sizeMoveMod(1, owner) return ..() diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index ac2b34b855..b3020ae13f 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -146,7 +146,7 @@ if(safe_oxygen_max) if((O2_pp > safe_oxygen_max) && safe_oxygen_max == 0) //I guess plasma men technically need to have a check. var/ratio = (breath_gases[/datum/gas/oxygen]/safe_oxygen_max) * 10 - H.apply_damage_type(CLAMP(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type) + H.apply_damage_type(clamp(ratio, oxy_breath_dam_min, oxy_breath_dam_max), oxy_damage_type) H.throw_alert("too_much_oxy", /obj/screen/alert/too_much_oxy) else if((O2_pp > safe_oxygen_max) && !(safe_oxygen_max == 0)) //Why yes, this is like too much CO2 and spahget. Dirty lizards. @@ -188,7 +188,7 @@ if(safe_nitro_max) if(N2_pp > safe_nitro_max) var/ratio = (breath_gases[/datum/gas/nitrogen]/safe_nitro_max) * 10 - H.apply_damage_type(CLAMP(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type) + H.apply_damage_type(clamp(ratio, nitro_breath_dam_min, nitro_breath_dam_max), nitro_damage_type) H.throw_alert("too_much_nitro", /obj/screen/alert/too_much_nitro) H.losebreath += 2 else @@ -255,7 +255,7 @@ if(safe_toxins_max) if(Toxins_pp > safe_toxins_max) var/ratio = (breath_gases[/datum/gas/plasma]/safe_toxins_max) * 10 - H.apply_damage_type(CLAMP(ratio, tox_breath_dam_min, tox_breath_dam_max), tox_damage_type) + H.apply_damage_type(clamp(ratio, tox_breath_dam_min, tox_breath_dam_max), tox_damage_type) H.throw_alert("too_much_tox", /obj/screen/alert/too_much_tox) else H.clear_alert("too_much_tox") @@ -446,17 +446,17 @@ if(prob(20)) to_chat(H, "You feel [hot_message] in your [name]!") - -/obj/item/organ/lungs/on_life() - ..() - if((!failed) && ((organ_flags & ORGAN_FAILING))) - if(owner.stat == CONSCIOUS) +/obj/item/organ/lungs/applyOrganDamage(d, maximum = maxHealth) + . = ..() + if(!.) + return + if(!failed && organ_flags & ORGAN_FAILING) + if(owner && owner.stat == CONSCIOUS) owner.visible_message("[owner] grabs [owner.p_their()] throat, struggling for breath!", \ "You suddenly feel like you can't breathe!") failed = TRUE else if(!(organ_flags & ORGAN_FAILING)) failed = FALSE - return /obj/item/organ/lungs/prepare_eat() var/obj/S = ..() @@ -547,5 +547,6 @@ color = "#68e83a" /obj/item/organ/lungs/yamerol/on_life() - ..() - damage += 2 //Yamerol lungs are temporary \ No newline at end of file + . = ..() + if(.) + applyOrganDamage(2) //Yamerol lungs are temporary diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index d95901bdbe..534261f63d 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -108,7 +108,7 @@ var/datum/gas_mixture/enviro = T.return_air() local_temp = enviro.temperature - else if(istype(loc, /mob/) && !owner) + else if(!owner && ismob(loc)) var/mob/M = loc if(is_type_in_typecache(M.loc, GLOB.freezing_objects)) if(!(organ_flags & ORGAN_FROZEN)) @@ -134,18 +134,17 @@ organ_flags &= ~ORGAN_FROZEN return FALSE -/obj/item/organ/proc/on_life() //repair organ damage if the organ is not failing - if(organ_flags & ORGAN_FAILING) - return - if(is_cold()) - return - ///Damage decrements by a percent of its maxhealth - var/healing_amount = -(maxHealth * healing_factor) - ///Damage decrements again by a percent of its maxhealth, up to a total of 4 extra times depending on the owner's health - healing_amount -= owner.satiety > 0 ? 4 * healing_factor * owner.satiety / MAX_SATIETY : 0 - if(healing_amount) - applyOrganDamage(healing_amount) //to FERMI_TWEAK - //Make it so each threshold is stuck. +/obj/item/organ/proc/on_life() //repair organ damage if the organ is not failing or synthetic + if(organ_flags & ORGAN_FAILING || !owner) + return FALSE + if(!is_cold() && damage) + ///Damage decrements by a percent of its maxhealth + var/healing_amount = -(maxHealth * healing_factor) + ///Damage decrements again by a percent of its maxhealth, up to a total of 4 extra times depending on the owner's satiety + healing_amount -= owner.satiety > 0 ? 4 * healing_factor * owner.satiety / MAX_SATIETY : 0 + if(healing_amount) + applyOrganDamage(healing_amount) //to FERMI_TWEAK + return TRUE /obj/item/organ/examine(mob/user) . = ..() @@ -205,11 +204,9 @@ ///Adjusts an organ's damage by the amount "d", up to a maximum amount, which is by default max damage /obj/item/organ/proc/applyOrganDamage(var/d, var/maximum = maxHealth) //use for damaging effects - if(!d) //Micro-optimization. + if(!d || maximum < damage) //Micro-optimization. return FALSE - if(maximum < damage) - return FALSE - damage = CLAMP(damage + d, 0, maximum) + damage = clamp(damage + d, 0, maximum) var/mess = check_damage_thresholds() prev_damage = damage if(mess && owner) diff --git a/code/modules/surgery/organs/stomach.dm b/code/modules/surgery/organs/stomach.dm index 3b383581cf..d9cbf9be03 100755 --- a/code/modules/surgery/organs/stomach.dm +++ b/code/modules/surgery/organs/stomach.dm @@ -17,33 +17,24 @@ low_threshold_cleared = "The last bouts of pain in your stomach have died out." /obj/item/organ/stomach/on_life() - ..() - var/datum/reagent/consumable/nutriment/Nutri + . = ..() + if(!owner) + return if(ishuman(owner)) var/mob/living/carbon/human/H = owner - if(!(organ_flags & ORGAN_FAILING)) + if(.) H.dna.species.handle_digestion(H) handle_disgust(H) - Nutri = locate(/datum/reagent/consumable/nutriment) in H.reagents.reagent_list - if(Nutri) - if(prob((damage/40) * Nutri.volume * Nutri.volume)) - H.vomit(damage) - to_chat(H, "Your stomach reels in pain as you're incapable of holding down all that food!") - - else if(Nutri && damage > high_threshold) - if(prob((damage/10) * Nutri.volume * Nutri.volume)) - H.vomit(damage) - to_chat(H, "Your stomach reels in pain as you're incapable of holding down all that food!") - - - else if(iscarbon(owner)) - var/mob/living/carbon/C = owner - Nutri = locate(/datum/reagent/consumable/nutriment) in C.reagents.reagent_list - - if(damage < low_threshold) + if(!damage) return - + var/datum/reagent/consumable/nutriment/Nutri = locate(/datum/reagent/consumable/nutriment) in owner.reagents.reagent_list + if(!Nutri) + return + var/prob_divisor = damage > high_threshold ? 10 : 40 + if(prob((damage/prob_divisor) * (Nutri.volume**2))) + owner.vomit(damage) + to_chat(owner, "Your stomach reels in pain as you're incapable of holding down all that food!") /obj/item/organ/stomach/proc/handle_disgust(mob/living/carbon/human/H) if(H.disgust) diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 1857f8db48..7127b41ee3 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -58,7 +58,10 @@ return FALSE if(tool) speed_mod = tool.toolspeed - if(do_after(user, time * speed_mod, target = target)) + var/skill_mod = 1 + if(user?.mind?.skill_holder) + skill_mod = SURGERY_SKILL_SPEEDUP_NUMERICAL_SCALE(user.mind.skill_holder.get_skill_value(/datum/skill/numerical/surgery)) + if(do_after(user, time * speed_mod * skill_mod, target = target)) var/prob_chance = 100 if(implement_type) //this means it isn't a require hand or any item step. prob_chance = implements[implement_type] @@ -66,6 +69,7 @@ if((prob(prob_chance) || (iscyborg(user) && !silicons_obey_prob)) && chem_check(target) && !try_to_fail) if(success(user, target, target_zone, tool, surgery)) + user?.mind?.skill_holder?.auto_gain_experience(/datum/skill/numerical/surgery, SKILL_GAIN_SURGERY_PER_STEP) advance = TRUE else if(failure(user, target, target_zone, tool, surgery)) diff --git a/code/modules/uplink/uplink_items/uplink_bundles.dm b/code/modules/uplink/uplink_items/uplink_bundles.dm index f3e95fa61c..478be5960e 100644 --- a/code/modules/uplink/uplink_items/uplink_bundles.dm +++ b/code/modules/uplink/uplink_items/uplink_bundles.dm @@ -41,6 +41,16 @@ player_minimum = 30 exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) +/datum/uplink_item/bundles_TC/northstar_bundle + name = "Northstar Bundle" + desc = "An item usually reserved for the Gorlex Marauders and their operatives, now available for recreational use. \ + These armbands let the user punch people very fast and with the lethality of a legendary martial artist. \ + Does not improve weapon attack speed or the meaty fists of a hulk, but you will be unmatched in martial power. \ + Combines with all martial arts, but the user will be unable to bring themselves to use guns, nor remove the armbands." + item = /obj/item/storage/box/syndie_kit/northstar + cost = 20 + exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) + /datum/uplink_item/suits/infiltrator_bundle name = "Insidious Infiltration Gear Case" desc = "Developed by Roseus Galactic in conjunction with the Gorlex Marauders to produce a functional suit for urban operations, \ diff --git a/code/modules/uplink/uplink_items/uplink_clothing.dm b/code/modules/uplink/uplink_items/uplink_clothing.dm index d6336bd982..014e0452b5 100644 --- a/code/modules/uplink/uplink_items/uplink_clothing.dm +++ b/code/modules/uplink/uplink_items/uplink_clothing.dm @@ -89,4 +89,11 @@ name = "Wall Walking Boots" desc = "Through bluespace magic stolen from an organisation that hoards technology, these boots simply allow you to slip through the atoms that make up anything, but only while walking, for safety reasons. As well as this, they unfortunately cause minor breath loss as the majority of atoms in your lungs are sucked out into any solid object you walk through." item = /obj/item/clothing/shoes/wallwalkers - cost = 6 \ No newline at end of file + cost = 6 + +/datum/uplink_item/device_tools/guerillagloves + name = "Guerilla Gloves" + desc = "A pair of highly robust combat gripper gloves that excels at performing takedowns at close range, with an added lining of insulation. Careful not to hit a wall!" + item = /obj/item/clothing/gloves/tackler/combat/insulated + include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) + cost = 2 diff --git a/code/modules/uplink/uplink_items/uplink_devices.dm b/code/modules/uplink/uplink_items/uplink_devices.dm index 194281ded6..cda83cf684 100644 --- a/code/modules/uplink/uplink_items/uplink_devices.dm +++ b/code/modules/uplink/uplink_items/uplink_devices.dm @@ -188,6 +188,16 @@ item = /obj/item/healthanalyzer/rad_laser cost = 3 +/datum/uplink_item/device_tools/riflery_primer + name = "Riflery Primer" + desc = "An old book with blood and vodka stains on it. Freshly pulled from a dusty crate in some old warehouse, \ + this primer of questionable worth and value is rumored to increase your rifle-bolt-working and/or shotgun \ + racking fivefold. Then again, the techniques here only work on bolt-actions and pump-actions..." + item = /obj/item/book/granter/trait/rifleman + cost = 3 + restricted_roles = list("Operative") // i want it to be surplusable but i also want it to be mostly nukie only, please advise + surplus = 90 + /datum/uplink_item/device_tools/stimpack name = "Stimpack" desc = "Stimpacks, the tool of many great heroes, make you nearly immune to stuns and knockdowns for about \ diff --git a/code/modules/vehicles/secway.dm b/code/modules/vehicles/secway.dm index 868610a149..8ad8b5f1ee 100644 --- a/code/modules/vehicles/secway.dm +++ b/code/modules/vehicles/secway.dm @@ -22,7 +22,7 @@ /obj/vehicle/ridden/secway/process() var/diff = world.time - last_tick var/regen = chargerate * diff - charge = CLAMP(charge + regen, 0, chargemax) + charge = clamp(charge + regen, 0, chargemax) last_tick = world.time /obj/vehicle/ridden/secway/relaymove(mob/user, direction) diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 4f7502bb02..e27431f8ee 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -579,39 +579,36 @@ GLOBAL_LIST_EMPTY(vending_products) if(!R || !istype(R) || !R.product_path) vend_ready = TRUE return + if(R.amount <= 0) + to_chat(usr, "Sold out.") + vend_ready = TRUE + return if(R in hidden_records) if(!extended_inventory) vend_ready = TRUE return else if(R in coin_records) - if(!(coin)) - to_chat(usr, "You need to a coin to get this item!") + if(!coin) + to_chat(usr, "You need to insert a coin to get this item!") vend_ready = TRUE return if(coin && coin.string_attached) - if(!prob(50)) - to_chat(usr, "You weren't able to pull [coin] out fast enough, the machine ate it, string and all!") - QDEL_NULL(coin) - return - if(!usr.CanReach(src)) - to_chat(usr, "You successfully pull [coin] out of [src] to the floor.") - coin = null - if(!usr.put_in_hands(coin)) + if(prob(50)) + if(usr.put_in_hands(coin)) + to_chat(usr, "You successfully pull [coin] out before [src] could swallow it.") + coin = null + else to_chat(usr, "You couldn't pull [coin] out because your hands are full!") QDEL_NULL(coin) - to_chat(usr, "You successfully pull [coin] out before [src] could swallow it.") - coin = null - QDEL_NULL(coin) + else + to_chat(usr, "You weren't able to pull [coin] out fast enough, the machine ate it, string and all!") + QDEL_NULL(coin) + else + QDEL_NULL(coin) else if(!(R in product_records)) vend_ready = TRUE message_admins("Vending machine exploit attempted by [ADMIN_LOOKUPFLW(usr)]!") return - if(R.amount <= 0) - to_chat(usr, "Sold out.") - vend_ready = TRUE - return - else - R.amount-- if(((last_reply + 200) <= world.time) && vend_reply) speak(vend_reply) last_reply = world.time @@ -623,8 +620,7 @@ GLOBAL_LIST_EMPTY(vending_products) to_chat(usr, "You take [R.name] out of the slot.") else to_chat(usr, "[capitalize(R.name)] falls onto the floor!") - - + R.amount-- SSblackbox.record_feedback("nested tally", "vending_machine_usage", 1, list("[type]", "[R.product_path]")) vend_ready = TRUE return diff --git a/code/modules/vending/drinnerware.dm b/code/modules/vending/dinnerware.dm similarity index 95% rename from code/modules/vending/drinnerware.dm rename to code/modules/vending/dinnerware.dm index 8f257d07ec..da8baa7e1c 100644 --- a/code/modules/vending/drinnerware.dm +++ b/code/modules/vending/dinnerware.dm @@ -20,7 +20,7 @@ /obj/item/reagent_containers/food/condiment/saltshaker = 5, /obj/item/reagent_containers/food/condiment/peppermill = 5) contraband = list( - /obj/item/reagent_containers/food/snacks/monkeycube = 1, + /obj/item/reagent_containers/food/snacks/cube/monkey= 1, /obj/item/kitchen/knife/butcher = 2, /obj/item/reagent_containers/syringe = 3) premium = list( diff --git a/code/modules/vending/security.dm b/code/modules/vending/security.dm index 09681def64..b1a6297981 100644 --- a/code/modules/vending/security.dm +++ b/code/modules/vending/security.dm @@ -21,6 +21,7 @@ /obj/item/clothing/head/helmet/blueshirt = 1, /obj/item/clothing/suit/armor/vest/blueshirt = 1, /obj/item/clothing/under/rank/security/officer/blueshirt = 1, + /obj/item/clothing/gloves/tackler = 5, /obj/item/ssword_kit = 1) armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) resistance_flags = FIRE_PROOF diff --git a/config/awaymissionconfig.txt b/config/awaymissionconfig.txt index 545394f3e9..c6a5d9ef8f 100644 --- a/config/awaymissionconfig.txt +++ b/config/awaymissionconfig.txt @@ -7,16 +7,16 @@ #Do NOT tick the maps during compile -- the game uses this list to decide which map to load. Ticking the maps will result in them ALL being loaded at once. #DO tick the associated code file for the away mission you are enabling. Otherwise, the map will be trying to reference objects which do not exist, which will cause runtime errors! -#_maps/RandomZLevels/blackmarketpackers.dmm -#_maps/RandomZLevels/spacebattle.dmm -#_maps/RandomZLevels/TheBeach.dmm -#_maps/RandomZLevels/Academy.dmm -#_maps/RandomZLevels/wildwest.dmm -#_maps/RandomZLevels/challenge.dmm -#_maps/RandomZLevels/centcomAway.dmm -#_maps/RandomZLevels/moonoutpost19.dmm -#_maps/RandomZLevels/undergroundoutpost45.dmm -#_maps/RandomZLevels/caves.dmm -#_maps/RandomZLevels/snowdin.dmm -#_maps/RandomZLevels/research.dmm -#_maps/RandomZLevels/Cabin.dmm +#_maps/RandomZLevels/away_mission/blackmarketpackers.dmm +#_maps/RandomZLevels/away_mission/spacebattle.dmm +#_maps/RandomZLevels/away_mission/TheBeach.dmm +#_maps/RandomZLevels/away_mission/Academy.dmm +#_maps/RandomZLevels/away_mission/wildwest.dmm +#_maps/RandomZLevels/away_mission/challenge.dmm +#_maps/RandomZLevels/away_mission/centcomAway.dmm +#_maps/RandomZLevels/away_mission/moonoutpost19.dmm +#_maps/RandomZLevels/away_mission/undergroundoutpost45.dmm +#_maps/RandomZLevels/away_mission/caves.dmm +#_maps/RandomZLevels/away_mission/snowdin.dmm +#_maps/RandomZLevels/away_mission/research.dmm +#_maps/RandomZLevels/away_mission/Cabin.dmm diff --git a/config/game_options.txt b/config/game_options.txt index e1294f688a..781be6d5b1 100644 --- a/config/game_options.txt +++ b/config/game_options.txt @@ -288,6 +288,9 @@ MINIMUM_SECBORG_ALERT 3 ## Uncomment to load one of the missions from awaymissionconfig.txt at roundstart. #ROUNDSTART_AWAY +## Uncomment to load one of the virtual reality levels from vr_config at roundstart. +#ROUNDSTART_VR + ## How long the delay is before the Away Mission gate opens. Default is half an hour. ## 600 is one minute. GATEWAY_DELAY 18000 diff --git a/config/vr_config.txt b/config/vr_config.txt new file mode 100644 index 0000000000..0c6354f8fe --- /dev/null +++ b/config/vr_config.txt @@ -0,0 +1,13 @@ +#List the potential virtual reality Z-levels here. awaymissionconfig copypasta follows. + +#Maps must be the full path to them +#Maps should be 255x255 or smaller and be bounded. Falling off the edge of the map will result in undefined behavior. +#SPECIFYING AN INVALID MAP WILL RESULT IN RUNTIMES ON GAME START + +#!!IMPORTANT NOTES FOR HOSTING VR MAPS!!: +#Do NOT tick the maps during compile -- the game uses this list to decide which map to load. Ticking the maps will result in them ALL being loaded at once. +#DO tick the associated code file for the virtual reality levels you are enabling. Otherwise, the map will be trying to reference objects which do not exist, which will cause runtime errors! + +#_maps/RandomZLevels/VR/murderdome.dmm +#_maps/RandomZLevels/VR/snowdin_VR.dmm +#_maps/RandomZLevels/VR/syndicate_trainer.dmm \ No newline at end of file diff --git a/html/changelog.html b/html/changelog.html index b02b2d74a5..3d05d75736 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -833,555 +833,6 @@
  • box brig miscellaneous issues
  • box station hos office
  • - -

    26 February 2020

    -

    AnturK ported by kevinz000 updated:

    -
      -
    • Dueling pistols have been added.
    • -
    -

    Arturlang updated:

    -
      -
    • Replaces a lot of ingame UIs with TGUI next, increasing performance drastically.
    • -
    • Each night for bloodsuckers will last longer due to the sun dimming.
    • -
    • You cant level up for free, now you have to pay blood for power.
    • -
    • Bloodsuckers are no longer as resistant to hard stuns and regenerate less stamina. and a lot of their cooldowns are a lot higher.
    • -
    • Removed text macros from the chem dispenser.
    • -
    • Replaced with dispenser input recording macros.
    • -
    • Fancifying makeshift switchblades now works
    • -
    • Shields will no longer block lasers, and will break if they take too much damage.
    • -
    • Added a TGUI Next interface for crafting
    • -
    • Removed the old TGUI slow crafting interface
    • -
    • The MK2 hypospray now
    • -
    • The debug outfit is now kitted out for whatever debbuging needs.
    • -
    • Fixed the pandemic naming and the radiation healing symptom UI crashing
    • -
    • Hyposprays now switch modes on CTRL click, instead of alt, as it was already reserved for dispension amount.
    • -
    • Nanite interfaces have gotten a rework to TGUI Next, and can now support sub-programs. add:Adds the nanite sting program, which will allow you to manually sting people to give them nanites, changeling style.
    • -
    • The pandemic can no longer make vaccines or synthblood as quickly.
    • -
    • The syndicate uplinks interface has been redone in TGUI Next
    • -
    • Valentines can now be converted by bloodsuckers
    • -
    -

    Bhijn updated:

    -
      -
    • Click-dragging will now only perform the quick item usage behavior if you're in combat mode.
    • -
    -

    BlueWildrose updated:

    -
      -
    • podpeople tail wagging
    • -
    • lifebringer ghost role fixes
    • -
    -

    BuffEngineering, nemvar. updated:

    -
      -
    • Addicts can now feel like they're getting their fix or kicking it.
    • -
    • Aheals now remove addictions and restore your mood to default.
    • -
    -

    CameronWoof updated:

    -
      -
    • Lighting looks better now. I can say that because the PR wouldn't be merged and you wouldn't be reading this if it wasn't true.
    • -
    • Ammonia and saltpetre can now be made at the biogenerator.
    • -
    -

    Commandersand updated:

    -
      -
    • uplink centcomm suit doesn't have sensors
    • -
    -

    DeltaFire15 updated:

    -
      -
    • Nar'Sie runes no longer benefit from runed floors.
    • -
    -

    Detective-Google updated:

    -
      -
    • the POOL. remove: boxstation dorms 7
    • -
    • valentines candy no longer prefbreaks
    • -
    • Loudness Booster pAI program
    • -
    • Encryption Key pAI program
    • -
    -

    EmeraldSundisk updated:

    -
      -
    • Connects mining's disposal unit on Delta.
    • -
    • Slight visual adjustments to the immediate affected area.
    • -
    -

    Feasel updated:

    -
      -
    • Buffed dissection success chances.
    • -
    -

    Ghommie updated:

    -
      -
    • The anomalous honking crystal should now properly clown your mind.
    • -
    • Stopped the ellipsis question mark from being displayed twice in the examine message for masked/unknown human mobs.
    • -
    • Made the aforementioned ellipsis question mark display on flavor-text-less masked/unknown human mobs too for consistency.
    • -
    • Stopped an APTFT exploit with spray bottles.
    • -
    • Fixed the detective revolver being quite risky to use.
    • -
    • Hair styles and undergarments are yet again free from gender restrictions.
    • -
    • Clown ops will find bombananas and clown bomb beacons instead of minibombs and bomb beacons in their infiltrator ship now.
    • -
    • For safety, the syndicate shuttle minibombs and bombananas come shipped in a box. Please don't instinctively eat any of those nanas, thank you.
    • -
    • Uplink items excluded (such as mulligan, chameleon, ebow) from or exclusive (such as cyber implants) to normal nuke ops will now be properly unavailable/available to clown ops.
    • -
    • Fixed bananium energy sword/shield slips.
    • -
    • Buffed said slips to ignore no-grav/crawling/flying as well as adding some deadly force to the e-sword.
    • -
    • Fixed the 'stache grenade anti-non-clumsy user check.
    • -
    • Doubled the timer for the sticky mustaches effect from the above grenade (from 1 to 2 minutes)
    • -
    • Fixed an edge case with the chaplain armaments beacon spawning the box in nullspace.
    • -
    • The playback device's cooldown now proportionally increases with messages longer than 60 characters (3 seconds is the default assembly cooldown).
    • -
    • Fixed space ninjas "Nothing" objective. Now you gotta steal some dandy stuff such as corgi meat and pinpointers as a ninja too.
    • -
    • Fixed maploaded APC terminals direction.
    • -
    • Nerfed magnetic rifles/pistols by re(?)adding power cell requirements for it. These firearms must be recharged after firing 2 magazines worth of projectiles and are slightly more susceptible to EMPs.
    • -
    • Fixed the tearstache nade not properly working.
    • -
    • Buffed it against space helmet internals.
    • -
    • Holographic fans won't display above mobs and other objects anymore.
    • -
    • Fixed paraplegics appearing as shoeless.
    • -
    • Fixed the petting element.
    • -
    • Fixed slipping.
    • -
    • Refactored mob holders into an element.
    • -
    • Fixed a few minor issues with that feature. such as mismatching sprites for certain held mobs and a slight lack of safety checks.
    • -
    • holdable mobs can't force themselves into people's hands anymore.
    • -
    • Milkies fix.
    • -
    • Fixed some mounted defibrillator issue with the altclicking functionality.
    • -
    • Fixed no-grav lavaland labor/mining shuttle areas.
    • -
    • Fixed a little issue with sleeper UI and blood types.
    • -
    • Fixing accidental nerfs to the magpistol magazine.
    • -
    • The Lavaland's Herald speech sound should only play if they are actually speaking.
    • -
    • Nerfed cargo passive points generation from 500 to 125 creds per minute.
    • -
    • Fixed whitelisted/donor loadouts
    • -
    • Childproofs double-esword and hypereuplastic blade toys.
    • -
    • Some reagent holders (such as cigarettes, food) are not suitable for reagents export anymore, while unprocessed botany crops will only net 1/3 of the standard reagents values.
    • -
    • Export scanners now include the reagents value in the price report.
    • -
    • Fixed a little inconvenience with the character setup preview dummy having extra unwarranted bits.
    • -
    • Stopped role restricted uplink items from being discounted despite not being purchasable most times.
    • -
    • Missing words replacement file for the gondola mask.
    • -
    • Fixed an issue with the nearsighted prescription glasses taking over worn eyewear.
    • -
    • Fixed AI unanchoring not properly removing the no teleport trait. My bad.
    • -
    • Fixed another issue with hering comsig.
    • -
    • Fixed dozen missing privates sprites.
    • -
    • A little fix concerning some R&D and reagents.
    • -
    • Further mob holder fixes.
    • -
    • Fixed being unable to dump a trash bag's contents directly into disposal bins.
    • -
    • Doubled the halved flavor text maximum length.
    • -
    • Reduced tongue organ damage and tasting pH message spam.
    • -
    • Fixed agent IDs not registering the inputted name. Thanks MrPerson.
    • -
    • Fixed solar panels/trackers (de)construction being a bit wonky.
    • -
    • Fixed something about slime blood and the law of conservation of mass.
    • -
    • Fixed flypeople being emetic machine guns.
    • -
    • Fixed virology being unable to be done with synthetic blood.
    • -
    • Renamed "blaster carbine" and "blaster rifles" back to "energy gun" and "laser gun" respectively
    • -
    • Fixed magnetic rifles & co being inconsistent with printed energy guns and start with an empty power cell.
    • -
    • Reverted practice laser gun sprites back to their former glory. Mostly.
    • -
    • Fixed sprint buffer cost and regen being rounded down.
    • -
    • Nerfed the fermenting barrel export industry.
    • -
    • Reagent dispensers selling price no longer takes in account the reagents volume. It's already handled by reagents export.
    • -
    • pAIs are yet again unable to perform certain silicon interactions with machineries yet again.
    • -
    • Fixed pAI radios inability to be toggled on/off.
    • -
    -

    Ghommie (original PRs by Floyd/Qustinnus, 4Dplanner, Willox, ninjanomnom, mrdoombringer, Fikou, Fox McCloud, TheChosenEvilOne, nemvar, bobbahbrown, Time-Green, Stonebaykyle, MrPerson, ArcaneMusic and zxaber) updated:

    -
      -
    • You can now make toolboxes out of almost any solid material in an autolathe
    • -
    • adds Knight's Armour made out of any materials
    • -
    • new ruin found in lavaland protected by dark wizards, I wonder what they're guarding
    • -
    • You can now put a bunch more mats in the coin mint and autolathe
    • -
    • Adamantine and Mythril are now materials (Adamantine still only from xenobio, Mythril still only from badminnery). Adamantine boosts an item's force by 1.5, Mythril gives an item RPG statistics.
    • -
    • most custom sprites for coins have been lost
    • -
    • You can now give your ass acute radiation poisoning
    • -
    • floydmats now apply to all objs / items
    • -
    • you can now make tables and chairs out of any material
    • -
    • Fixes being able to exploit fully upgraded destructive analyzers to multiply materials
    • -
    • An old monastery from a previously abandoned sector of space has recently resurfaced in some regions surrounding the station.
    • -
    • Latent scans of the surrounding systems have picked up trace signs of new, smaller cult constructs, however these signatures quickly vanished.
    • -
    • In other news, scavengers in your sector have been seen occasionally with classically recreated maces, so autolathe firmware has been upgraded to accommodate this.
    • -
    -

    Hatterhat updated:

    -
      -
    • Zombie powder is now instant when ingested, but delayed when injected or applied through touch.
    • -
    • The H.E.C.K. suit is now goliath tentacle resistant and probably better for acid resistance.
    • -
    • The Engineering techfab can now print standard and large RCD compressed matter cartridges.
    • -
    • The Experimental Tools node now has the Combifan projector, blocking both temperature and atmospheric changes.
    • -
    • fiddles with the seed extractor upgrade examine to make it not shit
    • -
    • Formaldehyde prevents organ decay and corpses' miasma production at 1u in the body.
    • -
    • Epinephrine pens now contain 3u formaldehyde. This should not kill you.
    • -
    • The ships often crashed by Free Golems on Lavaland now have GPSes. They're off, by default, but an awakening Golem could easily turn one on.
    • -
    • Standard RCD ammo can now be printed from Engineering-keyed techfabs once you hit Industrial Engineering.
    • -
    • Consoleless interfaces are now default - this means unrestricted protolathes and circuit imprinters can now be interfaced with by interacting with the machine itself.
    • -
    • Multitools can now actually be printed from Engineering and Science protolathes/techfabs once you unlock Basic Tools.
    • -
    • Husking (from being burned to shit) can now be reverted! 5u rezadone or 100u synthflesh, at below 50 burn.
    • -
    • Turning a body into a burnt husk now takes more effort. 300 burn's worth of effort.
    • -
    • Buckshot individual pellet damage up from 10 to 12.5. Still firing 6 pellets.
    • -
    • Preservahyde! Made with water, bromine, and formaldehyde, it doesn't decay into histamine. Instead, it just prevents your organs from rotting into nothing.
    • -
    • You can now purify eldritch longswords with a bible. This creates purified longswords, which do not have anti-magic properties, but are still good for swinging at cultists.
    • -
    • Extend votes! Ported from Hyper, ported from AUstation.
    • -
    • mechs with stock parts now have icons
    • -
    • Pie reagent transfer now requires an uncovered mouth.
    • -
    • Biogenerators can now actually generate universal enzyme.
    • -
    • The Basic Tools node now unlocks the multitool for printing on Engineering and Science fabricators.
    • -
    • The Ash Walkers' nest on Lavaland now starts with three bowyery slabs.
    • -
    • You can now welder-harden arrows. It might take longer.
    • -
    • Silkstring's costs adjusted for bows and whatnot.
    • -
    • Grammar adjusted on a lot of things relating to bows.
    • -
    • Pipe bows' bowstring doesn't look like it replicated itself upon draw.
    • -
    -

    IHOPMommyLich updated:

    -
      -
    • Changed the multiplicative_slowdown of Stimulants from -1 to -0.5
    • -
    -

    IronEleven updated:

    -
      -
    • Minor stat changes to Choking, Spontaneous Combustion, Autophagocytosis Necrosis, Hallucigen, Narcolepsy, Shivering, and Vomiting symptoms.
    • -
    -

    KathrinBailey updated:

    -
      -
    • Missing turf_decals in Cargo Office.
    • -
    • Turns on the docking beacons on Box.
    • -
    • Fixes Starboard Quarter maint room being spaced. It was never intended to be like how it was.
    • -
    • The aforementioned maint room not having stuff in it.
    • -
    • varedited photocopier sometimes not opening any UI.
    • -
    • Atmos differences in Starboard Quarter maint.
    • -
    • Atmos differences in destroyed shuttle/EVA bridge. Plating replaced with airless plating.
    • -
    • Rotates AI satellite computers. These have probably been like this since computers had the old sprites and no directional ones. You shouldn't sit at a chair to operate a sideways computer.
    • -
    -

    KrabSpider updated:

    -
      -
    • The Van Dyke is no longer Fu Manchu.
    • -
    • Gets rid of a Fu Manchu imitation.
    • -
    -

    Kraseo updated:

    -
      -
    • You can no longer pull before wearing boxing gloves to bypass the grab check.
    • -
    • Nightmares no longer delete entire guns from existence for merely having a light on them.
    • -
    -

    Linzolle updated:

    -
      -
    • Bows now will not delete an arrow if it cant fire it.
    • -
    • bows now like and respect sprite changes
    • -
    -

    MalricB updated:

    -
      -
    • "Shaggy" sprite from virgo
    • -
    • "shaggy" option in the character customization
    • -
    -

    MrJWhit updated:

    -
      -
    • Removed meteor defense tech node
    • -
    • TEG
    • -
    -

    Naksu updated:

    -
      -
    • Odysseus chem synthesizing now works again.
    • -
    -

    Owai-Seek updated:

    -
      -
    • Burger, Cargo Packaging, Dirty Magazine, Air Pump, and Scrubber crates.
    • -
    • Duplicate Crate, Festive Wrapping Paper Crate, Contraband Monkey Meat Crate
    • -
    • Gave Seed Crate Ambrosia Seed, gave Biker Gang Crate Spraypaint.
    • -
    • Organised some crates with sub-categories. Also, moved all vendor refills to a new tab.
    • -
    • Moved Grill to Service Tab
    • -
    • Engineering Hardsuit Access
    • -
    • Blood Crate now has all of the current blood types.
    • -
    • Birthday Cake Recipe is now the same as TG.
    • -
    • Added Soy Sauce and BBQ Packets to Dinnerware Vendor.
    • -
    • Added nurse outfit, nurse cap, and mailman hat to loadout.
    • -
    • Changed the name of scrubs to blue, green, and purple scrubs.
    • -
    • Bacon and Eggs food item. Delicious! Added a Lemony Poppy Seed Muffin.
    • -
    • Snack Vendor has Chocolates, Tortilla Chips, and a Marshmallow Box
    • -
    • Mops can now be printed at service lathe once tools are researched.
    • -
    • Biobags can hold most organic limbs/organs, but not brains, implants, or cybernetics.
    • -
    • Trash Bag can now hold limbs (but not heads.)
    • -
    • Most snack vendor items reduced by 1.
    • -
    • Trash Cans are now actually craftable, and only require metal instead of plastic.
    • -
    • Bacon and Eggs, Drying Agent Bottle.
    • -
    • Mugs now show reagent colors of contained reagents. Thanks Seris!
    • -
    • Reorganized all food recipes, (hopefully) making things easier to find.
    • -
    • Trays now have a whitelist, allowing them to pick up normal sized foods, bowls, glassware, booze, ect.
    • -
    • Easter foods are no longer their own Misc Food Category on the top of the menu.
    • -
    • fixed a few typos/capitalization consistency.
    • -
    • Mexican Foods are their own Subcategory.
    • -
    • Donuts are their own Subcategory
    • -
    • Moved Sweets from Misc Food in with Pies. Renamed to Pies & Sweets
    • -
    • BROOM
    • -
    • Janitor Vendor now has gear for two Janitors.
    • -
    -

    PersianXerxes updated:

    -
      -
    • SMES and PACMAN attached to gulag Security to power electrified windows remove: Removed Sec vendor from gulag Security
    • -
    • Separation of gulag and public mining
    • -
    • Better clarified the comment explaining the contraband tag.
    • -
    • Cargo nuclear defusal kits now require an emag'd drop pod console to be purchased.
    • -
    • Added Kilo Station
    • -
    • Adjusts Kilo Station to be more in line with Citadel standards
    • -
    • Added area icons required to make Kilo Station editable on Citadel code
    • -
    • Fixed a reagent container on Kilo pointing to a nonexistent reagent
    • -
    • Adds Kilo Station to the maps config file, does not fix Meta Station's population requirement
    • -
    -

    Psody-Mordheim updated:

    -
      -
    • You can now make synth-flesh with synthetic blood.
    • -
    • You can now make synthetic blood via mixing saline glucose, iron, stable plasma and heating it to 350 temp.
    • -
    • You can mix synthetic blood and cryoxadone to create synth-meat in addition to normal blood.
    • -
    • Disfiguration Symptom.
    • -
    • Deoxyribonucleic Acid Saboteur Symptom.
    • -
    • Polyvitiligo Symptom.
    • -
    • Revitiligo Symptom.
    • -
    • Vitiligo Symptom.
    • -
    -

    Putnam3145 updated:

    -
      -
    • Added logging to various consent things.
    • -
    • Lots of new traitor objectives
    • -
    • gender change potion now respects prefs
    • -
    • Hypno prefs work better.
    • -
    • Panic bunker is now round-to-round persistent
    • -
    • Relief valve now has a TGUI-next UI
    • -
    • Atmos reaction priority works now.
    • -
    • map voting doesn't suck anymore
    • -
    • Dynamic now defaults to "classic" storyteller instead of just failing if the vote didn't choose a storyteller.
    • -
    • antag quirk blacklisting works now
    • -
    • default should be... default
    • -
    • all supermatter damage is now hardcapped
    • -
    • Supermatter sabotage objective no longer shows up with no supermatter
    • -
    • Mining vendors no longer fail and eat your points iff you have precisely enough points to pay for an item
    • -
    • Licking pref
    • -
    • Fixed IRV.
    • -
    • Runtime if nobody has a chaos pref set
    • -
    • IRV fixed... again
    • -
    • temporary flavor text can now be of reasonable length
    • -
    • Shooting the supermatter now adds to the supermatter's power. CO2 setups beware!
    • -
    • Logging for renaming
    • -
    -

    Raiq & Linzolle updated:

    -
      -
    • Bone bow - Ash walkers crafting , bone arrows - Ash walkers crafting, silk string used in bow crafting, harden arrows - Ash walkers crafting, ash walker only crafting book, basic pipe bow, and bow & arrow selling. Quivers for ash walkers as well, just to hold some arrows well out on the hunt!
    • -
    -

    Seris02 updated:

    -
      -
    • tweaked the way the SM works
    • -
    • custom reagent pie smite
    • -
    • hijack implant
    • -
    • changed mentions of the issilion proc to hasSiliconAccessInArea based on what the proc is used for
    • -
    • recipe for mammal mutation toxin
    • -
    • polychromic winter coat
    • -
    • thief's gloves
    • -
    • crushing magboots
    • -
    • golden plastitanium toolbox being actually plastitanuium
    • -
    • character slot amount
    • -
    • rebalanced rising bass
    • -
    • string highlighting whitespace
    • -
    • glitch with PKA
    • -
    • meteor hallucinations (again)
    • -
    • Added naked hallucination
    • -
    • crowbarring manifests off crates
    • -
    • makes RCDs cost a better amount
    • -
    • apc icons
    • -
    • rest hotkey
    • -
    • hsl instead of sum of rgb for spraycan lum check
    • -
    • bloodcrawl's cooldown
    • -
    -

    ShadeAware updated:

    -
      -
    • Craftable Switchblades, a weaker subtype of normal switchblades that can be crafted using a Kitchen Knife, Modular Receiver, Rifle Stock and some Cable Coil. Requires a welder to complete.
    • -
    • You can now actually craft Switchblades.
    • -
    • Switchblades no longer regain their old Makeshift sprite after retracting if you've made them fancy with Silver.
    • -
    • The Captain's Wardrobe, a special one-of-a-kind and ID-locked wardrobe for the Captain that holds all of their snowflakey gear. Remove: Snowflake gear from the Captain's locker, since now it has its own vendor.
    • -
    -

    Tlaltecuhtli, ported by Hatterhat updated:

    -
      -
    • Ripley, Firefighter, Odysseus and H.O.N.K. mechs now also use scanning modules and capacitors on construction. This means that they also gain reduced power consumption and EMP protection from higher-tier stock parts.
    • -
    -

    Trilbyspaceclone updated:

    -
      -
    • Vault hallway door being all access
    • -
    • Updates change logs
    • -
    • Crafts are now made of plasteel and can be made with 5 sheets
    • -
    • Takes away NT's connections to the Aliens that run the Syndicats
    • -
    • Carps have evolved to take more damage
    • -
    • restock crates for each vender
    • -
    • restock units for all station venders
    • -
    • Sec-vender missing icon
    • -
    • Box station captain office issues maping: Gulag on box can now be accessed
    • -
    • Alien stools and chairs
    • -
    • Bone armor/Dagger are now crafting from bones rather then crafting menu
    • -
    • Firing pins that only works when not on station
    • -
    • Medical locked crates
    • -
    • Russian gear crates have less gear in some cases but all will cost more
    • -
    • Medical locked crates that were not locked
    • -
    • Crates that were out of date are corrected
    • -
    • Heads of staff have been better screened by NT before being promoted
    • -
    • The suit full of spiders also known as a ninja now is a tactical turtleneck
    • -
    • The Wiznerds now dont have suits set to max
    • -
    • Meat wheat no longer has blood
    • -
    • Flat guns can no longer be suppressed
    • -
    • replaced stickmans .45 caliber with 10mm, for consistency.
    • -
    • Meatwheat and Oats now have rarity
    • -
    • Oats now have at lest 50% more flour in them
    • -
    • BDM now uses a PKA rather then a normal KA
    • -
    • Gang tower shield is no longer transparent
    • -
    • Cosmic winter coat now glows like the bedsheet, and holds normal winter coat gear
    • -
    • Express console is now logging what it buys, like the normal console should
    • -
    • Crabs are now made of crab meat.
    • -
    • AIs now understand the old ways of drunken dwarfs
    • -
    • Removes some armored Russian hats from box station round start
    • -
    • Doner items spawning
    • -
    • Engi/Sec Trek suit no longer has 10% melee protection
    • -
    • IPC hearts are now made of robomeat and roboblood thats emp proof. Heals and is all and all just like an normal heart
    • -
    • All robotic organs now have an animation.
    • -
    • IPC's now organs now look like robotic ones, even tho thats not the case game wise
    • -
    • Added a new bee themed bar sign
    • -
    • Makes plywood chair not look as bad.
    • -
    • corndog sprite being miss-spelled
    • -
    • Ash from land of lava now is useable for sandstone
    • -
    • Peach cake slices are no long made by mimes
    • -
    -

    Tupinambis updated:

    -
      -
    • the portion of laws that require harm prevention by silicons has been removed.
    • -
    • silicon_laws.txt config file is required to be modified for full implementation.
    • -
    • masks no longer improperly stick out of helmets when they should be hidden.
    • -
    • Status Displays should now update correctly.
    • -
    • stunbatons now take 4 hits to inflict hard crit, up from 3.
    • -
    • stunbatons no longer disarm targets.
    • -
    -

    Yakumo Chen updated:

    -
      -
    • Rings for your fingers!
    • -
    • New cargo crates and loadout options to bling your rings!
    • -
    -

    YakumoChen updated:

    -
      -
    • Observe is back in the OOC tab
    • -
    • Rings look nicer. Sprites used from RP.
    • -
    • Ring on-hands. Diamond rings sparkle!
    • -
    • You can now propose using a diamond ring in your hand.
    • -
    • Legion skulls behave like bees!!!!
    • -
    -

    Zellular updated:

    -
      -
    • Movement state for pupdozer and its decals
    • -
    • Tweaked the movement state for the pupdozer's eyes
    • -
    -

    ancientpower updated:

    -
      -
    • Fixes an error in pH strips' feedback message.
    • -
    • Ported drink sliding from /vg/station.
    • -
    • Fixes color mismatching with the "genitals use skintone" preference.
    • -
    • Bunny ear style for humanoid species.
    • -
    • Ghosts are now literate.
    • -
    -

    bunny232 updated:

    -
      -
    • Changes the simple animal sentience event from the xenomorph preference to sentience potion preference.
    • -
    -

    coiax updated:

    -
      -
    • Admin and event only pair pinpointers! They come in a box of two, and each pinpointer will always point at its corresponding pair. Aww.
    • -
    -

    deathride58 updated:

    -
      -
    • Spacemen no longer run at lightspeed on local servers.
    • -
    -

    kappa-sama updated:

    -
      -
    • the plant dudes can actually make plant disks now
    • -
    -

    keronshb updated:

    -
      -
    • Added repairable turrets
    • -
    • Adds Tiny Fans to the pirate ship
    • -
    • changes some reinforced windows to plastinanium pirate windows
    • -
    • made the pirate shuttle + turrets bomb resistant
    • -
    • made most pirate machines + consoles indestructible
    • -
    • increased pirate turret health
    • -
    • Adds the CogChamp drink and Sprite
    • -
    • Added burn and knockback to stunhand during HALOS on cult.
    • -
    • fixed accelerated regeneration nanites
    • -
    • fixed mechanical repair nanites
    • -
    • fixed bio reconstruction nanites
    • -
    -

    kevinz000 updated:

    -
      -
    • Custom snowflake plushies are now in config rather than code.
    • -
    • Abductor mindsnapping (aka abductee objectives) can now be "cured" with brain surgery.
    • -
    • Shuttle hijacking has been completely reworked. Alt-click the shuttle as a hijack-capable mind (so traitors, and especially traitors with hijack) to begin or continue a hacking process.
    • -
    • A good amount of the blood RGB rework was cleaned up/reverted, with some notable gameplay changes including: Gibs and blood not having max blood by default (no more easy rampages, cultists), infinite gib streaking, etc etc.
    • -
    • meteor waves are now directional and announces the direction on the command report.
    • -
    • CTF CLAYMORES
    • -
    • shoves buffed, now shoving into a wall twice rapidly will also disarm their weapon.
    • -
    • traitor+bro gamemode minimum population set to 25 until there can be more in depth configuration systems for gamemodes.
    • -
    • no more bluespace skittish locker diving,
    • -
    • moths now have unique laughs and can *chitter.
    • -
    • nuke explosion is now full dev radius for anti lag purposes
    • -
    • Gangs can now only tag with a gang uplink bought spraycan.
    • -
    • dueling pistol accesses have been changed to be more accessible.
    • -
    • mechs no longer have admin logs flooding into IC control console log viewing
    • -
    • Guncode and energy guns have been refactored a bit.
    • -
    • You can now combat mode ight click on an energy gun to attempt to switch firing modes. This only works on guns without right click functions overridden.
    • -
    • shoes can now fit magpistols again.
    • -
    • Projectiles now always hit chest if targeting chest, snipers have 100% targeting zone accuracy. All other cases are unchanged.
    • -
    • The lawyer's PDA cartridge has been rebranded to something more accurate to its true nature.
    • -
    • Refactored ghostreading/etc
    • -
    • Cyborgization will now de-gang people, even gangheads.
    • -
    • reactive repulse armor now has an item limit
    • -
    • beam rifle runtime fix during aiming_beam
    • -
    • fail2topic runtime fix: taking out an ip while incrementing index resulted in accessing the next-next entry instead of the next and results in out of bound errors.
    • -
    • gravity gun repulse and chaos now work in all angles, rather than just basic cardinals and diagonals. fun.
    • -
    • Public autolathes can no longer be hacked.
    • -
    • Energy weapons now once again have their lens in contents.
    • -
    • pais are no longer muted for literally a whole hour on emp.
    • -
    • auto profiler subsystem from tg
    • -
    • Brig cells now are more accurate by using timeofday instead of realtime
    • -
    • Cryo now actually transfers reagents at tier 4 on enter rather than every 80 machine fire()-process()s regardless of if it was "reset" by open/close.
    • -
    • cmo now gets advanced surgery drapes that techweb-sync for advanced surgeries without an operating console.
    • -
    • ctf claymores now actually spawn (and fit).
    • -
    • STOP_PROCESSING now removes from currentrun to prevent another process cycle from happening where it shouldn't.
    • -
    • hand teleporters now require 30 deciseconds of still movement by the user to dispel portals. there's a beam effect too.
    • -
    • Sort of a bugfix but cult blood magic and all guns now respect stamina softcrit.
    • -
    • Organ healing rate doubled. Organ decay rate halved to match its define (15 minutes for full decay, so at around 8-10 minutes it'll be really fucked).
    • -
    • Storage now caches max screen size and only stores when being opened by a non ghost, meaning ghosts will no longer distort living player screens when viewing storage.
    • -
    • Stunbatons changed yet again.
    • -
    • the game's built in autoclicker aka CanMobAutoclick no longer triggers client/Click()'s anti clickspam guard.
    • -
    • pais can no longer bodyblock bullets
    • -
    • pai radio short changed to 3 minutes down from 5
    • -
    • pais are no longer fulltile click opacity.
    • -
    • vampire "immortal haste" has been reworked to be more reliable and consistent.
    • -
    • hand teles use a less atrocious beam
    • -
    -

    necromanceranne updated:

    -
      -
    • Ebows now disarm people hit by them.
    • -
    • Ebows now do 60 stamina damage on hit.
    • -
    • Ebows no longer inflict drowsiness
    • -
    • Miniature ebows do 15 toxin damage, up from 8.
    • -
    • Ebows have considerably shorter knockdowns.
    • -
    • Ebows now make you slur rather than stutter.
    • -
    • Large ebows are now heavy and bulky.
    • -
    • You can no longer order spinfusors or their ammo from cargo.
    • -
    • Removed the formal security officer jacket from the secdrobe
    • -
    • formal security jackets are now armor vests
    • -
    • Bullets causing bleed rates equal to unmitigated damage through all forms of defense.
    • -
    • Reverted #9092, crew mecha no longer spawn with tracking beacons.
    • -
    • [Port] Mecha ballistics weapons now require ammo created from an Exosuit Fabricator or the Security Protolathe, though they will start with a full magazine and in most cases enough for one full reload. Reloading these weapons no longer chunks your power cell. Clown (and mime) mecha equipment have not changed.
    • -
    • [Port] The SRM-8 Missile Launcher has been replaced with the BRM-6 Breaching Missile Launcher in techwebs (Nukie Mauler remains equipped with the SRM-8).
    • -
    • [Port] Both Missile Launchers and the Clusterbang Launcher do not have an ammo cache, and cannot be reloaded by the pilot. Once the initial loaded ammo has been spent, you can use the appropriate ammo box to load the weapon directly.
    • -
    • [Port] Utility mechs that have a clamp equipped can load ammo from their own cargo hold into other mechs.
    • -
    • [Port] Nuke Ops can purchase spare ammo duffel bags for their mecha weapons, should they run low.
    • -
    • Literally unclickability with a cham projector
    • -
    -

    nemvar updated:

    -
      -
    • Slight changes the self-repair borg module. It no longer references the borg that owns it.
    • -
    • Trash from food now gets generated at the location of the food item, instead of in the hands of the eater.
    • -
    • Changed mob biotypes from lists to flags.
    • -
    -

    r4d6 updated:

    -
      -
    • Added a dwarf language
    • -
    • Added more engines
    • -
    • RPD subcategories and preview icons reorganized.
    • -
    • RPD now starts with painting turned off, hitting pipes with build and no paint will target the turf underneath instead. Bye bye turf pixelhunting.
    • -
    • Made dwarves into a roundstart races
    • -
    • Meteor Timer back to 3-5 minutes
    • -
    • Mining no longer lead to spess
    • -
    • Added Plasteel Pickaxe
    • -
    • Added Titanium Pickaxe
    • -
    • fixed a missing tile
    • -
    -

    tralezab, bandit, Skoglol updated:

    -
      -
    • The mime's PDA messages are silent now!
    • -
    • 30 new emoji have been added. Mime buff, mime now OP.
    • -
    GoonStation 13 Development Team diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi index 74aabf6021..3860fa4b7e 100644 Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ diff --git a/icons/mob/clothing/uniform_digi.dmi b/icons/mob/clothing/uniform_digi.dmi index 7fe37547e9..6a538bc85e 100644 Binary files a/icons/mob/clothing/uniform_digi.dmi and b/icons/mob/clothing/uniform_digi.dmi differ diff --git a/icons/mob/inhands/weapons/guns_lefthand.dmi b/icons/mob/inhands/weapons/guns_lefthand.dmi index 528fd42d23..aa6d38ad07 100644 Binary files a/icons/mob/inhands/weapons/guns_lefthand.dmi and b/icons/mob/inhands/weapons/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/guns_righthand.dmi b/icons/mob/inhands/weapons/guns_righthand.dmi index 5bf347fabf..01f77ca8c9 100644 Binary files a/icons/mob/inhands/weapons/guns_righthand.dmi and b/icons/mob/inhands/weapons/guns_righthand.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index d53f53c029..2a6ce77f38 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 13f678f53a..0590104c30 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index a485deb9ad..cea11f8a49 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index c58fb5d940..58c1cd921c 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index c178cdba04..27caef76b2 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/food/burgerbread.dmi b/icons/obj/food/burgerbread.dmi index b1d78fa078..5ee3db49e9 100644 Binary files a/icons/obj/food/burgerbread.dmi and b/icons/obj/food/burgerbread.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index e54f55ed46..691d5c8362 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/icons/obj/janitor.dmi b/icons/obj/janitor.dmi index e7d134c85f..a157d333b0 100644 Binary files a/icons/obj/janitor.dmi and b/icons/obj/janitor.dmi differ diff --git a/modular_citadel/code/_onclick/hud/sprint.dm b/modular_citadel/code/_onclick/hud/sprint.dm index 89547c0feb..326bb81745 100644 --- a/modular_citadel/code/_onclick/hud/sprint.dm +++ b/modular_citadel/code/_onclick/hud/sprint.dm @@ -54,5 +54,5 @@ /obj/screen/sprint_buffer/proc/update_to_mob(mob/living/L) var/amount = 0 if(L.sprint_buffer_max > 0) - amount = round(CLAMP((L.sprint_buffer / L.sprint_buffer_max) * 100, 0, 100), 5) + amount = round(clamp((L.sprint_buffer / L.sprint_buffer_max) * 100, 0, 100), 5) icon_state = "prog_bar_[amount]" diff --git a/modular_citadel/code/_onclick/hud/stamina.dm b/modular_citadel/code/_onclick/hud/stamina.dm index a7b9a79ecd..5484014f8f 100644 --- a/modular_citadel/code/_onclick/hud/stamina.dm +++ b/modular_citadel/code/_onclick/hud/stamina.dm @@ -22,7 +22,7 @@ else if(user.hal_screwyhud == 5) icon_state = "stamina0" else - icon_state = "stamina[CLAMP(FLOOR(user.getStaminaLoss() /20, 1), 0, 6)]" + icon_state = "stamina[clamp(FLOOR(user.getStaminaLoss() /20, 1), 0, 6)]" //stam buffer /obj/screen/staminabuffer diff --git a/modular_citadel/code/datums/status_effects/chems.dm b/modular_citadel/code/datums/status_effects/chems.dm index 369fb377a5..62fe30f2d7 100644 --- a/modular_citadel/code/datums/status_effects/chems.dm +++ b/modular_citadel/code/datums/status_effects/chems.dm @@ -76,7 +76,7 @@ to_chat(H, "Your enormous breasts are way too large to fit anything over them!
    ") if(last_checked_size != B.cached_size) - H.add_movespeed_modifier(BREAST_MOVEMENT_SPEED, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = moveCalc) + H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/breast_hypertrophy, multiplicative_slowdown = moveCalc) sizeMoveMod(moveCalc) if (B.size == "huge") @@ -93,7 +93,7 @@ /datum/status_effect/chem/breast_enlarger/on_remove() log_game("FERMICHEM: [owner]'s breasts has reduced to an acceptable size. ID: [owner.key]") to_chat(owner, "Your expansive chest has become a more managable size, liberating your movements.
    ") - owner.remove_movespeed_modifier(BREAST_MOVEMENT_SPEED) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/breast_hypertrophy) sizeMoveMod(1) return ..() @@ -152,18 +152,18 @@ playsound(H.loc, 'sound/items/poster_ripped.ogg', 50, 1) to_chat(H, "Your enormous package is way to large to fit anything over!") - if(P.length < 22 && H.has_movespeed_modifier(DICK_MOVEMENT_SPEED)) + if(P.length < 22 && H.has_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy)) to_chat(owner, "Your rascally willy has become a more managable size, liberating your movements.") - H.remove_movespeed_modifier(DICK_MOVEMENT_SPEED) - else if(P.length >= 22 && !H.has_movespeed_modifier(DICK_MOVEMENT_SPEED)) + H.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy) + else if(P.length >= 22 && !H.has_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy)) to_chat(H, "Your indulgent johnson is so substantial, it's taking all your blood and affecting your movements!") - H.add_movespeed_modifier(DICK_MOVEMENT_SPEED, TRUE, 100, NONE, override = TRUE, multiplicative_slowdown = moveCalc) + H.add_or_update_variable_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy, multiplicative_slowdown = moveCalc) H.AdjustBloodVol(bloodCalc) ..() /datum/status_effect/chem/penis_enlarger/on_remove() log_game("FERMICHEM: [owner]'s dick has reduced to an acceptable size. ID: [owner.key]") - owner.remove_movespeed_modifier(DICK_MOVEMENT_SPEED) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/penis_hypertrophy) owner.ResetBloodVol() return ..() @@ -280,7 +280,7 @@ var/mob/living/carbon/M = owner //chem calculations - if(!owner.reagents.has_reagent(/datum/chemical_reaction/fermi/enthrall) && !owner.reagents.has_reagent(/datum/reagent/fermi/enthrall/test)) + if(!owner.reagents.has_reagent(/datum/chemical_reaction/fermi/enthrall)) if (phase < 3 && phase != 0) deltaResist += 3//If you've no chem, then you break out quickly if(prob(5)) @@ -532,7 +532,7 @@ cooldown += 1 //Cooldown doesn't process till status is done else if(status == "charge") - owner.add_movespeed_modifier(MOVESPEED_ID_MKULTRA, update=TRUE, priority=100, multiplicative_slowdown=-2, blacklisted_movetypes=(FLYING|FLOATING)) + owner.add_movespeed_modifier(/datum/movespeed_modifier/status_effect/mkultra) status = "charged" if(lewd) to_chat(owner, "Your [enthrallGender]'s order fills you with a burst of speed!") @@ -542,7 +542,7 @@ else if (status == "charged") if (statusStrength < 0) status = null - owner.remove_movespeed_modifier(MOVESPEED_ID_MKULTRA) + owner.remove_movespeed_modifier(/datum/movespeed_modifier/status_effect/mkultra) owner.DefaultCombatKnockdown(50) to_chat(owner, "Your body gives out as the adrenaline in your system runs out.") else diff --git a/modular_citadel/code/game/machinery/wishgranter.dm b/modular_citadel/code/game/machinery/wishgranter.dm index 7758c0d613..6cfe07b7a0 100644 --- a/modular_citadel/code/game/machinery/wishgranter.dm +++ b/modular_citadel/code/game/machinery/wishgranter.dm @@ -94,9 +94,8 @@ var/mob/living/simple_animal/hostile/venus_human_trap/killwish = new /mob/living/simple_animal/hostile/venus_human_trap(loc) killwish.maxHealth = 1500 killwish.health = killwish.maxHealth - killwish.grasp_range = 6 + killwish.vine_grab_distance = 6 killwish.melee_damage_upper = 30 - killwish.grasp_chance = 50 killwish.loot = list(/obj/item/twohanded/dualsaber/hypereutactic) charges-- insisting = FALSE diff --git a/modular_citadel/code/modules/arousal/genitals.dm b/modular_citadel/code/modules/arousal/genitals.dm index 68e9259183..69d2c791e7 100644 --- a/modular_citadel/code/modules/arousal/genitals.dm +++ b/modular_citadel/code/modules/arousal/genitals.dm @@ -1,6 +1,6 @@ /obj/item/organ/genital color = "#fcccb3" - w_class = WEIGHT_CLASS_NORMAL + w_class = WEIGHT_CLASS_SMALL var/shape var/sensitivity = 1 // wow if this were ever used that'd be cool but it's not but i'm keeping it for my unshit code var/genital_flags //see citadel_defines.dm @@ -150,7 +150,8 @@ aroused_state = FALSE /obj/item/organ/genital/on_life() - if(!reagents || !owner) + . = ..() + if(!reagents || !.) return reagents.maximum_volume = fluid_max_volume if(fluid_id && CHECK_BITFIELD(genital_flags, GENITAL_FUID_PRODUCTION)) diff --git a/modular_citadel/code/modules/arousal/organs/breasts.dm b/modular_citadel/code/modules/arousal/organs/breasts.dm index c936eb9dc4..213ebb049a 100644 --- a/modular_citadel/code/modules/arousal/organs/breasts.dm +++ b/modular_citadel/code/modules/arousal/organs/breasts.dm @@ -54,7 +54,7 @@ desc += " They're leaking [lowertext(R.name)]." var/datum/sprite_accessory/S = GLOB.breasts_shapes_list[shape] var/icon_shape = S ? S.icon_state : "pair" - var/icon_size = CLAMP(breast_values[size], BREASTS_ICON_MIN_SIZE, BREASTS_ICON_MAX_SIZE) + var/icon_size = clamp(breast_values[size], BREASTS_ICON_MIN_SIZE, BREASTS_ICON_MAX_SIZE) icon_state = "breasts_[icon_shape]_[icon_size]" if(owner) if(owner.dna.species.use_skintones && owner.dna.features["genitals_use_skintone"]) @@ -73,7 +73,7 @@ //this is far too lewd wah /obj/item/organ/genital/breasts/modify_size(modifier, min = -INFINITY, max = INFINITY) - var/new_value = CLAMP(cached_size + modifier, min, max) + var/new_value = clamp(cached_size + modifier, min, max) if(new_value == cached_size) return prev_size = cached_size diff --git a/modular_citadel/code/modules/arousal/organs/penis.dm b/modular_citadel/code/modules/arousal/organs/penis.dm index c05549aaa0..e1b8dc0dba 100644 --- a/modular_citadel/code/modules/arousal/organs/penis.dm +++ b/modular_citadel/code/modules/arousal/organs/penis.dm @@ -21,11 +21,11 @@ var/diameter_ratio = COCK_DIAMETER_RATIO_DEF //0.25; check citadel_defines.dm /obj/item/organ/genital/penis/modify_size(modifier, min = -INFINITY, max = INFINITY) - var/new_value = CLAMP(length + modifier, min, max) + var/new_value = clamp(length + modifier, min, max) if(new_value == length) return prev_length = length - length = CLAMP(length + modifier, min, max) + length = clamp(length + modifier, min, max) update() ..() @@ -60,7 +60,7 @@ else if(!enlargement && status_effect) owner.remove_status_effect(STATUS_EFFECT_PENIS_ENLARGEMENT) if(linked_organ) - linked_organ.size = CLAMP(size + new_size, BALLS_SIZE_MIN, BALLS_SIZE_MAX) + linked_organ.size = clamp(size + new_size, BALLS_SIZE_MIN, BALLS_SIZE_MAX) linked_organ.update() size = new_size diff --git a/modular_citadel/code/modules/language/sylvan.dm b/modular_citadel/code/modules/language/sylvan.dm new file mode 100644 index 0000000000..c9458bb4cf --- /dev/null +++ b/modular_citadel/code/modules/language/sylvan.dm @@ -0,0 +1,23 @@ +// The language of the vinebings. Yes, it's a shameless ripoff of elvish. +/datum/language/sylvan + name = "Sylvan" + desc = "A complicated, ancient language spoken by vine like beings." + speech_verb = "expresses" + ask_verb = "inquires" + exclaim_verb = "declares" + key = "h" + space_chance = 20 + syllables = list( + "fii", "sii", "rii", "rel", "maa", "ala", "san", "tol", "tok", "dia", "eres", + "fal", "tis", "bis", "qel", "aras", "losk", "rasa", "eob", "hil", "tanl", "aere", + "fer", "bal", "pii", "dala", "ban", "foe", "doa", "cii", "uis", "mel", "wex", + "incas", "int", "elc", "ent", "aws", "qip", "nas", "vil", "jens", "dila", "fa", + "la", "re", "do", "ji", "ae", "so", "qe", "ce", "na", "mo", "ha", "yu" + ) + icon = 'icons/obj/hydroponics/harvest.dmi' + icon_state = "lily" + default_priority = 90 + +/datum/language_holder/venus + languages = list(/datum/language/common, /datum/language/sylvan, /datum/language/machine) + only_speaks_language = /datum/language/sylvan diff --git a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm index 2e8feb793a..17c3f17ad8 100644 --- a/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm +++ b/modular_citadel/code/modules/mob/living/carbon/damage_procs.dm @@ -6,7 +6,7 @@ var/directstamloss = (bufferedstam + amount) - stambuffer if(directstamloss > 0) adjustStaminaLoss(directstamloss) - bufferedstam = CLAMP(bufferedstam + amount, 0, stambuffer) + bufferedstam = clamp(bufferedstam + amount, 0, stambuffer) stambufferregentime = world.time + 10 if(updating_health) update_health_hud() @@ -15,7 +15,7 @@ if(!forced && (status_flags & GODMODE)) return FALSE var/obj/item/bodypart/BP = isbodypart(affected_zone)? affected_zone : (get_bodypart(check_zone(affected_zone)) || bodyparts[1]) - if(amount > 0? BP.receive_damage(0, 0, amount * incomingstammult) : BP.heal_damage(0, 0, abs(amount))) + if(amount > 0? BP.receive_damage(0, 0, amount * incomingstammult) : BP.heal_damage(0, 0, abs(amount), FALSE, FALSE)) update_damage_overlays() if(updating_health) updatehealth() diff --git a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm index 742ef6c9aa..f59d18686a 100644 --- a/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm +++ b/modular_citadel/code/modules/mob/living/silicon/robot/dogborg_equipment.dm @@ -438,7 +438,7 @@ SLEEPER CODE IS IN game/objects/items/devices/dogborg_sleeper.dm ! DefaultCombatKnockdown(15, 1, 1) else L.visible_message("[src] pounces on [L]!", "[src] pounces on you!") - L.DefaultCombatKnockdown(iscarbon(L) ? 60 : 45, override_stamdmg = CLAMP(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice. + L.DefaultCombatKnockdown(iscarbon(L) ? 60 : 45, override_stamdmg = clamp(pounce_stamloss, 0, pounce_stamloss_cap-L.getStaminaLoss())) // Temporary. If someone could rework how dogborg pounces work to accomodate for combat changes, that'd be nice. playsound(src, 'sound/weapons/Egloves.ogg', 50, 1) sleep(2)//Runtime prevention (infinite bump() calls on hulks) step_towards(src,L) diff --git a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm index a4b6429bea..bcc156a22e 100644 --- a/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm +++ b/modular_citadel/code/modules/projectiles/guns/pumpenergy.dm @@ -131,7 +131,7 @@ item_state = "particleblaster" lefthand_file = 'modular_citadel/icons/mob/inhands/guns_lefthand.dmi' righthand_file = 'modular_citadel/icons/mob/inhands/guns_righthand.dmi' - ammo_type = list(/obj/item/ammo_casing/energy/electrode/pump, /obj/item/ammo_casing/energy/laser/pump) + ammo_type = list(/obj/item/ammo_casing/energy/disabler/pump, /obj/item/ammo_casing/energy/laser/pump) ammo_x_offset = 2 modifystate = 1 @@ -152,19 +152,19 @@ fire_sound = 'sound/weapons/LaserSlugv3.ogg' /obj/item/ammo_casing/energy/laser/pump - projectile_type = /obj/item/projectile/beam/weak - e_cost = 200 + projectile_type = /obj/item/projectile/beam/pump + e_cost = 350 select_name = "kill" - pellets = 3 + pellets = 6 variance = 15 fire_sound = 'sound/weapons/ParticleBlaster.ogg' -/obj/item/ammo_casing/energy/electrode/pump - projectile_type = /obj/item/projectile/energy/electrode/pump - select_name = "stun" +/obj/item/ammo_casing/energy/disabler/pump + projectile_type = /obj/item/projectile/energy/disabler/pump + select_name = "disable" fire_sound = 'sound/weapons/LaserSlugv3.ogg' - e_cost = 300 - pellets = 3 + e_cost = 150 + pellets = 6 variance = 20 //PROJECTILES @@ -181,19 +181,13 @@ speed = 0.6 icon_state = "disablerslug" -/obj/item/projectile/energy/electrode/pump - name = "electron blast" - icon_state = "stunjectile" +/obj/item/projectile/beam/pump + damage = 9 + range = 6 + +/obj/item/projectile/energy/disabler/pump + name = "disabling blast" + icon_state = "disablerslug" color = null - nodamage = TRUE - knockdown = 100 - knockdown_stamoverride = 0 - knockdown_stam_max = 0 - stamina = 18 - stutter = 5 - jitter = 20 - strong_tase = FALSE - tase_duration = 0 - hitsound = 'sound/weapons/taserhit.ogg' - range = 3 - strong_tase = FALSE + stamina = 13 + range = 6 diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm index 2364c617f0..89a7f58cee 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/MKUltra.dm @@ -144,20 +144,7 @@ Creating a chem with a low purity will make you permanently fall in love with so pH = 10 chemical_flags = REAGENT_ONMOBMERGE | REAGENT_DONOTSPLIT //Procs on_mob_add when merging into a human can_synth = FALSE - - -/datum/reagent/fermi/enthrall/test - name = "MKUltraTest" - description = "A forbidden deep red mixture that makes you like Fermis a little too much. Unobtainable and due to be removed from the wiki." - data = list("creatorID" = "honkatonkbramblesnatch", "creatorGender" = "Mistress", "creatorName" = "Fermis Yakumo") - creatorID = "honkatonkbramblesnatch"//ckey - creatorGender = "Mistress" - creatorName = "Fermis Yakumo" - purity = 1 - -/datum/reagent/fermi/enthrall/test/on_new() - ..() - creator = get_mob_by_key(creatorID) + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/fermi/enthrall/on_new(list/data) creatorID = data["creatorID"] diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm index 5f9ea5924d..319cad1714 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/SDGF.dm @@ -52,6 +52,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING inverse_chem_val = 0.5 inverse_chem = /datum/reagent/impure/SDZF can_synth = TRUE + value = REAGENT_VALUE_RARE //Main SDGF chemical @@ -309,6 +310,7 @@ IMPORTANT FACTORS TO CONSIDER WHILE BALANCING can_synth = TRUE taste_description = "a weird chemical fleshy flavour" chemical_flags = REAGENT_SNEAKYNAME + value = REAGENT_VALUE_RARE /datum/reagent/impure/SDZF/on_mob_life(mob/living/carbon/M) //If you're bad at fermichem, turns your clone into a zombie instead. switch(current_cycle)//Pretends to be normal diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm index a8ac66ef20..8348569fbb 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/astrogen.dm @@ -30,6 +30,7 @@ I'd like to point out from my calculations it'll take about 60-80 minutes to die inverse_chem_val = 0.25 can_synth = FALSE var/datum/action/chem/astral/AS = new/datum/action/chem/astral() + value = REAGENT_VALUE_AMAZING /datum/action/chem/astral name = "Return to body" diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm index e0b7a6fa14..28645cdc7b 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/eigentstasium.dm @@ -29,6 +29,7 @@ var/teleBool = FALSE pH = 3.7 can_synth = TRUE + value = REAGENT_VALUE_EXCEPTIONAL /datum/reagent/fermi/eigenstate/on_new(list/data) location_created = data["location_created"] diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm index 97261e07f2..7403de6215 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/enlargement.dm @@ -29,6 +29,7 @@ inverse_chem_val = 0.35 inverse_chem = /datum/reagent/fermi/BEsmaller //At really impure vols, it just becomes 100% inverse can_synth = FALSE + value = REAGENT_VALUE_VERY_RARE var/message_spam = FALSE /datum/reagent/fermi/breast_enlarger/on_mob_metabolize(mob/living/M) @@ -126,6 +127,7 @@ taste_description = "a milky ice cream like flavour." metabolization_rate = 0.25 can_synth = FALSE + value = REAGENT_VALUE_RARE /datum/reagent/fermi/BEsmaller/on_mob_life(mob/living/carbon/M) var/obj/item/organ/genital/breasts/B = M.getorganslot(ORGAN_SLOT_BREASTS) @@ -186,6 +188,7 @@ inverse_chem_val = 0.35 inverse_chem = /datum/reagent/fermi/PEsmaller //At really impure vols, it just becomes 100% inverse and shrinks instead. can_synth = FALSE + value = REAGENT_VALUE_VERY_RARE var/message_spam = FALSE /datum/reagent/fermi/penis_enlarger/on_mob_metabolize(mob/living/M) @@ -273,6 +276,7 @@ taste_description = "chinese dragon powder" metabolization_rate = 0.5 can_synth = FALSE + value = REAGENT_VALUE_RARE /datum/reagent/fermi/PEsmaller/on_mob_life(mob/living/carbon/M) if(!ishuman(M)) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm index d98ec7059d..48c9ffb7e6 100644 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm +++ b/modular_citadel/code/modules/reagents/chemistry/reagents/healing.dm @@ -9,6 +9,7 @@ inverse_chem_val = 0.4 inverse_chem = /datum/reagent/impure/yamerol_tox can_synth = TRUE + value = REAGENT_VALUE_VERY_RARE /datum/reagent/fermi/yamerol/on_mob_life(mob/living/carbon/C) var/obj/item/organ/tongue/T = C.getorganslot(ORGAN_SLOT_TONGUE) @@ -100,6 +101,7 @@ data = list("grown_volume" = 0, "injected_vol" = 0) var/borrowed_health color = "#FFDADA" + value = REAGENT_VALUE_COMMON /datum/reagent/synthtissue/reaction_mob(mob/living/M, method=TOUCH, reac_volume,show_message = 1) if(iscarbon(M)) diff --git a/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm b/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm deleted file mode 100644 index 87f9d71ce2..0000000000 --- a/modular_citadel/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ /dev/null @@ -1,32 +0,0 @@ -/datum/reagent/syndicateadrenals - name = "Syndicate Adrenaline" - description = "Regenerates your stamina and increases your reaction time." - color = "#E62111" - overdose_threshold = 6 - -/datum/reagent/syndicateadrenals/on_mob_life(mob/living/M) - M.adjustStaminaLoss(-5*REM) - . = ..() - -/datum/reagent/syndicateadrenals/on_mob_metabolize(mob/living/M) - . = ..() - if(istype(M)) - M.next_move_modifier *= 0.5 - to_chat(M, "You feel an intense surge of energy rushing through your veins.") - -/datum/reagent/syndicateadrenals/on_mob_end_metabolize(mob/living/M) - . = ..() - if(istype(M)) - M.next_move_modifier *= 2 - to_chat(M, "You feel as though the world around you is going faster.") - -/datum/reagent/syndicateadrenals/overdose_start(mob/living/M) - to_chat(M, "You feel an intense pain in your chest...") - return - -/datum/reagent/syndicateadrenals/overdose_process(mob/living/M) - if(iscarbon(M)) - var/mob/living/carbon/C = M - if(!C.undergoing_cardiac_arrest()) - C.set_heartattack(TRUE) - return diff --git a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm index eb93d273a7..837524d49f 100644 --- a/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm +++ b/modular_citadel/code/modules/reagents/chemistry/recipes/fermi.dm @@ -95,7 +95,7 @@ if(!ImpureTot == 0) //If impure, v.small emp (0.6 or less) ImpureTot *= volume - var/empVol = CLAMP (volume/10, 0, 15) + var/empVol = clamp(volume/10, 0, 15) empulse(T, empVol, ImpureTot/10, 1) my_atom.reagents.clear_reagents() //just in case diff --git a/modular_citadel/icons/obj/guns/pumpactionblaster.dmi b/modular_citadel/icons/obj/guns/pumpactionblaster.dmi index 363faf3c57..aed4d49956 100644 Binary files a/modular_citadel/icons/obj/guns/pumpactionblaster.dmi and b/modular_citadel/icons/obj/guns/pumpactionblaster.dmi differ diff --git a/sound/voice/medbot/owo.ogg b/sound/voice/medbot/owo.ogg new file mode 100644 index 0000000000..0fdaa9d483 Binary files /dev/null and b/sound/voice/medbot/owo.ogg differ diff --git a/strings/tips.txt b/strings/tips.txt index f396b3f542..c8f233bb1a 100644 --- a/strings/tips.txt +++ b/strings/tips.txt @@ -63,6 +63,7 @@ As a Roboticist, you can reset a cyborg's module by cutting and mending the rese 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 can easily be repaired with cables and welders. 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 upgrade cleanbots with adv mops and brooms to make them faster and better! As the AI, you can click on people's names to look at them. This only works if there are cameras that can see them. 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. diff --git a/tgstation.dme b/tgstation.dme index 147c91c92e..32c99ed9f6 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -17,7 +17,6 @@ #include "_maps\_basemap.dm" #include "code\_compile_options.dm" #include "code\world.dm" -#include "code\__DEFINES\__513_compatibility.dm" #include "code\__DEFINES\_globals.dm" #include "code\__DEFINES\_protect.dm" #include "code\__DEFINES\_tick.dm" @@ -97,6 +96,7 @@ #include "code\__DEFINES\rust_g.config.dm" #include "code\__DEFINES\rust_g.dm" #include "code\__DEFINES\say.dm" +#include "code\__DEFINES\security_levels.dm" #include "code\__DEFINES\shuttles.dm" #include "code\__DEFINES\sight.dm" #include "code\__DEFINES\sound.dm" @@ -124,6 +124,8 @@ #include "code\__DEFINES\dcs\helpers.dm" #include "code\__DEFINES\dcs\signals.dm" #include "code\__DEFINES\flags\shields.dm" +#include "code\__DEFINES\misc\return_values.dm" +#include "code\__DEFINES\skills\skills.dm" #include "code\__HELPERS\_cit_helpers.dm" #include "code\__HELPERS\_lists.dm" #include "code\__HELPERS\_logging.dm" @@ -176,6 +178,7 @@ #include "code\_globalvars\logging.dm" #include "code\_globalvars\misc.dm" #include "code\_globalvars\regexes.dm" +#include "code\_globalvars\traits.dm" #include "code\_globalvars\lists\flavor_misc.dm" #include "code\_globalvars\lists\maintenance_loot.dm" #include "code\_globalvars\lists\mapping.dm" @@ -389,6 +392,7 @@ #include "code\datums\components\explodable.dm" #include "code\datums\components\footstep.dm" #include "code\datums\components\forced_gravity.dm" +#include "code\datums\components\identification.dm" #include "code\datums\components\igniter.dm" #include "code\datums\components\infective.dm" #include "code\datums\components\jousting.dm" @@ -410,6 +414,7 @@ #include "code\datums\components\remote_materials.dm" #include "code\datums\components\riding.dm" #include "code\datums\components\rotation.dm" +#include "code\datums\components\shielded.dm" #include "code\datums\components\shrapnel.dm" #include "code\datums\components\shrink.dm" #include "code\datums\components\sizzle.dm" @@ -420,6 +425,7 @@ #include "code\datums\components\stationloving.dm" #include "code\datums\components\summoning.dm" #include "code\datums\components\swarming.dm" +#include "code\datums\components\tackle.dm" #include "code\datums\components\tactical.dm" #include "code\datums\components\thermite.dm" #include "code\datums\components\uplink.dm" @@ -518,6 +524,7 @@ #include "code\datums\elements\polychromic.dm" #include "code\datums\elements\scavenging.dm" #include "code\datums\elements\spellcasting.dm" +#include "code\datums\elements\squish.dm" #include "code\datums\elements\swimming.dm" #include "code\datums\elements\sword_point.dm" #include "code\datums\elements\update_icon_blocker.dm" @@ -566,6 +573,10 @@ #include "code\datums\ruins\lavaland.dm" #include "code\datums\ruins\space.dm" #include "code\datums\ruins\station.dm" +#include "code\datums\skills\_check_skills.dm" +#include "code\datums\skills\_skill.dm" +#include "code\datums\skills\_skill_holder.dm" +#include "code\datums\skills\medical.dm" #include "code\datums\status_effects\buffs.dm" #include "code\datums\status_effects\debuffs.dm" #include "code\datums\status_effects\gas.dm" @@ -586,7 +597,6 @@ #include "code\datums\wires\airlock.dm" #include "code\datums\wires\apc.dm" #include "code\datums\wires\autolathe.dm" -#include "code\datums\wires\autoylathe.dm" #include "code\datums\wires\emitter.dm" #include "code\datums\wires\explosive.dm" #include "code\datums\wires\microwave.dm" @@ -723,7 +733,6 @@ #include "code\game\machinery\syndicatebeacon.dm" #include "code\game\machinery\syndicatebomb.dm" #include "code\game\machinery\teleporter.dm" -#include "code\game\machinery\toylathe.dm" #include "code\game\machinery\transformer.dm" #include "code\game\machinery\turnstile.dm" #include "code\game\machinery\washing_machine.dm" @@ -1732,6 +1741,7 @@ #include "code\modules\clothing\gloves\color.dm" #include "code\modules\clothing\gloves\miscellaneous.dm" #include "code\modules\clothing\gloves\ring.dm" +#include "code\modules\clothing\gloves\tacklers.dm" #include "code\modules\clothing\head\_head.dm" #include "code\modules\clothing\head\beanie.dm" #include "code\modules\clothing\head\cit_hats.dm" @@ -2198,7 +2208,6 @@ #include "code\modules\mob\mob_defines.dm" #include "code\modules\mob\mob_helpers.dm" #include "code\modules\mob\mob_movement.dm" -#include "code\modules\mob\mob_movespeed.dm" #include "code\modules\mob\mob_transformation_simple.dm" #include "code\modules\mob\say.dm" #include "code\modules\mob\say_vr.dm" @@ -2224,9 +2233,9 @@ #include "code\modules\mob\dead\new_player\sprite_accessories\horns.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\ipc_synths.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\legs_and_taurs.dm" -#include "code\modules\mob\dead\new_player\sprite_accessories\pines.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\snouts.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\socks.dm" +#include "code\modules\mob\dead\new_player\sprite_accessories\spines.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\synthliz.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\tails.dm" #include "code\modules\mob\dead\new_player\sprite_accessories\undershirt.dm" @@ -2594,6 +2603,14 @@ #include "code\modules\modular_computers\hardware\printer.dm" #include "code\modules\modular_computers\hardware\recharger.dm" #include "code\modules\modular_computers\NTNet\NTNRC\conversation.dm" +#include "code\modules\movespeed\_movespeed_modifier.dm" +#include "code\modules\movespeed\modifiers\components.dm" +#include "code\modules\movespeed\modifiers\innate.dm" +#include "code\modules\movespeed\modifiers\items.dm" +#include "code\modules\movespeed\modifiers\misc.dm" +#include "code\modules\movespeed\modifiers\mobs.dm" +#include "code\modules\movespeed\modifiers\reagents.dm" +#include "code\modules\movespeed\modifiers\status_effects.dm" #include "code\modules\newscaster\_news.dm" #include "code\modules\newscaster\feed_channel.dm" #include "code\modules\newscaster\feed_comment.dm" @@ -2965,6 +2982,7 @@ #include "code\modules\research\nanites\extra_settings\type.dm" #include "code\modules\research\nanites\nanite_programs\buffing.dm" #include "code\modules\research\nanites\nanite_programs\healing.dm" +#include "code\modules\research\nanites\nanite_programs\protocols.dm" #include "code\modules\research\nanites\nanite_programs\rogue.dm" #include "code\modules\research\nanites\nanite_programs\sensor.dm" #include "code\modules\research\nanites\nanite_programs\suppression.dm" @@ -3211,7 +3229,7 @@ #include "code\modules\vending\clothesmate.dm" #include "code\modules\vending\coffee.dm" #include "code\modules\vending\cola.dm" -#include "code\modules\vending\drinnerware.dm" +#include "code\modules\vending\dinnerware.dm" #include "code\modules\vending\engineering.dm" #include "code\modules\vending\engivend.dm" #include "code\modules\vending\games.dm" @@ -3303,6 +3321,7 @@ #include "modular_citadel\code\modules\custom_loadout\custom_items.dm" #include "modular_citadel\code\modules\custom_loadout\load_to_mob.dm" #include "modular_citadel\code\modules\custom_loadout\read_from_file.dm" +#include "modular_citadel\code\modules\language\sylvan.dm" #include "modular_citadel\code\modules\mentor\dementor.dm" #include "modular_citadel\code\modules\mentor\follow.dm" #include "modular_citadel\code\modules\mentor\mentor.dm" @@ -3341,7 +3360,6 @@ #include "modular_citadel\code\modules\reagents\chemistry\reagents\fermi_reagents.dm" #include "modular_citadel\code\modules\reagents\chemistry\reagents\healing.dm" #include "modular_citadel\code\modules\reagents\chemistry\reagents\MKUltra.dm" -#include "modular_citadel\code\modules\reagents\chemistry\reagents\other_reagents.dm" #include "modular_citadel\code\modules\reagents\chemistry\reagents\SDGF.dm" #include "modular_citadel\code\modules\reagents\chemistry\recipes\fermi.dm" #include "modular_citadel\code\modules\reagents\objects\clothes.dm"