diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 3c666df08fd3..5f2580a3a92c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -37,6 +37,18 @@ jobs: with: outputFile: output-annotations.txt + odlint: + name: Lint with OpenDream + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v3 + - name: Setup OD + run: | + bash tools/ci/setup_od.sh + - name: Run OD + run: | + bash tools/ci/run_od.sh + compile_all_maps: name: Compile All Maps runs-on: ubuntu-20.04 diff --git a/.gitignore b/.gitignore index 05e36684f476..8940b2c85721 100644 --- a/.gitignore +++ b/.gitignore @@ -55,3 +55,5 @@ __pycache__/ # Tools some of us like to keep in the repo dmm-tools.exe +OpenDream +paradise.json diff --git a/__odlint.dm b/__odlint.dm new file mode 100644 index 000000000000..b61ea68b291d --- /dev/null +++ b/__odlint.dm @@ -0,0 +1,16 @@ +// This file is included right at the start of the DME. +// Its purpose is to enable multiple lints (pragmas) that are supported by OpenDream to better validate the codebase +// These are essentially nitpicks the DM compiler should pick up on but doesnt + +#ifndef SPACEMAN_DMM +#ifdef OPENDREAM +/* + For the person who asks + "AA, why are these in their own file?" + Quite simple + 1. I can codeown that file + 2. You need to do it with an include as a hack to avoid SpacemanDMM evaluating the #pragma lines, even if its outside a block it cares about +*/ +#include "tools/ci/lints.dm" +#endif +#endif diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index c4a49e1b490c..e0ecb66f9103 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -85645,7 +85645,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/spawner/random_spawners/dirt_rare, +/obj/effect/spawner/random_spawners/dirt_maybe, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "jIs" = ( @@ -96726,7 +96726,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/effect/spawner/random_spawners/dirt_rare, +/obj/effect/spawner/random_spawners/dirt_maybe, /obj/structure/flora/junglebush, /turf/simulated/floor/plating, /area/maintenance/fsmaint) diff --git a/_maps/map_files/cerestation/cerestation.dmm b/_maps/map_files/cerestation/cerestation.dmm index 7c88a37142eb..a1fa10df78b5 100644 --- a/_maps/map_files/cerestation/cerestation.dmm +++ b/_maps/map_files/cerestation/cerestation.dmm @@ -177,6 +177,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 5 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/external/north) "abk" = ( @@ -252,6 +253,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 6 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/external/north) "abJ" = ( @@ -1176,6 +1178,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/security/permabrig) "ahB" = ( @@ -1219,6 +1222,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/port) "ahP" = ( @@ -1306,6 +1310,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/security/permabrig) "aiF" = ( @@ -1531,6 +1536,7 @@ opacity = 0 }, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel, /area/security/permabrig) "ajL" = ( @@ -1556,6 +1562,7 @@ opacity = 0 }, /obj/effect/mapping_helpers/airlock/unres, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel, /area/security/permabrig) "ajM" = ( @@ -1598,6 +1605,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -1624,6 +1632,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel, /area/security/permabrig) "akf" = ( @@ -1781,6 +1790,7 @@ /area/quartermaster/storage) "aky" = ( /obj/structure/chair/stool, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/security/permabrig) "akz" = ( @@ -1833,6 +1843,7 @@ id = "permaflash1"; pixel_x = 28 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -1845,6 +1856,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -1998,6 +2010,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/security/permabrig) "alt" = ( @@ -2058,6 +2071,7 @@ /area/maintenance/disposal/north) "alN" = ( /obj/structure/disposalpipe/segment/corner, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/north) "alP" = ( @@ -2082,6 +2096,15 @@ icon_state = "dark" }, /area/quartermaster/office) +"alU" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/hallway/primary/central) "alW" = ( /obj/structure/closet/emcloset, /obj/structure/cable/orange{ @@ -2126,6 +2149,7 @@ network = list("Prison","SS13") }, /obj/item/bedsheet/patriot, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/security/permabrig) "aml" = ( @@ -2308,6 +2332,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/security/permabrig) "and" = ( @@ -2387,6 +2412,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/northeast) "anB" = ( @@ -2457,6 +2483,7 @@ name = "EXTERNAL AIRLOCK"; pixel_x = 32 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/north) "aoa" = ( @@ -2486,6 +2513,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "darkred" }, @@ -2517,6 +2545,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -2538,6 +2567,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/northeast) "aok" = ( @@ -2613,6 +2643,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/north) "aoE" = ( @@ -2778,6 +2809,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "darkredfull" }, @@ -2796,6 +2828,7 @@ req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/north) "apw" = ( @@ -2829,6 +2862,7 @@ }, /obj/effect/decal/warning_stripes/northeastcorner, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/northeast) "apM" = ( @@ -2865,6 +2899,7 @@ pixel_y = -32; random_basetype = /obj/structure/sign/poster/contraband }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/north) "apQ" = ( @@ -3056,6 +3091,7 @@ "aqQ" = ( /obj/structure/disposalpipe/segment/corner, /obj/item/clothing/head/ushanka, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/northeast) "aqT" = ( @@ -3194,6 +3230,7 @@ /obj/structure/sign/poster/contraband/kss13{ pixel_x = -32 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/northeast) "arO" = ( @@ -3309,6 +3346,7 @@ total_amount = 20 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore) "asD" = ( @@ -3365,6 +3403,7 @@ /obj/structure/disposalpipe/junction/y{ dir = 1 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -3563,6 +3602,7 @@ pixel_x = -24; name = "west bump" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -3571,6 +3611,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -3933,6 +3974,7 @@ name = "Disposals"; req_one_access_txt = "12;31" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "avD" = ( @@ -4342,6 +4384,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore2) "ayb" = ( @@ -4365,6 +4408,13 @@ }, /turf/simulated/floor/plating, /area/maintenance/disposal/north) +"ayn" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/disposal/north) "ayp" = ( /obj/machinery/light/small{ dir = 8 @@ -4751,6 +4801,7 @@ /area/maintenance/port) "aBd" = ( /obj/machinery/gameboard, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/carpet/arcade, /area/crew_quarters/arcade) "aBj" = ( @@ -4864,6 +4915,7 @@ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/crew_quarters/arcade) "aCb" = ( @@ -5034,7 +5086,6 @@ }, /area/security/warden) "aDe" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, /area/security/range) @@ -5290,6 +5341,7 @@ /area/maintenance/fsmaint) "aFa" = ( /obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "aFb" = ( @@ -5433,6 +5485,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/quartermaster/miningdock) "aGt" = ( @@ -5535,6 +5588,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore2) "aHh" = ( @@ -5600,12 +5654,14 @@ /obj/machinery/door/poddoor/shutters{ id_tag = "MiningWarehouse" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/quartermaster/miningdock) "aHv" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/landmark/start/shaft_miner, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "aHL" = ( @@ -5691,6 +5747,7 @@ /area/quartermaster/miningdock) "aID" = ( /obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "aIP" = ( @@ -5831,6 +5888,11 @@ icon_state = "dark" }, /area/security/evidence) +"aJC" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "aJE" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -6181,6 +6243,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -6270,6 +6333,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -6409,6 +6473,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fore) "aNm" = ( @@ -6589,6 +6654,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbrowncorners" @@ -6774,6 +6840,18 @@ }, /turf/simulated/floor/plasteel/freezer, /area/crew_quarters/locker) +"aPj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "bluecorner" + }, +/area/hallway/primary/starboard/south) "aPk" = ( /obj/structure/cable/orange{ d1 = 1; @@ -6835,6 +6913,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore) "aPz" = ( @@ -6980,6 +7059,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "escape" @@ -7248,6 +7328,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/auxsolarport) "aRT" = ( @@ -7492,7 +7573,6 @@ }, /area/bridge) "aSZ" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable/orange{ d2 = 8; icon_state = "0-8" @@ -7514,6 +7594,7 @@ name = "west bump"; pixel_x = -24 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore) "aTb" = ( @@ -7533,11 +7614,11 @@ }, /area/maintenance/fore) "aTc" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/northeast, /obj/machinery/light{ dir = 4 }, +/obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/plasteel, /area/security/range) "aTd" = ( @@ -7727,8 +7808,8 @@ id = "b2"; name = "Privacy Bolts"; normaldoorcontrol = 1; - pixel_x = -24; - specialfunctions = 4 + specialfunctions = 4; + pixel_y = 24 }, /turf/simulated/floor/plasteel/freezer, /area/crew_quarters/locker) @@ -8025,6 +8106,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fpmaint) "aVy" = ( @@ -8121,6 +8203,7 @@ d2 = 2; icon_state = "0-2" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fpmaint) "aVM" = ( @@ -8181,6 +8264,7 @@ icon_state = "4-8" }, /obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "browncorner" }, @@ -8257,6 +8341,7 @@ req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "aWA" = ( @@ -8960,6 +9045,16 @@ icon_state = "purple" }, /area/hallway/primary/aft/east) +"aZS" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + color = "#954535" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/hallway/secondary/entry/south) "aZT" = ( /obj/structure/grille/broken, /turf/simulated/floor/plating/asteroid/ancient, @@ -8985,6 +9080,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/northwest) "bae" = ( @@ -9018,6 +9114,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "bal" = ( @@ -9063,6 +9160,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "bao" = ( @@ -9256,6 +9354,7 @@ path_to_spawn = /mob/living/simple_animal/hostile/scarybat; total_amount = 20 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "baQ" = ( @@ -9264,6 +9363,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "baR" = ( @@ -9329,6 +9429,7 @@ "bbt" = ( /obj/structure/reagent_dispensers/watertank, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "bbu" = ( @@ -9404,6 +9505,7 @@ pixel_x = -32; random_basetype = /obj/structure/sign/poster/contraband }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/hallway/primary/central) "bbR" = ( @@ -9416,6 +9518,7 @@ name = "External Airlock Access"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/hallway/primary/central) "bbU" = ( @@ -9515,6 +9618,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/port) "bcn" = ( @@ -9724,6 +9828,16 @@ /obj/effect/turf_decal/stripes/end, /turf/simulated/floor/plating, /area/medical/morgue) +"bdb" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/hallway/secondary/entry/north) "bdh" = ( /obj/structure/flora/ausbushes/ppflowers, /turf/simulated/floor/grass, @@ -10076,6 +10190,7 @@ dir = 4 }, /obj/item/reagent_containers/glass/bucket, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkgreenfull" @@ -10599,8 +10714,8 @@ /turf/simulated/wall, /area/security/range) "bgv" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/east, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel, /area/security/range) "bgx" = ( @@ -10616,6 +10731,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/starboard) "bgz" = ( @@ -10678,6 +10794,7 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_regular_floor = "yellowsiding"; @@ -11050,6 +11167,10 @@ icon_state = "asteroidplating" }, /area/maintenance/fore2) +"biS" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/clownoffice/secret) "biU" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -11127,6 +11248,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/port) "bjr" = ( @@ -11136,7 +11258,6 @@ /area/crew_quarters/bar) "bjB" = ( /obj/structure/lattice, -/obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 4 }, @@ -11345,6 +11466,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboard) "bkz" = ( @@ -11672,6 +11794,7 @@ dir = 4 }, /obj/structure/disposalpipe/segment/corner, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "blA" = ( @@ -11683,6 +11806,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "blC" = ( @@ -11928,6 +12052,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "bmO" = ( @@ -11935,6 +12060,7 @@ dir = 4 }, /obj/machinery/light/small, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "bmR" = ( @@ -12629,6 +12755,16 @@ icon_state = "neutral" }, /area/storage/primary) +"bqi" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/secondary/entry/north) "bqj" = ( /obj/structure/cable/orange{ d1 = 2; @@ -12795,6 +12931,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore) "bqQ" = ( @@ -13063,6 +13200,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -13255,6 +13393,7 @@ dir = 4 }, /obj/machinery/door/firedoor, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -13277,6 +13416,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -13443,6 +13583,7 @@ /area/security/warden) "bsW" = ( /obj/effect/decal/warning_stripes/southwest, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/security/range) "btd" = ( @@ -13659,7 +13800,6 @@ }, /area/medical/medbay) "btX" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/southeast, /obj/machinery/light{ dir = 4 @@ -13675,6 +13815,7 @@ pixel_x = -24; name = "west bump" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/crew_quarters/locker) "buc" = ( @@ -13822,6 +13963,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/hallway/primary/central) "buP" = ( @@ -14085,6 +14227,7 @@ dir = 10; level = 2 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "bvt" = ( @@ -14195,6 +14338,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/electrical_shop) "bvW" = ( @@ -14742,6 +14886,7 @@ /area/quartermaster/miningdock) "bye" = ( /obj/structure/closet/emcloset, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "byg" = ( @@ -14900,6 +15045,15 @@ icon_state = "dark" }, /area/engine/break_room) +"byK" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fpmaint) "byM" = ( /obj/structure/table/reinforced, /obj/structure/window/reinforced, @@ -15462,6 +15616,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/fore2) "bBs" = ( @@ -16039,6 +16194,7 @@ req_access_txt = "12;24" }, /obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/atmos) "bDW" = ( @@ -16347,6 +16503,7 @@ /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-21" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkyellow" @@ -16360,6 +16517,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "darkyellow"; dir = 1 @@ -16969,6 +17127,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 5 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -17269,6 +17428,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "bHZ" = ( @@ -17595,6 +17755,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" @@ -17734,6 +17895,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" @@ -17817,6 +17979,12 @@ }, /turf/simulated/floor/plasteel, /area/atmos/control) +"bKG" = ( +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/storage/primary) "bKH" = ( /obj/machinery/computer/atmos_alert{ dir = 8 @@ -17875,6 +18043,7 @@ name = "External Airlock Access"; req_access_txt = "12" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/hallway/primary/central) "bKZ" = ( @@ -17924,6 +18093,16 @@ icon_state = "dark" }, /area/security/securearmoury) +"bLc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/hallway/primary/starboard/south) "bLe" = ( /obj/structure/table/glass, /obj/item/storage/box/disks{ @@ -17965,6 +18144,7 @@ }, /area/security/securearmoury) "bLg" = ( +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -18074,6 +18254,7 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore2) "bLx" = ( @@ -18081,6 +18262,7 @@ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/fore2) "bLH" = ( @@ -18409,6 +18591,7 @@ /area/medical/cmostore) "bML" = ( /obj/structure/chair, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/starboard) "bMM" = ( @@ -18832,6 +19015,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "bOL" = ( @@ -19300,6 +19484,7 @@ pixel_x = -24; name = "west bump" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "darkyellow"; dir = 8 @@ -19576,6 +19761,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkyellow" @@ -19593,6 +19779,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "darkyellow" }, @@ -19782,6 +19969,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/maintcentral) "bSy" = ( @@ -20380,6 +20568,17 @@ icon_state = "red" }, /area/security/seceqstorage) +"bUF" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "bUJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/table/reinforced, @@ -20573,6 +20772,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "bVi" = ( @@ -20619,6 +20819,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore2) "bVr" = ( @@ -20944,6 +21145,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/storage) "bWu" = ( @@ -21211,6 +21413,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "bXL" = ( @@ -21317,6 +21520,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "bYJ" = ( @@ -21448,6 +21652,7 @@ name = "External Airlock Access"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/hallway/primary/port/south) "bZk" = ( @@ -21499,6 +21704,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/hallway/primary/port/south) "bZT" = ( @@ -21587,6 +21793,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fpmaint) "caN" = ( @@ -21656,6 +21863,7 @@ d2 = 4; icon_state = "0-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "caY" = ( @@ -21688,6 +21896,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "cbF" = ( @@ -21726,6 +21935,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/quartermaster/miningdock) "cbN" = ( @@ -21756,6 +21966,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "cbP" = ( @@ -21774,6 +21985,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "cbR" = ( @@ -21798,6 +22010,7 @@ dir = 8 }, /obj/machinery/atmospherics/portable/canister/air, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/secondary/entry/north) "cbW" = ( @@ -22193,6 +22406,7 @@ d2 = 2; icon_state = "0-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/auxsolarport) "cdT" = ( @@ -22223,6 +22437,7 @@ name = "EXTERNAL AIRLOCK"; pixel_x = -32 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/aft/west) "cea" = ( @@ -22264,6 +22479,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/auxsolarport) "cei" = ( @@ -22364,6 +22580,7 @@ dir = 6; level = 2 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/aft/west) "ceB" = ( @@ -22387,6 +22604,7 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "browncorner" @@ -22451,6 +22669,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/portsolar) "ceV" = ( @@ -22924,6 +23143,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore2) "chg" = ( @@ -23050,8 +23270,8 @@ id = "b1"; name = "Privacy Bolts"; normaldoorcontrol = 1; - pixel_x = -24; - specialfunctions = 4 + specialfunctions = 4; + pixel_y = 24 }, /turf/simulated/floor/plasteel/freezer, /area/crew_quarters/locker) @@ -23151,6 +23371,7 @@ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/security/vacantoffice) "ciw" = ( @@ -23219,11 +23440,19 @@ icon_state = "darkred" }, /area/security/checkpoint2) +"ciP" = ( +/obj/effect/turf_decal/stripes/asteroid/line{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/gambling_den) "ciR" = ( /obj/machinery/door/airlock/mining{ name = "Mining Dock"; req_access_txt = "48" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/quartermaster/miningdock) "ciV" = ( @@ -23288,6 +23517,13 @@ icon_state = "neutralfull" }, /area/hallway/secondary/entry/south) +"cju" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "cjw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -23329,6 +23565,7 @@ name = "Aft Asteroid Maintenance"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/asmaint) "cjF" = ( @@ -23500,6 +23737,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "escape" @@ -23854,6 +24092,13 @@ /obj/structure/sign/nosmoking_1, /turf/simulated/wall/r_wall, /area/toxins/hallway) +"cmS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "cmW" = ( /obj/machinery/status_display{ layer = 4 @@ -23902,6 +24147,7 @@ pixel_y = 24; name = "north bump" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkbrown" @@ -24108,6 +24354,7 @@ /area/toxins/storage) "coJ" = ( /obj/structure/closet/crate, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore2) "coK" = ( @@ -24349,6 +24596,7 @@ icon_state = "1-4" }, /obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "cpT" = ( @@ -24358,6 +24606,7 @@ icon_state = "4-8" }, /obj/item/assembly/mousetrap/armed, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "cpU" = ( @@ -24633,11 +24882,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port2) "crp" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/binary/valve/open, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/secondary/entry/north) "crv" = ( @@ -24653,6 +24904,15 @@ icon_state = "whitepurple" }, /area/toxins/hallway) +"crA" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "crB" = ( /obj/structure/cable/orange{ d1 = 1; @@ -24724,6 +24984,11 @@ icon_state = "vault" }, /area/security/securearmoury) +"crY" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/storage) "csa" = ( /obj/machinery/firealarm{ pixel_y = 24; @@ -24740,6 +25005,7 @@ }, /obj/structure/grille/broken, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore2) "csf" = ( @@ -24756,6 +25022,13 @@ "csh" = ( /turf/simulated/wall, /area/hallway/spacebridge/comeng) +"csn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/fore) "css" = ( /obj/structure/table, /obj/item/clothing/glasses/meson, @@ -24778,6 +25051,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -25365,6 +25639,13 @@ icon_state = "asteroidplating" }, /area/maintenance/apmaint) +"cwA" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkgreenfull" + }, +/area/hydroponics) "cwE" = ( /obj/structure/disposaloutlet{ dir = 8 @@ -26058,6 +26339,7 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/north) "cAJ" = ( @@ -26318,6 +26600,7 @@ name = "Security Blast Door"; opacity = 0 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/fore2) "cCw" = ( @@ -26459,6 +26742,7 @@ /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/spawner/lootdrop/maintenance, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore) "cDi" = ( @@ -26488,6 +26772,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "cDo" = ( @@ -27201,6 +27486,7 @@ /area/bridge) "cGY" = ( /obj/effect/landmark/spawner/nukedisc_respawn, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/clownoffice/secret) "cHh" = ( @@ -27262,6 +27548,15 @@ icon_state = "darkredcorners" }, /area/security/brig) +"cHv" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "cHw" = ( /obj/structure/sign/directions/science{ pixel_x = 32; @@ -27475,6 +27770,10 @@ }, /turf/simulated/floor/plasteel, /area/hallway/primary/central) +"cIv" = ( +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plating, +/area/quartermaster/miningdock) "cIw" = ( /obj/machinery/disposal, /obj/machinery/computer/guestpass{ @@ -27775,6 +28074,7 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "cJw" = ( @@ -27906,6 +28206,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "cJN" = ( @@ -27972,6 +28273,7 @@ "cJX" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/asmaint) "cKb" = ( @@ -27987,6 +28289,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -28296,11 +28599,11 @@ /turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "cLX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "white" }, -/turf/simulated/floor/plating, -/area/quartermaster/miningdock) +/area/toxins/mixing) "cMa" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/poddoor/preopen{ @@ -29154,6 +29457,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/red{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboard) "cOZ" = ( @@ -29489,6 +29793,7 @@ /area/mimeoffice) "cQA" = ( /obj/item/stack/rods, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/storage) "cQB" = ( @@ -29766,6 +30071,7 @@ "cRS" = ( /obj/structure/closet/emcloset, /obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "cRT" = ( @@ -29801,6 +30107,7 @@ d2 = 8; icon_state = "0-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fore) "cSf" = ( @@ -29957,6 +30264,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cSE" = ( @@ -30521,6 +30829,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/storage) "cUw" = ( @@ -30558,6 +30867,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/turbine) "cUB" = ( @@ -30584,6 +30894,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/maintcentral) "cUE" = ( @@ -30605,13 +30916,13 @@ /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/maintenance/turbine) "cUH" = ( /obj/structure/reagent_dispensers/watertank, /obj/item/extinguisher, -/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/maintenance/turbine) "cUI" = ( @@ -30659,7 +30970,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold4w/visible/yellow, -/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/maintenance/turbine) "cUN" = ( @@ -30982,6 +31293,15 @@ }, /turf/simulated/floor/engine/vacuum, /area/maintenance/turbine) +"cVF" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "cVO" = ( /obj/structure/table, /obj/item/clothing/shoes/orange, @@ -31029,6 +31349,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fore) "cWa" = ( @@ -31104,6 +31425,7 @@ name = "Command SMES Access"; req_access_txt = "10" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/fore) "cWn" = ( @@ -31130,12 +31452,14 @@ icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore) "cWu" = ( /obj/machinery/light/small{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore) "cWx" = ( @@ -31185,6 +31509,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -31525,6 +31850,13 @@ /obj/structure/rack, /turf/simulated/floor/plating/asteroid/ancient, /area/mine/unexplored/cere/command) +"cYt" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "cYu" = ( /obj/structure/statue/bananium/clown, /obj/machinery/camera{ @@ -31811,6 +32143,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/lawoffice) +"dbV" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "dcv" = ( /obj/effect/landmark/spawner/carp, /turf/space, @@ -31923,6 +32259,7 @@ name = "Port Asteroid Maintenance"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/port) "ddk" = ( @@ -32054,6 +32391,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/storage) "ddC" = ( @@ -33160,6 +33498,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore2) "dkp" = ( @@ -33321,6 +33660,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "dla" = ( @@ -33486,6 +33826,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/fore2) "dlK" = ( @@ -33627,6 +33968,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/fore) "dmK" = ( @@ -33657,6 +33999,7 @@ name = "Fore Asteroid Maintenance Access"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/fore) "dmX" = ( @@ -33714,6 +34057,13 @@ icon_state = "dark" }, /area/security/brig) +"dno" = ( +/obj/item/mounted/mirror{ + icon_state = "mirror_broke"; + pixel_y = 28 + }, +/turf/simulated/floor/plasteel, +/area/crew_quarters/locker) "dnw" = ( /obj/structure/chair{ dir = 1 @@ -33929,6 +34279,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fpmaint) "dpc" = ( @@ -34126,6 +34477,7 @@ /obj/effect/mapping_helpers/airlock/unres{ dir = 8 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel, /area/security/permabrig) "dqh" = ( @@ -34155,6 +34507,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/north) "dqp" = ( @@ -34619,6 +34972,7 @@ dir = 1; name = "Mix To Turbine" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "darkyellow"; dir = 1 @@ -34694,6 +35048,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" @@ -34724,6 +35079,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" @@ -34742,6 +35098,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" @@ -35207,6 +35564,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/northwest) "dvD" = ( @@ -35357,6 +35715,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/northwest) "dww" = ( @@ -35859,6 +36218,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "bluecorner" @@ -35954,6 +36314,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "bluecorner" @@ -35976,6 +36337,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "bluecorner" @@ -36017,6 +36379,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/asmaint) "dzr" = ( @@ -36566,6 +36929,7 @@ name = "Bathroom" }, /obj/machinery/door/firedoor, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel, /area/security/permabrig) "dBH" = ( @@ -36718,6 +37082,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "browncorner" @@ -37005,6 +37370,18 @@ icon_state = "asteroidplating" }, /area/hallway/spacebridge/servsci) +"dFE" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/disposal/north) "dFU" = ( /obj/structure/table, /obj/machinery/recharger, @@ -37021,6 +37398,7 @@ /area/security/processing) "dGg" = ( /obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "dGr" = ( @@ -37149,6 +37527,7 @@ d2 = 4; icon_state = "0-4" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fpmaint) "dIS" = ( @@ -37178,6 +37557,13 @@ icon_state = "neutralfull" }, /area/hallway/primary/port/south) +"dJf" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/secondary/entry/north) "dJk" = ( /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; @@ -37219,6 +37605,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -37336,11 +37723,28 @@ }, /turf/simulated/floor/engine, /area/toxins/xenobiology) +"dLM" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Security SMES Access"; + req_access_txt = "10" + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plating, +/area/maintenance/fpmaint) "dLO" = ( /obj/machinery/door/airlock/maintenance{ name = "Port Asteroid Maintenance"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel, /area/library) "dLQ" = ( @@ -37386,6 +37790,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) "dMk" = ( @@ -37643,6 +38048,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -37804,6 +38210,7 @@ /obj/structure/disposalpipe/segment/corner{ dir = 1 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -37829,6 +38236,12 @@ icon_state = "whiteblue" }, /area/medical/cmostore) +"dRz" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/security/permabrig) "dRE" = ( /turf/simulated/mineral/ancient/outer, /area/hallway/primary/fore) @@ -37933,6 +38346,10 @@ icon_state = "neutralfull" }, /area/hallway/primary/fore) +"dTs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore) "dTB" = ( /obj/machinery/space_heater, /turf/simulated/floor/plating, @@ -38239,6 +38656,7 @@ /obj/machinery/atmospherics/binary/valve/open{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "ebf" = ( @@ -38410,6 +38828,15 @@ icon_state = "dark" }, /area/medical/morgue) +"eeb" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "eee" = ( /obj/machinery/conveyor{ dir = 4; @@ -38466,6 +38893,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "egm" = ( @@ -38670,6 +39098,14 @@ }, /turf/simulated/floor/carpet/black, /area/chapel/main) +"eko" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Central Asteroid Maintenance"; + req_access_txt = "12" + }, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plating, +/area/maintenance/maintcentral) "ekt" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/bananalamp, @@ -38699,6 +39135,16 @@ }, /turf/simulated/floor/engine, /area/toxins/explab_chamber) +"ekQ" = ( +/obj/structure/disposalpipe/segment{ + color = "#954535" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/hallway/primary/port/north) "ekV" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -38766,6 +39212,7 @@ d2 = 2; icon_state = "0-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/west) "emw" = ( @@ -38824,6 +39271,13 @@ }, /turf/simulated/floor/plating, /area/maintenance/fore2) +"enu" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/primary/central) "enx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -38991,6 +39445,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -39049,6 +39504,18 @@ icon_state = "whitepurple" }, /area/toxins/xenobiology) +"ern" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/central) "eru" = ( /obj/machinery/alarm{ dir = 1; @@ -39074,6 +39541,11 @@ icon_state = "neutralfull" }, /area/hallway/secondary/entry/south) +"esC" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/carpet/green, +/area/library) "esG" = ( /obj/structure/table/wood, /obj/item/storage/bible, @@ -39146,6 +39618,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "eul" = ( @@ -39217,6 +39690,7 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -39322,6 +39796,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboard) "eyx" = ( @@ -39380,6 +39855,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -39427,6 +39903,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -39635,6 +40112,21 @@ /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/plasteel, /area/security/main) +"eFz" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "eFI" = ( /obj/machinery/light/small{ dir = 1 @@ -39664,6 +40156,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/storage) "eGZ" = ( @@ -39801,6 +40294,13 @@ }, /turf/simulated/wall, /area/maintenance/fsmaint) +"eIZ" = ( +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/hallway/secondary/entry/north) "eJd" = ( /obj/structure/sign/directions/science{ dir = 8; @@ -40110,6 +40610,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkred" @@ -40136,6 +40637,13 @@ /obj/effect/spawner/airlock/w_to_e/long, /turf/simulated/wall, /area/maintenance/apmaint) +"eRh" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/maintenance/disposal/external/southeast) "eRV" = ( /obj/structure/sign/restroom, /turf/simulated/wall, @@ -40654,6 +41162,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -40701,6 +41210,7 @@ /obj/machinery/camera{ c_tag = "Library North" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/wood, /area/library) "fdS" = ( @@ -40709,6 +41219,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/portsolar) "fdX" = ( @@ -40727,6 +41238,11 @@ }, /turf/simulated/floor/plasteel, /area/toxins/launch) +"fec" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/storage) "fek" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ @@ -40827,6 +41343,13 @@ icon_state = "bot" }, /area/toxins/storage) +"ffE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/storage) "fgi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -40847,6 +41370,15 @@ }, /turf/simulated/floor/plasteel/white, /area/toxins/xenobiology) +"fgD" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "fgS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -40969,6 +41501,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkredcorners" @@ -41052,6 +41585,7 @@ name = "disposal pipe - Captain's Office"; sort_type_txt = "18" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/north) "fmI" = ( @@ -41131,6 +41665,16 @@ /obj/structure/grille, /turf/simulated/floor/plating/asteroid/ancient, /area/maintenance/asmaint) +"foR" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore) "fph" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -41159,6 +41703,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/external/southeast) "fpM" = ( @@ -41227,6 +41772,10 @@ icon_state = "whitepurple" }, /area/toxins/hallway) +"frt" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/central) "fru" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -41307,6 +41856,27 @@ }, /turf/simulated/floor/plasteel/white, /area/toxins/xenobiology) +"fsK" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "bluecorner" + }, +/area/hallway/primary/fore) "fsW" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -41324,6 +41894,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboard) "ftr" = ( @@ -41509,12 +42080,19 @@ }, /turf/simulated/floor/plating, /area/maintenance/disposal/east) +"fwf" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "fwt" = ( /obj/structure/cable/orange{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -41730,6 +42308,7 @@ /area/library) "fCV" = ( /obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "browncorner" }, @@ -41822,6 +42401,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/north) "fEH" = ( @@ -41924,6 +42504,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/west) "fFU" = ( @@ -42175,6 +42756,15 @@ "fMl" = ( /turf/simulated/mineral/ancient/outer, /area/mine/unexplored/cere/medical) +"fMs" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "fMH" = ( /obj/machinery/door/airlock/maintenance{ name = "Security SMES Access"; @@ -42243,6 +42833,15 @@ icon_state = "neutralcorner" }, /area/hallway/primary/port/south) +"fNL" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "fNP" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -42611,6 +43210,18 @@ icon_state = "dark" }, /area/atmos) +"fTU" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "fUb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -42649,6 +43260,11 @@ icon_state = "white" }, /area/medical/genetics_cloning) +"fUl" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/maintcentral) "fUU" = ( /obj/structure/sign/security, /turf/simulated/wall, @@ -42737,6 +43353,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/universal, /turf/simulated/floor/plating, /area/hallway/primary/fore) +"fWO" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/maintcentral) "fWQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -42970,6 +43592,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/asmaint) +"gao" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/secondary/entry/north) "gay" = ( /obj/machinery/atmospherics/portable/canister/air, /obj/machinery/atmospherics/unary/portables_connector{ @@ -43271,6 +43903,7 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/hallway/primary/fore/west) "ghv" = ( @@ -43401,6 +44034,13 @@ icon_state = "dark" }, /area/atmos) +"glf" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue" + }, +/area/medical/medbay) "glm" = ( /obj/structure/cable/orange{ d1 = 1; @@ -43433,6 +44073,7 @@ /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "browncorner" }, @@ -43458,6 +44099,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/security/permabrig) "glL" = ( @@ -43465,9 +44107,14 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/maintenance/fsmaint) +"glP" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "glZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -43510,6 +44157,21 @@ "gmC" = ( /turf/simulated/wall/r_wall, /area/security/brig) +"gmO" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/storage) "gmZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -43534,6 +44196,7 @@ dir = 8; level = 2 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port2) "goe" = ( @@ -43612,11 +44275,11 @@ dir = 4; name = "O2 tank pump" }, -/obj/effect/decal/cleanable/dirt, /obj/item/radio/intercom{ pixel_y = 28; name = "custom placement" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/maintenance/turbine) "gpk" = ( @@ -43672,6 +44335,15 @@ icon_state = "cafeteria" }, /area/medical/medbreak) +"grj" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "grv" = ( /obj/machinery/light{ dir = 8 @@ -43758,6 +44430,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fpmaint) "gsO" = ( @@ -43776,6 +44449,13 @@ }, /turf/simulated/floor/plating, /area/maintenance/port2) +"gta" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plating, +/area/quartermaster/miningdock) "gth" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -43785,6 +44465,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/southwest) "gtk" = ( @@ -43829,6 +44510,7 @@ /area/engine/engineering) "gur" = ( /obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "gux" = ( @@ -43905,6 +44587,13 @@ /obj/effect/spawner/airlock, /turf/simulated/mineral/ancient/outer, /area/hallway/primary/fore/west) +"guV" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/primary/fore/east) "gvj" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -43937,6 +44626,15 @@ icon_state = "wood-broken" }, /area/maintenance/starboard) +"gvV" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel/white, +/area/toxins/xenobiology) "gvW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -44002,6 +44700,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/hallway/primary/fore/west) "gwO" = ( @@ -44030,8 +44729,16 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port2) +"gxl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/central) "gxo" = ( /obj/machinery/door/airlock/public/glass{ name = "Central Access" @@ -44190,6 +44897,14 @@ "gzv" = ( /turf/simulated/wall/r_wall, /area/engine/gravitygenerator) +"gAc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue" + }, +/area/medical/medbay) "gAr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -44298,6 +45013,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/asmaint) "gBM" = ( @@ -44372,6 +45088,13 @@ icon_state = "escape" }, /area/hallway/primary/port/south) +"gCw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/asmaint) "gCH" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -44665,6 +45388,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -44897,6 +45621,15 @@ icon_state = "neutralcorner" }, /area/hallway/primary/central) +"gLg" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/asmaint) "gLj" = ( /obj/structure/table/wood, /obj/effect/spawner/lootdrop/maintenance/eight, @@ -44960,6 +45693,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "gLY" = ( @@ -45159,6 +45893,13 @@ icon_state = "dark" }, /area/maintenance/asmaint) +"gPl" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkbrown" + }, +/area/quartermaster/office) "gPA" = ( /obj/structure/cable/orange{ d1 = 1; @@ -45185,6 +45926,7 @@ icon_state = "0-2" }, /obj/effect/turf_decal/stripes/end, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/hallway/primary/aft/east) "gPL" = ( @@ -45204,6 +45946,13 @@ }, /turf/simulated/floor/plating, /area/hallway/primary/fore) +"gPW" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "gQc" = ( /obj/machinery/door/poddoor{ id_tag = "mixvent"; @@ -45216,6 +45965,7 @@ dir = 10; level = 2 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/fore) "gQN" = ( @@ -45301,6 +46051,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "gRM" = ( @@ -45381,6 +46132,10 @@ icon_state = "whitepurplefull" }, /area/toxins/hallway) +"gTs" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel, +/area/security/permabrig) "gTY" = ( /obj/effect/landmark/start/doctor, /turf/simulated/floor/plasteel{ @@ -45515,6 +46270,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/fore) "gXD" = ( @@ -45522,6 +46278,7 @@ dir = 8 }, /obj/effect/landmark/start/assistant, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/carpet/arcade, /area/crew_quarters/arcade) "gXL" = ( @@ -45574,6 +46331,7 @@ /obj/structure/chair{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) "gYL" = ( @@ -45623,6 +46381,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -45656,6 +46415,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/asmaint) "gZA" = ( @@ -45703,6 +46463,11 @@ "gZI" = ( /turf/simulated/floor/wood, /area/blueshield) +"gZL" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/maintenance/disposal/external/east) "gZS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -45879,6 +46644,13 @@ icon_state = "neutralfull" }, /area/hallway/secondary/exit) +"hcu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "hcv" = ( /obj/machinery/door/poddoor{ density = 0; @@ -45961,6 +46733,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/asmaint) "hdE" = ( @@ -45970,6 +46743,20 @@ /obj/structure/bookcase/sop, /turf/simulated/floor/wood, /area/ntrep) +"hdJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/primary/fore) "hdW" = ( /obj/machinery/light{ dir = 1 @@ -46088,6 +46875,7 @@ /obj/structure/sign/fire{ pixel_y = -32 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) "hfR" = ( @@ -46112,6 +46900,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboardsolar/aft) "hhc" = ( @@ -46331,6 +47120,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/engine, /area/engine/engineering) +"hlI" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plasteel/white, +/area/toxins/xenobiology) "hlM" = ( /obj/structure/cable{ d1 = 1; @@ -46341,6 +47135,10 @@ icon_state = "dark" }, /area/engine/break_room) +"hmg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/maintcentral) "hmj" = ( /obj/structure/chair/stool{ dir = 4 @@ -46471,6 +47269,12 @@ }, /turf/simulated/floor/wood, /area/library) +"hoR" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/crew_quarters/bar) "hoU" = ( /obj/machinery/light/small, /turf/simulated/floor/plating/asteroid/ancient, @@ -46584,6 +47388,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "hrd" = ( @@ -46652,6 +47457,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/asmaint) "hsa" = ( @@ -46696,6 +47502,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "bluecorner" @@ -46710,6 +47517,7 @@ /obj/machinery/economy/atm{ pixel_y = 32 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "browncorner" @@ -46871,6 +47679,7 @@ /area/maintenance/disposal/west) "hvj" = ( /obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/west) "hvO" = ( @@ -46889,9 +47698,17 @@ /area/maintenance/disposal/west) "hvW" = ( /obj/structure/lattice, -/obj/structure/lattice, /turf/space, /area/space/nearstation) +"hvY" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "hwf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -46949,6 +47766,13 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/maintenance/fpmaint) +"hxZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "hyd" = ( /obj/machinery/light/small{ dir = 8 @@ -46972,6 +47796,7 @@ }, /area/turret_protected/aisat_interior/secondary) "hyJ" = ( +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -47056,6 +47881,7 @@ /turf/simulated/floor/carpet/black, /area/crew_quarters/captain) "hzz" = ( +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "bluecorner" @@ -47173,6 +47999,21 @@ "hBQ" = ( /turf/simulated/mineral/ancient/outer, /area/hallway/spacebridge/scidock) +"hCe" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/central) "hCC" = ( /obj/structure/grille, /turf/simulated/floor/plating/asteroid/ancient, @@ -47194,6 +48035,21 @@ icon_state = "dark" }, /area/quartermaster/office) +"hCQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/fore) "hDf" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-25" @@ -47280,6 +48136,7 @@ dir = 4; color = "#954535" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "purplecorner" @@ -47332,6 +48189,10 @@ }, /turf/simulated/floor/plating, /area/hallway/primary/central) +"hFd" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "hFg" = ( /obj/structure/cable{ d1 = 1; @@ -47401,6 +48262,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) "hFR" = ( @@ -47432,6 +48294,7 @@ /obj/structure/chair/stool{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fsmaint) "hGp" = ( @@ -47573,6 +48436,7 @@ "hIc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -47607,6 +48471,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/asmaint) "hIk" = ( @@ -47812,6 +48677,15 @@ icon_state = "bcircuit" }, /area/turret_protected/ai) +"hME" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "hMY" = ( /obj/structure/closet/secure_closet/RD, /obj/item/cartridge/signal/toxins, @@ -47891,6 +48765,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -48038,6 +48913,15 @@ icon_state = "vault" }, /area/security/nuke_storage) +"hRy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/maintcentral) "hRA" = ( /obj/structure/disposalpipe/segment/corner{ dir = 1 @@ -48245,6 +49129,7 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) "hUF" = ( @@ -48390,6 +49275,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/maintcentral) "hXi" = ( @@ -48531,6 +49417,7 @@ name = "disposal pipe - CMO Office"; sort_type_txt = "10" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -49006,6 +49893,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/asmaint) "iia" = ( @@ -49155,6 +50043,10 @@ "ikc" = ( /turf/simulated/floor/carpet/royalblack, /area/crew_quarters/captain) +"ikf" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port2) "ikk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -49419,6 +50311,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -49596,6 +50489,16 @@ /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plasteel/airless, /area/toxins/test_area) +"irr" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/gambling_den) "iry" = ( /obj/structure/weightmachine/stacklifter, /obj/effect/landmark/start/assistant, @@ -49743,6 +50646,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) "iuu" = ( @@ -50067,6 +50971,11 @@ icon_state = "neutralfull" }, /area/hallway/primary/port/south) +"iBq" = ( +/obj/structure/closet/firecloset/full, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/asmaint) "iBy" = ( /obj/machinery/power/apc{ dir = 1; @@ -50173,6 +51082,7 @@ /turf/simulated/floor/plating, /area/maintenance/disposal/external/southeast) "iDV" = ( +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkbrowncorners" @@ -50195,6 +51105,15 @@ icon_state = "neutralcorner" }, /area/hallway/primary/fore/west) +"iEh" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "iEl" = ( /obj/machinery/light, /obj/machinery/computer/robotics{ @@ -50421,6 +51340,15 @@ icon_state = "dark" }, /area/medical/morgue) +"iIc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "iIm" = ( /obj/effect/landmark/start/botanist, /obj/structure/disposalpipe/segment{ @@ -50504,6 +51432,22 @@ icon_state = "whitepurple" }, /area/toxins/lab) +"iJp" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "escape" + }, +/area/hallway/secondary/entry) "iJr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -50538,6 +51482,10 @@ icon_state = "neutralfull" }, /area/hallway/primary/port/north) +"iJL" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/transparent/glass/reinforced, +/area/maintenance/port) "iJY" = ( /obj/machinery/light_switch{ dir = 4; @@ -50624,6 +51572,7 @@ dir = 1 }, /obj/structure/closet/secure_closet/hydroponics, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkgreenfull" @@ -50758,8 +51707,14 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ level = 2 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/aft/west) +"iOh" = ( +/obj/structure/closet/emcloset, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/fore) "iOk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -50801,6 +51756,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port2) "iOw" = ( @@ -50869,6 +51825,7 @@ dir = 1 }, /obj/effect/landmark/start/assistant, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" }, @@ -50987,6 +51944,15 @@ icon_state = "white" }, /area/toxins/mixing) +"iSt" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/asmaint) "iSE" = ( /obj/machinery/kitchen_machine/oven, /obj/structure/window/basic{ @@ -51319,6 +52285,11 @@ icon_state = "browncorner" }, /area/hallway/primary/fore/east) +"iXa" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "iXc" = ( /obj/structure/cable/orange{ d1 = 4; @@ -51448,6 +52419,7 @@ icon_state = "2-8" }, /obj/structure/disposalpipe/segment/corner, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) "iZr" = ( @@ -51589,6 +52561,7 @@ name = "External Airlock Access"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/hallway/primary/central) "jaV" = ( @@ -51707,6 +52680,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboard) "jdC" = ( @@ -52035,6 +53009,7 @@ pixel_x = -24; name = "west bump" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "jkX" = ( @@ -52048,6 +53023,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) "jlh" = ( @@ -52098,6 +53074,11 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/security/seceqstorage) +"jlK" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port2) "jlN" = ( /obj/machinery/firealarm{ dir = 4; @@ -52225,6 +53206,10 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/security/lobby) +"joY" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/disposal/northeast) "joZ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -52320,6 +53305,13 @@ icon_state = "whitepurple" }, /area/toxins/xenobiology) +"jqA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "jqP" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed, @@ -52356,6 +53348,18 @@ icon_state = "neutralfull" }, /area/hallway/secondary/exit) +"jrc" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "jrs" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -52477,6 +53481,12 @@ }, /turf/simulated/floor/plating, /area/maintenance/port) +"jsS" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/medical/morgue) "jsU" = ( /obj/structure/rack, /turf/simulated/floor/plating/asteroid/ancient, @@ -52639,6 +53649,21 @@ icon_state = "cafeteria" }, /area/crew_quarters/kitchen) +"juZ" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/crew_quarters/kitchen) +"jvh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/central) "jvi" = ( /obj/structure/cable{ d1 = 1; @@ -52798,6 +53823,7 @@ name = "north bump"; pixel_y = 24 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/external/southwest) "jxJ" = ( @@ -52825,6 +53851,16 @@ icon_state = "dark" }, /area/chapel/office) +"jxU" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "jyg" = ( /obj/effect/turf_decal/stripes/line{ dir = 9 @@ -52840,6 +53876,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/external/southwest) "jyU" = ( @@ -52899,6 +53936,28 @@ }, /turf/simulated/floor/plating, /area/maintenance/portsolar) +"jzz" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) +"jzB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/hallway/primary/port/south) "jzL" = ( /obj/machinery/conveyor/auto{ dir = 4 @@ -53027,6 +54086,7 @@ /area/maintenance/maintcentral) "jBy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/fore) "jBJ" = ( @@ -53103,6 +54163,12 @@ icon_state = "whiteyellow" }, /area/assembly/chargebay) +"jCh" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/maintcentral) "jCu" = ( /obj/machinery/camera{ c_tag = "Command Asteroid Hall 10"; @@ -53150,6 +54216,7 @@ }, /obj/structure/grille/broken, /obj/item/stack/rods, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) "jDd" = ( @@ -53186,6 +54253,12 @@ }, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) +"jDk" = ( +/obj/structure/closet, +/obj/item/clothing/suit/poncho, +/obj/item/clothing/shoes/black, +/turf/simulated/floor/plasteel, +/area/crew_quarters/locker) "jDv" = ( /obj/machinery/economy/vending/coffee/free, /turf/simulated/floor/plating, @@ -53211,6 +54284,7 @@ /area/security/permabrig) "jDQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/fore) "jDS" = ( @@ -53328,6 +54402,7 @@ /obj/structure/disposalpipe/segment{ color = "#954535" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -53497,6 +54572,10 @@ /obj/machinery/atmospherics/portable/canister/air, /turf/simulated/floor/plating, /area/hallway/primary/starboard/north) +"jIi" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/hallway/primary/fore/west) "jIj" = ( /obj/structure/window/reinforced{ dir = 4 @@ -53521,8 +54600,17 @@ /turf/simulated/floor/plating, /area/maintenance/storage) "jIE" = ( +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) +"jIU" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Fore Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "jJc" = ( /turf/simulated/mineral/ancient, /area/assembly/robotics) @@ -53580,6 +54668,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -53617,6 +54706,19 @@ }, /turf/simulated/floor/plating, /area/hallway/primary/aft/west) +"jKe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "escape" + }, +/area/hallway/secondary/entry) "jKo" = ( /obj/structure/disposalpipe/segment, /obj/structure/grille/broken, @@ -53630,6 +54732,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "jKs" = ( @@ -53790,8 +54893,14 @@ /area/maintenance/fsmaint) "jOt" = ( /obj/machinery/hydroponics/soil, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) +"jOC" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "jOE" = ( /obj/structure/disposalpipe/segment/corner, /turf/simulated/floor/plating{ @@ -53877,6 +54986,22 @@ icon_state = "redyellowfull" }, /area/crew_quarters/bar) +"jPQ" = ( +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "escape" + }, +/area/hallway/secondary/exit) +"jPR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/crew_quarters/kitchen) "jPS" = ( /obj/structure/table/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -53932,6 +55057,13 @@ icon_state = "floorgrime" }, /area/security/permabrig) +"jQB" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/maintenance/disposal/external/north) "jQE" = ( /obj/machinery/door/airlock/glass, /obj/structure/barricade/wooden, @@ -53955,6 +55087,15 @@ /obj/structure/disposaloutlet, /turf/simulated/floor/plating/airless, /area/maintenance/disposal/west) +"jQL" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/transparent/glass/reinforced, +/area/maintenance/apmaint) "jRd" = ( /obj/structure/sign/poster/random{ name = "random official poster"; @@ -54280,6 +55421,15 @@ /obj/structure/cable/orange, /turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) +"jWw" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "jWC" = ( /obj/machinery/camera{ c_tag = "Atmospherics North"; @@ -54413,6 +55563,7 @@ name = "EXTERNAL AIRLOCK"; pixel_x = 32 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/fore) "jZd" = ( @@ -54699,6 +55850,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/asmaint) "kdQ" = ( @@ -54711,6 +55863,7 @@ /obj/structure/disposalpipe/segment/corner{ dir = 8 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/gambling_den) "kdT" = ( @@ -54798,6 +55951,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/toxins/misc_lab) "kfd" = ( @@ -54849,6 +56003,7 @@ path_to_spawn = /mob/living/simple_animal/hostile/scarybat; total_amount = 20 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) "kgd" = ( @@ -54896,6 +56051,7 @@ dir = 8; level = 2 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/aft/west) "khx" = ( @@ -54908,6 +56064,7 @@ pixel_y = 28; name = "custom placement" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/external/east) "khM" = ( @@ -55182,6 +56339,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/apmaint) "kmB" = ( @@ -55197,6 +56355,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 4; icon_regular_floor = "yellowsiding"; @@ -55666,6 +56825,7 @@ "kve" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "kvf" = ( @@ -55855,6 +57015,10 @@ icon_state = "neutralfull" }, /area/hallway/primary/starboard/south) +"kxP" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/carpet/arcade, +/area/crew_quarters/arcade) "kxS" = ( /obj/structure/table/reinforced, /obj/item/gavelhammer, @@ -55943,6 +57107,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -56070,6 +57235,7 @@ req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/asmaint) "kAY" = ( @@ -56139,6 +57305,15 @@ icon_state = "cafeteria" }, /area/toxins/hallway) +"kBP" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "kCa" = ( /obj/machinery/door/airlock/command{ name = "Expedition Access"; @@ -56159,6 +57334,7 @@ /area/atmos/distribution) "kCr" = ( /obj/item/assembly/mousetrap/armed, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/gambling_den) "kCC" = ( @@ -56393,6 +57569,11 @@ "kGR" = ( /turf/simulated/mineral/ancient/outer, /area/maintenance/starboardsolar) +"kGZ" = ( +/obj/structure/disposalpipe/segment/corner, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel, +/area/crew_quarters/locker) "kHN" = ( /obj/machinery/door_control{ id = "fb1"; @@ -56448,6 +57629,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/red{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboard) "kII" = ( @@ -56574,6 +57756,14 @@ }, /turf/simulated/floor/plating, /area/hallway/primary/fore) +"kKY" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 4 + }, +/obj/machinery/atmospherics/portable/canister/air, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/fore) "kLd" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -56838,6 +58028,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/quartermaster/office) "kQz" = ( @@ -56920,6 +58111,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -57055,6 +58247,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "bluecorner" @@ -57296,6 +58489,15 @@ icon_state = "dark" }, /area/turret_protected/aisat_interior) +"kWe" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/auxsolarport) "kWm" = ( /obj/structure/cable{ d1 = 4; @@ -57315,6 +58517,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/hallway/secondary/exit) "kWC" = ( @@ -57694,8 +58897,8 @@ }, /area/hallway/primary/fore) "lfh" = ( -/obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/northwest, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/security/range) "lfq" = ( @@ -57858,6 +59061,7 @@ /area/maintenance/disposal/external/north) "lij" = ( /obj/effect/spawner/lootdrop/maintenance, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/clownoffice/secret) "lil" = ( @@ -58008,6 +59212,7 @@ "lky" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/quartermaster/miningdock) "lkA" = ( @@ -58073,6 +59278,7 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/starboard) "lll" = ( @@ -58189,6 +59395,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -58265,6 +59472,10 @@ }, /turf/simulated/floor/carpet/black, /area/bridge) +"lnp" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/hallway/primary/aft/west) "lnF" = ( /obj/structure/rack, /obj/item/clothing/gloves/boxing/blue, @@ -58471,6 +59682,7 @@ /area/assembly/chargebay) "lqD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore2) "lqP" = ( @@ -58654,6 +59866,7 @@ dir = 4 }, /obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "ltV" = ( @@ -58709,6 +59922,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "lux" = ( @@ -58752,6 +59966,7 @@ /area/hallway/secondary/exit) "lvk" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/cyan, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/secondary/entry/north) "lvw" = ( @@ -58869,6 +60084,10 @@ }, /turf/simulated/floor/plating, /area/maintenance/apmaint) +"lwX" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "lxh" = ( /obj/structure/table/reinforced, /obj/machinery/computer/secure_data/laptop, @@ -59047,6 +60266,18 @@ }, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fsmaint) +"lzh" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "lzu" = ( /obj/machinery/disposal, /obj/machinery/firealarm{ @@ -59291,7 +60522,6 @@ icon_state = "1-2" }, /obj/structure/lattice/catwalk, -/obj/structure/lattice/catwalk, /turf/space, /area/space/nearstation) "lEk" = ( @@ -59340,6 +60570,16 @@ }, /turf/space, /area/space/nearstation) +"lFh" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/quartermaster/miningdock) +"lFi" = ( +/obj/effect/decal/warning_stripes/east, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel, +/area/quartermaster/miningdock) "lFm" = ( /obj/structure/window/reinforced{ dir = 8 @@ -59450,6 +60690,10 @@ "lGk" = ( /turf/space, /area/mine/unexplored/cere/civilian) +"lGy" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel, +/area/crew_quarters/fitness) "lHa" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 8 @@ -59464,6 +60708,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/gambling_den) "lHf" = ( @@ -59486,6 +60731,7 @@ name = "Quarantine Lockdown"; opacity = 0 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/starboard) "lHl" = ( @@ -59530,10 +60776,6 @@ }, /turf/simulated/floor/plating, /area/library) -"lID" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/wall, -/area/ntrep) "lIN" = ( /obj/structure/cable{ d1 = 1; @@ -59778,6 +61020,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/asmaint) "lNM" = ( @@ -59800,6 +61043,10 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/wood, /area/crew_quarters/bar) +"lOh" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel, +/area/quartermaster/office) "lOw" = ( /obj/structure/disposalpipe/sortjunction{ dir = 4; @@ -59871,6 +61118,16 @@ /obj/structure/disposaloutlet, /turf/simulated/floor/plating, /area/maintenance/disposal/westalt) +"lPM" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "lPU" = ( /obj/structure/table, /obj/item/reagent_containers/glass/beaker, @@ -59898,6 +61155,7 @@ /obj/structure/disposalpipe/segment{ color = "#954535" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -60240,6 +61498,7 @@ /area/crew_quarters/theatre) "lVT" = ( /obj/structure/reagent_dispensers/watertank, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "lVX" = ( @@ -60262,6 +61521,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "lWb" = ( @@ -60280,6 +61540,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/port/north) "lWh" = ( @@ -60662,6 +61923,7 @@ /turf/simulated/floor/carpet/green, /area/library) "mdZ" = ( +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fsmaint) "mee" = ( @@ -60729,6 +61991,13 @@ }, /turf/simulated/floor/plasteel/freezer, /area/crew_quarters/toilet) +"mfp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/maintcentral) "mfu" = ( /obj/structure/cable{ d1 = 1; @@ -60849,6 +62118,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/fsmaint) "mhJ" = ( @@ -60860,6 +62130,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -61513,6 +62784,7 @@ d2 = 2; icon_state = "0-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/westalt) "mvo" = ( @@ -61641,6 +62913,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkgreenfull" @@ -61819,6 +63092,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/westalt) "mCL" = ( @@ -61939,6 +63213,7 @@ /area/engine/engineering) "mFs" = ( /obj/item/wrench, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/starboard) "mFx" = ( @@ -61947,6 +63222,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "mFT" = ( @@ -62019,6 +63295,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/external/southeast) "mHg" = ( @@ -62167,6 +63444,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/aft/west) "mKK" = ( @@ -62253,6 +63531,19 @@ }, /turf/simulated/floor/plating, /area/turret_protected/aisat_interior) +"mLL" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + color = "#954535" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralcorner" + }, +/area/hallway/primary/port/north) "mLO" = ( /obj/structure/cable/orange{ d1 = 1; @@ -62295,6 +63586,7 @@ /area/turret_protected/ai_upload) "mMJ" = ( /obj/machinery/atmospherics/pipe/simple/visible, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/hallway/primary/central) "mMY" = ( @@ -62365,6 +63657,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboard) "mNG" = ( @@ -62381,6 +63674,11 @@ icon_state = "dark" }, /area/engine/gravitygenerator) +"mNW" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "mNY" = ( /obj/machinery/light, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -62561,6 +63859,13 @@ icon_state = "wood-broken7" }, /area/crew_quarters/bar) +"mRG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/storage) "mRQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -62573,8 +63878,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel/white, /area/toxins/xenobiology) +"mSg" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "mSh" = ( /obj/structure/girder, /turf/simulated/floor/plating, @@ -62822,6 +64132,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -62997,6 +64308,19 @@ }, /turf/simulated/floor/plating, /area/maintenance/disposal/north) +"mZt" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/hallway/secondary/entry/south) "mZu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -63136,6 +64460,11 @@ icon_state = "neutralcorner" }, /area/hallway/primary/port/south) +"nbC" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "nbL" = ( /obj/machinery/door/poddoor/multi_tile/three_tile_hor{ name = "Civilian Emergency EVA Storage"; @@ -63359,6 +64688,7 @@ name = "Aft Asteroid Maintenance"; req_access_txt = "7" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/toxins/mixing) "nfW" = ( @@ -63430,6 +64760,7 @@ name = "EXTERNAL AIRLOCK"; pixel_x = 32 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/secondary/entry/north) "nhh" = ( @@ -63741,6 +65072,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port2) "nmW" = ( @@ -63848,6 +65180,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/southwest) "npb" = ( @@ -64044,6 +65377,10 @@ icon_state = "dark" }, /area/turret_protected/ai_upload) +"ntt" = ( +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plasteel, +/area/quartermaster/miningdock) "ntA" = ( /obj/structure/table, /obj/item/folder, @@ -64148,6 +65485,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -64723,6 +66061,14 @@ icon_state = "darkred" }, /area/security/checkpoint2) +"nFi" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_regular_floor = "yellowsiding"; + icon_state = "tranquillite" + }, +/area/crew_quarters/theatre) "nFH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -64796,6 +66142,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/maintcentral) "nGI" = ( @@ -64896,6 +66243,7 @@ /area/toxins/mixing) "nJm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -64944,6 +66292,7 @@ /obj/structure/table, /obj/item/eftpos/register, /obj/item/eftpos, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -65352,6 +66701,10 @@ }, /turf/space, /area/space/nearstation) +"nPB" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/secondary/entry/north) "nPG" = ( /obj/structure/cable{ d1 = 4; @@ -65441,6 +66794,13 @@ }, /turf/simulated/floor/plating, /area/maintenance/gambling_den) +"nRo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/disposal/north) "nRM" = ( /obj/machinery/camera/autoname{ dir = 8 @@ -65449,6 +66809,7 @@ pixel_y = -28; name = "custom placement" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -65481,6 +66842,16 @@ slowdown = -0.3 }, /area/hallway/spacebridge/serveng) +"nTC" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/item/clothing/head/cone, +/obj/item/clothing/head/cone, +/obj/item/clothing/head/cone, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "nTJ" = ( /obj/structure/disposalpipe/segment/corner{ dir = 8 @@ -65535,6 +66906,7 @@ /area/hallway/primary/aft/east) "nUJ" = ( /obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/southwest) "nUM" = ( @@ -65581,6 +66953,11 @@ icon_state = "darkgreenfull" }, /area/hydroponics) +"nVL" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "nVQ" = ( /turf/simulated/mineral/ancient, /area/hallway/primary/starboard/south) @@ -65631,6 +67008,7 @@ name = "Service SMES Access"; req_access_txt = "10" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/port) "nWY" = ( @@ -65687,6 +67065,18 @@ }, /turf/simulated/wall, /area/hallway/primary/port/south) +"nZe" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "nZf" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -65724,6 +67114,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -66005,6 +67396,7 @@ /obj/structure/chair{ dir = 8 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/south) "ogg" = ( @@ -66073,6 +67465,7 @@ name = "Service SMES Access"; req_access_txt = "10" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/port) "ohr" = ( @@ -66099,6 +67492,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) "ohY" = ( @@ -66140,6 +67534,11 @@ /obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/port) +"oig" = ( +/obj/structure/barricade/wooden, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "oix" = ( /obj/structure/cable/orange{ d1 = 1; @@ -66174,6 +67573,21 @@ icon_state = "whitegreen" }, /area/medical/medbay) +"oiO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port2) "oiY" = ( /obj/machinery/newscaster{ pixel_y = 28; @@ -66284,6 +67698,7 @@ req_access_txt = "12" }, /obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel, /area/library) "okO" = ( @@ -66400,6 +67815,7 @@ dir = 4; level = 2 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/secondary/entry/north) "olT" = ( @@ -66542,6 +67958,16 @@ icon_state = "neutralfull" }, /area/hallway/primary/port/north) +"ons" = ( +/obj/structure/disposalpipe/segment{ + color = "#954535" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/hallway/primary/aft/west) "onO" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -66703,6 +68129,7 @@ pixel_y = -28; name = "custom placement" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_regular_floor = "yellowsiding"; @@ -66831,6 +68258,7 @@ pixel_y = 28; name = "custom placement" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/south) "org" = ( @@ -66902,6 +68330,11 @@ }, /turf/simulated/wall, /area/hallway/primary/aft/west) +"osU" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel, +/area/crew_quarters/locker) "oth" = ( /obj/machinery/light_switch{ dir = 4; @@ -66950,6 +68383,17 @@ /obj/machinery/light, /turf/simulated/floor/wood, /area/library) +"ouR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/maintcentral) "ouZ" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -66995,6 +68439,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboard) "ovp" = ( @@ -67015,6 +68460,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/universal, /turf/simulated/floor/plating, /area/turret_protected/aisat_interior) +"ovK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "ovQ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/cable{ @@ -67119,6 +68572,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port2) "oxo" = ( @@ -67345,6 +68799,17 @@ icon_state = "neutralcorner" }, /area/hallway/secondary/entry/north) +"oBO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + color = "#954535" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "purplecorner" + }, +/area/hallway/primary/aft/east) "oBP" = ( /turf/simulated/mineral/ancient/outer, /area/maintenance/apmaint) @@ -67365,6 +68830,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -67465,6 +68931,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -67529,6 +68996,7 @@ /obj/machinery/light/small{ dir = 8 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/north) "oFB" = ( @@ -67568,6 +69036,7 @@ name = "east bump" }, /obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -67621,8 +69090,13 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboardsolar) +"oHI" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/fore) "oHW" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable/orange{ @@ -67869,6 +69343,13 @@ /obj/item/chair/stool, /turf/simulated/floor/wood, /area/maintenance/gambling_den) +"oLB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plating, +/area/quartermaster/miningdock) "oLQ" = ( /obj/structure/table/glass, /obj/item/clothing/glasses/hud/health, @@ -67942,6 +69423,7 @@ icon_state = "4-8" }, /obj/structure/closet/secure_closet/engineering_electrical, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/port) "oMD" = ( @@ -68165,6 +69647,7 @@ req_access_txt = "1"; security_level = 1 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/security/range) "oQn" = ( @@ -68702,6 +70185,7 @@ d2 = 4; icon_state = "0-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboardsolar) "oXX" = ( @@ -68725,6 +70209,11 @@ icon_state = "bcircuit" }, /area/tcommsat/chamber) +"oXZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plating, +/area/quartermaster/miningdock) "oYa" = ( /obj/structure/cable/orange{ d1 = 2; @@ -69000,6 +70489,7 @@ name = "Aft Asteroid Maintenance"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/hallway/secondary/exit) "peG" = ( @@ -69088,6 +70578,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -69155,11 +70646,13 @@ name = "External Airlock Access"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/hallway/primary/aft/west) "phD" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/secondary/entry/north) "phM" = ( @@ -69230,6 +70723,15 @@ /obj/machinery/recharge_station, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) +"piG" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "piO" = ( /obj/effect/spawner/grouped_spawner{ group_id = "tunnelbats"; @@ -69266,6 +70768,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whiteblue" @@ -69686,6 +71189,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboardsolar) "pqg" = ( @@ -69798,6 +71302,10 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/theatre) +"prL" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/carpet/green, +/area/library) "prN" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -69832,12 +71340,13 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/chapel/office) "psy" = ( -/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/security/range) "psE" = ( @@ -70008,6 +71517,10 @@ icon_state = "asteroidplating" }, /area/hallway/spacebridge/scidock) +"pvE" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/hallway/primary/starboard/south) "pvH" = ( /obj/structure/chair/sofa/pew/right{ dir = 8 @@ -70141,6 +71654,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboardsolar/aft) "pyp" = ( @@ -70165,6 +71679,15 @@ /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/plating/asteroid/ancient, /area/maintenance/starboard) +"pyN" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/asmaint) "pzi" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/window/reinforced, @@ -70259,6 +71782,15 @@ icon_state = "bar" }, /area/crew_quarters/theatre) +"pAm" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/port/north) "pAr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -70577,6 +72109,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/aft/west) "pGv" = ( @@ -71124,6 +72657,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -71207,6 +72741,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "bluecorner" @@ -71314,6 +72849,7 @@ d2 = 2; icon_state = "0-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/asmaint) "pVt" = ( @@ -71428,6 +72964,7 @@ /obj/item/stack/ore/iron, /obj/item/stack/ore/iron, /obj/item/stack/ore/gold, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/apmaint) "pWE" = ( @@ -71449,6 +72986,7 @@ name = "Port Asteroid Maintenance"; req_access_txt = "46" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/port) "pWW" = ( @@ -71583,6 +73121,7 @@ name = "EXTERNAL AIRLOCK"; pixel_x = -32 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/secondary/entry/north) "pYs" = ( @@ -71823,6 +73362,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -71985,6 +73525,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -72123,6 +73664,15 @@ }, /turf/simulated/floor/engine, /area/engine/engineering) +"qiD" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/fore) "qiI" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -72150,6 +73700,11 @@ icon_state = "neutralcorner" }, /area/hallway/primary/starboard/north) +"qiY" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/security/vacantoffice) "qji" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -72159,10 +73714,15 @@ }, /turf/simulated/floor/wood, /area/library) +"qjo" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/electrical_shop) "qjr" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ level = 2 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port2) "qjv" = ( @@ -72412,6 +73972,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -72554,11 +74115,21 @@ }, /turf/simulated/floor/plating, /area/maintenance/apmaint) +"qnZ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/crew_quarters/bar) "qob" = ( /obj/machinery/light/small{ dir = 1 }, /obj/effect/turf_decal/stripes/line, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/external/east) "qoo" = ( @@ -72822,6 +74393,7 @@ req_one_access_txt = "19;41"; pixel_y = 24 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "qsf" = ( @@ -72946,6 +74518,13 @@ icon_state = "whiteblue" }, /area/medical/cmostore) +"qul" = ( +/obj/structure/closet/firecloset, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) "qut" = ( /obj/structure/lattice/catwalk, /obj/machinery/power/tracker, @@ -73292,6 +74871,15 @@ icon_state = "white" }, /area/toxins/misc_lab) +"qBq" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "qBx" = ( /obj/structure/disposalpipe/segment{ color = "#954535" @@ -73370,6 +74958,15 @@ icon_state = "neutralcorner" }, /area/hallway/secondary/entry/north) +"qCM" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "qCO" = ( /obj/machinery/newscaster{ pixel_y = -28; @@ -73397,6 +74994,12 @@ /obj/structure/curtain/open/shower, /turf/simulated/floor/plasteel/freezer, /area/crew_quarters/toilet) +"qDm" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/hallway/primary/fore/west) "qDG" = ( /obj/machinery/camera{ c_tag = "Civilian Escape Pod" @@ -73510,6 +75113,15 @@ icon_state = "white" }, /area/medical/medbay) +"qFy" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "qFM" = ( /obj/machinery/hologram/holopad, /obj/structure/disposalpipe/segment{ @@ -73636,6 +75248,7 @@ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "qHv" = ( @@ -73715,6 +75328,13 @@ icon_state = "white" }, /area/toxins/misc_lab) +"qIf" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkredcorners" + }, +/area/security/prison/cell_block/A) "qIi" = ( /obj/machinery/door_control{ id = "kitchen1"; @@ -73746,10 +75366,20 @@ "qIF" = ( /turf/simulated/mineral/ancient, /area/quartermaster/office) +"qIO" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "qIR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 6 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/storage) "qIV" = ( @@ -73876,6 +75506,18 @@ }, /turf/simulated/floor/plasteel/white, /area/toxins/xenobiology) +"qKX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/secondary/entry/south) "qLv" = ( /obj/structure/cable{ d1 = 1; @@ -74053,10 +75695,27 @@ }, /turf/simulated/floor/plating, /area/medical/cmo) +"qOT" = ( +/obj/machinery/door/airlock/maintenance{ + name = "Starboard Asteroid Maintenance Access"; + req_access_txt = "12" + }, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "qOY" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/wood, /area/crew_quarters/theatre) +"qPe" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/hallway/primary/fore/west) "qPf" = ( /obj/effect/spawner/window/reinforced/polarized{ id = "cmo" @@ -74079,6 +75738,18 @@ }, /turf/simulated/floor/plating, /area/medical/cmo) +"qPM" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "qPQ" = ( /obj/structure/disposalpipe/segment/corner{ dir = 8 @@ -74148,6 +75819,21 @@ icon_state = "browncorner" }, /area/hallway/primary/fore/east) +"qRb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/maintcentral) "qRl" = ( /obj/machinery/chem_heater, /turf/simulated/floor/plating{ @@ -74226,6 +75912,18 @@ icon_state = "purplecorner" }, /area/hallway/primary/aft/west) +"qTC" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "qUd" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ @@ -74307,6 +76005,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/north) "qVZ" = ( @@ -74466,6 +76165,10 @@ icon_state = "whiteblue" }, /area/medical/reception) +"qYZ" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/port/north) "qZt" = ( /obj/structure/chair, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -74508,6 +76211,7 @@ /obj/structure/disposalpipe/segment, /obj/item/assembly/mousetrap/armed, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboard) "qZT" = ( @@ -74649,6 +76353,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/gambling_den) "rdq" = ( @@ -74683,6 +76388,7 @@ /obj/machinery/atmospherics/unary/portables_connector{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/maintcentral) "rep" = ( @@ -74697,6 +76403,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "rez" = ( @@ -74772,8 +76479,14 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) +"rhe" = ( +/obj/structure/closet/emcloset, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/central) "rhg" = ( /obj/structure/disposalpipe/junction/reversed{ dir = 1 @@ -74798,6 +76511,7 @@ /area/maintenance/port) "rhQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -74955,6 +76669,13 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboard) +"rkC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "rkP" = ( /obj/machinery/kitchen_machine/candy_maker, /turf/simulated/floor/plasteel/freezer, @@ -74982,6 +76703,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/asmaint) "rlz" = ( @@ -75399,6 +77121,7 @@ d2 = 4; icon_state = "2-4" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/apmaint) "rtt" = ( @@ -75441,6 +77164,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "ruh" = ( @@ -75491,6 +77215,14 @@ icon_state = "white" }, /area/toxins/misc_lab) +"rvR" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ + dir = 1; + level = 2 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "rvX" = ( /obj/machinery/camera{ c_tag = "Cargo Bay SMES"; @@ -75564,6 +77296,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkredcorners" @@ -75586,6 +77319,7 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -75597,6 +77331,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "ryn" = ( @@ -75652,6 +77387,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -75707,6 +77443,22 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plating, +/area/maintenance/port) +"rAr" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "rAB" = ( @@ -75990,6 +77742,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "rFb" = ( @@ -76145,6 +77898,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/apmaint) "rIn" = ( @@ -76266,11 +78020,22 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, /area/hallway/primary/aft/west) +"rKa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fpmaint) "rKr" = ( /obj/structure/table/wood, /turf/simulated/floor/plating, @@ -76329,6 +78094,10 @@ /obj/item/storage/firstaid/regular, /turf/simulated/floor/mineral/titanium, /area/shuttle/arrival/station) +"rLz" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/storage) "rLA" = ( /obj/structure/cable/orange{ d1 = 4; @@ -76625,6 +78394,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -76706,6 +78476,7 @@ name = "Aft Asteroid Maintenance"; req_access_txt = "55" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/toxins/xenobiology) "rRD" = ( @@ -76833,6 +78604,7 @@ name = "Central Access" }, /obj/effect/turf_decal/stripes/line, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -76926,6 +78698,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "rVX" = ( @@ -77165,6 +78938,7 @@ d2 = 8; icon_state = "0-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboardsolar/aft) "saJ" = ( @@ -77231,6 +79005,11 @@ }, /turf/space, /area/space/nearstation) +"sbZ" = ( +/obj/structure/grille/broken, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/asteroid/ancient, +/area/maintenance/port) "scd" = ( /obj/structure/cable{ d1 = 2; @@ -77241,6 +79020,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/visible, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "scE" = ( @@ -77295,6 +79075,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "sdo" = ( @@ -77392,6 +79173,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -77497,6 +79279,27 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/maintenance/disposal/external/southeast) +"sfU" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/maintenance/disposal/northeast) +"sfX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "redcorner" + }, +/area/hallway/primary/fore/west) "sfZ" = ( /obj/structure/disposaloutlet{ dir = 4 @@ -77764,6 +79567,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/asmaint) "sjC" = ( @@ -78028,6 +79832,7 @@ name = "EXTERNAL AIRLOCK"; pixel_x = 32 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/aft/west) "snX" = ( @@ -78095,6 +79900,18 @@ /obj/structure/cable, /turf/simulated/floor/plating, /area/hallway/secondary/entry/north) +"srb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/maintenance/disposal) "sri" = ( /obj/structure/chair/stool{ dir = 8 @@ -78226,6 +80043,13 @@ /obj/machinery/light/small, /turf/simulated/floor/plating, /area/maintenance/port2) +"ssJ" = ( +/obj/machinery/light/small, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/medical/morgue) "ssP" = ( /obj/structure/cable/orange{ d1 = 4; @@ -78367,6 +80191,7 @@ name = "EXTERNAL AIRLOCK"; pixel_y = -32 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "stJ" = ( @@ -78396,6 +80221,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -78710,6 +80536,15 @@ }, /turf/simulated/floor/plating, /area/toxins/xenobiology) +"sAw" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "sAB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/engine, @@ -79375,6 +81210,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 5 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/external/southwest) "sOL" = ( @@ -79489,6 +81325,10 @@ icon_state = "asteroidplating" }, /area/maintenance/port2) +"sQf" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "sQj" = ( /obj/machinery/light{ dir = 8 @@ -79498,6 +81338,7 @@ name = "custom placement" }, /obj/machinery/economy/vending/cigarette, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "escape" @@ -79515,6 +81356,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -79937,6 +81779,7 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/crew_quarters/locker) "sYa" = ( @@ -80099,6 +81942,7 @@ pixel_y = -28; name = "custom placement" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/northeast) "taN" = ( @@ -80123,6 +81967,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/gambling_den) "taW" = ( @@ -80287,6 +82132,15 @@ icon_state = "neutralcorner" }, /area/hallway/primary/port/east) +"tfP" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "tfU" = ( /obj/machinery/camera{ c_tag = "Service Asteroid Hallway 7" @@ -80674,6 +82528,18 @@ icon_state = "whiteblue" }, /area/medical/medbay) +"tlF" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fsmaint) "tlJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -80681,6 +82547,13 @@ /obj/structure/grille/broken, /turf/simulated/floor/plating/asteroid/ancient, /area/maintenance/starboard) +"tlM" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/central) "tlN" = ( /obj/machinery/power/apc{ dir = 8; @@ -80817,6 +82690,10 @@ }, /turf/simulated/floor/wood, /area/clownoffice) +"toC" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel, +/area/quartermaster/miningdock) "tpl" = ( /turf/simulated/floor/plating/airless, /area/toxins/test_area) @@ -81024,6 +82901,7 @@ /obj/structure/disposalpipe/segment/corner{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) "ttA" = ( @@ -81161,6 +83039,15 @@ icon_state = "neutralcorner" }, /area/hallway/primary/central) +"tvI" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-21" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/crew_quarters/bar) "tvP" = ( /obj/machinery/smartfridge/secure/extract, /turf/simulated/floor/plasteel{ @@ -81237,10 +83124,21 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/maintenance/fpmaint) +"twy" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/security/permabrig) "twV" = ( /obj/structure/flora/ausbushes/sunnybush, /turf/simulated/floor/grass, /area/hydroponics) +"twW" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/primary/fore) "twY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -81461,6 +83359,7 @@ pixel_x = 24 }, /obj/structure/cable/orange, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating/airless, /area/toxins/test_area) "tzW" = ( @@ -81526,6 +83425,11 @@ icon_state = "neutralfull" }, /area/hallway/primary/starboard/south) +"tBq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/storage) "tBG" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/window/reinforced, @@ -81665,6 +83569,15 @@ icon_state = "darkbrown" }, /area/quartermaster/office) +"tEK" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plasteel{ + icon_state = "redyellowfull" + }, +/area/crew_quarters/bar) "tEV" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -81775,12 +83688,14 @@ name = "Mining Warehouse Shutters"; pixel_y = 24 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/quartermaster/miningdock) "tGI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_regular_floor = "yellowsiding"; @@ -81891,6 +83806,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/engine, /area/engine/engineering) +"tJb" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/hallway/primary/central) "tJd" = ( /obj/structure/closet/crate/freezer/iv_storage, /obj/machinery/power/apc{ @@ -81955,6 +83874,11 @@ icon_state = "dark" }, /area/quartermaster/office) +"tKf" = ( +/obj/structure/table, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/central) "tKm" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -81989,6 +83913,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -82001,6 +83926,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -82030,6 +83956,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -82102,6 +84029,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/security/vacantoffice) "tMa" = ( @@ -82210,6 +84138,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -82313,6 +84242,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/asmaint) "tSt" = ( @@ -82346,6 +84276,7 @@ /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/north) "tTD" = ( @@ -82421,6 +84352,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/north) "tVf" = ( @@ -82654,6 +84586,7 @@ d2 = 8; icon_state = "0-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "tXQ" = ( @@ -83036,6 +84969,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -83049,6 +84983,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port2) "ueB" = ( @@ -83177,6 +85112,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/central) "uho" = ( @@ -83270,6 +85206,7 @@ /obj/structure/disposalpipe/segment/corner{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/security/vacantoffice) "ujm" = ( @@ -83316,6 +85253,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/clownoffice/secret) "ujN" = ( @@ -83348,6 +85286,7 @@ /turf/simulated/floor/plasteel, /area/security/lobby) "ujR" = ( +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkredcorners" @@ -83479,6 +85418,10 @@ icon_state = "dark" }, /area/medical/morgue) +"ulb" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating/airless, +/area/toxins/test_area) "ulj" = ( /turf/simulated/floor/wood, /area/crew_quarters/courtroom) @@ -83815,6 +85758,10 @@ slowdown = -0.3 }, /area/hallway/spacebridge/servsci) +"usR" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/aft/west) "utp" = ( /obj/structure/rack, /obj/item/stack/sheet/metal/fifty, @@ -83886,6 +85833,10 @@ }, /turf/simulated/floor/engine, /area/toxins/mixing) +"uui" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/security/vacantoffice) "uuj" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, @@ -84278,6 +86229,7 @@ /area/medical/medbay) "uAT" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -84487,8 +86439,13 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/apmaint) +"uFX" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fpmaint) "uGb" = ( /obj/structure/cable/orange{ d1 = 4; @@ -84531,6 +86488,15 @@ icon_state = "dark" }, /area/quartermaster/storage) +"uGK" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/transparent/glass/reinforced, +/area/maintenance/apmaint) "uGM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/atmos{ @@ -84582,6 +86548,12 @@ icon_state = "white" }, /area/toxins/misc_lab) +"uHI" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/hallway/secondary/exit) "uHJ" = ( /obj/machinery/firealarm{ dir = 1; @@ -84686,6 +86658,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -84800,6 +86773,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/electrical_shop) "uMl" = ( @@ -84937,6 +86911,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/asmaint) "uOu" = ( @@ -85034,6 +87009,7 @@ name = "Hydroponics"; req_access_txt = "35" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/gambling_den) "uQf" = ( @@ -85062,6 +87038,10 @@ icon_state = "asteroidplating" }, /area/maintenance/gambling_den) +"uQl" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/carpet, +/area/crew_quarters/locker) "uQm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -85192,6 +87172,7 @@ name = "External Airlock Access"; req_access_txt = "12" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/starboard) "uSb" = ( @@ -85211,6 +87192,7 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/north) "uSc" = ( @@ -85519,6 +87501,7 @@ "uVJ" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/grille/broken, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/external/east) "uVV" = ( @@ -85528,6 +87511,7 @@ /obj/machinery/atmospherics/binary/valve/open{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "uVW" = ( @@ -85537,6 +87521,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/universal{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "uWc" = ( @@ -85632,6 +87617,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/maintcentral) "uYj" = ( @@ -85652,6 +87638,7 @@ req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/apmaint) "uYU" = ( @@ -85681,6 +87668,19 @@ icon_state = "whiteblue" }, /area/medical/medbay) +"uZe" = ( +/obj/structure/grille/broken, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "uZl" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/orange{ @@ -85936,6 +87936,14 @@ icon_state = "asteroidplating" }, /area/medical/virology) +"vdJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) "vdN" = ( /obj/machinery/power/apc{ name = "south bump"; @@ -86112,6 +88120,15 @@ icon_state = "arrival" }, /area/hallway/secondary/entry/south) +"vjc" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "vjl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -86147,6 +88164,15 @@ icon_state = "dark" }, /area/ai_monitored/storage/eva) +"vjP" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fpmaint) "vka" = ( /obj/structure/table, /obj/machinery/cell_charger, @@ -86394,6 +88420,7 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/visible, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "voE" = ( @@ -86633,6 +88660,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -86640,6 +88668,7 @@ /area/hallway/primary/aft/east) "vrm" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/cyan, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "vro" = ( @@ -86692,6 +88721,13 @@ icon_state = "darkredcorners" }, /area/security/prison/cell_block/A) +"vsp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/hallway/primary/port/south) "vsu" = ( /obj/structure/filingcabinet, /turf/simulated/floor/wood, @@ -86704,6 +88740,7 @@ dir = 5; level = 2 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) "vsE" = ( @@ -86943,6 +88980,7 @@ name = "Central Access" }, /obj/effect/turf_decal/stripes/line, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -87089,6 +89127,7 @@ /area/assembly/robotics) "vxU" = ( /obj/item/clothing/head/cone, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "vxY" = ( @@ -87172,14 +89211,28 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/gambling_den) "vzJ" = ( /obj/structure/disposalpipe/segment/corner{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/south) +"vAa" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore2) "vAg" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -87228,6 +89281,7 @@ name = "EXTERNAL AIRLOCK"; pixel_x = 32 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "vBa" = ( @@ -87298,10 +89352,6 @@ icon_state = "dark" }, /area/atmos) -"vBO" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/wall, -/area/hallway/primary/starboard/south) "vBP" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 1 @@ -87494,6 +89544,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkgreenfull" @@ -87771,6 +89822,18 @@ icon_state = "neutralcorner" }, /area/crew_quarters/locker) +"vKl" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/fore) "vKJ" = ( /obj/item/radio/intercom{ pixel_x = -28; @@ -88023,6 +90086,11 @@ "vOI" = ( /turf/simulated/floor/carpet/cyan, /area/crew_quarters/fitness) +"vOP" = ( +/obj/effect/landmark/start/shaft_miner, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel, +/area/quartermaster/miningdock) "vPs" = ( /obj/machinery/light{ dir = 8 @@ -88118,8 +90186,18 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/hallway/primary/starboard/south) +"vQQ" = ( +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel, +/area/quartermaster/office) "vQR" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 @@ -88279,6 +90357,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/quartermaster/office) "vSy" = ( @@ -88364,6 +90443,13 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/captain) +"vUy" = ( +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkgreenfull" + }, +/area/hydroponics) "vUJ" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -88391,6 +90477,7 @@ pixel_y = -24; name = "south bump" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/engine, /area/toxins/misc_lab) "vVG" = ( @@ -88402,6 +90489,11 @@ icon_state = "dark" }, /area/quartermaster/office) +"vVI" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/hallway/primary/fore) "vVL" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -88585,6 +90677,10 @@ "vZg" = ( /turf/simulated/mineral/ancient, /area/maintenance/disposal/east) +"vZh" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "vZj" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -88757,6 +90853,10 @@ /obj/structure/grille/broken, /turf/simulated/floor/plating, /area/maintenance/asmaint) +"wcs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/gambling_den) "wcY" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/stripes/line{ @@ -88800,6 +90900,7 @@ dir = 4 }, /obj/structure/fans/tiny, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/apmaint) "weN" = ( @@ -88895,6 +90996,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whiteblue" @@ -88902,6 +91004,7 @@ /area/medical/medbay) "wfX" = ( /mob/living/simple_animal/mouse, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/starboard) "wgh" = ( @@ -89220,6 +91323,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/port) "wkq" = ( @@ -89454,6 +91558,10 @@ dir = 8 }, /area/engine/engineering) +"woG" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/disposal/north) "woL" = ( /obj/structure/cable/orange{ d1 = 4; @@ -89481,6 +91589,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -89524,6 +91633,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/maintcentral) "wpF" = ( @@ -89561,6 +91671,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -89711,6 +91822,10 @@ icon_state = "neutralcorner" }, /area/hallway/primary/port/south) +"wrr" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "wry" = ( /obj/machinery/light{ dir = 1 @@ -89759,6 +91874,7 @@ icon_state = "4-8" }, /obj/item/assembly/mousetrap/armed, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore2) "wst" = ( @@ -90317,6 +92433,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/west) "wAb" = ( @@ -90381,6 +92498,16 @@ "wAG" = ( /turf/simulated/floor/plasteel/white, /area/toxins/xenobiology) +"wAI" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/primary/port/south) "wAL" = ( /obj/structure/shuttle/engine/propulsion/burst{ dir = 8 @@ -90423,6 +92550,7 @@ icon_state = "4-8" }, /obj/item/assembly/mousetrap/armed, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/transparent/glass/reinforced, /area/maintenance/port) "wBp" = ( @@ -90506,6 +92634,7 @@ req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/maintcentral) "wBQ" = ( @@ -90575,6 +92704,7 @@ name = "Port Asteroid Maintenance"; req_access_txt = "12" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/crew_quarters/fitness) "wCP" = ( @@ -90945,6 +93075,11 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint) +"wJe" = ( +/obj/structure/table, +/obj/machinery/light/small, +/turf/simulated/floor/plasteel, +/area/crew_quarters/locker) "wJk" = ( /obj/machinery/camera{ c_tag = "Research Director's Office"; @@ -91136,6 +93271,10 @@ icon_state = "white" }, /area/medical/medbay) +"wMO" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/disposal/south) "wMV" = ( /obj/structure/cable{ d1 = 4; @@ -91389,6 +93528,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/engine, /area/toxins/explab_chamber) +"wRS" = ( +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "wSk" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/carpet, @@ -91508,6 +93654,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -91588,6 +93735,7 @@ /obj/machinery/camera{ c_tag = "Service Atmospherics Checkpoint" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port2) "wWf" = ( @@ -91920,6 +94068,7 @@ /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/secondary/entry/north) "xby" = ( @@ -92020,6 +94169,7 @@ pixel_y = -24; name = "south bump" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -92402,6 +94552,7 @@ /area/library) "xkd" = ( /obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -92515,6 +94666,7 @@ /turf/simulated/floor/wood, /area/maintenance/gambling_den) "xnc" = ( +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/maintenance/disposal/external/southwest) "xnz" = ( @@ -92775,6 +94927,7 @@ pixel_y = -24; name = "south bump" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -92791,6 +94944,7 @@ name = "Morgue"; req_access_txt = "6" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -92862,6 +95016,10 @@ icon_state = "darkred" }, /area/security/checkpoint2) +"xwo" = ( +/obj/structure/falsewall/rock_ancient, +/turf/simulated/floor/plasteel, +/area/crew_quarters/locker) "xwI" = ( /turf/simulated/floor/engine{ slowdown = -0.3 @@ -93130,6 +95288,7 @@ pixel_x = 24; name = "east bump" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "bluecorner" @@ -93320,6 +95479,12 @@ "xEp" = ( /turf/space, /area/shuttle/gamma/station) +"xEI" = ( +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/genetics) "xEJ" = ( /obj/effect/turf_decal/bot, /obj/machinery/shieldwallgen, @@ -93621,6 +95786,7 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore2) "xLq" = ( @@ -93697,6 +95863,7 @@ /obj/machinery/hydroponics/soil, /obj/item/seeds/poppy, /obj/effect/decal/cleanable/cobweb, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/apmaint) "xMQ" = ( @@ -93725,6 +95892,23 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/courtroom) +"xNB" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/starboard) "xNC" = ( /obj/structure/bed, /obj/item/bedsheet/captain, @@ -94039,6 +96223,7 @@ d2 = 8; icon_state = "1-8" }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/asmaint) "xSW" = ( @@ -94177,6 +96362,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/hallway/primary/starboard/north) "xVY" = ( @@ -94249,6 +96435,7 @@ name = "Cargo SMES Access"; req_access_txt = "10" }, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/fsmaint) "xXN" = ( @@ -94327,6 +96514,10 @@ "xYZ" = ( /turf/simulated/wall, /area/bridge) +"xZb" = ( +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/carpet/arcade, +/area/crew_quarters/arcade) "xZe" = ( /obj/structure/cable/orange{ d1 = 4; @@ -94376,6 +96567,7 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/maintenance/starboard) "xZI" = ( @@ -94715,6 +96907,7 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/southwest) "ygF" = ( @@ -94756,6 +96949,13 @@ icon_state = "wood-broken" }, /area/maintenance/asmaint) +"yhn" = ( +/obj/effect/spawner/random_spawners/dirt_frequent, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "bluecorner" + }, +/area/hallway/primary/starboard/north) "yhs" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/spawner/lootdrop/maintenance, @@ -94899,6 +97099,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/disposal/west) "yjd" = ( @@ -94941,6 +97142,11 @@ icon_state = "neutralcorner" }, /area/hallway/primary/fore/west) +"yjC" = ( +/obj/effect/turf_decal/stripes/line, +/obj/effect/spawner/random_spawners/dirt_often, +/turf/simulated/floor/plating, +/area/maintenance/disposal/external/southeast) "yjI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/engine{ @@ -95001,6 +97207,7 @@ }, /obj/structure/disposalpipe/segment, /obj/item/assembly/mousetrap/armed, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "ylz" = ( @@ -95034,6 +97241,7 @@ "ylJ" = ( /obj/structure/grille/broken, /obj/item/clothing/head/cone, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/port) "ylX" = ( @@ -100644,7 +102852,7 @@ sWf sWf mSS tpl -tpl +ulb rXn rNK rNK @@ -100891,7 +103099,7 @@ rNK rNK rNK rXn -tpl +ulb tpl aad aad @@ -101150,7 +103358,7 @@ rNK rXn xVs tpl -tpl +ulb aad sWf tpl @@ -103842,7 +106050,7 @@ bZA bZA oOL cdC -cdD +kWe cdV lBh ciC @@ -104445,10 +106653,10 @@ bhO bhO rho inP -jee +sQf bSG ikI -jee +sQf rho aXn aXn @@ -104716,7 +106924,7 @@ uCK eoD uCK uCK -jee +sQf uCK wzC lkh @@ -104885,7 +107093,7 @@ cca ubY ubY ubY -bTL +byK ubY ubY mPd @@ -104968,17 +107176,17 @@ aXn pXy rho vvt -bQY -tIM -tIM +wRS +nVL tIM +nVL xaR xaR xaR lhM fFl smJ -jUn +oig whg uCK uCK @@ -105233,7 +107441,7 @@ jKo bVF pFm pFm -fYK +nZe vtY vtY vtY @@ -105392,7 +107600,7 @@ dvE sji sji nxA -xcD +vjP xJa xJa xJa @@ -105402,7 +107610,7 @@ xJa xJa xJa xJa -xcD +vjP nxA vbu xJa @@ -105480,7 +107688,7 @@ eCI uCK xZA pXy -jee +sQf eCI wzC bXK @@ -105743,7 +107951,7 @@ bXl bXL off uCK -liJ +piG rho rho pXy @@ -105987,11 +108195,11 @@ pXy xZA uCK bQY -tIM +nVL bSI +nVL tIM -tIM -mHH +gPW bVi xaR xaR @@ -106008,7 +108216,7 @@ vtY vtY bWr fOt -cRz +biS mhA xud bWr @@ -106214,7 +108422,7 @@ rho usD vtY vtY -jee +sQf jee jee aBa @@ -106237,18 +108445,18 @@ xaR xaR tIM tIM +nVL tIM -tIM -tIM +nVL kjq xaR xaR -mHH +gPW pUs aoc pFm pFm -bVF +lPM qJw uCK uCK @@ -106266,7 +108474,7 @@ vtY bWr ekt lHG -cRz +biS cRz cRq vtY @@ -106473,7 +108681,7 @@ ktW cNW sNu mYL -jee +sQf vtY aXn aXn @@ -106489,11 +108697,11 @@ uvT ePb wQh xyf -pTp +jxU pTp yli pTp -pTp +jxU xyf jvx pFm @@ -106721,14 +108929,14 @@ hUU hUU pXy uCK -liJ +piG oLZ lcq cNe -cNX +iIc lcq cNX -cNX +iIc pOW lRb pXy @@ -106744,14 +108952,14 @@ vvU bxf qHC ePb -yfx +rAr rho pXy rho eCI vtY lkL -jee +sQf iWO vtY pXy @@ -106929,7 +109137,7 @@ xEp xEp xEp uuj -duh +uFX xJa bnq gLH @@ -106997,10 +109205,10 @@ wMe gjM qOA bxf -bxf +qjo gsc qHC -ePb +hxZ elJ rho usD @@ -107009,7 +109217,7 @@ jee vtY vtY cWr -liJ +piG bMX rho vtY @@ -107207,7 +109415,7 @@ cKG aTR cSJ vFB -xcD +vjP doo dDB emn @@ -107244,7 +109452,7 @@ kmZ opp cMT cUx -eoX +uZe vtY aXn aXn @@ -107267,7 +109475,7 @@ vtY vtY tXA liJ -jee +sQf rho vtY vtY @@ -107496,7 +109704,7 @@ cUx bfA cMT cNh -cNh +nFi tGI qsR cMT @@ -107511,10 +109719,10 @@ tSB ujX uMf vdX -bxf +qjo byh bzd -ePb +hxZ elJ wGX vtY @@ -108100,7 +110308,7 @@ enx okt lRZ nDQ -qll +cLX uCu ftr ftr @@ -108215,7 +110423,7 @@ xEp xEp yhW xJa -duh +uFX xJa gLH xhk @@ -108258,12 +110466,12 @@ pXy pXy ccx eCI -jee -aZT +sQf +sbZ vtY vtY cUx -kWm +qFy vtY cMT cNj @@ -108286,7 +110494,7 @@ vxU vtY vtY ePb -yfx +rAr rho vtY vtY @@ -108535,14 +110743,14 @@ xaR tIM xaR tpC -tIM +nVL xaR xaR ewd tIM xaR tIM -mHH +gPW her thz rho @@ -108750,11 +110958,11 @@ dkp cSV dkq dkq -doO +dLM uuj uuj uuj -gsx +rKa hxO uuj abW @@ -108788,7 +110996,7 @@ cMT rdc ksc veQ -pTp +jxU pTp xyf tpK @@ -108797,15 +111005,15 @@ uko xyf gLV xyf -pTp +jxU xyf rZO wxr bsv xaR okB -xqN -xqN +esC +esC sUt dvq dvq @@ -109027,7 +111235,7 @@ rNK pXy mGY mON -jee +sQf pXy pXy bav @@ -109061,8 +111269,8 @@ lhM jAn xGu dLO -ybP -ybP +prL +prL voH ybP ybP @@ -109132,9 +111340,9 @@ wXW wXW wXW jiS -rza +wrr czM -rza +wrr wqx ccW ccW @@ -109269,7 +111477,7 @@ caM aYk fIg gsx -duh +uFX duh abW cRv @@ -109289,7 +111497,7 @@ pXy aXn bav nLm -occ +iJL wkb occ oMz @@ -109389,7 +111597,7 @@ hTx nyp wXW lZz -rza +wrr ftr nLO iFs @@ -109405,7 +111613,7 @@ wiu ore njB fkk -gRu +wMO kIn wzo rNK @@ -109557,7 +111765,7 @@ dSI iHW cMT faP -yfx +rAr pXy vtY ngi @@ -109645,7 +111853,7 @@ iSc oqU ejh wXW -lZz +fTU wsR pDu ftr @@ -109906,14 +112114,14 @@ dCt irG czI cAa -czI +iXa czI cAa irG irG irG irG -czI +iXa czI wqE oyp @@ -110040,7 +112248,7 @@ ceI evb ice gvj -cWq +jIi cWq abW abW @@ -110135,7 +112343,7 @@ ccW ccW ccW ccW -chQ +lnp ccW ccW ccW @@ -110176,7 +112384,7 @@ lMr orU ron pBh -gRu +wMO lSE cTh rNK @@ -110297,7 +112505,7 @@ dIS xdo ice gvj -cWq +jIi ioO abW abW @@ -110316,7 +112524,7 @@ hUU aXn mJl nHK -bzj +qYZ uSv uSv uSv @@ -110327,7 +112535,7 @@ wdJ sED gKp cMT -faP +qPM yfx pXy slv @@ -110341,7 +112549,7 @@ sSi sSi vTq lsD -mdH +bKG ngi bfx eoD @@ -110585,7 +112793,7 @@ dSI bhA cMT faP -yfx +rAr pXy iqZ sBY @@ -110648,7 +112856,7 @@ fxg nOP yez cea -chQ +usR chQ chQ tuK @@ -110808,12 +113016,12 @@ cYh qCk dpV dKM -evL +qDm ice gzo +qPe hzg -hzg -hzg +qPe jSK hzg kGG @@ -110831,10 +113039,10 @@ pvQ bwe lWb baz +pAm +pAm bwe -bwe -bwe -bwe +pAm bdR cMT naR @@ -111357,7 +113565,7 @@ jNk lQs tKv nvl -grv +mLL fob ssP sSm @@ -111370,7 +113578,7 @@ qNk fbd oeu lDm -lDm +ekQ udF jJv oBY @@ -111423,7 +113631,7 @@ gwg qbD rJQ jGx -gwg +ons qoF oop gwg @@ -111657,7 +113865,7 @@ ecG mCM mCM iOk -bmJ +wAI mCM mGM mCM @@ -111915,7 +114123,7 @@ joj xXt ryX eqb -uyf +jzB mnu uyf uyf @@ -112055,7 +114263,7 @@ vNP duL afd swk -vdq +gTs dxf dqe lzY @@ -112686,7 +114894,7 @@ biB prN btd oQK -uwu +vsp uwu jFT mIs @@ -112944,7 +115152,7 @@ bld ueB sbn oPR -tlb +ciP tlb ehr hHb @@ -112992,7 +115200,7 @@ wIq jiS sKh sKh -rza +wrr rza mKh kVQ @@ -113078,7 +115286,7 @@ aTz aTz afd jDO -vNP +twy ahP pLx ajM @@ -113202,7 +115410,7 @@ ueB sbn hHb wph -jAd +wcs wph wph caw @@ -113336,7 +115544,7 @@ adr adC alr afJ -vdq +dqz dQE mYJ afd @@ -113508,7 +115716,7 @@ wIq czA pDu pDu -dsY +eFz npL rWw rWw @@ -113654,7 +115862,7 @@ aXn aXn cEM ncn -fXI +oiO kWu kWu pwt @@ -113766,7 +115974,7 @@ quI quI sKh dsY -rza +wrr ccW rWw cdb @@ -113854,11 +116062,11 @@ aiF rHj ajO adc -vdq +dqz rHj afd jQe -aQL +dRz afd rNK gmC @@ -113911,7 +116119,7 @@ hUU hUU cEM ncn -fXI +oiO kWu wry cFF @@ -113977,7 +116185,7 @@ amc btd sbn wph -jAd +wcs xgU sbn hUU @@ -114100,11 +116308,11 @@ rNK rNK abO dmK -vNP +twy aQL adc rHj -vNP +twy aQL agd rHj @@ -114234,7 +116442,7 @@ etV btd sbn wph -jAd +wcs eVQ sbn hUU @@ -114279,7 +116487,7 @@ wRF cwV quI sKh -dsY +eFz jfl ccW uyl @@ -114366,9 +116574,9 @@ aet agf vdq vdq -vdq +dqz vNP -vdq +dqz alu afd dqf @@ -114425,7 +116633,7 @@ rNK hUU cEM ncn -fXI +oiO kWu kWu ckB @@ -114883,7 +117091,7 @@ aja dpl dpl akK -vNP +twy rHj aix vpw @@ -115000,8 +117208,8 @@ mgV mgV mgV btd -prN -prN +vUy +cwA btd sbn wph @@ -115050,8 +117258,8 @@ rUV eru quI cAx -dsY -rza +eFz +wrr ccW uyl cCw @@ -115135,7 +117343,7 @@ aTz adL nWK dBG -vdq +dqz rHj rHj rHj @@ -115261,8 +117469,8 @@ uQe pnr btd gBI -jAd -jAd +wcs +wcs sbn hUU bhO @@ -115460,8 +117668,8 @@ kWu ejH ghX cFF -cFF -cFF +lGy +lGy cFF cFF cFF @@ -115716,9 +117924,9 @@ nIF kWu jsY nOx -cFF -cFF -cFF +lGy +lGy +lGy cFF cFF cFF @@ -116003,13 +118211,13 @@ bjr pWg pWg chb -fqu -bjr +qnZ +hoR fqu qkv mrt qfr -mrt +juZ uzY pWc ogl @@ -116169,9 +118377,9 @@ oic rHj rHj cgX -vNP +twy dqz -vNP +twy rHj ard afd @@ -116260,12 +118468,12 @@ ujE wzA mHO iPY -fqu -pOY +tEK +tvI vxE baF nJR -qfr +jPR nRM uzY gGj @@ -116332,14 +118540,14 @@ pwx pwx asL czb -pwx +vdJ kRz keU hUy wpX kmu gYX -pwx +vdJ oqN hmk vDm @@ -116493,9 +118701,9 @@ mqw mqw uKU fru +jlK nEk -nEk -nEk +jlK nEk nNm spx @@ -116595,7 +118803,7 @@ pon gYw fNF cGd -pqg +qul lTx gYT pqm @@ -116685,7 +118893,7 @@ aTz aTz aTz afd -vrQ +mSg mVr arh fqh @@ -116750,7 +118958,7 @@ ncn ncn nIF crk -qxQ +ikf qxQ qxQ uer @@ -116788,7 +118996,7 @@ sbn vBV wpF wpF -wAq +irr dSA nRk vRn @@ -117040,7 +119248,7 @@ wXm vFf wCB wpF -wAq +irr jrM kdQ caw @@ -117343,7 +119551,7 @@ gPL dXV gPG clY -clY +jQL nIL kbd cGd @@ -117364,7 +119572,7 @@ qsM jBW cBM wGy -rza +wrr ftr ftr cdb @@ -117467,9 +119675,9 @@ pOc azu aSZ psy -psy wOD -psy +wOD +wOD qQO bLm laC @@ -117600,7 +119808,7 @@ suu cPX pFr rsR -giH +uGK mbd mwy cGd @@ -117722,11 +119930,11 @@ atc atc axW azu -psy -psy -psy +wOD +wOD psy wOD +wOD dkF bLr laC @@ -117875,7 +120083,7 @@ ftr ftr ksj czK -tEe +fNL wsR ccW ccW @@ -117951,7 +120159,7 @@ rNK rNK utt aaU -abf +jQB abr utt rNK @@ -117980,9 +120188,9 @@ atc aAe azs lfh -psy +wOD aDe -psy +wOD bsW qQO aOM @@ -118130,7 +120338,7 @@ pAi pAi ftr wIq -vru +fMs wsR wsR tcN @@ -118208,7 +120416,7 @@ rNK rNK aae aaV -abf +jQB abs utt rNK @@ -118238,9 +120446,9 @@ axY azu wOD aEq -wOD -aEq psy +aEq +wOD qQO qQO qQO @@ -118496,7 +120704,7 @@ azu aTc psy bgv -wOD +psy btX qQO hUs @@ -118508,7 +120716,7 @@ hUs hUs hUs qQO -eWZ +qIf ujR aSI mhv @@ -118722,7 +120930,7 @@ rNK rNK aae aaV -abf +jQB abH abQ acl @@ -118903,7 +121111,7 @@ ftr wIq nta wIq -rza +wrr gYz ccW ccW @@ -119026,9 +121234,9 @@ qny qny aSK qny +bUF aUx -aUx -aUx +bUF dlH dsL dOM @@ -119138,7 +121346,7 @@ ccW izC cia ciG -gPL +oBO pQN sKh nta @@ -119263,7 +121471,7 @@ afd abW abW vPt -kUn +rkC qyD cgg imi @@ -119280,14 +121488,14 @@ coJ aKm cxU aPc -vrQ +mSg aSL cLH vrQ -vrQ +mSg vrQ bLx -wBG +sfX chV shl rBJ @@ -119510,7 +121718,7 @@ sbG shU lEz anW -aEw +dFE lEz afd aTz @@ -119522,11 +121730,11 @@ rAT ktb lVB asx -awY +vAa aHe -kdF +lzh vPt -sRh +hcu vrQ rAT bVq @@ -119652,7 +121860,7 @@ ccW izC cib vrl -gPL +oBO pQN pQN nta @@ -119783,10 +121991,10 @@ kdF vPt rAT wDs -sRh +hcu vrQ rAT -aLu +sAw ccS chc hIk @@ -120041,13 +122249,13 @@ wDs wDs wDs sRh -vrQ +mSg vPt bWg ccZ +crA aMX -aMX -coX +qCM dko wDs wDs @@ -120312,8 +122520,8 @@ wDs wDs wDs wDs -wDs -wDs +jDk +wJe wDs wBG chV @@ -120538,7 +122746,7 @@ rNK shU shU qrM -aEw +dFE uEU abW abW @@ -120554,14 +122762,14 @@ avS bgD nDi btY -aHa -cGn +kGZ +osU sXD bWo aKP rGm aqC -aNO +tfP aOT wDs wDs @@ -120569,8 +122777,8 @@ wDs wDs wDs wDs -wDs -wDs +dno +qSK wDs dsP dIS @@ -120812,7 +123020,7 @@ bho xwT buh ivP -ksl +uQl mmS ksl ksl @@ -120827,7 +123035,7 @@ avS avS avS avS -avS +xwo avS wBG chV @@ -120961,9 +123169,9 @@ vru wsR ftr ftr +wrr rza -rza -rza +wrr aGX cdb rNK @@ -121051,7 +123259,7 @@ rNK rNK rNK tDn -akA +woG kfd ayf aoD @@ -121147,7 +123355,7 @@ ddA kzf fID oqs -wVM +fec kyo aXR kzf @@ -121214,7 +123422,7 @@ pAi pAi cGd wsR -vru +fMs hCC wIq ftr @@ -121310,15 +123518,15 @@ rNK tDn cZD aUS -eqN +nRo hXe apv snc snc snc +fwf whx -whx -whx +fwf aLt eJF aqC @@ -121454,16 +123662,16 @@ ciG gPL pQN gtV -vru +fMs cGd isf cvW pAi wum nLM -vld +gvV fcg -vld +gvV wig dLg pAi @@ -121471,7 +123679,7 @@ pAi anv cGd wsR -vru +fMs xUt ftr pDu @@ -121567,7 +123775,7 @@ rNK tDn eqN cZD -apQ +ayn aEw lEz wDs @@ -121576,7 +123784,7 @@ wDs rAT aZc vrQ -aLu +sAw aPc avS jHd @@ -121655,21 +123863,21 @@ qIR yaP yaP yaP -cUj +tBq cUg ddC +tBq +tBq +tBq cUj cUj -cUj -cUj -cUj -cUj -cUj +tBq +tBq cUj yaP yaP yaP -cUj +tBq kyP bWt kqS @@ -121718,7 +123926,7 @@ koR koR prS mbM -oDZ +hlI mRQ iXl jqw @@ -121728,7 +123936,7 @@ koR dHN cGd tcN -vru +fMs jhz ftr ccW @@ -121832,7 +124040,7 @@ abW wDs bbc rVx -aMX +crA aJp wDs avS @@ -121923,11 +124131,11 @@ gwb bCp cQU cQW -qwC -qwC +rLz +rLz cQZ tDY -cUl +ffE yaP cUn aXR @@ -121968,7 +124176,7 @@ ciG nWY pQN wsR -vru +fMs cGd cGd cGd @@ -122165,7 +124373,7 @@ aXR aXR aXR kNB -cUt +mRG bDR bET bET @@ -122227,7 +124435,7 @@ snx wsR lJN whv -rza +wrr jew wIq wIq @@ -122240,9 +124448,9 @@ wIq wIq wIq wIq -vNu +qIO gEj -tEe +fNL wsR ccW ccW @@ -122482,10 +124690,10 @@ vJh jDS pQN ccW -rza +wrr lfD qpu -whv +cVF wIq wIq wIq @@ -122701,11 +124909,11 @@ bUj bDR fID qlL -qwC +rLz qwC fID qwC -qwC +rLz qmQ kKq qmQ @@ -122743,7 +124951,7 @@ vLm ccW wsR wZD -gEj +vjc qpu qpu hGX @@ -122752,8 +124960,8 @@ qpu eUI ftr vNu -gEj -tEe +vjc +fNL wsR ccW ccW @@ -122858,7 +125066,7 @@ abW abW abW atg -vrQ +mSg aLu vPt tXQ @@ -122959,9 +125167,9 @@ bDR gwb xpe fEm -cUj +tBq cUg -cUj +tBq cUn kzf kzf @@ -122980,7 +125188,7 @@ rWw rWw ftr iyA -lOY +nTC ivv ftr ccW @@ -123006,9 +125214,9 @@ hCC nta eBj wsR -wZD +fgD lwQ -tEe +fNL wsR wsR eBj @@ -123116,7 +125324,7 @@ abW abW dkg rVx -aJp +eeb wDs tXQ aHc @@ -123449,7 +125657,7 @@ xbO aXR kzf kNB -cUt +mRG sxI pYF bEX @@ -123475,9 +125683,9 @@ lXo maa hmm fID -qwC +rLz qlL -eBq +crY aXR aXR xbO @@ -123707,7 +125915,7 @@ aXR aXR ozA cUl -cUj +tBq bDS dsu bGK @@ -123751,8 +125959,8 @@ rNK rWw ftr ftr -rza -rza +lwX +lwX ftr ftr ccW @@ -123886,7 +126094,7 @@ abW abW wDs tbe -aLu +sAw vPt wDs tXQ @@ -124149,7 +126357,7 @@ wDs tXQ aBd aHc -aHc +kxP aHc aHc aHc @@ -124401,11 +126609,11 @@ abW vPt wDs bbc -aLu +sAw wDs tXQ gXD -aHc +xZb bip boF aGc @@ -124465,7 +126673,7 @@ aZK aZK aZK jjf -lSw +gxl cIA dqZ bgf @@ -124523,7 +126731,7 @@ qJG mjm web mjm -rza +lwX ftr ftr ccW @@ -124730,7 +126938,7 @@ fcK aYJ fvQ baN -baN +tJb baN bKX sgp @@ -124919,7 +127127,7 @@ aLu rAT wDs aUi -vrQ +mSg biO aEE aGe @@ -124977,16 +127185,16 @@ aZK aZK aZK aZK -bao -blh +rhe +ern baM aYJ rLW -bgf +enu sQn jaS buM -baN +tJb cJN hVr aYJ @@ -125173,16 +127381,16 @@ abW vPt rAT axg -aMX +crA bYk bYk bYk aMX bpx aGf -aMX +crA bYk -aJp +eeb aKm abW abW @@ -125235,7 +127443,7 @@ aZK aZK aZK cJs -blh +ern cJN aYJ dvh @@ -125433,14 +127641,14 @@ tbe dtW bbc bbc -vrQ +mSg bbc aEE aGg vrQ -vrQ +mSg tbe -vrQ +mSg abW abW abW @@ -125789,7 +127997,7 @@ bXy bYd bDR sgp -ozT +gmO pMR cUI cUN @@ -126302,8 +128510,8 @@ bDR bDR bDR bDR -qwC -ozT +rLz +gmO ojN ojN ojN @@ -126718,7 +128926,7 @@ lYY poW azN dxS -vrQ +mSg abW abW abW @@ -127279,7 +129487,7 @@ aXR aZK aZK baL -baQ +alU aZK aZK cIA @@ -127330,7 +129538,7 @@ bDR bDR bDR bDR -mkk +hmg kpQ cUw mJM @@ -127589,7 +129797,7 @@ bXB bDR ibf nVW -cUw +qRb nVW aXR aXR @@ -127772,11 +129980,11 @@ bUO ugQ hcT aKp -cWz +oHI hSp iEF jyW -jyW +kKY aKp abE abE @@ -128306,7 +130514,7 @@ lSw aZk baN bak -aZk +tlM bbU uep aYJ @@ -128873,7 +131081,7 @@ nVW cRL mJM xgq -mkk +hmg fYW dkk xbO @@ -129119,13 +131327,13 @@ bQE bRC bSx cUm -vME -vME -vME +ouR +ouR +ouR vME pWW cUm -vME +ouR gvo xGd ppp @@ -129380,8 +131588,8 @@ bND bND bND mkk -mkk -mkk +hmg +hmg dkk uMu cUr @@ -129644,13 +131852,13 @@ mJM wJC wJC wJC -mkk -mkk +hmg +hmg ijC wpB +hmg mkk -mkk -mkk +hmg irM rNK lzH @@ -129899,7 +132107,7 @@ nVW nVW nVW wJC -mkk +hmg eAS eAS uqt @@ -130087,7 +132295,7 @@ qhH fXt gXC hSY -hSY +qiD hSY kcX gYL @@ -130107,7 +132315,7 @@ uJd ban baP rpT -rpT +jvh bbu bdx bep @@ -130344,7 +132552,7 @@ qtB aKp gXL gXL -cWz +oHI jFd kds npV @@ -130412,7 +132620,7 @@ nVW nVW mJM wJC -mkk +hmg aQR hxE aXR @@ -130864,7 +133072,7 @@ gch gch gch gch -lID +gch rNK rNK rNK @@ -131334,10 +133542,10 @@ oAO sDk anA aog -aog +joY aog arm -aQq +dTs cDp cMH abW @@ -131438,7 +133646,7 @@ bND mJM nVW wJC -mkk +hmg eAS hxE aXR @@ -131596,8 +133804,8 @@ apI aru asz atC -rUq -axi +foR +vKl uBs cMH aWH @@ -131952,7 +134160,7 @@ mJM ulo juK mkk -vok +fWO mJM aXR aXR @@ -132112,7 +134320,7 @@ cRv cRv cDp vpg -aQq +dTs tDU ifS snX @@ -132121,14 +134329,14 @@ bqj bvD rBk rUq -rUq +foR rBk rBk rBk rUq +foR rUq -rUq -rUq +foR axi abW abW @@ -132207,7 +134415,7 @@ nVW nVW hxE wJC -mkk +hmg dkk mJM hxE @@ -132377,15 +134585,15 @@ aPv bqO bjY gKc -aQq +dTs gKc -aQq -aQq +dTs +dTs aQq gKc gKc gKc -aQq +dTs aRc cDf cMH @@ -132394,7 +134602,7 @@ cSh cVY djv dmA -dwg +fsK vuY qtB gch @@ -132468,7 +134676,7 @@ kBa mJM hxE bXD -uMu +jCh hxE aXR xbO @@ -132652,7 +134860,7 @@ cWl cMz dmA dwg -vuY +twW eJV gch hdE @@ -132715,7 +134923,7 @@ nVW nVW jPE cFE -mkk +hmg gEn hxE hxE @@ -132974,10 +135182,10 @@ bND bND nVW mkk -mkk +hmg mkk eAS -mkk +hmg mJM hxE hxE @@ -133163,10 +135371,10 @@ aWH aQq bjY cWu -aQq +dTs dmW dzl -dWE +hdJ gDe gcW heG @@ -133202,15 +135410,15 @@ bhX aYJ bao baN -bly -baM +hCe +tKf aYJ beV nJm rxW nGH bvi -mkk +hmg nVW nVW nVW @@ -133231,15 +135439,15 @@ nVW nVW nVW hxE -mkk -mkk +hmg +hmg eAS mkk hxE dfg -mkk +hmg eAS -mkk +hmg hxE aXR xbO @@ -133458,16 +135666,16 @@ bYQ bhY aYJ qef -baN +frt blz bmH aYJ uKX -bgf +enu cWM -kBa +eko bvj -mkk +hmg uMu nVW nVW @@ -133495,7 +135703,7 @@ cRa hxE bWy bXc -mkk +hmg mkk hxE aXR @@ -133934,7 +136142,7 @@ abW npV npV npV -dkd +hCQ aKp dzp vuY @@ -133981,7 +136189,7 @@ bgf rVC aYJ bvl -khM +hRy tHV nVW nVW @@ -134004,7 +136212,7 @@ nVW mJM wJC mkk -uqt +fUl mJM aXR aXR @@ -134191,7 +136399,7 @@ abW npV cSi cSj -dkd +hCQ aKp dzT dWG @@ -134260,7 +136468,7 @@ nVW mJM wJC mkk -mkk +hmg mJM aXR aXR @@ -134291,7 +136499,7 @@ pue mJk mJk cdj -xdy +fbs wLr qWI qWI @@ -134299,7 +136507,7 @@ qWI qWI qWI nFW -akn +mZt tWq sFj dbg @@ -134455,7 +136663,7 @@ dSs uOz gfd hmJ -cSm +iOh aKp abE abE @@ -134516,7 +136724,7 @@ nVW nVW hxE wJC -mkk +hmg mJM aXR aXR @@ -134705,13 +136913,13 @@ cRv npV cSk cWz -dkd +hCQ aKp dAj vuY sGY aKp -hna +csn ier aKp abE @@ -134756,7 +136964,7 @@ rwo aXR uYc hXh -mkk +hmg dgO eAS iGX @@ -134773,7 +136981,7 @@ tsc bTQ wJC wJC -mkk +hmg hxE aXR aXR @@ -134814,8 +137022,8 @@ uCM wKu kAW uKe -tWq -sFj +qKX +aZS dbg eWu rFJ @@ -134961,7 +137169,7 @@ vva cRv aKp cSm -cWz +oHI dkm aKp dAs @@ -135226,7 +137434,7 @@ vuY sGY aKp cmr -ieC +vVI dQX aKp abE @@ -135277,7 +137485,7 @@ tJt wJC wJC wJC -lpT +mfp tuD wJC ixu @@ -135285,8 +137493,8 @@ eAS eAS eAS eAS -mkk -mkk +hmg +hmg hxE mJM aXR @@ -135536,7 +137744,7 @@ lrS lrS mJM mkk -mkk +hmg mkk hxE nVW @@ -135836,7 +138044,7 @@ wLr mpB mpB ceK -yep +pyN cfH vWF vWF @@ -136350,7 +138558,7 @@ tSs xZK wLr imG -yep +pyN dYD tWC pSE @@ -137892,7 +140100,7 @@ aXn aXn aXn uir -eST +iSt sSj xSo xSo @@ -138149,7 +140357,7 @@ aXn aXn aXn dYD -eST +iSt yep jrT niY @@ -138407,7 +140615,7 @@ aXn aXn aXn eST -yep +pyN jrT xSo vOs @@ -138621,7 +140829,7 @@ hYW wZv kXQ dnY -vBO +vXn nVQ nVQ aZN @@ -139435,8 +141643,8 @@ iNr aXn aXn rpW -eST -yep +iSt +pyN xSo qgo jUz @@ -140206,9 +142414,9 @@ pQa pQa pQa rUz -pQa +dJf fwt -pHf +bqi pQa pQa pQa @@ -140419,7 +142627,7 @@ ycI rEz fOd ycI -ycI +aPj kSO xAL lrO @@ -140463,9 +142671,9 @@ dxM cJW dxM vvB -dxM +eIZ rQW -cvq +bdb dxM dxM dxM @@ -140960,9 +143168,9 @@ rfq qUi ivI pYn -afX +gao squ -afX +gao afX eDQ aXn @@ -140977,8 +143185,8 @@ vpJ xdy tOU cJX -xdy -yep +fbs +pyN xdy vWF vpJ @@ -141191,7 +143399,7 @@ xTL ppI bCg bcP -bMw +bLc sGZ bOI scE @@ -141218,8 +143426,8 @@ wqR rZY aoO diY -diY -diY +nPB +nPB aXn aXn aXn @@ -141231,7 +143439,7 @@ aXn aXn wLr xXq -cAU +gLg mJk mJk rao @@ -141487,7 +143695,7 @@ aXn aXn aXn vpJ -xXq +iBq yep chI chI @@ -141631,11 +143839,11 @@ ftx bEN vdj vdj -aYT -vdj -vdj +jzz vdj +hFd vdj +hFd cXK alc alc @@ -141704,7 +143912,7 @@ gaO xTL bxR bCg -bNE +pvE bMw hKc nVQ @@ -141744,14 +143952,14 @@ aXn aXn aXn wLr -xdy +fbs cdG chI cel lwP fcw jlY -vHw +uui gyU vHw chI @@ -141880,18 +144088,18 @@ lCC lCC rWb aRv -aYR -eUS +hvY +hME bkW bkW rmZ bEP -eUS +hME eUS cbB cey eUS -eUS +hME cpS vpe aRx @@ -142137,7 +144345,7 @@ alc vpe rWb hqL -aYT +jzz viX viX nLP @@ -142164,7 +144372,7 @@ dBI fmI oRs aRx -hqZ +cmS hrM iUM alc @@ -142407,7 +144615,7 @@ bkX xEK hqL cpT -cev +cju vdj rNE vpe @@ -142422,7 +144630,7 @@ fmI bDQ ghw kVA -ifn +rvR iVd alc alc @@ -142522,7 +144730,7 @@ xPY wrE tGn jjO -bpe +qiY bpe tHf chI @@ -142665,8 +144873,8 @@ xEK vpe cpU eUS -eUS -eUS +hME +hME cDj cHq cHq @@ -142732,7 +144940,7 @@ xTL xTL adV bCg -vHH +vZh bMA qZL ukC @@ -142902,7 +145110,7 @@ rNK rIu aqJ eee -dvN +srb atU rIu ayU @@ -142936,7 +145144,7 @@ edU lrF aRx eaD -vdj +glP css alc alc @@ -142990,10 +145198,10 @@ fSH bIM bCg vHH -vHH +vZh vHH utF -vHH +vZh bwX gSQ gSQ @@ -143038,7 +145246,7 @@ fcw fcw qSO tcs -vHw +uui chI mtv djw @@ -143256,8 +145464,8 @@ gFg gSQ ovW jeX -jeX -jeX +aJC +aJC eQu aZM fMl @@ -143286,7 +145494,7 @@ aXn tVf djo djo -nyL +gCw cdG kXu cKH @@ -143701,9 +145909,9 @@ iIK djm ayS cpC -umV +jIU ojx -fmI +guV oRl rWb alc @@ -143762,9 +145970,9 @@ rHA sBd dBO ovq -ovq +glf pje -ovq +glf ovq tul yfZ @@ -143800,7 +146008,7 @@ frV aXn aXn aXn -nyL +gCw yep vpJ wLr @@ -143971,7 +146179,7 @@ mPI gsO kUP ltY -vdj +glP lWa cde dHa @@ -144018,7 +146226,7 @@ bIQ tKq wRo vWn -hyj +gAc hyj wfR kIo @@ -144068,7 +146276,7 @@ wLr wLr jlX xMQ -vMR +iJp djw jUc csG @@ -144285,7 +146493,7 @@ yfZ vrs moY yfZ -vHH +vZh xAV aZM aZM @@ -144313,8 +146521,8 @@ aXn aXn aXn xdy -nyL -xdy +gCw +fbs xON mJk mJk @@ -144569,10 +146777,10 @@ aXn aXn aXn aXn -xdy +fbs nyL -xdy -xdy +fbs +fbs vpJ cfH kcF @@ -144582,7 +146790,7 @@ vpJ vWF vpJ xMQ -daX +jKe djw roj xMQ @@ -144800,7 +147008,7 @@ wvp rki yfZ gSQ -mqf +cYt aZN aZM aZM @@ -145056,7 +147264,7 @@ eSE wvp hQU yfZ -ngn +mNW jdN iSn aZM @@ -145083,7 +147291,7 @@ vgt ruX ciV sQj -ciV +jPQ aQj lwE uKT @@ -145274,7 +147482,7 @@ beB bcQ bcS hzz -hzz +yhn pTl hsv ulG @@ -145340,9 +147548,9 @@ vgt sDL jvl jvl -jvl +uHI csD -jvl +uHI oez hcp oez @@ -145531,7 +147739,7 @@ dkU tnq tnq aZq -bfo +qOT bgx bhr fqw @@ -145788,7 +147996,7 @@ aZM aZM aZM aZN -vHH +vZh iFS qpx itf @@ -146045,7 +148253,7 @@ aZM aZM aZM iSn -vHH +vZh kuE gFg itf @@ -146085,7 +148293,7 @@ jyU yfZ xIU gSQ -mqf +cYt aZM aZM aZM @@ -146273,8 +148481,8 @@ vfQ aov aov kQf -pzB -aov +vQQ +lOh giA qIF alc @@ -146589,7 +148797,7 @@ xhG kkD bDA oqZ -bAn +xNB yfZ yfZ lfX @@ -146599,7 +148807,7 @@ sVv yfZ hjJ gRw -mqf +cYt aZN aZM fMl @@ -146788,7 +148996,7 @@ any fue kaw ega -umV +jIU any qIF alc @@ -146842,10 +149050,10 @@ naI yhU vFy mTp -xhG +xEI fKo bDA -vHH +vZh xZe epk xiQ @@ -147113,7 +149321,7 @@ vpn rVD itf jgq -jdN +ovK iSn aZM fMl @@ -147301,7 +149509,7 @@ rWb rWb vpe upy -cEA +kBP oKx vpe aRx @@ -147331,7 +149539,7 @@ aZM aZM aZM bfp -iFS +qTC gFg gFg dzy @@ -147367,9 +149575,9 @@ bMM mFs wfX vHH -vHH +dbV itf -utF +iEh mqf aZN aZM @@ -147589,12 +149797,12 @@ aZM aZM pyp iFS -vHH +vZh vHH lnN +vZh vHH -vHH -vHH +vZh mNC rRe glw @@ -147623,7 +149831,7 @@ itf fAX fFY jvZ -vHH +dbV isj itf siF @@ -147799,7 +150007,7 @@ hWG ayX qke aCo -xRJ +oLB aCo wtU woa @@ -147814,7 +150022,7 @@ rWb rWb rWb cXK -xaF +tlF eOi vpe rWb @@ -147850,7 +150058,7 @@ aLH itf fqw pIc -vHH +vZh vHH oOh cKk @@ -147875,10 +150083,10 @@ pZK bDA itf xuJ -pps +jrc itf gxv -vHH +dbV vHH swV bbw @@ -148054,8 +150262,8 @@ rNK rNK wtU aCo -aCo -aCo +cIv +cIv xRJ aCo iss @@ -148314,7 +150522,7 @@ aGy kFK kFK aGs -kFK +lFh aMq qsY aOl @@ -148329,7 +150537,7 @@ aRx aRx hqL xaF -vdj +hFd aRx cpC cpC @@ -148358,8 +150566,8 @@ fMl fMl aZM iSn -vHH -iFS +vZh +qTC itf itf itf @@ -148569,7 +150777,7 @@ lCC uKL nea aIx -aIx +oXZ pdx lky aMn @@ -148584,21 +150792,21 @@ rWb rWb qQc vpe -vdj +hFd gRI eUS fDg eUS -cDj -vdj +jWw +hFd vdj -eOi +jOC aRx cpC cpC vpe vdj -vdj +hFd nUM rzh rzh @@ -148645,7 +150853,7 @@ gbJ bLk cFA bNL -mqf +cYt xjx vbn lux @@ -148825,12 +151033,12 @@ alc alc hWG lqP -cLX -cLX +gta +gta cbI -aCo +cIv iss -dKI +gPl cqo cvp aRx @@ -148851,9 +151059,9 @@ hFo hFo rWb vpe -vdj +hFd cpC -vdj +hFd lMw vdj nUM @@ -148873,7 +151081,7 @@ oFB oXT owf vHH -iFS +qTC ngn itf itf @@ -149108,11 +151316,11 @@ jWj hFo rWb vpe -vdj +hFd eOi fzh lOV -vdj +hFd nUM rNK rNK @@ -149150,7 +151358,7 @@ bkH ilV bkH bCt -bkH +jsS bkH bDA bDA @@ -149159,7 +151367,7 @@ bDA cFA cFA cQy -mqf +cYt trc iOw itf @@ -149350,7 +151558,7 @@ aRx rWb rWb aYR -eUS +hME cey eUS cHS @@ -149386,9 +151594,9 @@ owX oIc oYv owf -vHH +vZh otq -utF +iEh itf itf bni @@ -149596,20 +151804,20 @@ uHx iLv aIB aIB -aIB +vOP aIB cbP -iLv +ntt ciR -rNE +nbC cpC dgV eUS -eUS +hME cEA -vdj -vdj -vdj +hFd +hFd +hFd vdj dlb alc @@ -149644,7 +151852,7 @@ oIk wVu owf kgs -otq +jqA utF aLH cHJ @@ -149665,14 +151873,14 @@ wxI uyn uyn pIz -mpa +ssJ biN -utF +iEh gFg jOE lye bZq -jeX +aJC iOw gSQ gFg @@ -149754,7 +151962,7 @@ cBe wYi cBe eCe -xcn +yjC qyY fyo rNK @@ -149901,7 +152109,7 @@ oIu oYA tKH vgc -otq +jqA utF aLH eOE @@ -150011,7 +152219,7 @@ cBe iDO oZn mGZ -tRT +eRh jVa cBe rNK @@ -150109,8 +152317,8 @@ alc uHx aFb byd -iLv -iLv +toC +toC aJH cbR aIA @@ -150159,7 +152367,7 @@ owf fqw fqw otq -utF +iEh bfo vHH cKe @@ -150438,7 +152646,7 @@ uyn uyn bkH biN -vHH +vZh iEW itf qIV @@ -150672,7 +152880,7 @@ aZu fMl aZM aZM -otq +jqA utF fqw qVZ @@ -150880,7 +153088,7 @@ lCC rzh iss byg -byg +lFi bOW iss rNK @@ -150930,7 +153138,7 @@ fMl aZM aZM otq -utF +iEh fqw aLH aLH @@ -150954,7 +153162,7 @@ bkH biN pip gFg -vHH +vZh qIV mqf fqw @@ -151444,8 +153652,8 @@ fMl aZM fqw ldU -qsn -xTb +grj +cHv biZ itf bil @@ -151704,7 +153912,7 @@ pWH gSQ gSQ nau -biZ +qBq bil cOT bnm @@ -151724,7 +153932,7 @@ biN biN biN qmr -vHH +vZh itf qIV pSV @@ -151973,7 +154181,7 @@ bil meS gSQ itf -vHH +vZh vHH itf xiw @@ -152258,7 +154466,7 @@ rNK rNK rNK lJs -xxs +gZL sGo gEl rNK @@ -152475,7 +154683,7 @@ aZM fqw bwX gSQ -utF +iEh bil dzG sBN @@ -152489,7 +154697,7 @@ gSQ gSQ gSQ vHH -vHH +vZh gSQ gSQ xXN @@ -152498,7 +154706,7 @@ gSQ gSQ gSQ qIV -mqf +cYt aLH itf itf @@ -152737,7 +154945,7 @@ rTA cOV bno xTb -xTb +cHv vFQ vFQ vFQ @@ -152745,14 +154953,14 @@ dCT vFQ vFQ xTb -xTb +cHv xTb xiL xFO vFQ vFQ xTb -xTb +cHv vFQ skF xAV @@ -152992,10 +155200,10 @@ fqw rtW rTH skM -mqf +cYt aLH fNb -vHH +vZh cKe bhr gSQ @@ -154981,7 +157189,7 @@ rNK aoR aqQ asX -asX +sfU aug awo wdb diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index 23e1374744a9..92e50b3f80e2 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -167,3 +167,13 @@ #define STATUS_EFFECT_FAKE_VIRUS /datum/status_effect/fake_virus /// This status effect lets the user see the lwap dots. #define STATUS_EFFECT_LWAPSCOPE /datum/status_effect/lwap_scope + +////////////////////////// +// Mind batter variants // +////////////////////////// +// Basically variants with differing effect times to their parent datums, nothing special + +#define STATUS_EFFECT_PACIFIED_BATTERER /datum/status_effect/pacifism/batterer + +#define STATUS_EFFECT_CLINGTENTACLE_BATTERER /datum/status_effect/cling_tentacle/batterer + diff --git a/code/__HELPERS/colour_helpers.dm b/code/__HELPERS/colour_helpers.dm new file mode 100644 index 000000000000..b9853409725d --- /dev/null +++ b/code/__HELPERS/colour_helpers.dm @@ -0,0 +1,47 @@ +/proc/BlendRGB(rgb1, rgb2, amount) + var/list/RGB1 = rgb2num(rgb1) + var/list/RGB2 = rgb2num(rgb2) + + // add missing alpha if needed + if(RGB1.len < RGB2.len) RGB1 += 255 + else if(RGB2.len < RGB1.len) RGB2 += 255 + var/usealpha = RGB1.len > 3 + + var/r = round(RGB1[1] + (RGB2[1] - RGB1[1]) * amount, 1) + var/g = round(RGB1[2] + (RGB2[2] - RGB1[2]) * amount, 1) + var/b = round(RGB1[3] + (RGB2[3] - RGB1[3]) * amount, 1) + var/alpha = usealpha ? round(RGB1[4] + (RGB2[4] - RGB1[4]) * amount, 1) : null + + return isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha) + +/proc/rand_hex_color() + var/list/colours = list("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f") + var/list/output_colour = list() + + for(var/i = 0; i < 6; i++) + output_colour += pick(colours) + + return "#[output_colour.Join("")]" + + +// Change grayscale color to black->tone->white range +/proc/ColorTone(rgb, tone) + var/list/RGB = rgb2num(rgb) + var/list/TONE = rgb2num(tone) + + var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 + var/tone_gray = TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11 + + if(gray <= tone_gray) return BlendRGB("#000000", tone, gray/(tone_gray || 1)) + else return BlendRGB(tone, "#ffffff", (gray-tone_gray)/((255-tone_gray) || 1)) + + +/proc/adjust_brightness(color, value) + if(!color) return "#FFFFFF" + if(!value) return color + + var/list/RGB = rgb2num(color) + RGB[1] = clamp(RGB[1]+value,0,255) + RGB[2] = clamp(RGB[2]+value,0,255) + RGB[3] = clamp(RGB[3]+value,0,255) + return rgb(RGB[1],RGB[2],RGB[3]) diff --git a/code/__HELPERS/icon_helpers.dm b/code/__HELPERS/icon_helpers.dm new file mode 100644 index 000000000000..a64f4e5c7e95 --- /dev/null +++ b/code/__HELPERS/icon_helpers.dm @@ -0,0 +1,239 @@ +// Creates a single icon from a given /atom or /image. Only the first argument is required. +// This proc is utterly HATEFUL +/proc/getFlatIcon(image/A, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE) + //Define... defines. + var/static/icon/flat_template = icon('icons/effects/effects.dmi', "nothing") + + #define BLANK icon(flat_template) + #define SET_SELF(SETVAR) do { \ + var/icon/SELF_ICON=icon(icon(curicon, curstate, base_icon_dir),"",SOUTH,no_anim?1:null); \ + if(A.alpha<255) { \ + SELF_ICON.Blend(rgb(255,255,255,A.alpha),ICON_MULTIPLY);\ + } \ + if(A.color) { \ + if(islist(A.color)){ \ + SELF_ICON.MapColors(arglist(A.color))} \ + else{ \ + SELF_ICON.Blend(A.color,ICON_MULTIPLY)} \ + } \ + ##SETVAR=SELF_ICON;\ + } while (0) + #define INDEX_X_LOW 1 + #define INDEX_X_HIGH 2 + #define INDEX_Y_LOW 3 + #define INDEX_Y_HIGH 4 + + #define flatX1 flat_size[INDEX_X_LOW] + #define flatX2 flat_size[INDEX_X_HIGH] + #define flatY1 flat_size[INDEX_Y_LOW] + #define flatY2 flat_size[INDEX_Y_HIGH] + #define addX1 add_size[INDEX_X_LOW] + #define addX2 add_size[INDEX_X_HIGH] + #define addY1 add_size[INDEX_Y_LOW] + #define addY2 add_size[INDEX_Y_HIGH] + + if(!A || A.alpha <= 0) + return BLANK + + var/noIcon = FALSE + if(start) + if(!defdir) + defdir = A.dir + if(!deficon) + deficon = A.icon + if(!defstate) + defstate = A.icon_state + if(!defblend) + defblend = A.blend_mode + + var/curicon = A.icon || deficon + var/curstate = A.icon_state || defstate + + if(!((noIcon = (!curicon)))) + var/curstates = icon_states(curicon) + if(!(curstate in curstates)) + if("" in curstates) + curstate = "" + else + noIcon = TRUE // Do not render this object. + + var/curdir + var/base_icon_dir //We'll use this to get the icon state to display if not null BUT NOT pass it to overlays as the dir we have + + //These should use the parent's direction (most likely) + if(!A.dir || A.dir == SOUTH) + curdir = defdir + else + curdir = A.dir + + //Try to remove/optimize this section ASAP, CPU hog. + //Determines if there's directionals. + if(!noIcon && curdir != SOUTH) + var/exist = FALSE + var/static/list/checkdirs = list(NORTH, EAST, WEST) + for(var/i in checkdirs) //Not using GLOB for a reason. + if(length(icon_states(icon(curicon, curstate, i)))) + exist = TRUE + break + if(!exist) + base_icon_dir = SOUTH + // + + if(!base_icon_dir) + base_icon_dir = curdir + + ASSERT(!BLEND_DEFAULT) //I might just be stupid but lets make sure this define is 0. + + var/curblend = A.blend_mode || defblend + + if(A.overlays.len || A.underlays.len) + var/icon/flat = BLANK + // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed + var/list/layers = list() + var/image/copy + // Add the atom's icon itself, without pixel_x/y offsets. + if(!noIcon) + copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=base_icon_dir) + copy.color = A.color + copy.alpha = A.alpha + copy.blend_mode = curblend + layers[copy] = A.layer + + // Loop through the underlays, then overlays, sorting them into the layers list + for(var/process_set in 0 to 1) + var/list/process = process_set? A.overlays : A.underlays + for(var/i in 1 to process.len) + var/image/current = process[i] + if(!current) + continue + if(current.plane != FLOAT_PLANE && current.plane != A.plane) + continue + var/current_layer = current.layer + if(current_layer < 0) + if(current_layer <= -1000) + return flat + current_layer = process_set + A.layer + current_layer / 1000 + + for(var/p in 1 to layers.len) + var/image/cmp = layers[p] + if(current_layer < layers[cmp]) + layers.Insert(p, current) + break + layers[current] = current_layer + + var/icon/add // Icon of overlay being added + + // Current dimensions of flattened icon + var/list/flat_size = list(1, flat.Width(), 1, flat.Height()) + // Dimensions of overlay being added + var/list/add_size[4] + + for(var/V in layers) + var/image/I = V + if(I.alpha == 0) + continue + + if(I == copy) // 'I' is an /image based on the object being flattened. + curblend = BLEND_OVERLAY + add = icon(I.icon, I.icon_state, base_icon_dir) + else // 'I' is an appearance object. + add = getFlatIcon(image(I), curdir, curicon, curstate, curblend, FALSE, no_anim) + if(!add) + continue + // Find the new dimensions of the flat icon to fit the added overlay + add_size = list( + min(flatX1, I.pixel_x+1), + max(flatX2, I.pixel_x+add.Width()), + min(flatY1, I.pixel_y+1), + max(flatY2, I.pixel_y+add.Height()) + ) + + if(flat_size ~! add_size) + // Resize the flattened icon so the new icon fits + flat.Crop( + addX1 - flatX1 + 1, + addY1 - flatY1 + 1, + addX2 - flatX1 + 1, + addY2 - flatY1 + 1 + ) + flat_size = add_size.Copy() + + // Blend the overlay into the flattened icon + flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1) + + if(A.color) + if(islist(A.color)) + flat.MapColors(arglist(A.color)) + else + flat.Blend(A.color, ICON_MULTIPLY) + + if(A.alpha < 255) + flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY) + + if(no_anim) + //Clean up repeated frames + var/icon/cleaned = new /icon() + cleaned.Insert(flat, "", SOUTH, 1, 0) + . = cleaned + else + . = icon(flat, "", SOUTH) + else //There's no overlays. + if(!noIcon) + SET_SELF(.) + + //Clear defines + #undef flatX1 + #undef flatX2 + #undef flatY1 + #undef flatY2 + #undef addX1 + #undef addX2 + #undef addY1 + #undef addY2 + + #undef INDEX_X_LOW + #undef INDEX_X_HIGH + #undef INDEX_Y_LOW + #undef INDEX_Y_HIGH + + #undef BLANK + #undef SET_SELF + + +//Imagine removing pixels from the main icon that are covered by pixels from the mask icon. +//Standard behaviour is to cut pixels from the main icon that are covered by pixels from the mask icon unless passed mask_ready, see below. +/proc/get_icon_difference(icon/main, icon/mask, mask_ready) + /*You should skip prep if the mask is already sprited properly. This significantly improves performance by eliminating most of the realtime icon work. + e.g. A 'ready' mask is a mask where the part you want cut out is missing (no pixels, 0 alpha) from the sprite, and everything else is solid white.*/ + + if(istype(main) && istype(mask)) + if(!mask_ready) //Prep the mask if we're using a regular old sprite and not a special-made mask. + mask.Blend(rgb(255,255,255), ICON_SUBTRACT) //Make all pixels on the mask as black as possible. + mask.Opaque(rgb(255,255,255)) //Make the transparent pixels (background) white. + mask.BecomeAlphaMask() //Make all the black pixels vanish (fully transparent), leaving only the white background pixels. + + main.AddAlphaMask(mask) //Make the pixels in the main icon that are in the transparent zone of the mask icon also vanish (fully transparent). + return main + +///Checks if the given iconstate exists in the given file, caching the result. Setting no_sprite to TRUE will print a stack trace ONCE. +/proc/icon_exists(file, state, no_sprite) + var/static/list/icon_states_cache = list() + if(icon_states_cache[file]?[state]) + return TRUE + + if(icon_states_cache[file]?[state] == FALSE) + return FALSE + + var/list/states = icon_states(file) + + if(!icon_states_cache[file]) + icon_states_cache[file] = list() + + if(state in states) + icon_states_cache[file][state] = TRUE + return TRUE + else + icon_states_cache[file][state] = FALSE + if(no_sprite) + stack_trace("Icon Lookup for state: [state] in file [file] failed.") + return FALSE diff --git a/code/__HELPERS/iconprocs.dm b/code/__HELPERS/iconprocs.dm new file mode 100644 index 000000000000..eb86df49e86d --- /dev/null +++ b/code/__HELPERS/iconprocs.dm @@ -0,0 +1,301 @@ +/* +IconProcs README + +A BYOND library for manipulating icons and colors + +by Lummox JR + +version 1.0 + +============================================================ + + AA EDIT - Removed a bunch of procs we have natively now + +============================================================ + +The IconProcs library was made to make a lot of common icon operations much easier. BYOND's icon manipulation +routines are very capable but some of the advanced capabilities like using alpha transparency can be unintuitive to beginners. + +CHANGING ICONS + +Several new procs have been added to the /icon datum to simplify working with icons. To use them, +remember you first need to setup an /icon var like so: + + var/icon/my_icon = new('iconfile.dmi') + +icon/ChangeOpacity(amount = 1) + A very common operation in DM is to try to make an icon more or less transparent. Making an icon more + transparent is usually much easier than making it less so, however. This proc basically is a frontend + for MapColors() which can change opacity any way you like, in much the same way that SetIntensity() + can make an icon lighter or darker. If amount is 0.5, the opacity of the icon will be cut in half. + If amount is 2, opacity is doubled and anything more than half-opaque will become fully opaque. +icon/GrayScale() + Converts the icon to grayscale instead of a fully colored icon. Alpha values are left intact. +icon/ColorTone(tone) + Similar to GrayScale(), this proc converts the icon to a range of black -> tone -> white, where tone is an + RGB color (its alpha is ignored). This can be used to create a sepia tone or similar effect. + See also the global ColorTone() proc. +icon/MinColors(icon) + The icon is blended with a second icon where the minimum of each RGB pixel is the result. + Transparency may increase, as if the icons were blended with ICON_ADD. You may supply a color in place of an icon. +icon/MaxColors(icon) + The icon is blended with a second icon where the maximum of each RGB pixel is the result. + Opacity may increase, as if the icons were blended with ICON_OR. You may supply a color in place of an icon. +icon/Opaque(background = "#000000") + All alpha values are set to 255 throughout the icon. Transparent pixels become black, or whatever background color you specify. +icon/BecomeAlphaMask() + You can convert a simple grayscale icon into an alpha mask to use with other icons very easily with this proc. + The black parts become transparent, the white parts stay white, and anything in between becomes a translucent shade of white. +icon/AddAlphaMask(mask) + The alpha values of the mask icon will be blended with the current icon. Anywhere the mask is opaque, + the current icon is untouched. Anywhere the mask is transparent, the current icon becomes transparent. + Where the mask is translucent, the current icon becomes more transparent. +icon/UseAlphaMask(mask, mode) + Sometimes you may want to take the alpha values from one icon and use them on a different icon. + This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change + so it has the same colors as before but uses the mask for opacity. + +COLOR MANAGEMENT AND HSV + +RGB isn't the only way to represent color. Sometimes it's more useful to work with a model called HSV, which stands for hue, saturation, and value. + + * The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to + cyan to blue to magenta and back to red. + * The saturation of a color is how much color is in it. A color with low saturation will be more gray, + and with no saturation at all it is a shade of gray. + * The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark, + and no value at all is black. + +Just as BYOND uses "#rrggbb" to represent RGB values, a similar format is used for HSV: "#hhhssvv". The hue is three +hex digits because it ranges from 0 to 0x5FF. + + * 0 to 0xFF - red to yellow + * 0x100 to 0x1FF - yellow to green + * 0x200 to 0x2FF - green to cyan + * 0x300 to 0x3FF - cyan to blue + * 0x400 to 0x4FF - blue to magenta + * 0x500 to 0x5FF - magenta to red + +Knowing this, you can figure out that red is "#000ffff" in HSV format, which is hue 0 (red), saturation 255 (as colorful as possible), +value 255 (as bright as possible). Green is "#200ffff" and blue is "#400ffff". + +More than one HSV color can match the same RGB color. + +Here are some procs you can use for color management: + +ReadRGB(rgb) + Takes an RGB string like "#ffaa55" and converts it to a list such as list(255,170,85). If an RGBA format is used + that includes alpha, the list will have a fourth item for the alpha value. +hsv(hue, sat, val, apha) + Counterpart to rgb(), this takes the values you input and converts them to a string in "#hhhssvv" or "#hhhssvvaa" + format. Alpha is not included in the result if null. +ReadHSV(rgb) + Takes an HSV string like "#100FF80" and converts it to a list such as list(256,255,128). If an HSVA format is used that + includes alpha, the list will have a fourth item for the alpha value. +RGBtoHSV(rgb) + Takes an RGB or RGBA string like "#ffaa55" and converts it into an HSV or HSVA color such as "#080aaff". +HSVtoRGB(hsv) + Takes an HSV or HSVA string like "#080aaff" and converts it into an RGB or RGBA color such as "#ff55aa". +BlendRGB(rgb1, rgb2, amount) + Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result; + if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. + The returned value is an RGB or RGBA color. +BlendHSV(hsv1, hsv2, amount) + Blends between two HSV or HSVA colors using HSV blending, which tends to produce nicer results than regular RGB + blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1, + the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. + The returned value is an HSV or HSVA color. +BlendRGBasHSV(rgb1, rgb2, amount) + Like BlendHSV(), but the colors used and the return value are RGB or RGBA colors. The blending is done in HSV form. +HueToAngle(hue) + Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue. +AngleToHue(hue) + Converts an angle to a hue in the valid range. +RotateHue(hsv, angle) + Takes an HSV or HSVA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360. + (Rotating red by 60° produces yellow.) The result is another HSV or HSVA color with the same saturation and value + as the original, but a different hue. +GrayScale(rgb) + Takes an RGB or RGBA color and converts it to grayscale. Returns an RGB or RGBA string. +ColorTone(rgb, tone) + Similar to GrayScale(), this proc converts an RGB or RGBA color to a range of black -> tone -> white instead of + using strict shades of gray. The tone value is an RGB color; any alpha value is ignored. +*/ + +/* +Get Flat Icon DEMO by DarkCampainger + +This is a test for the get flat icon proc, modified approprietly for icons and their states. +Probably not a good idea to run this unless you want to see how the proc works in detail. +mob + icon = 'old_or_unused.dmi' + icon_state = "green" + + Login() + // Testing image underlays + underlays += image(icon='old_or_unused.dmi',icon_state="red") + underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = 32) + underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = -32) + + // Testing image overlays + overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = -32) + overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = 32) + overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = -32, pixel_y = -32) + + // Testing icon file overlays (defaults to mob's state) + overlays += '_flat_demoIcons2.dmi' + + // Testing icon_state overlays (defaults to mob's icon) + overlays += "white" + + // Testing dynamic icon overlays + var/icon/I = icon('old_or_unused.dmi', icon_state="aqua") + I.Shift(NORTH,16,1) + overlays+=I + + // Testing dynamic image overlays + I=image(icon=I,pixel_x = -32, pixel_y = 32) + overlays+=I + + // Testing object types (and layers) + overlays+=/obj/effect/overlayTest + + loc = locate (10,10,1) + verb + Browse_Icon() + set name = "1. Browse Icon" + // Give it a name for the cache + var/iconName = "[ckey(src.name)]_flattened.dmi" + // Send the icon to src's local cache + src<

") + + Output_Icon() + set name = "2. Output Icon" + to_chat(src, "Icon is: [bicon(getFlatIcon(src))]") + + Label_Icon() + set name = "3. Label Icon" + // Give it a name for the cache + var/iconName = "[ckey(src.name)]_flattened.dmi" + // Copy the file to the rsc manually + var/icon/I = fcopy_rsc(getFlatIcon(src)) + // Send the icon to src's local cache + src< transparent, gray -> translucent white, white -> solid white +/icon/proc/BecomeAlphaMask() + SwapColor(null, "#000000ff") // don't let transparent become gray + MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0) + +/icon/proc/UseAlphaMask(mask) + Opaque() + AddAlphaMask(mask) + +/icon/proc/AddAlphaMask(mask) + var/icon/M = new(mask) + M.Blend("#ffffff", ICON_SUBTRACT) + // apply mask + Blend(M, ICON_ADD) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm deleted file mode 100644 index 46049e777c6f..000000000000 --- a/code/__HELPERS/icons.dm +++ /dev/null @@ -1,984 +0,0 @@ -/* -IconProcs README - -A BYOND library for manipulating icons and colors - -by Lummox JR - -version 1.0 - -The IconProcs library was made to make a lot of common icon operations much easier. BYOND's icon manipulation -routines are very capable but some of the advanced capabilities like using alpha transparency can be unintuitive to beginners. - -CHANGING ICONS - -Several new procs have been added to the /icon datum to simplify working with icons. To use them, -remember you first need to setup an /icon var like so: - - var/icon/my_icon = new('iconfile.dmi') - -icon/ChangeOpacity(amount = 1) - A very common operation in DM is to try to make an icon more or less transparent. Making an icon more - transparent is usually much easier than making it less so, however. This proc basically is a frontend - for MapColors() which can change opacity any way you like, in much the same way that SetIntensity() - can make an icon lighter or darker. If amount is 0.5, the opacity of the icon will be cut in half. - If amount is 2, opacity is doubled and anything more than half-opaque will become fully opaque. -icon/GrayScale() - Converts the icon to grayscale instead of a fully colored icon. Alpha values are left intact. -icon/ColorTone(tone) - Similar to GrayScale(), this proc converts the icon to a range of black -> tone -> white, where tone is an - RGB color (its alpha is ignored). This can be used to create a sepia tone or similar effect. - See also the global ColorTone() proc. -icon/MinColors(icon) - The icon is blended with a second icon where the minimum of each RGB pixel is the result. - Transparency may increase, as if the icons were blended with ICON_ADD. You may supply a color in place of an icon. -icon/MaxColors(icon) - The icon is blended with a second icon where the maximum of each RGB pixel is the result. - Opacity may increase, as if the icons were blended with ICON_OR. You may supply a color in place of an icon. -icon/Opaque(background = "#000000") - All alpha values are set to 255 throughout the icon. Transparent pixels become black, or whatever background color you specify. -icon/BecomeAlphaMask() - You can convert a simple grayscale icon into an alpha mask to use with other icons very easily with this proc. - The black parts become transparent, the white parts stay white, and anything in between becomes a translucent shade of white. -icon/AddAlphaMask(mask) - The alpha values of the mask icon will be blended with the current icon. Anywhere the mask is opaque, - the current icon is untouched. Anywhere the mask is transparent, the current icon becomes transparent. - Where the mask is translucent, the current icon becomes more transparent. -icon/UseAlphaMask(mask, mode) - Sometimes you may want to take the alpha values from one icon and use them on a different icon. - This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change - so it has the same colors as before but uses the mask for opacity. - -COLOR MANAGEMENT AND HSV - -RGB isn't the only way to represent color. Sometimes it's more useful to work with a model called HSV, which stands for hue, saturation, and value. - - * The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to - cyan to blue to magenta and back to red. - * The saturation of a color is how much color is in it. A color with low saturation will be more gray, - and with no saturation at all it is a shade of gray. - * The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark, - and no value at all is black. - -Just as BYOND uses "#rrggbb" to represent RGB values, a similar format is used for HSV: "#hhhssvv". The hue is three -hex digits because it ranges from 0 to 0x5FF. - - * 0 to 0xFF - red to yellow - * 0x100 to 0x1FF - yellow to green - * 0x200 to 0x2FF - green to cyan - * 0x300 to 0x3FF - cyan to blue - * 0x400 to 0x4FF - blue to magenta - * 0x500 to 0x5FF - magenta to red - -Knowing this, you can figure out that red is "#000ffff" in HSV format, which is hue 0 (red), saturation 255 (as colorful as possible), -value 255 (as bright as possible). Green is "#200ffff" and blue is "#400ffff". - -More than one HSV color can match the same RGB color. - -Here are some procs you can use for color management: - -ReadRGB(rgb) - Takes an RGB string like "#ffaa55" and converts it to a list such as list(255,170,85). If an RGBA format is used - that includes alpha, the list will have a fourth item for the alpha value. -hsv(hue, sat, val, apha) - Counterpart to rgb(), this takes the values you input and converts them to a string in "#hhhssvv" or "#hhhssvvaa" - format. Alpha is not included in the result if null. -ReadHSV(rgb) - Takes an HSV string like "#100FF80" and converts it to a list such as list(256,255,128). If an HSVA format is used that - includes alpha, the list will have a fourth item for the alpha value. -RGBtoHSV(rgb) - Takes an RGB or RGBA string like "#ffaa55" and converts it into an HSV or HSVA color such as "#080aaff". -HSVtoRGB(hsv) - Takes an HSV or HSVA string like "#080aaff" and converts it into an RGB or RGBA color such as "#ff55aa". -BlendRGB(rgb1, rgb2, amount) - Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result; - if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an RGB or RGBA color. -BlendHSV(hsv1, hsv2, amount) - Blends between two HSV or HSVA colors using HSV blending, which tends to produce nicer results than regular RGB - blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1, - the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an HSV or HSVA color. -BlendRGBasHSV(rgb1, rgb2, amount) - Like BlendHSV(), but the colors used and the return value are RGB or RGBA colors. The blending is done in HSV form. -HueToAngle(hue) - Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue. -AngleToHue(hue) - Converts an angle to a hue in the valid range. -RotateHue(hsv, angle) - Takes an HSV or HSVA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360. - (Rotating red by 60° produces yellow.) The result is another HSV or HSVA color with the same saturation and value - as the original, but a different hue. -GrayScale(rgb) - Takes an RGB or RGBA color and converts it to grayscale. Returns an RGB or RGBA string. -ColorTone(rgb, tone) - Similar to GrayScale(), this proc converts an RGB or RGBA color to a range of black -> tone -> white instead of - using strict shades of gray. The tone value is an RGB color; any alpha value is ignored. -*/ - -/* -Get Flat Icon DEMO by DarkCampainger - -This is a test for the get flat icon proc, modified approprietly for icons and their states. -Probably not a good idea to run this unless you want to see how the proc works in detail. -mob - icon = 'old_or_unused.dmi' - icon_state = "green" - - Login() - // Testing image underlays - underlays += image(icon='old_or_unused.dmi',icon_state="red") - underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = 32) - underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = -32) - - // Testing image overlays - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = -32) - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = 32) - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = -32, pixel_y = -32) - - // Testing icon file overlays (defaults to mob's state) - overlays += '_flat_demoIcons2.dmi' - - // Testing icon_state overlays (defaults to mob's icon) - overlays += "white" - - // Testing dynamic icon overlays - var/icon/I = icon('old_or_unused.dmi', icon_state="aqua") - I.Shift(NORTH,16,1) - overlays+=I - - // Testing dynamic image overlays - I=image(icon=I,pixel_x = -32, pixel_y = 32) - overlays+=I - - // Testing object types (and layers) - overlays+=/obj/effect/overlayTest - - loc = locate (10,10,1) - verb - Browse_Icon() - set name = "1. Browse Icon" - // Give it a name for the cache - var/iconName = "[ckey(src.name)]_flattened.dmi" - // Send the icon to src's local cache - src<

") - - Output_Icon() - set name = "2. Output Icon" - to_chat(src, "Icon is: [bicon(getFlatIcon(src))]") - - Label_Icon() - set name = "3. Label Icon" - // Give it a name for the cache - var/iconName = "[ckey(src.name)]_flattened.dmi" - // Copy the file to the rsc manually - var/icon/I = fcopy_rsc(getFlatIcon(src)) - // Send the icon to src's local cache - src< transparent, gray -> translucent white, white -> solid white -/icon/proc/BecomeAlphaMask() - SwapColor(null, "#000000ff") // don't let transparent become gray - MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0) - -/icon/proc/UseAlphaMask(mask) - Opaque() - AddAlphaMask(mask) - -/icon/proc/AddAlphaMask(mask) - var/icon/M = new(mask) - M.Blend("#ffffff", ICON_SUBTRACT) - // apply mask - Blend(M, ICON_ADD) - -/* - HSV format is represented as "#hhhssvv" or "#hhhssvvaa" - - Hue ranges from 0 to 0x5ff (1535) - - 0x000 = red - 0x100 = yellow - 0x200 = green - 0x300 = cyan - 0x400 = blue - 0x500 = magenta - - Saturation is from 0 to 0xff (255) - - More saturation = more color - Less saturation = more gray - - Value ranges from 0 to 0xff (255) - - Higher value means brighter color - */ - -/proc/ReadRGB(rgb) - if(!rgb) return - - // interpret the HSV or HSVA value - var/i=1,start=1 - if(text2ascii(rgb) == 35) ++start // skip opening # - var/ch,which=0,r=0,g=0,b=0,alpha=0,usealpha - var/digits=0 - for(i=start, i<=length(rgb), ++i) - ch = text2ascii(rgb, i) - if(ch < 48 || (ch > 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102) break - ++digits - if(digits == 8) break - - var/single = digits < 6 - if(digits != 3 && digits != 4 && digits != 6 && digits != 8) return - if(digits == 4 || digits == 8) usealpha = 1 - for(i=start, digits>0, ++i) - ch = text2ascii(rgb, i) - if(ch >= 48 && ch <= 57) ch -= 48 - else if(ch >= 65 && ch <= 70) ch -= 55 - else if(ch >= 97 && ch <= 102) ch -= 87 - else break - --digits - switch(which) - if(0) - r = (r << 4) | ch - if(single) - r |= r << 4 - ++which - else if(!(digits & 1)) ++which - if(1) - g = (g << 4) | ch - if(single) - g |= g << 4 - ++which - else if(!(digits & 1)) ++which - if(2) - b = (b << 4) | ch - if(single) - b |= b << 4 - ++which - else if(!(digits & 1)) ++which - if(3) - alpha = (alpha << 4) | ch - if(single) alpha |= alpha << 4 - - . = list(r, g, b) - if(usealpha) . += alpha - -/proc/ReadHSV(hsv) - if(!hsv) return - - // interpret the HSV or HSVA value - var/i=1,start=1 - if(text2ascii(hsv) == 35) ++start // skip opening # - var/ch,which=0,hue=0,sat=0,val=0,alpha=0,usealpha - var/digits=0 - for(i=start, i<=length(hsv), ++i) - ch = text2ascii(hsv, i) - if(ch < 48 || (ch > 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102) break - ++digits - if(digits == 9) break - if(digits > 7) usealpha = 1 - if(digits <= 4) ++which - if(digits <= 2) ++which - for(i=start, digits>0, ++i) - ch = text2ascii(hsv, i) - if(ch >= 48 && ch <= 57) ch -= 48 - else if(ch >= 65 && ch <= 70) ch -= 55 - else if(ch >= 97 && ch <= 102) ch -= 87 - else break - --digits - switch(which) - if(0) - hue = (hue << 4) | ch - if(digits == (usealpha ? 6 : 4)) ++which - if(1) - sat = (sat << 4) | ch - if(digits == (usealpha ? 4 : 2)) ++which - if(2) - val = (val << 4) | ch - if(digits == (usealpha ? 2 : 0)) ++which - if(3) - alpha = (alpha << 4) | ch - - . = list(hue, sat, val) - if(usealpha) . += alpha - -/proc/HSVtoRGB(hsv) - if(!hsv) return "#000000" - var/list/HSV = ReadHSV(hsv) - if(!HSV) return "#000000" - - var/hue = HSV[1] - var/sat = HSV[2] - var/val = HSV[3] - - // Compress hue into easier-to-manage range - hue -= hue >> 8 - if(hue >= 0x5fa) hue -= 0x5fa - - var/hi,mid,lo,r,g,b - hi = val - lo = round((255 - sat) * val / 255, 1) - mid = lo + round(abs(round(hue, 510) - hue) * (hi - lo) / 255, 1) - if(hue >= 765) - if(hue >= 1275) {r=hi; g=lo; b=mid} - else if(hue >= 1020) {r=mid; g=lo; b=hi } - else {r=lo; g=mid; b=hi } - else - if(hue >= 510) {r=lo; g=hi; b=mid} - else if(hue >= 255) {r=mid; g=hi; b=lo } - else {r=hi; g=mid; b=lo } - - return (HSV.len > 3) ? rgb(r,g,b,HSV[4]) : rgb(r,g,b) - -/proc/RGBtoHSV(rgb) - if(!rgb) return "#0000000" - var/list/RGB = ReadRGB(rgb) - if(!RGB) return "#0000000" - - var/r = RGB[1] - var/g = RGB[2] - var/b = RGB[3] - var/hi = max(r,g,b) - var/lo = min(r,g,b) - - var/val = hi - var/sat = hi ? round((hi-lo) * 255 / hi, 1) : 0 - var/hue = 0 - - if(sat) - var/dir - var/mid - if(hi == r) - if(lo == b) {hue=0; dir=1; mid=g} - else {hue=1535; dir=-1; mid=b} - else if(hi == g) - if(lo == r) {hue=512; dir=1; mid=b} - else {hue=511; dir=-1; mid=r} - else if(hi == b) - if(lo == g) {hue=1024; dir=1; mid=r} - else {hue=1023; dir=-1; mid=g} - hue += dir * round((mid-lo) * 255 / (hi-lo), 1) - - return hsv(hue, sat, val, (RGB.len>3 ? RGB[4] : null)) - -/proc/hsv(hue, sat, val, alpha) - if(hue < 0 || hue >= 1536) hue %= 1536 - if(hue < 0) hue += 1536 - if((hue & 0xFF) == 0xFF) - ++hue - if(hue >= 1536) hue = 0 - if(sat < 0) sat = 0 - if(sat > 255) sat = 255 - if(val < 0) val = 0 - if(val > 255) val = 255 - . = "#" - . += TO_HEX_DIGIT(hue >> 8) - . += TO_HEX_DIGIT(hue >> 4) - . += TO_HEX_DIGIT(hue) - . += TO_HEX_DIGIT(sat >> 4) - . += TO_HEX_DIGIT(sat) - . += TO_HEX_DIGIT(val >> 4) - . += TO_HEX_DIGIT(val) - if(!isnull(alpha)) - if(alpha < 0) alpha = 0 - if(alpha > 255) alpha = 255 - . += TO_HEX_DIGIT(alpha >> 4) - . += TO_HEX_DIGIT(alpha) - -/* - Smooth blend between HSV colors - - amount=0 is the first color - amount=1 is the second color - amount=0.5 is directly between the two colors - - amount<0 or amount>1 are allowed - */ -/proc/BlendHSV(hsv1, hsv2, amount) - var/list/HSV1 = ReadHSV(hsv1) - var/list/HSV2 = ReadHSV(hsv2) - - // add missing alpha if needed - if(HSV1.len < HSV2.len) HSV1 += 255 - else if(HSV2.len < HSV1.len) HSV2 += 255 - var/usealpha = HSV1.len > 3 - - // normalize hsv values in case anything is screwy - if(HSV1[1] > 1536) HSV1[1] %= 1536 - if(HSV2[1] > 1536) HSV2[1] %= 1536 - if(HSV1[1] < 0) HSV1[1] += 1536 - if(HSV2[1] < 0) HSV2[1] += 1536 - if(!HSV1[3]) {HSV1[1] = 0; HSV1[2] = 0} - if(!HSV2[3]) {HSV2[1] = 0; HSV2[2] = 0} - - // no value for one color means don't change saturation - if(!HSV1[3]) HSV1[2] = HSV2[2] - if(!HSV2[3]) HSV2[2] = HSV1[2] - // no saturation for one color means don't change hues - if(!HSV1[2]) HSV1[1] = HSV2[1] - if(!HSV2[2]) HSV2[1] = HSV1[1] - - // Compress hues into easier-to-manage range - HSV1[1] -= HSV1[1] >> 8 - HSV2[1] -= HSV2[1] >> 8 - - var/hue_diff = HSV2[1] - HSV1[1] - if(hue_diff > 765) hue_diff -= 1530 - else if(hue_diff <= -765) hue_diff += 1530 - - var/hue = round(HSV1[1] + hue_diff * amount, 1) - var/sat = round(HSV1[2] + (HSV2[2] - HSV1[2]) * amount, 1) - var/val = round(HSV1[3] + (HSV2[3] - HSV1[3]) * amount, 1) - var/alpha = usealpha ? round(HSV1[4] + (HSV2[4] - HSV1[4]) * amount, 1) : null - - // normalize hue - if(hue < 0 || hue >= 1530) hue %= 1530 - if(hue < 0) hue += 1530 - // decompress hue - hue += round(hue / 255) - - return hsv(hue, sat, val, alpha) - -/* - Smooth blend between RGB colors - - amount=0 is the first color - amount=1 is the second color - amount=0.5 is directly between the two colors - - amount<0 or amount>1 are allowed - */ -/proc/BlendRGB(rgb1, rgb2, amount) - var/list/RGB1 = ReadRGB(rgb1) - var/list/RGB2 = ReadRGB(rgb2) - - // add missing alpha if needed - if(RGB1.len < RGB2.len) RGB1 += 255 - else if(RGB2.len < RGB1.len) RGB2 += 255 - var/usealpha = RGB1.len > 3 - - var/r = round(RGB1[1] + (RGB2[1] - RGB1[1]) * amount, 1) - var/g = round(RGB1[2] + (RGB2[2] - RGB1[2]) * amount, 1) - var/b = round(RGB1[3] + (RGB2[3] - RGB1[3]) * amount, 1) - var/alpha = usealpha ? round(RGB1[4] + (RGB2[4] - RGB1[4]) * amount, 1) : null - - return isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha) - -/proc/BlendRGBasHSV(rgb1, rgb2, amount) - return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount) - -/proc/HueToAngle(hue) - // normalize hsv in case anything is screwy - if(hue < 0 || hue >= 1536) hue %= 1536 - if(hue < 0) hue += 1536 - // Compress hue into easier-to-manage range - hue -= hue >> 8 - return hue / (1530/360) - -/proc/AngleToHue(angle) - // normalize hsv in case anything is screwy - if(angle < 0 || angle >= 360) angle -= 360 * round(angle / 360) - var/hue = angle * (1530/360) - // Decompress hue - hue += round(hue / 255) - return hue - - -// positive angle rotates forward through red->green->blue -/proc/RotateHue(hsv, angle) - var/list/HSV = ReadHSV(hsv) - - // normalize hsv in case anything is screwy - if(HSV[1] >= 1536) HSV[1] %= 1536 - if(HSV[1] < 0) HSV[1] += 1536 - - // Compress hue into easier-to-manage range - HSV[1] -= HSV[1] >> 8 - - if(angle < 0 || angle >= 360) angle -= 360 * round(angle / 360) - HSV[1] = round(HSV[1] + angle * (1530/360), 1) - - // normalize hue - if(HSV[1] < 0 || HSV[1] >= 1530) HSV[1] %= 1530 - if(HSV[1] < 0) HSV[1] += 1530 - // decompress hue - HSV[1] += round(HSV[1] / 255) - - return hsv(HSV[1], HSV[2], HSV[3], (HSV.len > 3 ? HSV[4] : null)) - -// Convert an rgb color to grayscale -/proc/GrayScale(rgb) - var/list/RGB = ReadRGB(rgb) - var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 - return (RGB.len > 3) ? rgb(gray, gray, gray, RGB[4]) : rgb(gray, gray, gray) - -// Change grayscale color to black->tone->white range -/proc/ColorTone(rgb, tone) - var/list/RGB = ReadRGB(rgb) - var/list/TONE = ReadRGB(tone) - - var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 - var/tone_gray = TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11 - - if(gray <= tone_gray) return BlendRGB("#000000", tone, gray/(tone_gray || 1)) - else return BlendRGB(tone, "#ffffff", (gray-tone_gray)/((255-tone_gray) || 1)) - - -/* -Get flat icon by DarkCampainger. As it says on the tin, will return an icon with all the overlays -as a single icon. Useful for when you want to manipulate an icon via the above as overlays are not normally included. -The _flatIcons list is a cache for generated icon files. -*/ - -// Creates a single icon from a given /atom or /image. Only the first argument is required. -/proc/getFlatIcon(image/A, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE) - //Define... defines. - var/static/icon/flat_template = icon('icons/effects/effects.dmi', "nothing") - - #define BLANK icon(flat_template) - #define SET_SELF(SETVAR) do { \ - var/icon/SELF_ICON=icon(icon(curicon, curstate, base_icon_dir),"",SOUTH,no_anim?1:null); \ - if(A.alpha<255) { \ - SELF_ICON.Blend(rgb(255,255,255,A.alpha),ICON_MULTIPLY);\ - } \ - if(A.color) { \ - if(islist(A.color)){ \ - SELF_ICON.MapColors(arglist(A.color))} \ - else{ \ - SELF_ICON.Blend(A.color,ICON_MULTIPLY)} \ - } \ - ##SETVAR=SELF_ICON;\ - } while (0) - #define INDEX_X_LOW 1 - #define INDEX_X_HIGH 2 - #define INDEX_Y_LOW 3 - #define INDEX_Y_HIGH 4 - - #define flatX1 flat_size[INDEX_X_LOW] - #define flatX2 flat_size[INDEX_X_HIGH] - #define flatY1 flat_size[INDEX_Y_LOW] - #define flatY2 flat_size[INDEX_Y_HIGH] - #define addX1 add_size[INDEX_X_LOW] - #define addX2 add_size[INDEX_X_HIGH] - #define addY1 add_size[INDEX_Y_LOW] - #define addY2 add_size[INDEX_Y_HIGH] - - if(!A || A.alpha <= 0) - return BLANK - - var/noIcon = FALSE - if(start) - if(!defdir) - defdir = A.dir - if(!deficon) - deficon = A.icon - if(!defstate) - defstate = A.icon_state - if(!defblend) - defblend = A.blend_mode - - var/curicon = A.icon || deficon - var/curstate = A.icon_state || defstate - - if(!((noIcon = (!curicon)))) - var/curstates = icon_states(curicon) - if(!(curstate in curstates)) - if("" in curstates) - curstate = "" - else - noIcon = TRUE // Do not render this object. - - var/curdir - var/base_icon_dir //We'll use this to get the icon state to display if not null BUT NOT pass it to overlays as the dir we have - - //These should use the parent's direction (most likely) - if(!A.dir || A.dir == SOUTH) - curdir = defdir - else - curdir = A.dir - - //Try to remove/optimize this section ASAP, CPU hog. - //Determines if there's directionals. - if(!noIcon && curdir != SOUTH) - var/exist = FALSE - var/static/list/checkdirs = list(NORTH, EAST, WEST) - for(var/i in checkdirs) //Not using GLOB for a reason. - if(length(icon_states(icon(curicon, curstate, i)))) - exist = TRUE - break - if(!exist) - base_icon_dir = SOUTH - // - - if(!base_icon_dir) - base_icon_dir = curdir - - ASSERT(!BLEND_DEFAULT) //I might just be stupid but lets make sure this define is 0. - - var/curblend = A.blend_mode || defblend - - if(A.overlays.len || A.underlays.len) - var/icon/flat = BLANK - // Layers will be a sorted list of icons/overlays, based on the order in which they are displayed - var/list/layers = list() - var/image/copy - // Add the atom's icon itself, without pixel_x/y offsets. - if(!noIcon) - copy = image(icon=curicon, icon_state=curstate, layer=A.layer, dir=base_icon_dir) - copy.color = A.color - copy.alpha = A.alpha - copy.blend_mode = curblend - layers[copy] = A.layer - - // Loop through the underlays, then overlays, sorting them into the layers list - for(var/process_set in 0 to 1) - var/list/process = process_set? A.overlays : A.underlays - for(var/i in 1 to process.len) - var/image/current = process[i] - if(!current) - continue - if(current.plane != FLOAT_PLANE && current.plane != A.plane) - continue - var/current_layer = current.layer - if(current_layer < 0) - if(current_layer <= -1000) - return flat - current_layer = process_set + A.layer + current_layer / 1000 - - for(var/p in 1 to layers.len) - var/image/cmp = layers[p] - if(current_layer < layers[cmp]) - layers.Insert(p, current) - break - layers[current] = current_layer - - var/icon/add // Icon of overlay being added - - // Current dimensions of flattened icon - var/list/flat_size = list(1, flat.Width(), 1, flat.Height()) - // Dimensions of overlay being added - var/list/add_size[4] - - for(var/V in layers) - var/image/I = V - if(I.alpha == 0) - continue - - if(I == copy) // 'I' is an /image based on the object being flattened. - curblend = BLEND_OVERLAY - add = icon(I.icon, I.icon_state, base_icon_dir) - else // 'I' is an appearance object. - add = getFlatIcon(image(I), curdir, curicon, curstate, curblend, FALSE, no_anim) - if(!add) - continue - // Find the new dimensions of the flat icon to fit the added overlay - add_size = list( - min(flatX1, I.pixel_x+1), - max(flatX2, I.pixel_x+add.Width()), - min(flatY1, I.pixel_y+1), - max(flatY2, I.pixel_y+add.Height()) - ) - - if(flat_size ~! add_size) - // Resize the flattened icon so the new icon fits - flat.Crop( - addX1 - flatX1 + 1, - addY1 - flatY1 + 1, - addX2 - flatX1 + 1, - addY2 - flatY1 + 1 - ) - flat_size = add_size.Copy() - - // Blend the overlay into the flattened icon - flat.Blend(add, blendMode2iconMode(curblend), I.pixel_x + 2 - flatX1, I.pixel_y + 2 - flatY1) - - if(A.color) - if(islist(A.color)) - flat.MapColors(arglist(A.color)) - else - flat.Blend(A.color, ICON_MULTIPLY) - - if(A.alpha < 255) - flat.Blend(rgb(255, 255, 255, A.alpha), ICON_MULTIPLY) - - if(no_anim) - //Clean up repeated frames - var/icon/cleaned = new /icon() - cleaned.Insert(flat, "", SOUTH, 1, 0) - . = cleaned - else - . = icon(flat, "", SOUTH) - else //There's no overlays. - if(!noIcon) - SET_SELF(.) - - //Clear defines - #undef flatX1 - #undef flatX2 - #undef flatY1 - #undef flatY2 - #undef addX1 - #undef addX2 - #undef addY1 - #undef addY2 - - #undef INDEX_X_LOW - #undef INDEX_X_HIGH - #undef INDEX_Y_LOW - #undef INDEX_Y_HIGH - - #undef BLANK - #undef SET_SELF - -/proc/getIconMask(atom/A)//By yours truly. Creates a dynamic mask for a mob/whatever. /N - var/icon/alpha_mask = new(A.icon,A.icon_state)//So we want the default icon and icon state of A. - for(var/V in A.overlays)//For every image in overlays. var/image/I will not work, don't try it. - var/image/I = V - if(I.layer>A.layer) - continue//If layer is greater than what we need, skip it. - var/icon/image_overlay = new(I.icon,I.icon_state)//Blend only works with icon objects. - //Also, icons cannot directly set icon_state. Slower than changing variables but whatever. - alpha_mask.Blend(image_overlay,ICON_OR)//OR so they are lumped together in a nice overlay. - return alpha_mask//And now return the mask. - -/mob/proc/AddCamoOverlay(atom/A)//A is the atom which we are using as the overlay. - var/icon/opacity_icon = new(A.icon, A.icon_state)//Don't really care for overlays/underlays. - //Now we need to culculate overlays+underlays and add them together to form an image for a mask. - //var/icon/alpha_mask = getFlatIcon(src)//Accurate but SLOW. Not designed for running each tick. Could have other uses I guess. - var/icon/alpha_mask = getIconMask(src)//Which is why I created that proc. Also a little slow since it's blending a bunch of icons together but good enough. - opacity_icon.AddAlphaMask(alpha_mask)//Likely the main source of lag for this proc. Probably not designed to run each tick. - opacity_icon.ChangeOpacity(0.4)//Front end for MapColors so it's fast. 0.5 means half opacity and looks the best in my opinion. - for(var/i=0,i<5,i++)//And now we add it as overlays. It's faster than creating an icon and then merging it. - var/image/I = image("icon" = opacity_icon, "icon_state" = A.icon_state, "layer" = layer+0.8)//So it's above other stuff but below weapons and the like. - switch(i)//Now to determine offset so the result is somewhat blurred. - if(1) I.pixel_x-- - if(2) I.pixel_x++ - if(3) I.pixel_y-- - if(4) I.pixel_y++ - overlays += I//And finally add the overlay. - -/proc/getHologramIcon(icon/A, safety=1)//If safety is on, a new icon is not created. - var/icon/flat_icon = safety ? A : new(A)//Has to be a new icon to not constantly change the same icon. - var/icon/alpha_mask - flat_icon.ColorTone(rgb(125,180,225))//Let's make it bluish. - flat_icon.ChangeOpacity(0.5)//Make it half transparent. - if(A.Height() == 64) - alpha_mask = new('icons/mob/ancient_machine.dmi', "scanline2")//Scaline for tall icons. - else - alpha_mask = new('icons/effects/effects.dmi', "scanline")//Scanline effect. - flat_icon.AddAlphaMask(alpha_mask)//Finally, let's mix in a distortion effect. - return flat_icon - -//For photo camera. -/proc/build_composite_icon(atom/A) - var/icon/composite = icon(A.icon, A.icon_state, A.dir, 1) - for(var/O in A.overlays) - var/image/I = O - composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) - return composite - -/proc/adjust_brightness(color, value) - if(!color) return "#FFFFFF" - if(!value) return color - - var/list/RGB = ReadRGB(color) - RGB[1] = clamp(RGB[1]+value,0,255) - RGB[2] = clamp(RGB[2]+value,0,255) - RGB[3] = clamp(RGB[3]+value,0,255) - return rgb(RGB[1],RGB[2],RGB[3]) - -/proc/sort_atoms_by_layer(list/atoms) - // Comb sort icons based on levels - var/list/result = atoms.Copy() - var/gap = result.len - var/swapped = 1 - while(gap > 1 || swapped) - swapped = 0 - if(gap > 1) - gap = round(gap / 1.3) // 1.3 is the emperic comb sort coefficient - if(gap < 1) - gap = 1 - for(var/i = 1; gap + i <= result.len; i++) - var/atom/l = result[i] //Fucking hate - var/atom/r = result[gap+i] //how lists work here - if(l.layer > r.layer) //no "result[i].layer" for me - result.Swap(i, gap + i) - swapped = 1 - return result - -//Interface for using DrawBox() to draw 1 pixel on a coordinate. -//Returns the same icon specifed in the argument, but with the pixel drawn -/proc/DrawPixel(icon/I, colour, drawX, drawY) - if(!I) - return 0 - var/Iwidth = I.Width() - var/Iheight = I.Height() - if(drawX > Iwidth || drawX <= 0) - return 0 - if(drawY > Iheight || drawY <= 0) - return 0 - I.DrawBox(colour,drawX, drawY) - return I - -//Interface for easy drawing of one pixel on an atom. -/atom/proc/DrawPixelOn(colour, drawX, drawY) - var/icon/I = new(icon) - var/icon/J = DrawPixel(I, colour, drawX, drawY) - if(J) //Only set the icon if it succeeded, the icon without the pixel is 1000x better than a black square. - icon = J - return J - return 0 - -//Hook, override to run code on- wait this is images -//Images have dir without being an atom, so they get their own definition. -//Lame. -/image/proc/setDir(newdir) - dir = newdir - -/proc/rand_hex_color() - var/list/colors = list("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f") - var/color="" - for(var/i=0;i<6;i++) - color = color+pick(colors) - return "#[color]" - -//Imagine removing pixels from the main icon that are covered by pixels from the mask icon. -//Standard behaviour is to cut pixels from the main icon that are covered by pixels from the mask icon unless passed mask_ready, see below. -/proc/get_icon_difference(icon/main, icon/mask, mask_ready) - /*You should skip prep if the mask is already sprited properly. This significantly improves performance by eliminating most of the realtime icon work. - e.g. A 'ready' mask is a mask where the part you want cut out is missing (no pixels, 0 alpha) from the sprite, and everything else is solid white.*/ - - if(istype(main) && istype(mask)) - if(!mask_ready) //Prep the mask if we're using a regular old sprite and not a special-made mask. - mask.Blend(rgb(255,255,255), ICON_SUBTRACT) //Make all pixels on the mask as black as possible. - mask.Opaque(rgb(255,255,255)) //Make the transparent pixels (background) white. - mask.BecomeAlphaMask() //Make all the black pixels vanish (fully transparent), leaving only the white background pixels. - - main.AddAlphaMask(mask) //Make the pixels in the main icon that are in the transparent zone of the mask icon also vanish (fully transparent). - return main - -///Checks if the given iconstate exists in the given file, caching the result. Setting no_sprite to TRUE will print a stack trace ONCE. -/proc/icon_exists(file, state, no_sprite) - var/static/list/icon_states_cache = list() - if(icon_states_cache[file]?[state]) - return TRUE - - if(icon_states_cache[file]?[state] == FALSE) - return FALSE - - var/list/states = icon_states(file) - - if(!icon_states_cache[file]) - icon_states_cache[file] = list() - - if(state in states) - icon_states_cache[file][state] = TRUE - return TRUE - else - icon_states_cache[file][state] = FALSE - if(no_sprite) - stack_trace("Icon Lookup for state: [state] in file [file] failed.") - return FALSE diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index b38ac58526ac..2ca7a083ea92 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -21,7 +21,7 @@ var/char = copytext(hex, i, i + 1) switch(char) if("0") - //Apparently, switch works with empty statements, yay! If that doesn't work, blame me, though. -- Urist + pass() // Do nothing if("9", "8", "7", "6", "5", "4", "3", "2", "1") num += text2num(char) * 16 ** power if("a", "A") @@ -103,8 +103,6 @@ return "northwest" if(10.0) return "southwest" - else - return //Turns text into proper directions /proc/text2dir(direction) @@ -125,8 +123,6 @@ return 6 if("SOUTHWEST") return 10 - else - return //Converts an angle (degrees) into an ss13 direction /proc/angle2dir(degree) diff --git a/code/controllers/subsystem/SSacid.dm b/code/controllers/subsystem/SSacid.dm index befc1ebfc62d..469cd7d06fcb 100644 --- a/code/controllers/subsystem/SSacid.dm +++ b/code/controllers/subsystem/SSacid.dm @@ -34,8 +34,7 @@ SUBSYSTEM_DEF(acid) return continue - if(O.acid_level && O.acid_processing()) - else + if(!(O.acid_level && O.acid_processing())) O.cut_overlay(GLOB.acid_overlay, TRUE) processing -= O diff --git a/code/controllers/subsystem/SSjobs.dm b/code/controllers/subsystem/SSjobs.dm index c452f4c1099a..c3df11a2980e 100644 --- a/code/controllers/subsystem/SSjobs.dm +++ b/code/controllers/subsystem/SSjobs.dm @@ -82,6 +82,8 @@ SUBSYSTEM_DEF(jobs) return FALSE if(job.barred_by_disability(player.client)) return FALSE + if(job.barred_by_missing_limbs(player.client)) + return FALSE var/position_limit = job.total_positions if(!latejoin) @@ -128,6 +130,9 @@ SUBSYSTEM_DEF(jobs) if(job.barred_by_disability(player.client)) Debug("FOC player has disability rendering them ineligible for job, Player: [player]") continue + if(job.barred_by_missing_limbs(player.client)) + Debug("FOC player has missing limbs rendering them ineligible for job, Player: [player]") + continue if(flag && !(flag in player.client.prefs.be_special)) Debug("FOC flag failed, Player: [player], Flag: [flag], ") continue @@ -170,6 +175,10 @@ SUBSYSTEM_DEF(jobs) Debug("GRJ player has disability rendering them ineligible for job, Player: [player]") continue + if(job.barred_by_missing_limbs(player.client)) + Debug("GRJ player has missing limbs rendering them ineligible for job, Player: [player]") + continue + if(player.mind && (job.title in player.mind.restricted_roles)) Debug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]") continue @@ -347,6 +356,10 @@ SUBSYSTEM_DEF(jobs) Debug("DO player has disability rendering them ineligible for job, Player: [player], Job:[job.title]") continue + if(job.barred_by_missing_limbs(player.client)) + Debug("DO player has missing limbs rendering them ineligible for job, Player: [player], Job:[job.title]") + continue + if(player.mind && (job.title in player.mind.restricted_roles)) Debug("DO incompatible with antagonist role, Player: [player], Job:[job.title]") continue @@ -553,7 +566,7 @@ SUBSYSTEM_DEF(jobs) if(job.get_exp_restrictions(player.client)) young++ continue - if(job.barred_by_disability(player.client)) + if(job.barred_by_disability(player.client) || job.barred_by_missing_limbs(player.client)) disabled++ continue if(player.client.prefs.active_character.GetJobDepartment(job, 1) & job.flag) diff --git a/code/datums/log_record.dm b/code/datums/log_record.dm index cf437c86dbdd..b550c24fc43b 100644 --- a/code/datums/log_record.dm +++ b/code/datums/log_record.dm @@ -42,7 +42,8 @@ var/TX = L.getToxLoss() > 50 ? "[L.getToxLoss()]" : L.getToxLoss() var/BU = L.getFireLoss() > 50 ? "[L.getFireLoss()]" : L.getFireLoss() var/BR = L.getBruteLoss() > 50 ? "[L.getBruteLoss()]" : L.getBruteLoss() - return " ([L.health]: [OX] - [TX] - [BU] - [BR])" + var/ST = L.getStaminaLoss() > 50 ? "[L.getStaminaLoss()]" : L.getStaminaLoss() + return " ([L.health]: [OX] - [TX] - [BU] - [BR] - [ST])" /datum/log_record/proc/should_log_health(log_type) if(log_type == ATTACK_LOG || log_type == DEFENSE_LOG) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 77b4bd78d954..1a88d3a07add 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -223,6 +223,11 @@ /datum/status_effect/pacifism/on_remove() REMOVE_TRAIT(owner, TRAIT_PACIFISM, id) +/datum/status_effect/pacifism/batterer + id = "pacifism_debuff_batterer" + alert_type = null + duration = 10 SECONDS + // used to track if hitting someone with a cult dagger/sword should stamina crit. /datum/status_effect/cult_stun_mark id = "cult_stun" @@ -289,6 +294,10 @@ /datum/status_effect/cling_tentacle/on_remove() REMOVE_TRAIT(owner, TRAIT_IMMOBILIZED, "[id]") +/datum/status_effect/cling_tentacle/batterer + id = "cling_tentacle_batterer" + alert_type = null + duration = 7 SECONDS // start of `living` level status procs. /** diff --git a/code/datums/uplink_items/uplink_general.dm b/code/datums/uplink_items/uplink_general.dm index 982eee6abe46..8f84aea50566 100644 --- a/code/datums/uplink_items/uplink_general.dm +++ b/code/datums/uplink_items/uplink_general.dm @@ -215,6 +215,12 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/weaponcrafting/gunkit/universal_gun_kit cost = 8 +/datum/uplink_item/dangerous/batterer + name = "Mind Batterer" + desc = "A dangerous syndicate device focused on crowd control and escapes. Causes brain damage, confusion, and other nasty effects to those surrounding the user. Has 5 charges." + reference = "BTR" + item = /obj/item/batterer + cost = 5 // Ammunition diff --git a/code/game/dna/mutations/mutation_powers.dm b/code/game/dna/mutations/mutation_powers.dm index 5975a9f840a8..2376043ede74 100644 --- a/code/game/dna/mutations/mutation_powers.dm +++ b/code/game/dna/mutations/mutation_powers.dm @@ -1028,6 +1028,12 @@ ..() block = GLOB.remoteviewblock +/datum/mutation/grant_spell/remoteview/deactivate(mob/user) + . = ..() + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.remoteview_target = null + H.reset_perspective() /obj/effect/proc_holder/spell/remoteview name = "Remote View" diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index e7b67b7a8a65..f17b9ef91f0e 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -177,7 +177,7 @@ /datum/game_mode/revolution/latespawn(mob/living/carbon/human/player) ..() var/datum/mind/player_mind = player.mind - var/static/list/real_command_positions = GLOB.command_positions.Copy() - "Nanotrasen Representative" + var/list/real_command_positions = GLOB.command_positions.Copy() - "Nanotrasen Representative" if(player_mind && (player_mind.assigned_role in real_command_positions)) for(var/datum/mind/rev_mind in head_revolutionaries) mark_for_death(rev_mind, player_mind) diff --git a/code/game/jobs/job/engineering_jobs.dm b/code/game/jobs/job/engineering_jobs.dm index cd33c196810b..34e92ca97266 100644 --- a/code/game/jobs/job/engineering_jobs.dm +++ b/code/game/jobs/job/engineering_jobs.dm @@ -20,6 +20,8 @@ ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MINERAL_STOREROOM) minimal_player_age = 21 exp_map = list(EXP_TYPE_ENGINEERING = 1200) + blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) + missing_limbs_allowed = FALSE outfit = /datum/outfit/job/chief_engineer important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Engineering), basic job duties, and act professionally (roleplay)." diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index cd4c5ecf3b5a..2b54af96240d 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -57,7 +57,11 @@ // Assoc list of EXP_TYPE_ defines and the amount of time needed in those departments var/list/exp_map = list() - var/disabilities_allowed = 1 + /// Cannot pick this job if the character has these disabilities + var/list/blacklisted_disabilities = list() + /// If this job could have any amputated limbs + var/missing_limbs_allowed = TRUE + var/transfer_allowed = TRUE // If false, ID computer will always discourage transfers to this job, even if player is eligible var/hidden_from_job_prefs = FALSE // if true, job preferences screen never shows this job. @@ -114,17 +118,28 @@ return max(0, minimal_player_age - C.player_age) +/// Returns true if the character has a disability the selected job doesn't allow /datum/job/proc/barred_by_disability(client/C) - if(!C) - return 0 - if(disabilities_allowed) - return 0 - var/list/prohibited_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) - for(var/i = 1, i < prohibited_disabilities.len, i++) - var/this_disability = prohibited_disabilities[i] - if(C.prefs.active_character.disabilities & this_disability) - return 1 - return 0 + if(!C || !length(blacklisted_disabilities)) + return FALSE + for(var/disability in blacklisted_disabilities) + if(C.prefs.active_character.disabilities & disability) + return TRUE + return FALSE + +/// Returns true if the character has amputated limbs when their selected job doesn't allow it +/datum/job/proc/barred_by_missing_limbs(client/C) + if(!C || missing_limbs_allowed) + return FALSE + + var/organ_status + var/list/active_character_organs = C.prefs.active_character.organ_data + + for(var/organ_name in active_character_organs) + organ_status = active_character_organs[organ_name] + if(organ_status == "amputated") + return TRUE + return FALSE /datum/job/proc/is_position_available() return (current_positions < total_positions) || (total_positions == -1) diff --git a/code/game/jobs/job/medical_jobs.dm b/code/game/jobs/job/medical_jobs.dm index 83257ee8d54e..6c0f384eeea3 100644 --- a/code/game/jobs/job/medical_jobs.dm +++ b/code/game/jobs/job/medical_jobs.dm @@ -18,6 +18,7 @@ ACCESS_KEYCARD_AUTH, ACCESS_SEC_DOORS, ACCESS_PSYCHIATRIST, ACCESS_MAINT_TUNNELS, ACCESS_PARAMEDIC, ACCESS_MINERAL_STOREROOM) minimal_player_age = 21 exp_map = list(EXP_TYPE_MEDICAL = 1200) + blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) outfit = /datum/outfit/job/cmo important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Medical), basic job duties, and act professionally (roleplay)." diff --git a/code/game/jobs/job/science_jobs.dm b/code/game/jobs/job/science_jobs.dm index 17adfb442ab9..0ec12ca261c5 100644 --- a/code/game/jobs/job/science_jobs.dm +++ b/code/game/jobs/job/science_jobs.dm @@ -19,6 +19,7 @@ ACCESS_RESEARCH, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_AI_UPLOAD, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_EXPEDITION, ACCESS_XENOARCH, ACCESS_MINISAT, ACCESS_MAINT_TUNNELS, ACCESS_MINERAL_STOREROOM, ACCESS_NETWORK) minimal_player_age = 21 + blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) exp_map = list(EXP_TYPE_SCIENCE = 1200) // All science-y guys get bonuses for maxing out their tech. required_objectives = list( diff --git a/code/game/jobs/job/security_jobs.dm b/code/game/jobs/job/security_jobs.dm index 3fa02496155c..0b99f2e9f04e 100644 --- a/code/game/jobs/job/security_jobs.dm +++ b/code/game/jobs/job/security_jobs.dm @@ -20,7 +20,8 @@ ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_WEAPONS) minimal_player_age = 21 exp_map = list(EXP_TYPE_SECURITY = 1200) - disabilities_allowed = 0 + blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) + missing_limbs_allowed = FALSE outfit = /datum/outfit/job/hos important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Security), Space Law, basic job duties, and act professionally (roleplay)." @@ -65,6 +66,8 @@ minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS) minimal_player_age = 21 exp_map = list(EXP_TYPE_SECURITY = 600) + blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) + missing_limbs_allowed = FALSE outfit = /datum/outfit/job/warden /datum/outfit/job/warden @@ -110,6 +113,8 @@ alt_titles = list("Forensic Technician") minimal_player_age = 14 exp_map = list(EXP_TYPE_CREW = 600) + blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) + missing_limbs_allowed = FALSE outfit = /datum/outfit/job/detective important_information = "Track, investigate, and look cool while doing it." @@ -166,6 +171,8 @@ minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS) minimal_player_age = 14 exp_map = list(EXP_TYPE_CREW = 600) + blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) + missing_limbs_allowed = FALSE outfit = /datum/outfit/job/officer important_information = "Space Law is the law, not a suggestion." diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index c67c9ab46eb2..f340aa09caa0 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -14,7 +14,7 @@ minimal_access = list() //See get_access() minimal_player_age = 30 exp_map = list(EXP_TYPE_COMMAND = 1200) - disabilities_allowed = 0 + blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) outfit = /datum/outfit/job/captain important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Command), basic job duties, and act professionally (roleplay)." @@ -82,6 +82,7 @@ ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_HEADS_VAULT, ACCESS_MINING_STATION, ACCESS_CLOWN, ACCESS_MIME, ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_WEAPONS, ACCESS_MINERAL_STOREROOM) + blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) outfit = /datum/outfit/job/hop important_information = "This role requires you to coordinate a department. You are required to be familiar with Standard Operating Procedure (Service), basic job duties, and act professionally (roleplay)." @@ -130,6 +131,7 @@ ACCESS_CREMATORIUM, ACCESS_KITCHEN, ACCESS_CARGO, ACCESS_CARGO_BOT, ACCESS_MAILSORTING, ACCESS_QM, ACCESS_HYDROPONICS, ACCESS_LAWYER, ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_HEADS_VAULT, ACCESS_MINING_STATION, ACCESS_CLOWN, ACCESS_MIME, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_WEAPONS, ACCESS_NTREP) + blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE) outfit = /datum/outfit/job/nanotrasenrep important_information = "This role requires you to advise the Command team about Standard Operating Procedure, Chain of Command, and report to Central Command about various matters. You are required to act in a manner befitting someone representing Nanotrasen." @@ -173,6 +175,8 @@ ACCESS_CLOWN, ACCESS_MIME, ACCESS_HOP, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_WEAPONS, ACCESS_BLUESHIELD) minimal_access = list(ACCESS_SEC_DOORS, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_ENGINE, ACCESS_MAINT_TUNNELS, ACCESS_RESEARCH, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_HEADS, ACCESS_BLUESHIELD, ACCESS_WEAPONS) + blacklisted_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) + missing_limbs_allowed = FALSE outfit = /datum/outfit/job/blueshield important_information = "This role requires you to ensure the safety of the Heads of Staff, not the general crew. You may perform arrests only if the combatant is directly threatening a member of Command, the Nanotrasen Representative, or the Magistrate." @@ -218,6 +222,7 @@ ACCESS_THEATRE, ACCESS_CHAPEL_OFFICE, ACCESS_LIBRARY, ACCESS_RESEARCH, ACCESS_MINING, ACCESS_HEADS_VAULT, ACCESS_MINING_STATION, ACCESS_CLOWN, ACCESS_MIME, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_EXPEDITION, ACCESS_MAGISTRATE) minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_LAWYER, ACCESS_MAGISTRATE, ACCESS_HEADS, ACCESS_RC_ANNOUNCE) + blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE) outfit = /datum/outfit/job/judge important_information = "This role requires you to oversee legal matters and make important decisions about sentencing. You are required to have an extensive knowledge of Space Law and Security SOP and only operate within, not outside, the boundaries of the law." @@ -259,6 +264,7 @@ alt_titles = list("Human Resources Agent") minimal_player_age = 30 exp_map = list(EXP_TYPE_CREW = 600) + blacklisted_disabilities = list(DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE) outfit = /datum/outfit/job/lawyer important_information = "Your job is to deal with affairs regarding Standard Operating Procedure. You are NOT in charge of Space Law affairs, nor can you override it. You are not a prisoner defence lawyer." diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 660e0969e8c1..3e4c50ae4d2d 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -77,7 +77,6 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) var/aiHacking = FALSE var/obj/machinery/door/airlock/closeOther var/closeOtherId - var/justzap = FALSE var/obj/item/airlock_electronics/electronics var/shockCooldown = FALSE //Prevents multiple shocks from happening var/obj/item/note //Any papers pinned to the airlock @@ -192,11 +191,8 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) /obj/machinery/door/airlock/bumpopen(mob/living/user) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite if(!issilicon(usr)) if(isElectrified()) - if(!justzap) + if(shockCooldown <= world.time) if(shock(user, 100)) - justzap = TRUE - spawn (10) - justzap = FALSE return else return @@ -312,14 +308,28 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) if(shockCooldown > world.time) return FALSE //Already shocked someone recently? if(..()) - shockCooldown = world.time + 2 SECONDS + shockCooldown = world.time + 1 SECONDS //Time must be lowered from 2 seconds due to bump, bump was only 1 second. return TRUE else return FALSE //Checks if the user can get shocked and shocks him if it can. Returns TRUE if it happened /obj/machinery/door/airlock/proc/shock_user(mob/user, prob) - return (!issilicon(user) && isElectrified() && shock(user, prob)) + var/output = !issilicon(user) && isElectrified() && shock(user, prob) + if(output) + return TRUE //We got shocked, end of story + if(issilicon(user)) + return FALSE //Borgs don't get door shocked + if(ishuman(user) && isElectrified()) //We don't want people without insulated gloves able to open doors. + var/mob/living/carbon/human/H = user + if(H.gloves) + var/obj/item/clothing/gloves/G = H.gloves + if(G.siemens_coefficient == 0) + return FALSE + + else if(isElectrified()) + return TRUE + return FALSE /obj/machinery/door/airlock/toggle_polarization() polarized_on = !polarized_on @@ -380,7 +390,6 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) state = AIRLOCK_CLOSED else state = AIRLOCK_OPEN - if(AIRLOCK_OPEN, AIRLOCK_CLOSED) if(AIRLOCK_DENY, AIRLOCK_OPENING, AIRLOCK_CLOSING, AIRLOCK_EMAG) icon_state = "nonexistenticonstate" //MADNESS diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm index 797f9a2f9d50..452ddf710701 100644 --- a/code/game/objects/effects/spawners/random_spawners.dm +++ b/code/game/objects/effects/spawners/random_spawners.dm @@ -23,6 +23,8 @@ var/thing_to_place = pickweight(result) if(ispath(thing_to_place, /datum/nothing)) // Nothing. + qdel(src) // See line 13, this needs moving to /Initialize() so we can use the qdel hint already + return else if(ispath(thing_to_place, /turf)) T.ChangeTurf(thing_to_place) else @@ -55,7 +57,7 @@ /datum/nothing = 20, /obj/effect/decal/cleanable/blood/oil = 1) -/obj/effect/spawner/random_spawners/oil_maybe +/obj/effect/spawner/random_spawners/oil_often name = "oil often" icon_state = "oil" result = list( @@ -128,11 +130,18 @@ /datum/nothing = 1, /obj/effect/decal/cleanable/dirt = 1) -/obj/effect/spawner/random_spawners/dirt_rare - name = "dirt rare" +/obj/effect/spawner/random_spawners/dirt_often + name = "dirt often" icon_state = "dirt" result = list( - /datum/nothing = 10, + /datum/nothing = 5, + /obj/effect/decal/cleanable/dirt = 1) + +/obj/effect/spawner/random_spawners/dirt_maybe + name = "dirt maybe" + icon_state = "dirt" + result = list( + /datum/nothing = 7, /obj/effect/decal/cleanable/dirt = 1) /obj/effect/spawner/random_spawners/fungus_maybe diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index d6ff9c422d5c..8f706558445b 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -327,8 +327,6 @@ switch(check_tile_is_border(NT,dir)) if(BORDER_NONE) pending+=NT - if(BORDER_BETWEEN) - //do nothing, may be later i'll add 'rejected' list as optimization if(BORDER_2NDTILE) found+=NT //tile included to new area, but we dont seek more if(BORDER_SPACE) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 12207bc9b9ee..422f686a43dc 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -263,3 +263,102 @@ charges = 8 max_charges = 8 flawless = TRUE + +/obj/item/batterer + name = "mind batterer" + desc = "A dangerous syndicate device focused on crowd control and escapes. Causes brain damage, confusion, and other nasty effects to those surrounding the user." + icon = 'icons/obj/device.dmi' + icon_state = "batterer" + throwforce = 5 + w_class = WEIGHT_CLASS_TINY + throw_speed = 4 + throw_range = 10 + flags = CONDUCT + item_state = "electronic" + origin_tech = "magnets=3;combat=3;syndicate=3" + + /// How many times the mind batter has been used + var/times_used = 0 + var/max_uses = 5 + /// Is this item on cooldown from being thrown + var/on_throwing_cooldown = FALSE + +/obj/item/batterer/examine(mob/user) + . = ..() + . += "A little label on the side reads: \"Warning: Using this item in quick succession may cause fatigue to the user!\"" + if(times_used >= max_uses) + . += "[src] is out of charge." + if(times_used < max_uses) + . += "[src] has [max_uses-times_used] charges left." + +/obj/item/batterer/attack_self(mob/living/carbon/user) + activate_batterer(user) + +/obj/item/batterer/proc/activate_batterer(mob/user) + times_used++ + if(user) + if(times_used >= max_uses) + to_chat(user, "The mind batterer has been burnt out!") + return + if(!do_after_once(user, 2 SECONDS, target = src, allow_moving = TRUE, attempt_cancel_message = "You think it's best to save this for later.")) + times_used-- + return + to_chat(user, "You trigger [src]. It has [max_uses-times_used] charges left.") + + for(var/mob/living/M in oview(7, get_turf(src))) + if(issilicon(M)) + M.Weaken(10 SECONDS) + else + M.Confused(30 SECONDS) + M.adjustBrainLoss(10) + to_chat(M, "You feel a sudden, electric jolt travel through yourself,") + switch(rand(1, 10)) + if(1) + M.apply_status_effect(STATUS_EFFECT_CLINGTENTACLE_BATTERER) + to_chat(M, "and your legs lock up for a moment!") + if(2) + M.apply_status_effect(STATUS_EFFECT_PACIFIED_BATTERER) + to_chat(M, "and you feel an innate love for life for a fleeting moment!") + if(3) + new /obj/effect/hallucination/delusion(get_turf(M), M) + to_chat(M, "and the people around you morph in appearence!") + if(4) + if(prob(80)) + M.EyeBlurry(25 SECONDS) + to_chat(M, "and something in the back of your head stings like hell!") + else + M.EyeBlind(15 SECONDS) + to_chat(M, "and you can't see a goddamn thing!") + if(5) + M.adjustStaminaLoss(40) + to_chat(M, "and a wave of tiredness washes over you!") + else + to_chat(M, "but as soon as it arrives, it fades.") + add_attack_logs(user, M, "Mind battered with [src]") + + playsound(get_turf(src), 'sound/misc/interference.ogg', 50, TRUE) + if(times_used >= max_uses) + icon_state = "battererburnt" + +/obj/item/batterer/throw_impact(atom/hit_atom) + ..() + if(times_used >= max_uses || on_throwing_cooldown) + return + addtimer(CALLBACK(src, PROC_REF(end_throwing_delay)), 3 SECONDS) + visible_message("[src] suddenly triggers, sending a shower of sparks everywhere!") + do_sparks(4, FALSE, get_turf(src)) + activate_batterer() + on_throwing_cooldown = TRUE + +/obj/item/batterer/proc/end_throwing_delay() + on_throwing_cooldown = FALSE + +/obj/item/batterer/emp_act(severity) + if(times_used >= max_uses) + return + visible_message("[src] explodes into a light show of colors!") + if(severity == EMP_HEAVY) + activate_batterer() + + times_used = max_uses - 1 + activate_batterer() diff --git a/code/game/objects/items/shooting_range.dm b/code/game/objects/items/shooting_range.dm index 29bb7d10c779..267ec6fec6a8 100644 --- a/code/game/objects/items/shooting_range.dm +++ b/code/game/objects/items/shooting_range.dm @@ -98,7 +98,7 @@ bullet_hole.pixel_y = p_y - 1 if(decaltype == DECALTYPE_SCORCH) if(P.damage >= 20 || istype(P, /obj/item/projectile/beam/practice)) - bullet_hole.setDir(pick(NORTH,SOUTH,EAST,WEST))// random scorch design. light_scorch does not have different directions + bullet_hole.dir = pick(NORTH,SOUTH,EAST,WEST) // random scorch design. light_scorch does not have different directions else bullet_hole.icon_state = "light_scorch" else diff --git a/code/game/objects/items/weapons/storage/garment.dm b/code/game/objects/items/weapons/storage/garment.dm index 038ea23cec09..433927a4aaaf 100644 --- a/code/game/objects/items/weapons/storage/garment.dm +++ b/code/game/objects/items/weapons/storage/garment.dm @@ -180,6 +180,7 @@ new /obj/item/clothing/suit/storage/blueshield(src) new /obj/item/clothing/shoes/centcom(src) new /obj/item/clothing/shoes/jackboots/jacksandals(src) + new /obj/item/clothing/mask/gas/sechailer(src) new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/clothing/glasses/hud/security/sunglasses/read_only(src) new /obj/item/clothing/glasses/hud/health/sunglasses(src) diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index 0208d9b27506..fbe24478e2f9 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -23,11 +23,8 @@ /obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration_flat = 0, armour_penetration_percentage = 0) if(damage_flag == MELEE && damage_amount < damage_deflection) return 0 - switch(damage_type) - if(BRUTE) - if(BURN) - else - return 0 + if(damage_type != BRUTE && damage_type != BURN) + return 0 var/armor_protection = 0 if(damage_flag) armor_protection = armor.getRating(damage_flag) diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index 3440d6c9d019..d407c451fcc9 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -43,12 +43,10 @@ new /obj/item/tank/internals/emergency_oxygen/engi(src) new /obj/item/clothing/mask/breath(src) new /obj/item/storage/firstaid/o2(src) - if("nothing") - // doot // teehee - Ah, tg coders... if("delete") - qdel(src) + qdel(src) // Please make this use init hints its called from Initialize() I beg /obj/structure/closet/emcloset/legacy/populate_contents() diff --git a/code/game/objects/structures/transit_tubes/transit_tube.dm b/code/game/objects/structures/transit_tubes/transit_tube.dm index 9ccd1677ad60..7b09c3d567a2 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube.dm @@ -286,8 +286,6 @@ return 6 if("SOUTHWEST", "SW") return 10 - else - return 0 @@ -311,5 +309,4 @@ return "NW" if(10) return "SW" - else - return + diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index f877a8c0375e..72750b2ff69c 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -168,7 +168,7 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama if(..()) return TRUE - if(intact && istype(C, /obj/item/stack/tile)) + if((intact || transparent_floor) && istype(C, /obj/item/stack/tile)) try_replace_tile(C, user, params) return TRUE diff --git a/code/game/turfs/simulated/floor/transparent.dm b/code/game/turfs/simulated/floor/transparent.dm index cb761b04f98c..2803985e333d 100644 --- a/code/game/turfs/simulated/floor/transparent.dm +++ b/code/game/turfs/simulated/floor/transparent.dm @@ -121,6 +121,12 @@ /turf/simulated/floor/transparent/glass/can_lay_cable() return FALSE // this turf isn't "intact" but you also can't lay cable on it +/turf/simulated/floor/transparent/glass/try_replace_tile(obj/item/stack/tile/T, mob/user, params) + var/obj/item/thing = user.get_inactive_hand() + if(!thing || !prying_tool_list.Find(thing.tool_behaviour)) + return + to_chat(user, "You need to hold two sheets of metal to dismantle \the [src]!") + /turf/simulated/floor/transparent/glass/reinforced name = "reinforced glass floor" desc = "Jump on it, it can cope. Promise..." diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index ad2514b7a471..87e79f5261ea 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -187,7 +187,6 @@ switch(severity) if(1.0) ChangeTurf(baseturf) - return if(2.0) if(prob(50)) take_damage(rand(150, 250)) @@ -195,8 +194,6 @@ dismantle_wall(1, 1) if(3.0) take_damage(rand(0, 250)) - else - return /turf/simulated/wall/blob_act(obj/structure/blob/B) if(prob(50)) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index e1a4acb1c4a3..68548657cb9f 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -34,8 +34,6 @@ var/blocks_air = FALSE - var/datum/pathnode/PNode = null //associated PathNode in the A* algorithm - flags = 0 var/image/obscured //camerachunks @@ -508,7 +506,7 @@ I.appearance = AM.appearance I.appearance_flags = RESET_COLOR|RESET_ALPHA|RESET_TRANSFORM I.loc = src - I.setDir(AM.dir) + I.dir = AM.dir I.alpha = 128 LAZYADD(blueprint_data, I) diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index ea7d571f4441..8736e5d25260 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -3227,7 +3227,6 @@ SSnightshift.can_fire = FALSE SSnightshift.update_nightshift(FALSE, FALSE) to_chat(usr, "Night shift forced off.") - else if(usr) log_admin("[key_name(usr)] used secret [href_list["secretsadmin"]]") if(ok) diff --git a/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm b/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm index 45ee8e0d5e6b..ddfd83028a31 100644 --- a/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/umbrae_powers.dm @@ -25,12 +25,11 @@ if(ishuman(user)) var/mob/living/carbon/human/H = user if(V.iscloaking) - H.physiology.burn_mod *= 1.3 + H.physiology.burn_mod *= 1.1 user.RegisterSignal(user, COMSIG_LIVING_IGNITED, TYPE_PROC_REF(/mob/living, update_vampire_cloak)) else user.UnregisterSignal(user, COMSIG_LIVING_IGNITED) - H.physiology.burn_mod /= 1.3 - + H.physiology.burn_mod /= 1.1 update_name() to_chat(user, "You will now be [V.iscloaking ? "hidden" : "seen"] in darkness.") @@ -117,8 +116,8 @@ /obj/effect/proc_holder/spell/vampire/soul_anchor name = "Soul Anchor (30)" - desc = "You summon a dimenional anchor after a delay, casting again will teleport you back to the anchor. You are forced back after 2 minutes if you have not cast again." - gain_desc = "You have gained the ability to save a point in space and teleport back to it at will. Unless you willingly teleport back to that point within 2 minutes, you are forced back." + desc = "You summon a dimenional anchor after a delay, casting again will teleport you back to the anchor. You will fake a recall after 2 minutes." + gain_desc = "You have gained the ability to save a point in space and teleport back to it at will. Unless you willingly teleport back to that point within 2 minutes, you will fake a recall." required_blood = 30 centcom_cancast = FALSE base_cooldown = 3 MINUTES @@ -128,7 +127,7 @@ var/obj/structure/shadow_anchor/anchor /// Are we making an anchor? var/making_anchor = FALSE - /// Holds a reference to the timer until the caster is forced to recall + /// Holds a reference to the timer until the caster fake recalls var/timer /obj/effect/proc_holder/spell/vampire/soul_anchor/create_new_targeting() @@ -142,7 +141,7 @@ if(!making_anchor && !anchor) // first cast, setup the anchor var/turf/anchor_turf = get_turf(user) making_anchor = TRUE - if(do_mob(user, user, 10 SECONDS, only_use_extra_checks = TRUE)) // no checks, cant fail + if(do_mob(user, user, 5 SECONDS, only_use_extra_checks = TRUE)) // no checks, cant fail make_anchor(user, anchor_turf) making_anchor = FALSE return @@ -153,10 +152,10 @@ /obj/effect/proc_holder/spell/vampire/soul_anchor/proc/make_anchor(mob/user, turf/anchor_turf) anchor = new(anchor_turf) - timer = addtimer(CALLBACK(src, PROC_REF(recall), user), 2 MINUTES, TIMER_STOPPABLE) + timer = addtimer(CALLBACK(src, PROC_REF(recall), user, TRUE), 2 MINUTES, TIMER_STOPPABLE) should_recharge_after_cast = TRUE -/obj/effect/proc_holder/spell/vampire/soul_anchor/proc/recall(mob/user) +/obj/effect/proc_holder/spell/vampire/soul_anchor/proc/recall(mob/user, fake = FALSE) if(timer) deltimer(timer) timer = null @@ -168,7 +167,16 @@ if(!is_teleport_allowed(end_turf.z)) return - user.forceMove(end_turf) + if(fake) + var/mob/living/simple_animal/hostile/illusion/escape/E = new(end_turf) + E.Copy_Parent(user, 10 SECONDS) + for(var/mob/living/L in view(7, E)) //We want it to start running + E.GiveTarget(L) + break + user.make_invisible() + addtimer(CALLBACK(user, TYPE_PROC_REF(/mob/living, reset_visibility)), 4 SECONDS) + else + user.forceMove(end_turf) if(end_turf.z == start_turf.z) shadow_to_animation(start_turf, end_turf, user) @@ -273,43 +281,46 @@ /obj/effect/proc_holder/spell/vampire/self/eternal_darkness name = "Eternal Darkness" - desc = "When toggled, you shroud the area around you in darkness and slowly lower the body temperature of people nearby." + desc = "When toggled, you shroud the area around you in darkness and slowly lower the body temperature of people nearby. Energy projectiles will dim in its radius." gain_desc = "You have gained the ability to shroud the area around you in darkness, only the strongest of lights can pierce your unholy powers." base_cooldown = 10 SECONDS action_icon_state = "eternal_darkness" required_blood = 5 - var/shroud_power = -4 + var/shroud_power = -6 /obj/effect/proc_holder/spell/vampire/self/eternal_darkness/cast(list/targets, mob/user) var/datum/antagonist/vampire/V = user.mind.has_antag_datum(/datum/antagonist/vampire) var/mob/target = targets[1] if(!V.get_ability(/datum/vampire_passive/eternal_darkness)) V.force_add_ability(/datum/vampire_passive/eternal_darkness) - target.set_light(6, shroud_power, "#AAD84B") + target.set_light(8, shroud_power, "#ddd6cf") else for(var/datum/vampire_passive/eternal_darkness/E in V.powers) V.remove_ability(E) /datum/vampire_passive/eternal_darkness - gain_desc = "You surround yourself in a unnatural darkness, freezing those around you." + gain_desc = "You surround yourself in a unnatural darkness, freezing those around you and dimming energy projectiles." /datum/vampire_passive/eternal_darkness/New() ..() - START_PROCESSING(SSobj, src) + START_PROCESSING(SSfastprocess, src) /datum/vampire_passive/eternal_darkness/Destroy(force, ...) owner.remove_light() - STOP_PROCESSING(SSobj, src) + STOP_PROCESSING(SSfastprocess, src) return ..() /datum/vampire_passive/eternal_darkness/process() var/datum/antagonist/vampire/V = owner.mind.has_antag_datum(/datum/antagonist/vampire) - for(var/mob/living/L in view(6, owner)) + for(var/mob/living/L in view(8, owner)) if(L.affects_vampire(owner)) - L.adjust_bodytemperature(-20 * TEMPERATURE_DAMAGE_COEFFICIENT) + L.adjust_bodytemperature(-3 * TEMPERATURE_DAMAGE_COEFFICIENT) //The dark is cold and unforgiving. Equivelnt to -60 with previous values. + for(var/obj/item/projectile/P in view(8, owner)) + if(P.flag == ENERGY || P.flag == LASER) + P.damage *= 0.7 - V.bloodusable = max(V.bloodusable - 5, 0) + V.bloodusable = max(V.bloodusable - 0.25, 0) //2.5 per second, 5 per 2, same as before if(!V.bloodusable || owner.stat == DEAD) V.remove_ability(src) diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index c26a57f5bdec..ae543a4f9673 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -312,13 +312,14 @@ GLOBAL_DATUM_INIT(_preloader, /datum/dmm_suite/preloader, new()) var/turf/T = locate(x, y, z) if(T) + // Turfs need special attention if(ispath(path, /turf)) T.ChangeTurf(path, defer_change = TRUE, keep_icon = FALSE, copy_existing_baseturf = FALSE) instance = T - else if(ispath(path, /area)) - else - instance = new path(T) // first preloader pass + // Anything that isnt an area, init! + if(!ispath(path, /area)) + instance = new path(T) // first preloader pass if(GLOB.use_preloader && instance) // second preloader pass, for those atoms that don't ..() in New() GLOB._preloader.load(instance) diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm index ac7e9ca955b7..0d77cabb5a84 100644 --- a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm +++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm @@ -105,6 +105,19 @@ but avoid actively interfering with the station, you are required to adminhelp and request permission to board the main station.") else new_spawn.mind.store_memory("Serve [owner.real_name], your creator.") + if(owner.mind.special_role) + if(owner.mind.special_role == "Response Team") + return + new_spawn.mind.store_memory("[owner.real_name], your creator, is an antagonist.") + to_chat(new_spawn, "[owner.real_name], your creator, is an antagonist.") + SSticker.mode.traitors.Add(new_spawn.mind) + var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_TRAITOR] + hud.join_hud(new_spawn) + set_antag_hud(new_spawn.mind.current, "hudmindslave") + if(locate(/datum/objective/hijack) in owner.mind.get_all_objectives()) + new_spawn.mind.store_memory("They must hijack the shuttle.") + to_chat(new_spawn, "They are tasked with hijacking the shuttle.") + set_antag_hud(new_spawn.mind.current, "hudslavehijack") log_game("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") log_admin("[key_name(new_spawn)] possessed a golem shell enslaved to [key_name(owner)].") if(ishuman(new_spawn)) diff --git a/code/modules/client/preference/character.dm b/code/modules/client/preference/character.dm index 3596fc71c4ac..679a8cbbe19e 100644 --- a/code/modules/client/preference/character.dm +++ b/code/modules/client/preference/character.dm @@ -2005,6 +2005,9 @@ if(job.barred_by_disability(user.client)) html += "[rank] \[DISABILITY\]" continue + if(job.barred_by_missing_limbs(user.client)) + html += "[rank] \[MISSING LIMBS\]" + continue if(!job.player_old_enough(user.client)) var/available_in_days = job.available_in_days(user.client) html += "[rank] \[IN [(available_in_days)] DAYS]" diff --git a/code/modules/events/blob/theblob.dm b/code/modules/events/blob/theblob.dm index 83ce5b739242..4a0081bc9cfd 100644 --- a/code/modules/events/blob/theblob.dm +++ b/code/modules/events/blob/theblob.dm @@ -220,7 +220,6 @@ GLOBAL_LIST_EMPTY(blob_nodes) damage_amount *= brute_resist if(BURN) damage_amount *= fire_resist - if(CLONE) else return 0 var/armor_protection = 0 diff --git a/code/modules/events/false_alarm.dm b/code/modules/events/false_alarm.dm index fbaefaa30f00..6d5a84f73619 100644 --- a/code/modules/events/false_alarm.dm +++ b/code/modules/events/false_alarm.dm @@ -6,12 +6,12 @@ var/list/event var/list/minor_fake_events = list( list("A solar flare has been detected on collision course with the station. Do not conduct space walks or approach windows until the flare has passed!", "Incoming Solar Flare", 'sound/AI/flare.ogg'), - list("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00)`5vc-BZZT"), + list("Ionospheric anomalies detected. Temporary telecommunication failure imminent. Please contact you*%fj00`5vc-BZZT"), list("Overload detected in [station_name()]'s powernet. Engineering, please repair shorted APCs.", "Systems Power Failure", 'sound/AI/power_overload.ogg'), list("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: Kitchen.", "Anomaly Alert", 'sound/AI/anomaly_flux.ogg'), list("Overload detected in [station_name()]'s powernet. Engineering, please check all underfloor APC terminals.", "Critical Power Failure", 'sound/AI/power_overload.ogg'), list("Hostile runtime detected in door controllers. Isolation lockdown protocols are now in effect. Please remain calm.", "Network Alert", 'sound/AI/door_runtimes.ogg'), - list("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be \a vendomat.", "Machine Learning Alert", 'sound/AI/brand_intelligence.ogg'), + list("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be a vendomat.", "Machine Learning Alert", 'sound/AI/brand_intelligence.ogg'), list("Massive migration of unknown biological entities has been detected near [station_name()], please stand-by.", "Lifesign Alert"), list("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert", 'sound/AI/elec_storm.ogg'), list("What the fuck was that?!", "General Alert"), @@ -29,11 +29,13 @@ list("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert", 'sound/AI/scrubbers.ogg'), list("Space-time anomalies detected on the station. There is no additional data.", "Anomaly Alert", 'sound/AI/spanomalies.ogg') ) + var/list/major_fake_events = list( list("Confirmed outbreak of level 3-X biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak3.ogg'), list("Confirmed outbreak of level 3-S biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak3.ogg'), list("Confirmed outbreak of level 5 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak5.ogg') ) + if(prob(90)) event = pick_n_take(minor_fake_events) GLOB.minor_announcement.Announce(event[1], listgetindex(event, 2), listgetindex(event, 3)) diff --git a/code/modules/mapping/mapping_helpers.dm b/code/modules/mapping/mapping_helpers.dm index 6cffe6da19dc..d6a528f1f6f3 100644 --- a/code/modules/mapping/mapping_helpers.dm +++ b/code/modules/mapping/mapping_helpers.dm @@ -130,3 +130,7 @@ /obj/effect/mapping_helpers/airlock/autoname/payload(obj/machinery/door/airlock) airlock.name = get_area_name(airlock, TRUE) + +//part responsible for windoors (thanks S34N) +/obj/effect/mapping_helpers/airlock/windoor + blacklist = list(/obj/machinery/door/firedoor, /obj/machinery/door/poddoor, /obj/machinery/door/unpowered, /obj/machinery/door/airlock) diff --git a/code/modules/mapping/windoor_access_helpers.dm b/code/modules/mapping/windoor_access_helpers.dm new file mode 100644 index 000000000000..ffb28905e874 --- /dev/null +++ b/code/modules/mapping/windoor_access_helpers.dm @@ -0,0 +1,458 @@ +/obj/effect/mapping_helpers/airlock/windoor/access + layer = DOOR_HELPER_LAYER + icon_state = "access_windoor" + var/access + +// Windoor direction code section (thanks S34M for help with making my dumb idea work as code, all credits to him for this file.) +// These are mutually exclusive; can't have req_any and req_all +/obj/effect/mapping_helpers/airlock/windoor/access/any/payload(obj/machinery/door/window/windoor) + // Check we are applying to the correct windoor + if(windoor.dir != dir) + return + + // Access already set in map edit + if(windoor.req_access_txt != "0") + log_world("[src] at [AREACOORD(src)] tried to set req_one_access, but req_access was already set!") + return + + // Overwrite if there is no access set, otherwise add onto existing access + if(windoor.req_one_access_txt == "0") + windoor.req_one_access_txt = "[access]" + return + + windoor.req_one_access_txt += ";[access]" + +/obj/effect/mapping_helpers/airlock/windoor/access/all/payload(obj/machinery/door/window/windoor) + if(windoor.dir != dir) + return + + if(windoor.req_one_access_txt != "0") + log_world("[src] at [AREACOORD(src)] tried to set req_access, but req_one_access was already set!") + return + + if(windoor.req_access_txt == "0") + windoor.req_access_txt = "[access]" + return + + windoor.req_access_txt += ";[access]" + +// -------------------- Req Any (Only requires ONE of the given accesses to open) +// -------------------- Command access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/any/command + icon_state = "access_windoor_com" + +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/general + access = ACCESS_HEADS + +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/ai_upload + access = ACCESS_AI_UPLOAD + +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/teleporter + access = ACCESS_TELEPORTER + +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/eva + access = ACCESS_EVA + +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/expedition + access = ACCESS_EXPEDITION + +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/hop + access = ACCESS_HOP + +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/captain + access = ACCESS_CAPTAIN + +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/blueshield + access = ACCESS_BLUESHIELD + +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/ntrep + access = ACCESS_NTREP + +/obj/effect/mapping_helpers/airlock/windoor/access/any/command/magistrate + access = ACCESS_MAGISTRATE + +// -------------------- Engineering access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering + icon_state = "access_windoor_eng" + +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/general + access = ACCESS_ENGINE + +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/construction + access = ACCESS_CONSTRUCTION + +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/maintenance + access = ACCESS_MAINT_TUNNELS + +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/external + access = ACCESS_EXTERNAL_AIRLOCKS + +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/tech_storage + access = ACCESS_TECH_STORAGE + +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/atmos + access = ACCESS_ATMOSPHERICS + +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/tcoms + access = ACCESS_TCOMSAT + +/obj/effect/mapping_helpers/airlock/windoor/access/any/engineering/ce + access = ACCESS_CE + +// -------------------- Medical access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical + icon_state = "access_windoor_med" + +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/general + access = ACCESS_MEDICAL + +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/morgue + access = ACCESS_MORGUE + +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/chemistry + access = ACCESS_CHEMISTRY + +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/virology + access = ACCESS_VIROLOGY + +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/surgery + access = ACCESS_SURGERY + +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/cmo + access = ACCESS_CMO + +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/psychology + access = ACCESS_PSYCHIATRIST + +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/genetics + access = ACCESS_GENETICS + +/obj/effect/mapping_helpers/airlock/windoor/access/any/medical/paramedic + access = ACCESS_PARAMEDIC + +// -------------------- Science access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/any/science + icon_state = "access_windoor_sci" + +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/research + access = ACCESS_RESEARCH + +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/tox + access = ACCESS_TOX + +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/tox_storage + access = ACCESS_TOX_STORAGE + +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/genetics + access = ACCESS_GENETICS + +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/robotics + access = ACCESS_ROBOTICS + +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/xenobio + access = ACCESS_XENOBIOLOGY + +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/minisat + access = ACCESS_MINISAT + +/obj/effect/mapping_helpers/airlock/windoor/access/any/science/rd + access = ACCESS_RD + +// -------------------- Security access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/any/security + icon_state = "access_windoor_sec" + +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/general + access = ACCESS_SECURITY + +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/doors + access = ACCESS_SEC_DOORS + +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/brig + access = ACCESS_BRIG + +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/armory + access = ACCESS_ARMORY + +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/court + access = ACCESS_COURT + +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/hos + access = ACCESS_HOS + +/obj/effect/mapping_helpers/airlock/windoor/access/any/security/iaa + access = ACCESS_LAWYER + +// -------------------- Service access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/any/service + icon_state = "access_windoor_serv" + +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/kitchen + access = ACCESS_KITCHEN + +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/bar + access = ACCESS_BAR + +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/hydroponics + access = ACCESS_HYDROPONICS + +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/janitor + access = ACCESS_JANITOR + +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/chapel_office + access = ACCESS_CHAPEL_OFFICE + +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/crematorium + access = ACCESS_CREMATORIUM + +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/library + access = ACCESS_LIBRARY + +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/library + access = ACCESS_THEATRE + +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/clown + access = ACCESS_CLOWN + +/obj/effect/mapping_helpers/airlock/windoor/access/any/service/mime + access = ACCESS_MIME + +// -------------------- Supply access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply + icon_state = "access_windoor_sup" + +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/general + access = ACCESS_CARGO + +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mail_sorting + access = ACCESS_MAILSORTING + +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mining + access = ACCESS_MINING + +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mining_station + access = ACCESS_MINING_STATION + +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mineral_storage + access = ACCESS_MINERAL_STOREROOM + +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/qm + access = ACCESS_QM + +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/vault + access = ACCESS_HEADS_VAULT + +/obj/effect/mapping_helpers/airlock/windoor/access/any/supply/mule_bot + access = ACCESS_CARGO_BOT + +// -------------------- Req All (Requires ALL of the given accesses to open) +// -------------------- Command access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/all/command + icon_state = "access_windoor_com" + +/obj/effect/mapping_helpers/airlock/windoor/access/all/command/general + access = ACCESS_HEADS + +/obj/effect/mapping_helpers/airlock/windoor/access/all/command/ai_upload + access = ACCESS_AI_UPLOAD + +/obj/effect/mapping_helpers/airlock/windoor/access/all/command/teleporter + access = ACCESS_TELEPORTER + +/obj/effect/mapping_helpers/airlock/windoor/access/all/command/eva + access = ACCESS_EVA + +/obj/effect/mapping_helpers/airlock/windoor/access/all/command/expedition + access = ACCESS_EXPEDITION + +/obj/effect/mapping_helpers/airlock/windoor/access/all/command/hop + access = ACCESS_HOP + +/obj/effect/mapping_helpers/airlock/windoor/access/all/command/captain + access = ACCESS_CAPTAIN + +/obj/effect/mapping_helpers/airlock/windoor/access/all/command/blueshield + access = ACCESS_BLUESHIELD + +/obj/effect/mapping_helpers/airlock/windoor/access/all/command/ntrep + access = ACCESS_NTREP + +/obj/effect/mapping_helpers/airlock/windoor/access/all/command/magistrate + access = ACCESS_MAGISTRATE + +// -------------------- Engineering access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering + icon_state = "access_windoor_eng" + +/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/general + access = ACCESS_ENGINE + +/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/construction + access = ACCESS_CONSTRUCTION + +/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/maintenance + access = ACCESS_MAINT_TUNNELS + +/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/external + access = ACCESS_EXTERNAL_AIRLOCKS + +/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/tech_storage + access = ACCESS_TECH_STORAGE + +/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/atmos + access = ACCESS_ATMOSPHERICS + +/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/tcoms + access = ACCESS_TCOMSAT + +/obj/effect/mapping_helpers/airlock/windoor/access/all/engineering/ce + access = ACCESS_CE + +// -------------------- Medical access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical + icon_state = "access_windoor_med" + +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/general + access = ACCESS_MEDICAL + +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/morgue + access = ACCESS_MORGUE + +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/chemistry + access = ACCESS_CHEMISTRY + +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/virology + access = ACCESS_VIROLOGY + +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/surgery + access = ACCESS_SURGERY + +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/cmo + access = ACCESS_CMO + +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/paramedic + access = ACCESS_PARAMEDIC + +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/psychology + access = ACCESS_PSYCHIATRIST + +/obj/effect/mapping_helpers/airlock/windoor/access/all/medical/genetics + access = ACCESS_GENETICS + +// -------------------- Science access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/all/science + icon_state = "access_windoor_sci" + +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/research + access = ACCESS_RESEARCH + +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/tox + access = ACCESS_TOX + +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/tox_storage + access = ACCESS_TOX_STORAGE + +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/genetics + access = ACCESS_GENETICS + +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/robotics + access = ACCESS_ROBOTICS + +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/xenobio + access = ACCESS_XENOBIOLOGY + +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/minisat + access = ACCESS_MINISAT + +/obj/effect/mapping_helpers/airlock/windoor/access/all/science/rd + access = ACCESS_RD + +// -------------------- Security access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/all/security + icon_state = "access_windoor_sec" + +/obj/effect/mapping_helpers/airlock/windoor/access/all/security/general + access = ACCESS_SECURITY + +/obj/effect/mapping_helpers/airlock/windoor/access/all/security/doors + access = ACCESS_SEC_DOORS + +/obj/effect/mapping_helpers/airlock/windoor/access/all/security/brig + access = ACCESS_BRIG + +/obj/effect/mapping_helpers/airlock/windoor/access/all/security/armory + access = ACCESS_ARMORY + +/obj/effect/mapping_helpers/airlock/windoor/access/all/security/court + access = ACCESS_COURT + +/obj/effect/mapping_helpers/airlock/windoor/access/all/security/hos + access = ACCESS_HOS + +/obj/effect/mapping_helpers/airlock/windoor/access/all/security/iaa + access = ACCESS_LAWYER + +// -------------------- Service access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/all/service + icon_state = "access_windoor_serv" + +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/kitchen + access = ACCESS_KITCHEN + +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/bar + access = ACCESS_BAR + +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/hydroponics + access = ACCESS_HYDROPONICS + +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/janitor + access = ACCESS_JANITOR + +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/chapel_office + access = ACCESS_CHAPEL_OFFICE + +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/crematorium + access = ACCESS_CREMATORIUM + +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/crematorium + access = ACCESS_CREMATORIUM + +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/library + access = ACCESS_LIBRARY + +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/library + access = ACCESS_THEATRE + +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/clown + access = ACCESS_CLOWN + +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/mime + access = ACCESS_MIME + +// -------------------- Supply access helpers +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply + icon_state = "access_windoor_sup" + +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/general + access = ACCESS_CARGO + +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/mail_sorting + access = ACCESS_MAILSORTING + +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/mining + access = ACCESS_MINING + +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/mining_station + access = ACCESS_MINING_STATION + +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/mineral_storage + access = ACCESS_MINERAL_STOREROOM + +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/qm + access = ACCESS_QM + +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/vault + access = ACCESS_HEADS_VAULT + +/obj/effect/mapping_helpers/airlock/windoor/access/all/supply/mule_bot + access = ACCESS_CARGO_BOT diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 2343058123c6..3f2273eedd40 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -510,18 +510,21 @@ var/timerid var/list/input_list = list() var/list/combo_strings = list() - var/static/list/combo_list = list( + var/list/combo_list = list() + + +/obj/item/cursed_katana/Initialize(mapload) + . = ..() + AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = NON_PROJECTILE_ATTACKS) + combo_list = list( ATTACK_STRIKE = list(COMBO_STEPS = list(LEFT_SLASH, LEFT_SLASH, RIGHT_SLASH), COMBO_PROC = TYPE_PROC_REF(/obj/item/cursed_katana, strike)), ATTACK_SLICE = list(COMBO_STEPS = list(RIGHT_SLASH, LEFT_SLASH, LEFT_SLASH), COMBO_PROC = TYPE_PROC_REF(/obj/item/cursed_katana, slice)), ATTACK_DASH = list(COMBO_STEPS = list(LEFT_SLASH, RIGHT_SLASH, RIGHT_SLASH), COMBO_PROC = TYPE_PROC_REF(/obj/item/cursed_katana, dash)), ATTACK_CUT = list(COMBO_STEPS = list(RIGHT_SLASH, RIGHT_SLASH, LEFT_SLASH), COMBO_PROC = TYPE_PROC_REF(/obj/item/cursed_katana, cut)), ATTACK_HEAL = list(COMBO_STEPS = list(LEFT_SLASH, RIGHT_SLASH, LEFT_SLASH, RIGHT_SLASH), COMBO_PROC = TYPE_PROC_REF(/obj/item/cursed_katana, heal)), ATTACK_SHATTER = list(COMBO_STEPS = list(RIGHT_SLASH, LEFT_SLASH, RIGHT_SLASH, LEFT_SLASH), COMBO_PROC = TYPE_PROC_REF(/obj/item/cursed_katana, shatter)), - ) + ) -/obj/item/cursed_katana/Initialize(mapload) - . = ..() - AddComponent(/datum/component/parry, _stamina_constant = 2, _stamina_coefficient = 0.5, _parryable_attack_types = NON_PROJECTILE_ATTACKS) for(var/combo in combo_list) var/list/combo_specifics = combo_list[combo] var/step_string = english_list(combo_specifics[COMBO_STEPS]) diff --git a/code/modules/mob/dead/observer/observer_base.dm b/code/modules/mob/dead/observer/observer_base.dm index e4b5ee6a0595..19e07381fb6f 100644 --- a/code/modules/mob/dead/observer/observer_base.dm +++ b/code/modules/mob/dead/observer/observer_base.dm @@ -258,7 +258,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp /mob/dead/observer/Move(NewLoc, direct) update_parallax_contents() setDir(direct) - ghostimage.setDir(dir) + ghostimage.dir = dir if(NewLoc) forceMove(NewLoc, direct) diff --git a/code/modules/mob/living/carbon/human/human_update_icons.dm b/code/modules/mob/living/carbon/human/human_update_icons.dm index 7f85d00357a1..3e3f543f6c54 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -228,7 +228,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) if(husk) base_icon.ColorTone(husk_color_mod) else if(hulk) - var/list/tone = ReadRGB(hulk_color_mod) + var/list/tone = rgb2num(hulk_color_mod) base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3])) //Handle husk overlay. @@ -350,8 +350,6 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) else overlays_standing[HEAD_ACCESSORY_LAYER] = mutable_appearance(head_accessory_standing, layer = -HEAD_ACCESSORY_LAYER) apply_overlay(HEAD_ACCESSORY_LAYER) - else - //warning("Invalid ha_style for [species.name]: [ha_style]") /** * Generates overlays for the hair layer. @@ -385,7 +383,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) if(gradient) var/icon/icn_alpha_mask = icon(gradient.icon, gradient.icon_state) var/icon/icn_gradient = icon(gradient.icon, "full") - var/list/icn_color = ReadRGB(O.h_grad_colour) + var/list/icn_color = rgb2num(O.h_grad_colour) icn_gradient.MapColors(rgb(icn_color[1], 0, 0), rgb(0, icn_color[2], 0), rgb(0, 0, icn_color[3])) icn_gradient.ChangeOpacity(O.h_grad_alpha / 255) icn_gradient.AddAlphaMask(icn_alpha_mask) @@ -478,9 +476,6 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) else overlays_standing[FHAIR_LAYER] = mutable_appearance(face_standing, layer = -FHAIR_LAYER) apply_overlay(FHAIR_LAYER) - else - //warning("Invalid f_style for [species.name]: [f_style]") - /mob/living/carbon/human/update_mutations() diff --git a/code/modules/mob/living/init_signals.dm b/code/modules/mob/living/init_signals.dm index e420e7ccfa04..a644583e0cb3 100644 --- a/code/modules/mob/living/init_signals.dm +++ b/code/modules/mob/living/init_signals.dm @@ -129,6 +129,10 @@ SIGNAL_HANDLER ADD_TRAIT(src, TRAIT_KNOCKEDOUT, TRAIT_FAKEDEATH) +/mob/living/carbon/human/on_fakedeath_trait_gain(datum/source) + . = ..() + stop_tail_wagging() + /// Called when [TRAIT_FAKEDEATH] is removed from the mob. /mob/living/proc/on_fakedeath_trait_loss(datum/source) SIGNAL_HANDLER diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 7797094f8514..57e860aee16b 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -81,6 +81,8 @@ //Called when we bump into a mob /mob/living/proc/MobBump(mob/M) + if(m_intent == MOVE_INTENT_WALK) + return TRUE //Even if we don't push/swap places, we "touched" them, so spread fire spreadFire(M) diff --git a/code/modules/mob/living/silicon/ai/ai_mob.dm b/code/modules/mob/living/silicon/ai/ai_mob.dm index a06089b9eea4..5ec2d304c0a6 100644 --- a/code/modules/mob/living/silicon/ai/ai_mob.dm +++ b/code/modules/mob/living/silicon/ai/ai_mob.dm @@ -966,6 +966,23 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( AISD.emotion = emote AISD.update_icon() +// I would love to scope this locally to the AI class, however its used by holopads as well +// I wish we had nice OOP -aa07 +/proc/getHologramIcon(icon/A, safety = TRUE) // If safety is on, a new icon is not created. + var/icon/flat_icon = safety ? A : new(A) // Has to be a new icon to not constantly change the same icon. + var/icon/alpha_mask + flat_icon.ColorTone(rgb(125,180,225)) // Let's make it bluish. + flat_icon.ChangeOpacity(0.5) // Make it half transparent. + + if(A.Height() == 64) + alpha_mask = new('icons/mob/ancient_machine.dmi', "scanline2") //Scaline for tall icons. + else + alpha_mask = new('icons/effects/effects.dmi', "scanline") //Scanline effect. + flat_icon.AddAlphaMask(alpha_mask) //Finally, let's mix in a distortion effect. + + return flat_icon + + //I am the icon meister. Bow fefore me. //>fefore /mob/living/silicon/ai/proc/ai_hologram_change() set name = "Change Hologram" diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index ff5b3ab97701..7b1870891cc4 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -719,6 +719,7 @@ Pass a positive integer as an argument to override a bot's default speed. if("home") to_chat(src, "RETURN HOME!") if("ejectpai") + return // Do nothing for this else to_chat(src, "Unidentified control sequence received: [command]") diff --git a/code/modules/mob/mob_misc_procs.dm b/code/modules/mob/mob_misc_procs.dm index 2756ebe9c9be..22336ec26499 100644 --- a/code/modules/mob/mob_misc_procs.dm +++ b/code/modules/mob/mob_misc_procs.dm @@ -358,13 +358,18 @@ while(counter>=1) newletter=copytext(phrase,(leng-counter)+1,(leng-counter)+2) if(newletter in list(" ", "!", "?", ".", ",")) - //do nothing + // Skip these + counter -= 1 + continue + else if(lowertext(newletter) in list("a", "e", "i", "o", "u", "y")) newletter = "ph" + else newletter = "m" - newphrase+="[newletter]" - counter-=1 + + newphrase += "[newletter]" + counter -= 1 return newphrase /proc/muffledspeech_all(list/message_pieces) diff --git a/code/modules/mob/mob_say_base.dm b/code/modules/mob/mob_say_base.dm index 58135cceab36..c570e26a1168 100644 --- a/code/modules/mob/mob_say_base.dm +++ b/code/modules/mob/mob_say_base.dm @@ -167,7 +167,7 @@ prefixes[++prefixes.len] = list(L, i, i + length(selection)) else if(!L && i == 1) prefixes[++prefixes.len] = list(get_default_language(), i, i) - else + return prefixes /proc/strip_prefixes(message) diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 89c79e8a6a65..3974940769f9 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -328,6 +328,9 @@ if(thisjob.barred_by_disability(client)) to_chat(src, alert("[rank] is not available due to your character's disability. Please try another.")) return 0 + if(thisjob.barred_by_missing_limbs(client)) + to_chat(src, alert("[rank] is not available due to your character having amputated limbs without a prosthetic replacement. Please try another.")) + return 0 SSjobs.AssignRole(src, rank, 1) @@ -483,7 +486,7 @@ "Supply" = list(jobs = list(), titles = GLOB.supply_positions, color = "#ead4ae"), ) for(var/datum/job/job in SSjobs.occupations) - if(job && IsJobAvailable(job.title) && !job.barred_by_disability(client)) + if(job && IsJobAvailable(job.title) && !job.barred_by_disability(client) && !job.barred_by_missing_limbs(client)) num_jobs_available++ activePlayers[job] = 0 var/categorized = 0 diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 6a1b0e22cffd..3ce718dbdab4 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -629,3 +629,30 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor 'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\ 'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg') user << pick(creepyasssounds) + + +/obj/item/camera/proc/build_composite_icon(atom/A) + var/icon/composite = icon(A.icon, A.icon_state, A.dir, 1) + for(var/O in A.overlays) + var/image/I = O + composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) + return composite + +/obj/item/camera/proc/sort_atoms_by_layer(list/atoms) + // Comb sort icons based on levels + var/list/result = atoms.Copy() + var/gap = result.len + var/swapped = 1 + while(gap > 1 || swapped) + swapped = 0 + if(gap > 1) + gap = round(gap / 1.3) // 1.3 is the emperic comb sort coefficient + if(gap < 1) + gap = 1 + for(var/i = 1; gap + i <= result.len; i++) + var/atom/l = result[i] //Fucking hate + var/atom/r = result[gap+i] //how lists work here + if(l.layer > r.layer) //no "result[i].layer" for me + result.Swap(i, gap + i) + swapped = 1 + return result diff --git a/code/modules/projectiles/projectile_base.dm b/code/modules/projectiles/projectile_base.dm index 2129f44d1e83..ac0d0e905e2c 100644 --- a/code/modules/projectiles/projectile_base.dm +++ b/code/modules/projectiles/projectile_base.dm @@ -177,9 +177,12 @@ reagent_note += num2text(R.volume) + ") " additional_log_text = "[additional_log_text] (containing [reagent_note])" + var/were_affects_applied = L.apply_effects(stun, weaken, knockdown, paralyze, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter) + if(!log_override && firer && !alwayslog) add_attack_logs(firer, L, "Shot with a [type][additional_log_text]") - return L.apply_effects(stun, weaken, knockdown, paralyze, irradiate, slur, stutter, eyeblur, drowsy, blocked, stamina, jitter) + + return were_affects_applied /obj/item/projectile/proc/get_splatter_blockage(turf/step_over, atom/target, splatter_dir, target_loca) //Check whether the place we want to splatter blood is blocked (i.e. by windows). var/turf/step_cardinal = !(splatter_dir in list(NORTH, SOUTH, EAST, WEST)) ? get_step(target_loca, get_cardinal_dir(target_loca, step_over)) : null diff --git a/code/modules/reagents/chemistry/reagents/drinks_reagents.dm b/code/modules/reagents/chemistry/reagents/drinks_reagents.dm index bea7db87eafb..2b62c63e9c38 100644 --- a/code/modules/reagents/chemistry/reagents/drinks_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/drinks_reagents.dm @@ -70,12 +70,8 @@ var/update_flags = STATUS_UPDATE_NONE M.AdjustEyeBlurry(-2 SECONDS) M.AdjustEyeBlind(-2 SECONDS) - switch(current_cycle) - if(1 to 20) - //nothing - if(21 to INFINITY) - if(prob(current_cycle - 10)) - update_flags |= M.cure_nearsighted(EYE_DAMAGE, FALSE) + if(current_cycle > 20 && prob(current_cycle - 10)) + update_flags |= M.cure_nearsighted(EYE_DAMAGE, FALSE) return ..() | update_flags /datum/reagent/consumable/drink/doctor_delight diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 27fbe84058f1..866b0a5be92c 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -195,8 +195,7 @@ /obj/docking_port/stationary/transit name = "In transit" turf_type = /turf/space/transit - var/area/shuttle/transit/assigned_area - lock_shuttle_doors = 1 + lock_shuttle_doors = TRUE /obj/docking_port/stationary/transit/register() if(!..()) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 72b15358ecc8..a312399914ae 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -279,14 +279,12 @@ telefail() temp_msg = "ERROR!
Elevation is less than 1 or greater than 90." return - if(z_co == 2 || z_co < 1 || z_co > 6) - if(z_co == 7 & emagged) - // This should be empty, allows for it to continue if the z-level is 7 and the machine is emagged. - else - telefail() - temp_msg = "ERROR! Sector is less than 1,
greater than [src.emagged ? "7" : "6"], or equal to 2." - return - + // THIS FUCKING THING USES ZLEVEL NUMBERS WHY + var/cc_z = level_name_to_num(CENTCOMM) + if(z_co == cc_z || z_co < cc_z + 1 || cc_z > world.maxz) + telefail() + temp_msg = "ERROR! Sector must be greater than or equal to 2, and less than or equal to [world.maxz]." + return var/truePower = clamp(power + power_off, 1, 1000) var/trueRotation = rotation + rotation_off diff --git a/icons/effects/mapping_helpers.dmi b/icons/effects/mapping_helpers.dmi index 3959c8fd2059..e7c5db2b2238 100644 Binary files a/icons/effects/mapping_helpers.dmi and b/icons/effects/mapping_helpers.dmi differ diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 5deddc796d77..aa4f84098de6 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi index 2f6f033f3c9b..2eaba186d9fe 100644 Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index d412b43af725..b4ab7c316809 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/icons/turf/floors/catwalk_floor.dmi b/icons/turf/floors/catwalk_floor.dmi index 75b0b64564b2..d97948b6a123 100644 Binary files a/icons/turf/floors/catwalk_floor.dmi and b/icons/turf/floors/catwalk_floor.dmi differ diff --git a/paradise.dme b/paradise.dme index 28ae45ef6e60..f89f4ed74d5a 100644 --- a/paradise.dme +++ b/paradise.dme @@ -10,6 +10,7 @@ #define DEBUG // END_PREFERENCES // BEGIN_INCLUDE +#include "__odlint.dm" #include "_maps\__MAP_DEFINES.dm" #include "_maps\base_map.dm" #include "_maps\map_datums.dm" @@ -119,6 +120,7 @@ #include "code\__HELPERS\api.dm" #include "code\__HELPERS\bitflag_lists.dm" #include "code\__HELPERS\cmp.dm" +#include "code\__HELPERS\colour_helpers.dm" #include "code\__HELPERS\constants.dm" #include "code\__HELPERS\debugger.dm" #include "code\__HELPERS\experimental.dm" @@ -126,9 +128,10 @@ #include "code\__HELPERS\filters.dm" #include "code\__HELPERS\game.dm" #include "code\__HELPERS\global_lists.dm" +#include "code\__HELPERS\icon_helpers.dm" +#include "code\__HELPERS\iconprocs.dm" #include "code\__HELPERS\heap.dm" #include "code\__HELPERS\icon_smoothing.dm" -#include "code\__HELPERS\icons.dm" #include "code\__HELPERS\lighting_helpers.dm" #include "code\__HELPERS\lists.dm" #include "code\__HELPERS\matrices.dm" @@ -1825,6 +1828,7 @@ #include "code\modules\mapping\merge_conflicts.dm" #include "code\modules\mapping\metastation.dm" #include "code\modules\mapping\test_tiny.dm" +#include "code\modules\mapping\windoor_access_helpers.dm" #include "code\modules\maptext_alerts\text_blurbs.dm" #include "code\modules\martial_arts\adminfu.dm" #include "code\modules\martial_arts\brawling.dm" diff --git a/tgui/yarn.lock b/tgui/yarn.lock index c6a3e690d0a2..6be2616eccb4 100644 --- a/tgui/yarn.lock +++ b/tgui/yarn.lock @@ -7302,9 +7302,9 @@ which@^2.0.1: isexe "^2.0.0" word-wrap@^1.2.3: - version "1.2.3" - resolved "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== + version "1.2.4" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" + integrity sha512-2V81OA4ugVo5pRo46hAoD2ivUJx8jXmWXfUkY4KFNw0hEptvN0QfH3K4nHiwzGeKl5rFKedV48QVoqYavy4YpA== worker-farm@^1.7.0: version "1.7.0" diff --git a/tools/ci/lints.dm b/tools/ci/lints.dm new file mode 100644 index 000000000000..39c14e1bbc95 --- /dev/null +++ b/tools/ci/lints.dm @@ -0,0 +1,27 @@ +//1000-1999 +#pragma FileAlreadyIncluded error +#pragma MissingIncludedFile error +#pragma MisplacedDirective error +#pragma UndefineMissingDirective error +#pragma DefinedMissingParen error +#pragma ErrorDirective error +#pragma WarningDirective error +#pragma MiscapitalizedDirective error + +//2000-2999 +#pragma SoftReservedKeyword error +#pragma DuplicateVariable error +#pragma DuplicateProcDefinition error +#pragma TooManyArguments error +#pragma PointlessParentCall error +#pragma PointlessBuiltinCall error +#pragma SuspiciousMatrixCall error +#pragma MalformedRange error +#pragma InvalidRange error +#pragma InvalidSetStatement error +#pragma InvalidOverride error +#pragma DanglingVarType error +#pragma MissingInterpolatedExpression error + +//3000-3999 +#pragma EmptyBlock error diff --git a/tools/ci/run_od.sh b/tools/ci/run_od.sh new file mode 100755 index 000000000000..1224de77ef79 --- /dev/null +++ b/tools/ci/run_od.sh @@ -0,0 +1,3 @@ +#!/bin/bash +set -eo pipefail +dotnet OpenDream/DMCompiler/bin/Release/net7.0/DMCompiler.dll --suppress-unimplemented paradise.dme diff --git a/tools/ci/setup_od.sh b/tools/ci/setup_od.sh new file mode 100755 index 000000000000..aad45f2bc971 --- /dev/null +++ b/tools/ci/setup_od.sh @@ -0,0 +1,8 @@ +#!/bin/bash +set -eo pipefail + +git clone https://github.com/OpenDreamProject/OpenDream.git OpenDream +cd OpenDream +git submodule update --init --recursive +dotnet restore +dotnet build -c Release diff --git a/tools/ci/unticked_files.py b/tools/ci/unticked_files.py index 30e290f81418..5ab3f6d41ba9 100644 --- a/tools/ci/unticked_files.py +++ b/tools/ci/unticked_files.py @@ -26,7 +26,9 @@ IGNORE_FILES = { # Included directly in the function /datum/tgs_api/v5#ApiVersion - 'code/modules/tgs/v5/v5_interop_version.dm' + 'code/modules/tgs/v5/v5_interop_version.dm', + # Included as part of OD lints + 'tools/ci/lints.dm' } def get_unticked_files(root:Path):