diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index e711d1a72069..f22c1134b10f 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -586,6 +586,26 @@ SS13 has a lot of legacy code that's never been updated. Here are some examples - Files and path accessed and referenced by code above simply being #included should be strictly lowercase to avoid issues on filesystems where case matters. +#### Modular Code in a File + +Code should be modular where possible; if you are working on a new addition, then strongly consider putting it in its own file unless it makes sense to put it with similar ones (i.e. a new tool would go in the `tools.dm` file) + +Our codebase also has support for checking files so that they only contain one specific typepath, including none of its subtypes. This can be done by adding a specific header at the beginning of the file, which the CI will look for when running. An example can be seen below. You can also run this test locally using `/tools/ci/restrict_file_types.py` + +```dm +RESTRICT_TYPE(/datum/foo) + +/datum/proc/do_thing() // Error: '/datum' proc found in a file restricted to '/datum/foo' + +/datum/foo + +/datum/foo/do_thing() + +/datum/foo/bar // Error: '/datum/foo/bar' type definition found in a file restricted to '/datum/foo' + +/datum/foo/bar/do_thing() // Error: '/datum/foo/bar' proc found in a file restricted to '/datum/foo' +``` + ### SQL - Do not use the shorthand sql insert format (where no column names are specified) because it unnecessarily breaks all queries on minor column changes and prevents using these tables for tracking outside related info such as in a connected site/forum. @@ -679,7 +699,6 @@ SS13 has a lot of legacy code that's never been updated. Here are some examples ### Other Notes -- Code should be modular where possible; if you are working on a new addition, then strongly consider putting it in its own file unless it makes sense to put it with similar ones (i.e. a new tool would go in the `tools.dm` file) - Bloated code may be necessary to add a certain feature, which means there has to be a judgement over whether the feature is worth having or not. You can help make this decision easier by making sure your code is modular. - You are expected to help maintain the code that you add, meaning that if there is a problem then you are likely to be approached in order to fix any issues, runtimes, or bugs. @@ -815,8 +834,10 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c `Commit Access` members have write access to the repository and can merge your PRs. People included in this role are: - [AffectedArc07](https://github.com/AffectedArc07) +- [Burzah](https://github.com/Burzah) - [Charliminator](https://github.com/hal9000PR) - [Contrabang](https://github.com/Contrabang) +- [DGamerL](https://github.com/DGamerL) - [lewcc](https://github.com/lewcc) --- @@ -827,6 +848,7 @@ Each role inherits the lower role's responsibilities (IE: Headcoders also have c - [Charliminator](https://github.com/hal9000PR) - [Contrabang](https://github.com/Contrabang) - [DGamerL](https://github.com/DGamerL) +- [FunnyMan3595](https://github.com/FunnyMan3595) - [Henri215](https://github.com/Henri215) - [lewcc](https://github.com/lewcc) - [Sirryan2002](https://github.com/Sirryan2002) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1c5f9e4eb6f8..25df92cd3481 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,6 +48,7 @@ jobs: python tools/ci/unticked_files.py ${GITHUB_WORKSPACE} python tools/ci/illegal_dme_files.py ${GITHUB_WORKSPACE} python tools/ci/define_sanity.py + python tools/ci/restrict_file_types.py python -m tools.ci.check_icon_conflicts python -m tools.ci.check_icon_dupenames python -m tools.maplint.source --github diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 3e20acae2150..57b3491a44d2 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -27,6 +27,7 @@ CREATE TABLE `characters` ( `real_name` varchar(55) COLLATE utf8mb4_unicode_ci NOT NULL, `name_is_always_random` tinyint(1) NOT NULL, `gender` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL, + `body_type` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL, `age` smallint(4) NOT NULL, `species` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL, `language` varchar(45) COLLATE utf8mb4_unicode_ci NOT NULL, diff --git a/SQL/updates/54-55.sql b/SQL/updates/54-55.sql new file mode 100644 index 000000000000..8b388b65f0c4 --- /dev/null +++ b/SQL/updates/54-55.sql @@ -0,0 +1,9 @@ +# Updating DB from 54-55 - lewc +# Adds a new `body_type` (gender sprite) column to the `characters` table + +# Add the new column next to the existing `gender` one +ALTER TABLE `characters` + ADD COLUMN `body_type` varchar(11) COLLATE utf8mb4_unicode_ci NOT NULL AFTER `gender`; + +# Set the `body_type` column to whatever's already in `gender`, so that it doesn't change existing characters +UPDATE `characters` SET `body_type` = `gender` WHERE `gender` IS NOT NULL diff --git a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm index 9cca10a32392..da0e0f1d5709 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/onehalf.dmm @@ -259,7 +259,6 @@ /area/ruin/space/onehalf/hallway) "aM" = ( /obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment, /obj/machinery/door/poddoor{ id_tag = "bayint1"; name = "mining drone bay blast door" @@ -636,9 +635,6 @@ /area/ruin/space/onehalf/hallway) "bA" = ( /obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -653,15 +649,6 @@ }, /turf/simulated/floor/plasteel, /area/ruin/space/onehalf/drone_bay) -"bC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/space/onehalf/drone_bay) "bD" = ( /obj/structure/disposalpipe/junction{ dir = 8 @@ -1643,7 +1630,7 @@ aD aq aX bm -bC +bn bT aa cn diff --git a/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm b/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm index ce3aad34e220..83d5f5fefa81 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/wreckedcargoship.dmm @@ -214,7 +214,6 @@ /area/ruin/space/wreck_cargoship) "jb" = ( /obj/structure/table, -/obj/structure/table, /obj/item/paper{ name = "management's directive"; info = "Good day Captain Hardie. Your ship has been assigned to carry an extremely delicate cargo due to an unfortunate scheduling issue in behalf of our custormers. You will find the additional information on transporting procedure of this extremely delicate cargo attached to it. Management believes you will not mind this rather unconvenient last minute change after what happened last time. Make sure you and your crew doesn't mess it up this time as we hate to compensate the expenses from our esteemed already-in-debt employees. Pick the cargo from next destination and safely deliver it where it has to go." diff --git a/_maps/map_files/stations/boxstation.dmm b/_maps/map_files/stations/boxstation.dmm index 57c028ebbfc1..31bfcbabf97c 100644 --- a/_maps/map_files/stations/boxstation.dmm +++ b/_maps/map_files/stations/boxstation.dmm @@ -52972,7 +52972,6 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment, /obj/structure/sign/securearea{ pixel_x = -32 }, @@ -74887,7 +74886,6 @@ /area/station/maintenance/apmaint) "owP" = ( /obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating/airless, /area/station/maintenance/asmaint) "oxe" = ( diff --git a/_maps/map_files/stations/cerestation.dmm b/_maps/map_files/stations/cerestation.dmm index 2a03e9c68b61..31aa308fa5aa 100644 --- a/_maps/map_files/stations/cerestation.dmm +++ b/_maps/map_files/stations/cerestation.dmm @@ -839,24 +839,13 @@ icon_state = "dark" }, /area/station/turret_protected/ai) -"aeO" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'WARNING: FUN-SIZED JUSTICE'."; - name = "WARNING: FUN-SIZED JUSTICE"; - pixel_x = null; - pixel_y = -32 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - color = "#954535" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/fore/west) "afd" = ( /turf/simulated/wall/r_wall, /area/station/security/permabrig) +"afe" = ( +/obj/structure/closet/masks, +/turf/simulated/floor/plasteel, +/area/station/public/fitness) "afn" = ( /obj/structure/cable{ d1 = 4; @@ -1850,6 +1839,11 @@ icon_state = "asteroidplating" }, /area/station/security/permabrig) +"alq" = ( +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/starboard) "alt" = ( /obj/machinery/camera{ c_tag = "Prison Central"; @@ -2247,6 +2241,15 @@ "aog" = ( /turf/simulated/floor/plating, /area/station/maintenance/disposal/northeast) +"aoh" = ( +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "green" + }, +/area/station/public/quantum/service) "aok" = ( /obj/structure/cable/orange{ d1 = 1; @@ -2695,6 +2698,17 @@ /obj/effect/landmark/spawner/rev, /turf/simulated/floor/plating, /area/station/maintenance/disposal/northeast) +"aqR" = ( +/obj/machinery/power/apc/important/directional/north, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/station/public/quantum/medbay) "aqT" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, @@ -2821,6 +2835,11 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/maintenance/disposal) +"arE" = ( +/turf/simulated/floor/light{ + color = "#6b8698" + }, +/area/station/public/quantum/medbay) "arG" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/orange{ @@ -3586,6 +3605,20 @@ icon_state = "darkredcorners" }, /area/station/security/brig) +"awA" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "green" + }, +/area/station/public/quantum/service) "awB" = ( /obj/machinery/light, /obj/machinery/newscaster/security_unit{ @@ -4754,21 +4787,6 @@ }, /turf/simulated/wall, /area/station/maintenance/maintcentral) -"aEv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "escape" - }, -/area/station/hallway/secondary/entry/east) "aEw" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -6221,6 +6239,23 @@ icon_state = "vault" }, /area/station/security/armory/secure) +"aOR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "redcorner" + }, +/area/station/hallway/secondary/entry/north) "aOS" = ( /obj/machinery/power/terminal{ dir = 4 @@ -6579,6 +6614,7 @@ /area/station/security/permabrig) "aQR" = ( /obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "aQS" = ( @@ -7848,6 +7884,12 @@ "aXD" = ( /turf/simulated/floor/plating/asteroid/ancient/airless, /area/mine/unexplored/cere/engineering) +"aXF" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "aXG" = ( /obj/machinery/camera{ c_tag = "Mini Satellite Teleporter"; @@ -8251,6 +8293,17 @@ /obj/structure/grille/broken, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/port) +"aZU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "aZY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -9209,6 +9262,19 @@ icon_state = "dark" }, /area/station/engineering/break_room/secondary) +"bff" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/item/radio/intercom{ + pixel_x = -28; + name = "custom placement" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/south) "bfg" = ( /obj/structure/grille/broken, /obj/item/clothing/head/cone, @@ -10622,6 +10688,16 @@ }, /turf/simulated/floor/transparent/glass/reinforced/plasma, /area/station/engineering/control) +"bmb" = ( +/obj/machinery/quantumpad/cere/security_medbay, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/turf/simulated/floor/plasteel{ + icon_state = "darkred" + }, +/area/station/public/quantum/security) "bmf" = ( /obj/structure/disposalpipe/segment/corner, /obj/machinery/firealarm{ @@ -12167,6 +12243,24 @@ /obj/effect/spawner/window/reinforced/plasma, /turf/simulated/floor/plating, /area/station/engineering/engine/supermatter) +"bty" = ( +/obj/structure/window/reinforced/polarized, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/mecha_parts/core, +/obj/item/stock_parts/cell/high/plus, +/obj/item/stock_parts/cell/high/plus, +/obj/item/stock_parts/cell/high/plus, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "btz" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -14761,6 +14855,7 @@ dir = 8 }, /obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint2) "bEP" = ( @@ -15458,6 +15553,11 @@ icon_state = "dark" }, /area/station/engineering/atmos) +"bGP" = ( +/turf/simulated/floor/light{ + color = "#79986b" + }, +/area/station/public/quantum/service) "bGW" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/cable{ @@ -16792,6 +16892,7 @@ /area/station/command/bridge) "bMX" = ( /obj/structure/closet/wardrobe/mixed, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port) "bMY" = ( @@ -17003,6 +17104,22 @@ }, /turf/space, /area/space/nearstation) +"bNX" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/security) +"bNZ" = ( +/obj/machinery/power/apc/directional/east, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/station/hallway/primary/aft/west) "bOf" = ( /obj/structure/cable{ d1 = 1; @@ -17080,6 +17197,7 @@ dir = 4 }, /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -18974,7 +19092,6 @@ pixel_x = 24; name = "east bump" }, -/obj/structure/disposalpipe/segment, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -19146,6 +19263,7 @@ }, /obj/effect/decal/cleanable/cobweb, /obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore2) "bWl" = ( @@ -19397,9 +19515,27 @@ icon_state = "asteroidplating" }, /area/station/maintenance/port) +"bXp" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "purplecorner" + }, +/area/station/hallway/primary/aft/east) "bXu" = ( /obj/structure/rack, /obj/item/pickaxe/emergency, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore2) "bXv" = ( @@ -20050,6 +20186,11 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fore2) +"ccV" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance/two, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/fore2) "ccW" = ( /turf/simulated/mineral/ancient, /area/mine/unexplored/cere/research) @@ -20109,6 +20250,7 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/structure/closet/firecloset/full, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -20500,14 +20642,13 @@ /turf/simulated/floor/plasteel, /area/station/supply/miningdock) "cfG" = ( -/obj/machinery/bluespace_beacon, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/light{ - color = "#4C763A" +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, /area/station/public/quantum/docking) "cfH" = ( @@ -20950,10 +21091,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/newscaster{ - pixel_y = 28; - name = "north bump" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -21269,16 +21406,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/machinery/newscaster{ - pixel_y = 28; - name = "north bump" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "escape" @@ -21639,17 +21769,6 @@ }, /turf/simulated/floor/plasteel, /area/station/science/storage) -"cmK" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/hallway/primary/aft/west) "cmL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -21872,10 +21991,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/sortjunction{ - dir = 2; - name = "disposal pipe - Chemistry"; - sort_type_txt = "11" +/obj/structure/disposalpipe/sortjunction/reversed{ + name = "disposal pipe - Medbay"; + sort_type_txt = "9"; + dir = 8 }, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" @@ -21975,6 +22094,7 @@ /obj/structure/closet/emcloset, /obj/machinery/light/small, /obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port) "coO" = ( @@ -23024,7 +23144,14 @@ }, /area/station/supply/office) "cvq" = ( -/obj/machinery/light{ +/obj/machinery/door_control{ + id = "arrivalseva"; + name = "Arrivals EVA shutter control"; + pixel_x = 25; + pixel_y = 6; + req_one_access_txt = "19;41" + }, +/obj/effect/turf_decal/stripes/corner{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -23297,13 +23424,6 @@ icon_state = "dark" }, /area/station/maintenance/port) -"cxI" = ( -/obj/machinery/camera{ - c_tag = "Service Atmospherics Checkpoint" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/station/maintenance/port2) "cxM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -23645,6 +23765,7 @@ "czP" = ( /obj/structure/closet/crate, /obj/item/pickaxe, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/apmaint) "czQ" = ( @@ -25256,20 +25377,6 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/engmed) -"cIJ" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "neutralcorner" - }, -/area/station/hallway/secondary/entry/north) "cIO" = ( /obj/machinery/newscaster{ pixel_x = 28; @@ -25590,6 +25697,9 @@ pixel_x = 28; name = "custom placement" }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -25673,6 +25783,13 @@ }, /turf/simulated/floor/wood, /area/station/legal/magistrate) +"cKU" = ( +/obj/machinery/alarm/directional/east, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkgreen" + }, +/area/station/public/quantum/docking) "cKY" = ( /obj/machinery/light{ dir = 4 @@ -25703,6 +25820,11 @@ /obj/structure/closet/secure_closet/iaa, /turf/simulated/floor/carpet, /area/station/legal/lawoffice) +"cLc" = ( +/turf/simulated/floor/plasteel{ + icon_state = "darkgreen" + }, +/area/station/public/quantum/docking) "cLe" = ( /obj/structure/cable/orange{ d1 = 2; @@ -25730,6 +25852,14 @@ icon_state = "redyellowfull" }, /area/station/service/bar) +"cLo" = ( +/obj/machinery/power/apc/directional/west, +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/structure/cable/orange, +/turf/simulated/floor/plating, +/area/station/public/fitness) "cLq" = ( /obj/structure/bookcase/sop, /turf/simulated/floor/carpet, @@ -26044,8 +26174,8 @@ /turf/simulated/floor/carpet/black, /area/station/command/bridge) "cMQ" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, +/obj/structure/sign/cargo, +/turf/simulated/wall, /area/station/public/quantum/cargo) "cMR" = ( /obj/machinery/light/small{ @@ -26093,13 +26223,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/power/apc/directional/north, /obj/structure/cable/orange{ d2 = 2; icon_state = "0-2" }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/power/apc/important/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkbrown" @@ -27346,9 +27476,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/bluespace_beacon, -/turf/simulated/floor/light{ - color = "#6A5135" +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, /area/station/public/quantum/cargo) "cSt" = ( @@ -28521,12 +28650,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, /turf/simulated/floor/light{ color = "#6A5135" }, /area/station/public/quantum/cargo) "cXa" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkbrown" @@ -29811,7 +29945,9 @@ }, /area/station/security/prison/cell_block/A) "dfF" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment/corner{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" @@ -29865,12 +30001,16 @@ c_tag = "Brig General Population Port"; dir = 10 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" }, /area/station/security/prison/cell_block/A) "dgF" = ( +/obj/structure/disposalpipe/segment/corner, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "redcorner" @@ -30343,9 +30483,6 @@ dir = 4 }, /obj/effect/spawner/random_spawners/dirt_often, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "escape" @@ -30486,18 +30623,13 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "darkbrown" }, /area/station/public/quantum/cargo) "dkK" = ( /obj/item/kirbyplants/plant22, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkbrown" @@ -30814,9 +30946,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/sign/cargo{ - pixel_y = -32 - }, /obj/structure/disposalpipe/segment{ dir = 4; color = "#954535" @@ -30954,11 +31083,11 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -30978,6 +31107,7 @@ /area/station/maintenance/disposal/west) "doo" = ( /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/fpmaint) "dos" = ( @@ -31627,12 +31757,12 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment/corner{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" @@ -31913,6 +32043,21 @@ icon_state = "darkredcorners" }, /area/station/security/brig) +"dtv" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Criminal Delivery Chute" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/doors, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/stripes/red, +/obj/structure/disposalpipe/segment{ + color = "#954535" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/aft/east) "dtA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -33698,6 +33843,7 @@ /area/station/maintenance/starboard) "dCU" = ( /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/starboard) "dCV" = ( @@ -33985,26 +34131,6 @@ /obj/effect/spawner/airlock/e_to_w, /turf/simulated/wall, /area/station/maintenance/apmaint) -"dHU" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "purple" - }, -/area/station/hallway/primary/aft/west) "dIi" = ( /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 @@ -34798,15 +34924,14 @@ /turf/simulated/floor/wood, /area/station/service/theatre) "dSV" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 24; - name = "custom placement" - }, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/light{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -35033,9 +35158,6 @@ }, /area/station/hallway/primary/fore/north) "dWM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -35046,9 +35168,9 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -35116,6 +35238,10 @@ /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall, /area/station/maintenance/asmaint) +"dYK" = ( +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "dZd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -35191,22 +35317,6 @@ /obj/structure/railing, /turf/space, /area/space/nearstation) -"ebB" = ( -/obj/effect/spawner/window/reinforced/grilled, -/obj/structure/cable/orange{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Secure Gate"; - name = "Security Blast Door"; - opacity = 0 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/station/security/prison/cell_block/A) "ebW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -35379,6 +35489,7 @@ "eeZ" = ( /obj/structure/closet/crate, /obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fore2) "efa" = ( @@ -35434,6 +35545,18 @@ "egm" = ( /turf/simulated/wall/r_wall, /area/mine/unexplored/cere/medical) +"ego" = ( +/obj/structure/sign/directions/service{ + pixel_y = 39; + dir = 8 + }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/cargo) "egq" = ( /obj/structure/disposalpipe/segment/corner{ dir = 8 @@ -35601,11 +35724,11 @@ /turf/simulated/floor/plating/airless, /area/station/maintenance/disposal/west) "ejH" = ( -/obj/structure/closet/masks, /obj/structure/window/basic{ dir = 8 }, -/turf/simulated/floor/plasteel, +/obj/structure/punching_bag, +/turf/simulated/floor/carpet/cyan, /area/station/public/fitness) "ekh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -35880,6 +36003,7 @@ /area/station/hallway/primary/central/west) "eot" = ( /obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "eoz" = ( @@ -36137,16 +36261,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/storage) -"etF" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/camera{ - c_tag = "Research Atmospherics Checkpoint"; - dir = 9 - }, -/turf/simulated/floor/plating, -/area/station/hallway/primary/aft/west) "etG" = ( /obj/structure/cable/orange{ d1 = 4; @@ -36212,6 +36329,7 @@ /area/station/service/clown) "eux" = ( /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/maintcentral) "euL" = ( @@ -36282,6 +36400,17 @@ icon_state = "dark" }, /area/station/engineering/break_room/secondary) +"evm" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/hallway/primary/aft/west) "evC" = ( /obj/structure/cable{ d1 = 4; @@ -36531,6 +36660,7 @@ /obj/structure/closet/crate{ name = "top secret mime supplies" }, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -36548,6 +36678,24 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/fore2) +"eAu" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/recharge_station, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/starboard/north) +"eAQ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/caution/stand_clear, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkbrown" + }, +/area/station/public/quantum/cargo) "eAS" = ( /turf/simulated/floor/plating{ icon_state = "asteroidplating" @@ -36685,19 +36833,15 @@ icon_state = "asteroidplating" }, /area/station/maintenance/port) -"eCT" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +"eDf" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "darkpurple" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, +/turf/simulated/floor/plasteel/white, /area/station/science/robotics) "eDi" = ( /obj/structure/cable/orange{ @@ -36808,10 +36952,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/spacebridge/cargocom) -"eEI" = ( -/obj/structure/sign/security, -/turf/simulated/wall/r_wall, -/area/station/public/quantum/science) "eEK" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -36914,6 +37054,14 @@ /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"eGC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/light{ + color = "#62416F" + }, +/area/station/public/quantum/science) "eGS" = ( /obj/machinery/power/apc/directional/south, /obj/machinery/light/small{ @@ -37429,6 +37577,10 @@ icon_state = "asteroidplating" }, /area/station/public/vacant_office) +"ePI" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/station/public/quantum/service) "eQt" = ( /obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ @@ -37577,6 +37729,11 @@ }, /turf/simulated/floor/grass, /area/station/hallway/spacebridge/scidock) +"eTI" = ( +/obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/port) "eTJ" = ( /obj/item/kirbyplants, /obj/structure/disposalpipe/segment{ @@ -37992,6 +38149,15 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/port/north) +"fbf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "fbs" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -38067,6 +38233,7 @@ /obj/structure/disposalpipe/segment/corner{ dir = 8 }, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -38292,6 +38459,7 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/hallway/primary/aft/west) "fiK" = ( @@ -38377,6 +38545,11 @@ "fkn" = ( /obj/structure/disposalpipe/segment/corner, /obj/structure/chair/stool, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, @@ -38463,6 +38636,16 @@ }, /turf/simulated/floor/plating, /area/station/security/prison/cell_block/A) +"fmA" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/machinery/alarm/directional/east, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkred" + }, +/area/station/public/quantum/security) "fmI" = ( /turf/simulated/floor/plasteel{ icon_state = "neutralfull" @@ -38481,6 +38664,18 @@ icon_state = "dark" }, /area/station/medical/morgue) +"fna" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteyellow" + }, +/area/station/science/robotics/chargebay) "fnk" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -38674,12 +38869,22 @@ }, /area/station/science/hallway) "fru" = ( -/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 + dir = 10 }, -/turf/simulated/floor/plating, -/area/station/maintenance/port2) +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "green" + }, +/area/station/public/quantum/service) "frK" = ( /obj/structure/cable/orange{ d1 = 2; @@ -38887,6 +39092,21 @@ icon_state = "white" }, /area/station/science/misc_lab) +"fva" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/station/public/quantum/medbay) "fvb" = ( /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -39223,14 +39443,6 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/primary/fore/east) -"fAm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "darkpurple" - }, -/area/station/science/robotics) "fAD" = ( /obj/machinery/ai_status_display, /turf/simulated/wall, @@ -39261,6 +39473,15 @@ /obj/machinery/atmospherics/pipe/simple/visible, /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/southeast) +"fBT" = ( +/obj/machinery/bluespace_beacon, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/light{ + color = "#763C3A" + }, +/area/station/public/quantum/security) "fCc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -39618,6 +39839,13 @@ }, /turf/simulated/floor/carpet/green, /area/station/service/library) +"fIL" = ( +/obj/effect/turf_decal/stripes/corner, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/secondary/entry/north) "fIZ" = ( /obj/machinery/firealarm{ dir = 8; @@ -39649,8 +39877,17 @@ }, /area/station/medical/storage/secondary) "fJC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel, /area/station/public/fitness) "fJD" = ( @@ -39705,11 +39942,6 @@ }, /area/station/hallway/primary/aft/west) "fLp" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 2; - name = "disposal pipe - CMO Office"; - sort_type_txt = "10" - }, /obj/effect/spawner/random_spawners/dirt_often, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -39858,6 +40090,9 @@ /obj/machinery/atmospherics/binary/valve/open, /turf/simulated/floor/plating, /area/station/maintenance/port2) +"fOb" = ( +/turf/simulated/mineral/ancient, +/area/station/public/quantum/docking) "fOd" = ( /obj/structure/cable{ d1 = 1; @@ -40093,14 +40328,6 @@ icon_state = "white" }, /area/station/science/misc_lab) -"fSm" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/item/assembly/mousetrap/armed, -/turf/simulated/floor/plating{ - icon_state = "asteroidplating" - }, -/area/station/maintenance/port2) "fSn" = ( /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/stripes/line{ @@ -40211,19 +40438,6 @@ icon_state = "arrival" }, /area/station/hallway/secondary/entry/west) -"fTG" = ( -/obj/effect/spawner/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id_tag = "RoboticsShutters" - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/station/science/robotics) "fTL" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -40543,10 +40757,6 @@ icon_state = "whitegreen" }, /area/station/public/sleep) -"fYD" = ( -/obj/structure/rack, -/turf/simulated/floor/plating/asteroid/ancient, -/area/station/maintenance/apmaint) "fYG" = ( /obj/machinery/door/airlock/public/glass{ name = "Walkway" @@ -40599,14 +40809,6 @@ icon_state = "asteroidplating" }, /area/station/maintenance/maintcentral) -"fZs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "purplefull" - }, -/area/station/hallway/primary/aft/west) "fZC" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/cyan, /obj/effect/spawner/random_spawners/dirt_often, @@ -40663,17 +40865,6 @@ /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) -"gaZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, -/turf/simulated/floor/plating{ - icon_state = "asteroidplating" - }, -/area/station/maintenance/port2) "gbb" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -40924,6 +41115,11 @@ /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, /area/station/public/fitness) "ggy" = ( @@ -40975,8 +41171,10 @@ /turf/simulated/floor/plating, /area/station/hallway/primary/central/north) "ghr" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 3 + }, /turf/simulated/floor/plating, /area/station/maintenance/port2) "ghv" = ( @@ -41002,13 +41200,6 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/atmos, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) -"ghP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/station/maintenance/port2) "ghS" = ( /obj/structure/flora/grass/jungle, /obj/item/radio/intercom{ @@ -41092,6 +41283,8 @@ /obj/structure/disposalpipe/segment/corner{ dir = 1 }, +/obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -41295,9 +41488,6 @@ name = "Port Asteroid Maintenance" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -41379,14 +41569,6 @@ icon_state = "wood-broken7" }, /area/station/maintenance/asmaint) -"gqG" = ( -/obj/structure/disposalpipe/segment/corner{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/medical/break_room) "gqH" = ( /obj/structure/cable/orange{ d1 = 1; @@ -41504,6 +41686,9 @@ /obj/structure/grille, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/gambling_den) +"gtw" = ( +/turf/simulated/mineral/ancient, +/area/station/public/quantum/medbay) "gtz" = ( /obj/machinery/constructable_frame/machine_frame, /turf/simulated/floor/plasteel{ @@ -42170,13 +42355,6 @@ icon_state = "browncorner" }, /area/station/hallway/primary/fore/east) -"gEb" = ( -/obj/item/kirbyplants, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/carpet/cyan, -/area/station/public/fitness) "gEi" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -42318,6 +42496,26 @@ "gGB" = ( /turf/simulated/mineral/ancient/outer, /area/station/public/sleep/secondary) +"gGE" = ( +/obj/item/radio/intercom{ + pixel_x = -28; + name = "custom placement" + }, +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "gGI" = ( /obj/structure/sign/directions/bridge{ dir = 1 @@ -42384,6 +42582,14 @@ icon_state = "purplefull" }, /area/station/hallway/primary/aft/west) +"gIk" = ( +/obj/structure/disposalpipe/segment{ + color = "#954535" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/aft/east) "gIm" = ( /obj/effect/spawner/window/reinforced, /obj/structure/sign/chemistry, @@ -43176,6 +43382,15 @@ /obj/structure/cable/orange, /turf/simulated/floor/plating, /area/station/science/xenobiology) +"gVR" = ( +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/public/quantum/medbay) "gVY" = ( /obj/structure/railing, /turf/simulated/floor/plasteel, @@ -43393,19 +43608,6 @@ }, /turf/simulated/mineral/ancient, /area/station/public/locker) -"gZF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "darkpurple" - }, -/area/station/science/robotics) "gZI" = ( /turf/simulated/floor/wood, /area/station/command/office/blueshield) @@ -43583,9 +43785,20 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) +"hcI" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/port2) "hcK" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/closet/wardrobe/black, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/port) "hcT" = ( @@ -43653,6 +43866,20 @@ icon_state = "darkbrown" }, /area/station/supply/office) +"hdX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 4; + name = "east bump"; + pixel_x = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkgreen" + }, +/area/station/public/quantum/docking) "hec" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -43790,14 +44017,11 @@ /turf/simulated/floor/plasteel, /area/station/public/fitness) "hhd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, /obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10; - level = 2 + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/station/hallway/primary/aft/west) @@ -44159,6 +44383,10 @@ icon_state = "dark" }, /area/station/service/expedition) +"hoF" = ( +/obj/structure/disposalpipe/segment/corner, +/turf/simulated/mineral/ancient, +/area/station/maintenance/port2) "hoG" = ( /obj/structure/window/reinforced{ dir = 4 @@ -44584,6 +44812,12 @@ }, /turf/simulated/floor/carpet, /area/station/service/bar) +"huq" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/port2) "huu" = ( /obj/structure/disposalpipe/segment/corner{ dir = 1 @@ -44592,6 +44826,7 @@ /area/mine/unexplored/cere/cargo) "huF" = ( /obj/structure/table, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal/west) "huM" = ( @@ -44702,6 +44937,7 @@ /area/station/maintenance/disposal/west) "hxc" = ( /obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -44724,6 +44960,17 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/fpmaint) +"hxR" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteyellow" + }, +/area/station/science/robotics/chargebay) "hyd" = ( /obj/machinery/light/small{ dir = 8 @@ -44820,6 +45067,17 @@ }, /turf/simulated/floor/plasteel, /area/station/security/lobby) +"hzj" = ( +/obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance/two, +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "hzn" = ( /obj/structure/cable/orange{ d1 = 1; @@ -45040,6 +45298,18 @@ icon_state = "cafeteria" }, /area/station/command/office/rd) +"hDx" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/station/hallway/primary/aft/west) "hDL" = ( /obj/structure/cable/orange{ d1 = 4; @@ -45159,6 +45429,23 @@ /obj/structure/lattice/catwalk, /turf/space, /area/station/engineering/solar/auxstarboard) +"hFh" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id_tag = "MechbayShutters2"; + name = "Mech Bay Shutters" + }, +/obj/machinery/door/firedoor, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "ramptop" + }, +/area/station/science/robotics/chargebay) "hFn" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -45220,17 +45507,30 @@ icon_state = "asteroidplating" }, /area/station/hallway/primary/fore/west) +"hGf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + color = "#954535" + }, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'WARNING: FUN-SIZED JUSTICE'."; + name = "WARNING: FUN-SIZED JUSTICE"; + pixel_x = null; + pixel_y = -32 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/fore/west) "hGp" = ( -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -45478,10 +45778,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/secondary/entry/north) -"hJh" = ( -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/station/hallway/primary/aft/west) "hJz" = ( /obj/machinery/alarm/directional/south, /obj/structure/disposalpipe/segment{ @@ -45598,6 +45894,31 @@ /obj/machinery/light, /turf/simulated/floor/wood, /area/station/maintenance/starboard) +"hMB" = ( +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24; + name = "south bump" + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/public/quantum/medbay) +"hML" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel/white, +/area/station/science/robotics) "hMY" = ( /obj/structure/closet/secure_closet/RD, /obj/item/cartridge/signal/toxins, @@ -45718,6 +46039,11 @@ icon_state = "neutralcorner" }, /area/station/hallway/spacebridge/servsci) +"hPy" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/security) "hPG" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, @@ -46037,6 +46363,11 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, /area/station/public/fitness) "hTh" = ( @@ -46105,6 +46436,11 @@ /obj/structure/disposalpipe/segment{ color = "#954535" }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -46267,17 +46603,10 @@ /obj/structure/chair/sofa/corp/right{ dir = 8 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, /area/station/medical/break_room) -"hYD" = ( -/obj/machinery/bluespace_beacon, -/turf/simulated/floor/light{ - color = "#763C3A" - }, -/area/station/public/quantum/security) "hYG" = ( /obj/machinery/status_display{ layer = 4 @@ -46463,6 +46792,7 @@ /area/station/command/office/ntrep) "ibf" = ( /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) "ibH" = ( @@ -46477,6 +46807,17 @@ "ibP" = ( /turf/simulated/floor/carpet/royalblack, /area/station/command/office/ntrep) +"ibX" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkred" + }, +/area/station/public/quantum/security) "ice" = ( /turf/simulated/wall, /area/station/hallway/primary/fore/west) @@ -46603,6 +46944,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -46698,6 +47042,12 @@ }, /turf/simulated/floor/transparent/glass/reinforced/plasma, /area/station/engineering/control) +"ieP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/mineral/ancient, +/area/station/maintenance/port2) "ifa" = ( /turf/simulated/wall/indestructible/riveted, /area/station/science/toxins/test) @@ -46757,6 +47107,16 @@ icon_state = "asteroidplating" }, /area/station/science/xenobiology) +"ifz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + color = "#954535" + }, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + icon_state = "purple" + }, +/area/station/hallway/primary/aft/west) "ifS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating{ @@ -47002,6 +47362,23 @@ icon_state = "darkblue" }, /area/station/command/bridge) +"iky" = ( +/obj/machinery/disposal/deliveryChute{ + desc = "A chute for big and small criminals alike!"; + name = "Criminal Delivery Chute" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/turf_decal/stripes, +/obj/effect/turf_decal/stripes/red, +/obj/structure/disposalpipe/trunk{ + color = "#954535" + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralfull" + }, +/area/station/hallway/primary/aft/east) "ikC" = ( /obj/structure/cable{ d1 = 4; @@ -47340,6 +47717,15 @@ /obj/item/pickaxe, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/fpmaint) +"ipI" = ( +/obj/machinery/bluespace_beacon, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/light{ + color = "#6A5135" + }, +/area/station/public/quantum/cargo) "ipQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -47645,10 +48031,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, /obj/effect/spawner/random_spawners/dirt_frequent, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -47777,17 +48163,6 @@ }, /turf/space, /area/station/engineering/solar/auxport) -"iuX" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/power/apc/directional/north, -/obj/structure/cable/orange{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plasteel/white, -/area/station/science/robotics) "ivj" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -47977,20 +48352,6 @@ /obj/machinery/biogenerator, /turf/simulated/floor/grass/jungle, /area/station/hallway/secondary/garden) -"iyj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Command Quantum Pad"; - dir = 8 - }, -/obj/machinery/alarm/directional/east, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkred" - }, -/area/station/public/quantum/security) "iys" = ( /obj/machinery/alarm/directional/east, /obj/structure/table, @@ -48460,14 +48821,6 @@ }, /turf/simulated/floor/plasteel, /area/station/security/prisonershuttle) -"iHA" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/mecha_part_fabricator, -/obj/machinery/alarm/directional/west, -/turf/simulated/floor/plasteel/white, -/area/station/science/robotics) "iHG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/orange{ @@ -48678,16 +49031,6 @@ icon_state = "dark" }, /area/station/turret_protected/aisat/interior) -"iKs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/power/apc/directional/west, -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/structure/cable/orange, -/turf/simulated/floor/plating, -/area/station/public/fitness) "iKt" = ( /obj/structure/cable/orange{ d1 = 2; @@ -48774,15 +49117,14 @@ /turf/simulated/floor/plating, /area/station/maintenance/starboard) "iLV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 4; level = 2 }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plating, /area/station/hallway/primary/aft/west) "iMh" = ( @@ -48926,6 +49268,17 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/starboard) +"iOG" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + color = "#954535" + }, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "purplecorner" + }, +/area/station/hallway/primary/aft/east) "iOM" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 @@ -48951,6 +49304,7 @@ /area/station/maintenance/fore) "iOU" = ( /obj/structure/table/wood, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/wood, /area/station/maintenance/starboard) "iPa" = ( @@ -48993,6 +49347,13 @@ /obj/item/storage/toolbox/mechanical, /turf/simulated/floor/plating, /area/station/maintenance/port) +"iQb" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "iQd" = ( /obj/machinery/door/poddoor{ density = 0; @@ -49015,6 +49376,21 @@ }, /turf/simulated/floor/plating, /area/station/hallway/primary/port/south) +"iQr" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/filingcabinet/chestdrawer, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm/directional/north, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/station/security/detective) "iQJ" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -49180,6 +49556,27 @@ /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"iTt" = ( +/obj/machinery/door/airlock/security/glass{ + name = "Detective" + }, +/obj/effect/mapping_helpers/airlock/access/all/security/forensics, +/obj/machinery/door/firedoor, +/obj/effect/mapping_helpers/airlock/polarized{ + id = "Detective" + }, +/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/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/station/security/detective) "iTx" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/door/firedoor, @@ -49532,6 +49929,7 @@ /area/station/science/xenobiology) "iXm" = ( /obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/fsmaint) "iXt" = ( @@ -49635,6 +50033,7 @@ /area/mine/unexplored/cere/orbiting) "iZd" = ( /obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/hallway/primary/fore/west) "iZr" = ( @@ -50107,7 +50506,6 @@ dir = 4; pixel_x = 11 }, -/obj/structure/disposalpipe/segment/corner, /turf/simulated/floor/plasteel{ icon_state = "cafeteria" }, @@ -50404,6 +50802,16 @@ }, /turf/simulated/floor/plating, /area/station/security/armory/secure) +"jnH" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 24; + name = "custom placement" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/secondary/entry/north) "jnV" = ( /obj/machinery/status_display{ layer = 4 @@ -50536,6 +50944,7 @@ /obj/structure/disposalpipe/segment/corner{ dir = 4 }, +/obj/effect/spawner/lootdrop/maintenance/two, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) "jpP" = ( @@ -50791,10 +51200,6 @@ /obj/structure/rack, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/storage) -"jsY" = ( -/obj/structure/closet/boxinggloves, -/turf/simulated/floor/plasteel, -/area/station/public/fitness) "jtd" = ( /obj/structure/girder, /obj/structure/grille, @@ -51184,6 +51589,14 @@ /obj/machinery/atmospherics/portable/canister/air, /turf/simulated/floor/plating, /area/station/hallway/primary/fore/north) +"jzf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/light{ + color = "#763C3A" + }, +/area/station/public/quantum/security) "jzg" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable{ @@ -51427,20 +51840,6 @@ icon_state = "asteroidplating" }, /area/station/maintenance/apmaint) -"jCg" = ( -/obj/machinery/power/apc/directional/north, -/obj/structure/cable/orange{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "whiteyellow" - }, -/area/station/science/robotics/chargebay) "jCl" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -51454,6 +51853,22 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/fore/north) +"jCx" = ( +/obj/effect/spawner/window/reinforced/grilled, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Secure Gate"; + name = "Security Blast Door"; + opacity = 0 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/station/security/prison/cell_block/A) "jCE" = ( /obj/structure/disposalpipe/sortjunction/reversed{ dir = 1; @@ -51559,6 +51974,12 @@ icon_state = "purplecorner" }, /area/station/hallway/primary/aft/east) +"jDV" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "jDW" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -51702,13 +52123,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/door_control{ - id = "scieva"; - name = "Science EVA shutter control"; - pixel_x = 25; - pixel_y = 24; - req_one_access_txt = "19;41" - }, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -51879,6 +52293,17 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/storage) +"jIO" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/machinery/power/apc/directional/north, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plasteel/white, +/area/station/science/robotics) "jJc" = ( /turf/simulated/mineral/ancient, /area/station/science/robotics) @@ -52237,16 +52662,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"jOU" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 2; - name = "disposal pipe - Genetics"; - sort_type_txt = "23" - }, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/medical/break_room) "jPa" = ( /obj/structure/grille, /turf/simulated/floor/plating{ @@ -52424,6 +52839,13 @@ /obj/structure/cable/orange, /turf/simulated/floor/plating, /area/station/maintenance/portsolar) +"jRW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/camera{ + c_tag = "Service Atmospherics Checkpoint" + }, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "jSc" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -52484,7 +52906,9 @@ }, /area/station/hallway/primary/port/north) "jTe" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment/corner{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -52563,18 +52987,6 @@ icon_state = "darkred" }, /area/station/security/checkpoint/secondary) -"jUA" = ( -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id_tag = "MechbayShutters2"; - name = "Mech Bay Shutters" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "ramptop" - }, -/area/station/science/robotics/chargebay) "jUK" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -52593,27 +53005,6 @@ icon_state = "dark" }, /area/station/engineering/atmos) -"jUP" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Detective" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/forensics, -/obj/machinery/door/firedoor, -/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/mapping_helpers/airlock/polarized{ - id = "Detective" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "grimy" - }, -/area/station/security/detective) "jUW" = ( /obj/machinery/light{ dir = 1 @@ -52686,23 +53077,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/southwest) -"jWb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel/white, -/area/station/science/robotics) "jWj" = ( /obj/machinery/power/apc/directional/west, /obj/structure/cable/orange, @@ -52733,15 +53107,6 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/comeng) -"jWP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel/white, -/area/station/science/robotics) "jWR" = ( /turf/simulated/floor/plasteel{ dir = 6; @@ -52927,14 +53292,9 @@ /turf/simulated/floor/plating, /area/station/hallway/primary/fore/north) "kaS" = ( -/obj/structure/sign/directions/cargo{ - dir = 4 - }, -/obj/structure/sign/directions/bridge{ - dir = 8; - pixel_y = 8 +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, -/turf/simulated/wall, /area/station/public/quantum/cargo) "kaY" = ( /obj/effect/turf_decal/stripes/asteroid/line{ @@ -52953,6 +53313,17 @@ }, /turf/simulated/floor/transparent/glass/reinforced, /area/station/maintenance/apmaint) +"kbj" = ( +/obj/effect/turf_decal/stripes/end{ + dir = 4 + }, +/obj/machinery/quantumpad/cere/arrivals_cargo{ + name = "quantum pad" + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellowfull" + }, +/area/station/public/quantum/docking) "kbl" = ( /obj/machinery/floodlight{ light_power = 1 @@ -53259,7 +53630,6 @@ /turf/simulated/floor/engine, /area/station/engineering/control) "kgd" = ( -/obj/item/kirbyplants/applebush, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkred" @@ -53296,6 +53666,15 @@ /obj/machinery/ai_status_display, /turf/simulated/mineral/ancient, /area/station/hallway/primary/starboard/north) +"khH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/station/hallway/secondary/entry/north) "khM" = ( /obj/structure/cable{ d1 = 1; @@ -53600,6 +53979,23 @@ /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel/white, /area/station/science/xenobiology) +"kmd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/station/public/quantum/medbay) "kmi" = ( /obj/machinery/door/airlock/maintenance{ name = "Cargo SMES Access" @@ -53644,6 +54040,15 @@ }, /turf/simulated/floor/engine, /area/station/engineering/control) +"kmY" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "knc" = ( /obj/structure/disposalpipe/segment/corner, /turf/simulated/floor/plating, @@ -54101,6 +54506,20 @@ icon_state = "neutralfull" }, /area/station/hallway/secondary/entry/west) +"ktA" = ( +/obj/machinery/power/apc/important/directional/south, +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/obj/structure/cable/orange{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "green" + }, +/area/station/public/quantum/service) "ktP" = ( /obj/structure/chair/sofa/corp, /turf/simulated/floor/wood, @@ -54452,15 +54871,6 @@ }, /turf/simulated/floor/plating, /area/station/science/misc_lab) -"kzd" = ( -/obj/effect/landmark/spawner/nukedisc_respawn, -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 8; - level = 2 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/station/maintenance/port2) "kzf" = ( /obj/effect/spawner/random_spawners/wall_rusted_always, /turf/simulated/wall, @@ -54482,24 +54892,6 @@ /obj/effect/spawner/random_spawners/fungus_maybe, /turf/simulated/wall, /area/station/maintenance/disposal/east) -"kzS" = ( -/obj/machinery/camera{ - c_tag = "Docking Quantum Pad"; - dir = 8 - }, -/obj/machinery/alarm/directional/east, -/obj/structure/sign/directions/cargo{ - dir = 1; - pixel_y = 39 - }, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkgreen" - }, -/area/station/public/quantum/docking) "kAn" = ( /obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -54589,6 +54981,17 @@ icon_state = "dark" }, /area/station/engineering/gravitygenerator) +"kBs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/light{ + color = "#6b8698" + }, +/area/station/public/quantum/medbay) "kBz" = ( /obj/structure/sink{ dir = 8; @@ -54623,9 +55026,6 @@ "kCg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - color = "#954535" - }, /turf/simulated/floor/plasteel{ icon_state = "neutralfull" }, @@ -54724,13 +55124,13 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/machinery/power/apc/directional/north, /obj/structure/cable{ d2 = 2; icon_state = "0-2" }, /obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/caution/stand_clear, +/obj/machinery/power/apc/important/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkpurple" @@ -54915,6 +55315,7 @@ "kIn" = ( /obj/structure/table, /obj/item/storage/fancy/cigarettes, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal/south) "kIo" = ( @@ -55018,6 +55419,11 @@ icon_state = "neutralfull" }, /area/station/public/locker) +"kJp" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/hallway/primary/aft/west) "kJr" = ( /obj/structure/cable/orange{ d1 = 4; @@ -55030,6 +55436,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/fsmaint) +"kJM" = ( +/obj/structure/sign/security, +/turf/simulated/wall/r_wall, +/area/station/hallway/primary/aft/east) "kKg" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -55474,7 +55884,6 @@ "kQz" = ( /obj/item/kirbyplants/plant21, /turf/simulated/floor/plasteel{ - dir = 6; icon_state = "darkgreen" }, /area/station/public/quantum/docking) @@ -55679,24 +56088,6 @@ /obj/effect/spawner/window/reinforced/plasma/grilled, /turf/simulated/floor/plating, /area/station/science/toxins/launch) -"kTq" = ( -/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/structure/cable/orange{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "grimy" - }, -/area/station/security/detective) "kTG" = ( /obj/structure/sign/directions/medical, /turf/simulated/wall, @@ -55931,9 +56322,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/bluespace_beacon, -/turf/simulated/floor/light{ - color = "#62416F" +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, /area/station/public/quantum/science) "kVQ" = ( @@ -56051,16 +56441,33 @@ icon_state = "redcorner" }, /area/station/hallway/secondary/entry/north) -"kYJ" = ( -/obj/structure/closet/crate, -/turf/simulated/floor/plating, -/area/station/maintenance/storage) +"kYN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "kZb" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 }, /turf/simulated/floor/plating, /area/station/engineering/smes) +"kZd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/port2) "kZm" = ( /obj/structure/disposalpipe/segment/corner{ dir = 1 @@ -56320,9 +56727,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - color = "#954535" - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -56463,6 +56867,12 @@ "lfq" = ( /turf/simulated/mineral/ancient, /area/station/science/hallway) +"lfs" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/cargo) "lfB" = ( /obj/structure/disposalpipe/trunk{ dir = 1 @@ -56481,6 +56891,15 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"lfG" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "green" + }, +/area/station/public/quantum/service) "lfX" = ( /obj/effect/turf_decal/delivery/hollow, /obj/machinery/suit_storage_unit/cmo/sec_storage/secure, @@ -56857,6 +57276,10 @@ }, /turf/simulated/floor/carpet, /area/station/medical/psych) +"lkz" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/station/public/quantum/medbay) "lkA" = ( /obj/effect/decal/cleanable/dirt, /mob/living/carbon/human/monkey, @@ -56970,12 +57393,20 @@ /turf/simulated/floor/plasteel/dark/telecomms, /area/station/science/server) "llQ" = ( -/obj/structure/window/basic{ - dir = 1 - }, /obj/structure/closet/lasertag/red, /turf/simulated/floor/plasteel, /area/station/public/fitness) +"llW" = ( +/obj/structure/sign/directions/science{ + pixel_y = 7; + dir = 8 + }, +/obj/machinery/quantumpad/cere/medbay_science, +/obj/effect/turf_decal/stripes/end, +/turf/simulated/floor/plasteel{ + icon_state = "darkpurplefull" + }, +/area/station/public/quantum/medbay) "lme" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -57621,6 +58052,11 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, /area/station/public/fitness) "lwr" = ( @@ -57821,20 +58257,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"lyC" = ( -/obj/machinery/light_switch{ - dir = 1; - pixel_y = -24; - name = "south bump" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - color = "#954535" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/fore/west) "lyF" = ( /obj/structure/cable{ d1 = 4; @@ -58062,6 +58484,12 @@ "lBh" = ( /turf/simulated/mineral/ancient/outer, /area/station/maintenance/auxsolarport) +"lBk" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/security) "lBr" = ( /obj/machinery/light/small{ dir = 8 @@ -58225,6 +58653,23 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry/south) +"lEh" = ( +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel, +/area/station/public/quantum/service) "lEk" = ( /obj/structure/cable/orange{ d1 = 2; @@ -58269,6 +58714,30 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/sercom) +"lEW" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id_tag = "MechbayShutters2"; + name = "Mech Bay Shutters" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door_control{ + id = "MechbayShutters2"; + name = "Mechbay Shutters"; + pixel_y = -24; + req_access_txt = "29" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "ramptop" + }, +/area/station/science/robotics/chargebay) "lFc" = ( /obj/structure/lattice/catwalk, /obj/structure/cable/orange{ @@ -58391,6 +58860,14 @@ "lHw" = ( /turf/simulated/floor/plating, /area/station/maintenance/disposal/external/southeast) +"lHz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "lHC" = ( /obj/item/flashlight/lantern, /turf/simulated/floor/plating{ @@ -58423,12 +58900,26 @@ icon_state = "dark" }, /area/station/service/library) +"lHU" = ( +/obj/item/assembly/mousetrap/armed, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/port2) "lHZ" = ( /obj/effect/spawner/window/reinforced/polarized{ id = "library" }, /turf/simulated/floor/plating, /area/station/service/library) +"lIf" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/cargo) "lIj" = ( /obj/machinery/crema_switch{ id = "creamed"; @@ -58723,6 +59214,20 @@ /obj/item/clothing/head/cone, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) +"lPe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/station/public/fitness) "lPg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -58801,6 +59306,12 @@ icon_state = "bluecorner" }, /area/station/hallway/primary/starboard/north) +"lPR" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/port2) "lPU" = ( /obj/structure/table, /obj/item/reagent_containers/glass/beaker, @@ -58815,6 +59326,16 @@ icon_state = "cafeteria" }, /area/station/service/kitchen) +"lQy" = ( +/obj/structure/disposalpipe/junction{ + dir = 8; + color = "#954535" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "purplecorner" + }, +/area/station/hallway/primary/aft/east) "lQB" = ( /obj/machinery/light{ dir = 8 @@ -59247,6 +59768,10 @@ icon_state = "asteroidplating" }, /area/station/maintenance/starboard) +"lWR" = ( +/obj/machinery/alarm/directional/east, +/turf/simulated/floor/carpet/cyan, +/area/station/public/fitness) "lWT" = ( /turf/simulated/wall, /area/station/hallway/secondary/garden) @@ -59971,18 +60496,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/door_control{ - id = "arrivalseva"; - name = "Arrivals EVA shutter control"; - pixel_x = 25; - pixel_y = 24; - req_one_access_txt = "19;41" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 +/obj/machinery/newscaster{ + pixel_y = 28; + name = "north bump" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -60065,6 +60584,7 @@ dir = 4 }, /obj/structure/closet/crate, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/station/maintenance/disposal/east) "mlM" = ( @@ -60084,6 +60604,18 @@ icon_state = "barber" }, /area/station/service/barber) +"mml" = ( +/obj/structure/window/reinforced/polarized, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "mmn" = ( /obj/structure/table, /obj/item/storage/firstaid/regular, @@ -60312,13 +60844,6 @@ }, /turf/simulated/floor/wood, /area/station/maintenance/starboard) -"mqw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating{ - icon_state = "asteroidplating" - }, -/area/station/maintenance/port2) "mqR" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -60349,10 +60874,7 @@ /obj/effect/turf_decal/loading_area{ dir = 1 }, -/obj/item/radio/intercom{ - pixel_x = 28; - name = "custom placement" - }, +/obj/machinery/alarm/directional/east, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkpurple" @@ -60672,6 +61194,15 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/asmaint) +"mxh" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "mxj" = ( /obj/structure/cable{ d2 = 8; @@ -61515,18 +62046,6 @@ /obj/structure/lattice/catwalk, /turf/space, /area/station/engineering/solar/starboard) -"mNc" = ( -/obj/machinery/door/airlock/research, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/effect/mapping_helpers/airlock/access/all/science/robotics, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "darkpurplefull" - }, -/area/station/science/robotics) "mNd" = ( /obj/machinery/constructable_frame/machine_frame, /turf/simulated/floor/plating, @@ -61668,6 +62187,7 @@ /area/station/maintenance/electrical_shop) "mPu" = ( /obj/structure/table/wood/poker, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/wood{ icon_state = "wood-broken" }, @@ -61739,9 +62259,6 @@ }, /area/station/hallway/spacebridge/sercom) "mQN" = ( -/obj/machinery/door/airlock/glass, -/obj/effect/mapping_helpers/airlock/autoname, -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -61749,6 +62266,7 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -62206,12 +62724,21 @@ }, /area/station/supply/office) "mXA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 10; - level = 2 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/station/maintenance/port2) +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/caution/stand_clear{ + dir = 8 + }, +/obj/machinery/alarm/directional/east, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "green" + }, +/area/station/public/quantum/service) "mXS" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -62241,6 +62768,13 @@ /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/carpet/black, /area/station/service/chapel) +"mYs" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/station/public/quantum/medbay) "mYI" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -62633,10 +63167,6 @@ }, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) -"neV" = ( -/obj/structure/closet/crate, -/turf/simulated/floor/plating/asteroid/ancient, -/area/station/maintenance/port) "nfb" = ( /obj/structure/table/glass, /obj/item/storage/box/syringes, @@ -62788,18 +63318,6 @@ /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/station/maintenance/turbine) -"nhi" = ( -/obj/structure/window/reinforced/polarized, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/science/robotics) "nhx" = ( /turf/simulated/floor/plating, /area/station/hallway/secondary/exit) @@ -63060,6 +63578,18 @@ icon_state = "asteroidplating" }, /area/station/maintenance/port) +"nlJ" = ( +/obj/structure/sign/directions/service{ + pixel_y = 39; + dir = 8 + }, +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/docking) "nlZ" = ( /obj/machinery/porta_turret/ai_turret/disable, /obj/structure/cable{ @@ -63181,14 +63711,10 @@ }, /area/station/service/hydroponics) "noC" = ( -/obj/machinery/door/poddoor/multi_tile/two_tile_hor{ - name = "Arrivals Emergency EVA Storage"; - id_tag = "arrivalseva" - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/station/maintenance/asmaint) +/area/station/public/quantum/docking) "noS" = ( /obj/structure/disposalpipe/sortjunction{ dir = 4; @@ -63409,6 +63935,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/mapping_helpers/airlock/access/all/command/general, /turf/simulated/floor/plating, /area/station/engineering/tech_storage) "nta" = ( @@ -63433,6 +63960,11 @@ icon_state = "dark" }, /area/station/turret_protected/ai_upload) +"ntf" = ( +/obj/structure/closet/emcloset, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/port) "nto" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable/orange, @@ -63606,6 +64138,15 @@ "nvU" = ( /turf/simulated/floor/carpet/black, /area/station/service/chapel) +"nvX" = ( +/obj/machinery/door/poddoor/multi_tile/two_tile_ver{ + id_tag = "arrivalseva"; + name = "Arrivals Emergency EVA Storage" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/maintenance/asmaint) "nwl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -63717,6 +64258,14 @@ icon_state = "purplecorner" }, /area/station/hallway/primary/aft/east) +"nxZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/light{ + color = "#6A5135" + }, +/area/station/public/quantum/cargo) "nyc" = ( /obj/structure/sign/vacuum{ pixel_y = 32 @@ -63794,6 +64343,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/station/hallway/primary/port/north) +"nzH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/mecha_part_fabricator, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/alarm/directional/west, +/turf/simulated/floor/plasteel/white, +/area/station/science/robotics) "nzK" = ( /obj/structure/cable{ d1 = 1; @@ -64001,9 +64563,6 @@ }, /area/station/medical/storage/secondary) "nDE" = ( -/obj/machinery/light/small{ - dir = 4 - }, /obj/effect/spawner/grouped_spawner{ group_id = "tunnelbats"; max_per_spawner = 1; @@ -64011,6 +64570,11 @@ path_to_spawn = /mob/living/simple_animal/hostile/scarybat; total_amount = 20 }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/port2) "nDG" = ( @@ -64444,6 +65008,24 @@ }, /turf/simulated/floor/transparent/glass/reinforced, /area/station/maintenance/port) +"nLs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/station/security/detective) "nLy" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -64547,12 +65129,6 @@ icon_state = "redcorner" }, /area/station/security/prison/cell_block/A) -"nNm" = ( -/obj/structure/disposalpipe/segment/corner{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/port2) "nNz" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -64591,16 +65167,6 @@ icon_state = "whiteblue" }, /area/station/medical/medbay) -"nNO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel/white, -/area/station/science/robotics) "nNY" = ( /obj/structure/railing/corner{ dir = 8 @@ -64622,10 +65188,6 @@ icon_state = "darkgreenfull" }, /area/station/service/hydroponics) -"nOx" = ( -/obj/machinery/alarm/directional/east, -/turf/simulated/floor/plasteel, -/area/station/public/fitness) "nOF" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -64643,6 +65205,14 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/central/east) +"nOM" = ( +/obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plasteel/white, +/area/station/science/robotics) "nON" = ( /obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access" @@ -64656,7 +65226,6 @@ /turf/simulated/wall, /area/station/hallway/primary/aft/west) "nOU" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance/external{ name = "External Airlock Access" }, @@ -64810,6 +65379,17 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/gambling_den) +"nRs" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/important/directional/east, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkred" + }, +/area/station/public/quantum/security) "nRz" = ( /obj/structure/cable/orange{ d1 = 1; @@ -64957,6 +65537,19 @@ icon_state = "whitegreenfull" }, /area/station/public/sleep) +"nVd" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/structure/sign/directions/medical{ + dir = 4; + pixel_y = 39 + }, +/obj/machinery/bluespace_beacon, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/science) "nVj" = ( /obj/structure/railing{ dir = 9 @@ -65082,17 +65675,14 @@ }, /area/station/hallway/secondary/entry/east) "nYR" = ( -/obj/machinery/door/airlock/glass{ - name = "Research Quantum Pad" - }, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -65155,20 +65745,6 @@ icon_state = "dark" }, /area/station/maintenance/disposal) -"oac" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/filingcabinet/chestdrawer, -/obj/structure/cable/orange{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "grimy" - }, -/area/station/security/detective) "oaf" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ @@ -65997,32 +66573,25 @@ }, /area/station/hallway/spacebridge/cargocom) "oms" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, /obj/structure/cable/orange{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "disposal pipe - Detective"; - sort_type_txt = "24" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /obj/structure/cable/orange{ d1 = 1; d2 = 4; icon_state = "1-4" }, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" @@ -66087,13 +66656,18 @@ }, /area/station/hallway/spacebridge/cargocom) "onY" = ( -/obj/machinery/power/apc/directional/east, +/obj/machinery/camera{ + c_tag = "Command Quantum Pad"; + dir = 6 + }, +/obj/item/kirbyplants/applebush, /obj/structure/cable{ + d1 = 4; d2 = 8; - icon_state = "0-8" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ - dir = 5; + dir = 1; icon_state = "darkred" }, /area/station/public/quantum/security) @@ -66331,6 +66905,13 @@ }, /turf/simulated/floor/engine, /area/station/science/test_chamber) +"oqR" = ( +/obj/machinery/alarm/directional/south, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/station/public/quantum/medbay) "oqU" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 4 @@ -66371,6 +66952,33 @@ icon_state = "white" }, /area/station/medical/cloning) +"orp" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + name = "disposal pipe - Detective"; + sort_type_txt = "24" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "redcorner" + }, +/area/station/hallway/primary/fore/west) "orr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -66568,9 +67176,12 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "purplecorner" @@ -66846,11 +67457,12 @@ /turf/simulated/floor/plasteel/freezer, /area/station/service/kitchen) "oAw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" }, -/obj/structure/disposalpipe/segment/corner, -/turf/simulated/floor/plating, /area/station/maintenance/port2) "oAO" = ( /turf/simulated/mineral/ancient/outer, @@ -67015,6 +67627,23 @@ /obj/structure/closet/secure_closet/engineering_electrical, /turf/simulated/floor/transparent/glass/reinforced, /area/station/hallway/primary/starboard/north) +"oEl" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/obj/structure/cable/orange{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel/white, +/area/station/science/robotics) "oEE" = ( /obj/structure/chair/comfy/shuttle{ dir = 8 @@ -67169,6 +67798,13 @@ }, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior/secondary) +"oHm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/medical/break_room) "oIc" = ( /obj/structure/cable{ d2 = 4; @@ -67266,6 +67902,14 @@ icon_state = "whitebluecorner" }, /area/station/medical/storage/secondary) +"oJz" = ( +/obj/effect/spawner/window/reinforced, +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id_tag = "RoboticsShutters" + }, +/turf/simulated/floor/plating, +/area/station/science/robotics) "oJH" = ( /obj/structure/closet/crate, /obj/item/pickaxe/emergency, @@ -67778,17 +68422,6 @@ icon_state = "neutral" }, /area/station/public/storage/tools) -"oQD" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/turf_decal/delivery/white/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "purplefull" - }, -/area/station/hallway/primary/aft/west) "oQK" = ( /obj/effect/decal/cleanable/cobweb{ icon_state = "cobweb2" @@ -67972,6 +68605,13 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/station/public/quantum/security) +"oTz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 6; + level = 2 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "oTN" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -67996,12 +68636,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/port) -"oUg" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating/asteroid/ancient, -/area/station/maintenance/port2) "oUr" = ( /obj/item/clothing/head/cone, /turf/simulated/floor/plating{ @@ -69103,9 +69737,6 @@ name = "west bump" }, /obj/structure/disposalpipe/segment, -/obj/machinery/light{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 1; @@ -69302,6 +69933,33 @@ icon_state = "white" }, /area/station/science/misc_lab) +"pqq" = ( +/obj/machinery/door/airlock/multi_tile/glass{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/security) +"pqr" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/primary/starboard/north) "pqs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -69642,7 +70300,6 @@ /turf/simulated/floor/plating, /area/station/hallway/primary/port/north) "pvV" = ( -/obj/machinery/light, /obj/machinery/door/airlock/public/glass{ name = "Central Access" }, @@ -69784,6 +70441,7 @@ }, /obj/structure/rack, /obj/item/stack/rods, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/starboard) "pxV" = ( @@ -70100,17 +70758,6 @@ }, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/exit) -"pDK" = ( -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteyellow" - }, -/area/station/science/robotics/chargebay) "pDM" = ( /obj/structure/cable/orange{ d1 = 2; @@ -70142,23 +70789,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/port) -"pEb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whiteyellow" - }, -/area/station/science/robotics/chargebay) "pEi" = ( /obj/machinery/camera{ c_tag = "Research Asteroid Hallway 1"; @@ -70242,6 +70872,16 @@ /obj/structure/railing, /turf/simulated/floor/plating/asteroid/ancient/airless, /area/mine/unexplored/cere/ai) +"pFj" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "pFl" = ( /obj/machinery/computer/pandemic, /obj/item/radio/intercom{ @@ -70686,6 +71326,23 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/disposal/north) +"pLU" = ( +/obj/machinery/door/airlock/research, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/effect/mapping_helpers/airlock/access/all/science/robotics, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkpurplefull" + }, +/area/station/science/robotics) "pMq" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/disposalpipe/segment, @@ -70786,6 +71443,7 @@ /area/station/command/office/hos) "pOf" = ( /obj/structure/closet/firecloset/full, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/fsmaint2) "pOk" = ( @@ -70855,6 +71513,17 @@ icon_state = "redyellowfull" }, /area/station/service/bar) +"pPj" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/caution/stand_clear, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkgreen" + }, +/area/station/public/quantum/docking) "pPl" = ( /obj/machinery/computer/shuttle/labor, /turf/simulated/floor/plasteel, @@ -70930,6 +71599,11 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel, /area/station/public/fitness) "pQm" = ( @@ -70980,12 +71654,12 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, -/obj/machinery/power/apc/directional/north, /obj/effect/turf_decal/caution/stand_clear, /obj/structure/cable{ d2 = 2; icon_state = "0-2" }, +/obj/machinery/power/apc/important/directional/north, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkgreen" @@ -71799,12 +72473,6 @@ icon_state = "white" }, /area/station/medical/cloning) -"qdq" = ( -/obj/structure/disposalpipe/trunk{ - color = "#954535" - }, -/turf/simulated/wall/r_wall, -/area/station/public/quantum/science) "qds" = ( /obj/machinery/light/small{ dir = 4 @@ -72055,6 +72723,14 @@ icon_state = "darkgreenfull" }, /area/station/service/hydroponics) +"qhD" = ( +/obj/structure/cable/orange{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/asmaint) "qhH" = ( /obj/structure/cable{ d1 = 2; @@ -72528,6 +73204,15 @@ icon_state = "asteroidplating" }, /area/station/maintenance/fore2) +"qnI" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/station/hallway/secondary/entry/north) "qnJ" = ( /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, @@ -73461,6 +74146,14 @@ }, /turf/simulated/floor/plating, /area/station/legal/lawoffice) +"qCo" = ( +/obj/item/radio/intercom{ + pixel_x = 28; + name = "custom placement" + }, +/obj/structure/punching_bag, +/turf/simulated/floor/carpet/cyan, +/area/station/public/fitness) "qCq" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ @@ -73743,12 +74436,6 @@ icon_state = "red" }, /area/station/security/storage) -"qHd" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/port2) "qHf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -73897,6 +74584,16 @@ icon_state = "asteroidplating" }, /area/station/maintenance/starboard) +"qIX" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/machinery/quantumpad/cere/cargo_service, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreenfull" + }, +/area/station/public/quantum/cargo) "qJm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -74057,6 +74754,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/station/command/bridge) +"qLe" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/caution/stand_clear, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkpurple" + }, +/area/station/public/quantum/science) "qLv" = ( /obj/structure/cable{ d1 = 1; @@ -74374,15 +75082,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/hallway/secondary/garden) -"qQX" = ( -/obj/structure/sign/cargo{ - pixel_y = 32 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "browncorner" - }, -/area/station/hallway/primary/fore/east) "qRb" = ( /obj/machinery/atmospherics/pipe/simple/visible/purple, /obj/effect/spawner/window/reinforced/grilled, @@ -74394,6 +75093,10 @@ icon_state = "asteroidplating" }, /area/station/hallway/spacebridge/scidock) +"qRD" = ( +/obj/effect/spawner/random_spawners/grille_maybe, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "qRI" = ( /obj/effect/landmark{ icon = 'icons/effects/spawner_icons.dmi'; @@ -74734,6 +75437,11 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/port/north) +"qZm" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "qZt" = ( /obj/structure/chair, /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -74797,12 +75505,12 @@ /turf/space, /area/station/engineering/solar/port) "rao" = ( +/obj/item/assembly/mousetrap/armed, /obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 2; + d2 = 4; + icon_state = "2-4" }, -/obj/item/assembly/mousetrap/armed, /turf/simulated/floor/plating{ icon_state = "asteroidplating" }, @@ -74991,6 +75699,12 @@ slowdown = -0.3 }, /area/station/hallway/spacebridge/dockmed) +"reB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/port2) "reS" = ( /obj/machinery/ai_status_display, /turf/simulated/mineral/ancient, @@ -75248,23 +75962,6 @@ /obj/machinery/ai_status_display, /turf/simulated/wall, /area/station/hallway/primary/central/east) -"rll" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "purplecorner" - }, -/area/station/hallway/primary/aft/east) "rlz" = ( /obj/structure/falsewall{ desc = "A huge chunk of metal used to separate rooms. Nothing odd here, sir."; @@ -75287,23 +75984,6 @@ icon_state = "neutralcorner" }, /area/station/turret_protected/aisat/interior) -"rlX" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ - dir = 8; - level = 2 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/port2) -"rma" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 8 - }, -/obj/machinery/atmospherics/portable/canister/air, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/port2) "rmf" = ( /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ @@ -75332,10 +76012,6 @@ /area/station/service/hydroponics) "rmL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/item/radio/intercom{ - pixel_x = -28; - name = "custom placement" - }, /obj/structure/disposalpipe/segment/corner{ dir = 4 }, @@ -75699,6 +76375,40 @@ icon_state = "dark" }, /area/station/engineering/break_room) +"rsu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/radio/intercom{ + pixel_y = 28; + name = "custom placement" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "purplecorner" + }, +/area/station/hallway/primary/aft/east) +"rsx" = ( +/obj/structure/sign/directions/security{ + pixel_y = 7; + dir = 8 + }, +/obj/machinery/quantumpad/cere/medbay_security, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkredfull" + }, +/area/station/public/quantum/medbay) "rsH" = ( /obj/machinery/door/airlock/maintenance{ name = "Dorm SMES Access" @@ -75860,8 +76570,12 @@ icon_state = "whiteblue" }, /area/station/medical/paramedic) +"rxd" = ( +/turf/simulated/mineral/ancient, +/area/station/public/quantum/cargo) "rxg" = ( /obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/apmaint) "rxi" = ( @@ -76258,20 +76972,6 @@ /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/station/security/range) -"rDY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/disposalpipe/segment/corner, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating{ - icon_state = "asteroidplating" - }, -/area/station/maintenance/port2) "rEb" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -76422,13 +77122,6 @@ icon_state = "white" }, /area/station/medical/medbay) -"rHM" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 8 - }, -/obj/machinery/atmospherics/portable/canister/air, -/turf/simulated/floor/plating, -/area/station/maintenance/port2) "rHQ" = ( /obj/structure/sign/security, /turf/simulated/wall, @@ -76553,6 +77246,14 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/fore/east) +"rJv" = ( +/obj/structure/cable/orange{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/asmaint) "rJE" = ( /obj/structure/sign/poster/random{ name = "random official poster"; @@ -76713,6 +77414,14 @@ icon_state = "whitebluefull" }, /area/station/medical/paramedic) +"rMg" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/science) "rMi" = ( /obj/structure/cable{ d2 = 4; @@ -77563,23 +78272,6 @@ icon_state = "cafeteria" }, /area/station/service/kitchen) -"saO" = ( -/obj/machinery/disposal/deliveryChute{ - desc = "A chute for big and small criminals alike!"; - name = "Criminal Delivery Chute" - }, -/obj/structure/disposalpipe/trunk{ - color = "#954535" - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes/red, -/turf/simulated/floor/plasteel{ - icon_state = "neutralfull" - }, -/area/station/hallway/primary/aft/west) "saR" = ( /obj/machinery/atmospherics/unary/thermomachine/freezer, /turf/simulated/floor/plasteel{ @@ -77760,6 +78452,22 @@ }, /turf/simulated/floor/wood, /area/station/command/office/ntrep) +"sec" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24; + name = "east bump" + }, +/obj/structure/sign/directions/cargo{ + dir = 4; + pixel_y = -25 + }, +/obj/effect/turf_decal/loading_area, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkred" + }, +/area/station/public/quantum/security) "sed" = ( /obj/effect/turf_decal/stripes/end{ dir = 4 @@ -78458,6 +79166,14 @@ /obj/structure/cable, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) +"sqX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkblue" + }, +/area/station/public/quantum/medbay) "sri" = ( /obj/structure/chair/stool{ dir = 8 @@ -78501,11 +79217,6 @@ /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plating, /area/station/security/range) -"srw" = ( -/obj/structure/closet/firecloset/full, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/station/hallway/primary/aft/west) "srN" = ( /obj/machinery/alarm/directional/north, /turf/simulated/floor/plasteel{ @@ -78837,6 +79548,23 @@ /obj/structure/lattice/catwalk, /turf/space, /area/mine/unexplored/cere/engineering) +"suZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel/white, +/area/station/science/robotics) "svb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -79226,6 +79954,25 @@ }, /turf/simulated/wall/r_wall, /area/station/medical/virology) +"sBQ" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24; + name = "south bump" + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "green" + }, +/area/station/public/quantum/service) "sBU" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -79271,13 +80018,8 @@ }, /area/station/public/storage/tools) "sCn" = ( -/obj/structure/cable/orange{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/wall, /area/station/maintenance/asmaint) "sCr" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -79376,6 +80118,16 @@ icon_state = "escape" }, /area/station/hallway/secondary/exit) +"sDR" = ( +/obj/machinery/quantumpad/cere/science_medbay, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull" + }, +/area/station/public/quantum/science) "sDY" = ( /obj/machinery/requests_console{ department = "Hydroponics"; @@ -79391,8 +80143,8 @@ "sEg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/junction{ - dir = 8; +/obj/structure/disposalpipe/segment{ + dir = 4; color = "#954535" }, /turf/simulated/floor/plasteel{ @@ -79948,7 +80700,6 @@ /area/station/science/robotics) "sOx" = ( /obj/machinery/economy/vending/detdrobe, -/obj/machinery/alarm/directional/north, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -80529,21 +81280,6 @@ /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plating, /area/station/hallway/primary/starboard/south) -"sYa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment/corner{ - dir = 4 - }, -/obj/item/radio/intercom{ - pixel_x = -28; - name = "custom placement" - }, -/turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "darkpurple" - }, -/area/station/science/robotics) "sYg" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -81099,6 +81835,15 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/port/east) +"tiG" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "tiI" = ( /obj/structure/disposalpipe/segment/corner, /turf/simulated/floor/plasteel{ @@ -82017,6 +82762,12 @@ /obj/structure/bed, /turf/simulated/floor/plating, /area/station/maintenance/starboard) +"txf" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/science) "txk" = ( /obj/structure/table/wood, /obj/machinery/recharger, @@ -82318,6 +83069,14 @@ icon_state = "dark" }, /area/station/engineering/gravitygenerator) +"tCo" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 4 + }, +/obj/machinery/atmospherics/portable/canister/air, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "tCV" = ( /obj/item/kirbyplants/plant22, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -82420,6 +83179,11 @@ icon_state = "darkbrown" }, /area/station/supply/office) +"tEJ" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "tEV" = ( /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -82606,6 +83370,20 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet, /area/station/hallway/primary/port/east) +"tHQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/port2) "tHV" = ( /obj/machinery/light, /obj/structure/cable{ @@ -82615,12 +83393,6 @@ }, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) -"tIt" = ( -/obj/machinery/status_display{ - layer = 4 - }, -/turf/simulated/wall/r_wall, -/area/station/science/robotics/chargebay) "tIB" = ( /obj/machinery/light/small{ dir = 1 @@ -82700,12 +83472,12 @@ }, /area/station/security/prison/cell_block/A) "tJP" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 +/obj/machinery/bluespace_beacon, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkgreen" +/turf/simulated/floor/light{ + color = "#4C763A" }, /area/station/public/quantum/docking) "tJU" = ( @@ -83103,6 +83875,19 @@ icon_state = "dark" }, /area/station/service/expedition) +"tTm" = ( +/obj/machinery/quantumpad/cere/service_cargo, +/obj/structure/sign/directions/cargo{ + pixel_y = 7; + dir = 4 + }, +/obj/effect/turf_decal/stripes/end{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkyellowfull" + }, +/area/station/public/quantum/service) "tTE" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green, @@ -83401,6 +84186,10 @@ icon_state = "solarpanel" }, /area/station/engineering/solar/starboard) +"tXE" = ( +/obj/structure/closet/firecloset/full, +/turf/simulated/floor/plating, +/area/station/hallway/primary/aft/west) "tXJ" = ( /obj/structure/cable/orange{ d1 = 2; @@ -83439,19 +84228,13 @@ }, /area/station/service/hydroponics) "tYi" = ( -/obj/structure/sign/directions/cargo{ - dir = 4; - pixel_y = -25 - }, /obj/effect/turf_decal/loading_area, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24; - name = "east bump" +/obj/structure/sign/directions/medical{ + pixel_y = -25; + dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "darkred" + icon_state = "dark" }, /area/station/public/quantum/security) "tYn" = ( @@ -84662,9 +85445,6 @@ name = "Engine Room" }, /obj/effect/mapping_helpers/airlock/access/all/engineering/general, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -84709,6 +85489,16 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/port/east) +"urD" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/chair/stool, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plasteel{ + icon_state = "cafeteria" + }, +/area/station/medical/break_room) "urK" = ( /obj/machinery/mineral/stacking_machine{ output_dir = 2; @@ -84739,15 +85529,6 @@ icon_state = "asteroidplating" }, /area/station/maintenance/port) -"uso" = ( -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/medical/break_room) "usr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -84855,6 +85636,15 @@ icon_state = "asteroidplating" }, /area/station/hallway/secondary/exit) +"uuF" = ( +/obj/structure/sign/poster/random{ + name = "random official poster"; + random_basetype = /obj/structure/sign/poster/official; + pixel_x = 32 + }, +/obj/structure/punching_bag, +/turf/simulated/floor/carpet/cyan, +/area/station/public/fitness) "uuG" = ( /obj/structure/cable, /obj/machinery/power/apc/directional/south, @@ -84926,6 +85716,11 @@ icon_state = "dark" }, /area/station/medical/morgue) +"uvN" = ( +/turf/simulated/floor/plasteel{ + icon_state = "darkbrown" + }, +/area/station/public/quantum/cargo) "uvT" = ( /turf/simulated/mineral/ancient, /area/station/maintenance/electrical_shop) @@ -85724,6 +86519,26 @@ icon_state = "whitegreen" }, /area/station/medical/virology) +"uIC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + color = "#954535" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "purplecorner" + }, +/area/station/hallway/primary/aft/east) "uIG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -85886,12 +86701,14 @@ }, /area/station/hallway/secondary/exit) "uKU" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating{ - icon_state = "asteroidplating" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/area/station/maintenance/port2) +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "green" + }, +/area/station/public/quantum/service) "uLy" = ( /obj/effect/spawner/airlock/s_to_n, /turf/simulated/mineral/ancient, @@ -86075,6 +86892,19 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/central/east) +"uOP" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "purplefull" + }, +/area/station/hallway/primary/aft/west) "uOU" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -86238,13 +87068,6 @@ /obj/machinery/alarm/directional/east, /turf/simulated/floor/plasteel, /area/station/hallway/secondary/entry/south) -"uQE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/turf_decal/delivery, -/turf/simulated/floor/plasteel/white, -/area/station/science/robotics) "uQG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -86395,18 +87218,6 @@ }, /turf/simulated/floor/plating, /area/station/command/bridge) -"uSc" = ( -/obj/structure/chair/stool, -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plasteel{ - icon_state = "cafeteria" - }, -/area/station/medical/break_room) "uSr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -86656,13 +87467,24 @@ }, /area/station/service/chapel) "uUU" = ( -/obj/machinery/recharge_station, -/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutralcorner" + icon_state = "dark" }, -/area/station/hallway/primary/starboard/north) +/area/station/public/quantum/medbay) "uUY" = ( /obj/structure/cable/orange{ d1 = 4; @@ -86983,6 +87805,11 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/station/hallway/secondary/entry/north) +"van" = ( +/turf/simulated/floor/plasteel{ + icon_state = "darkpurple" + }, +/area/station/public/quantum/science) "vap" = ( /obj/item/stack/ore/iron, /obj/effect/turf_decal/box, @@ -87020,27 +87847,6 @@ icon_state = "redyellowfull" }, /area/station/service/bar) -"vaS" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/radio/intercom{ - pixel_y = 28; - name = "custom placement" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "purplecorner" - }, -/area/station/hallway/primary/aft/east) "vaT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -87076,10 +87882,6 @@ /obj/structure/disposalpipe/junction/reversed, /turf/simulated/floor/plating, /area/station/maintenance/starboard) -"vbu" = ( -/obj/structure/closet, -/turf/simulated/floor/plating/asteroid/ancient, -/area/station/maintenance/fpmaint) "vbD" = ( /obj/machinery/atmospherics/pipe/manifold/hidden, /turf/simulated/floor/plasteel{ @@ -87121,21 +87923,6 @@ icon_state = "cafeteria" }, /area/station/science/xenobiology) -"vbZ" = ( -/turf/simulated/wall/r_wall, -/area/station/hallway/primary/aft/west) -"vcb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/directional/west, -/obj/structure/cable, -/turf/simulated/floor/plating, -/area/station/hallway/primary/aft/west) "vcj" = ( /obj/machinery/light{ dir = 4 @@ -87185,6 +87972,14 @@ icon_state = "dark" }, /area/station/service/hydroponics) +"vcD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/light{ + color = "#4C763A" + }, +/area/station/public/quantum/docking) "vcK" = ( /obj/machinery/cryopod{ dir = 2 @@ -87693,7 +88488,6 @@ }, /area/station/hallway/secondary/entry/west) "vmU" = ( -/obj/machinery/alarm/directional/east, /obj/item/kirbyplants/plant25, /turf/simulated/floor/plasteel{ dir = 6; @@ -87942,6 +88736,12 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/fore/west) +"vpQ" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/docking) "vpS" = ( /obj/effect/spawner/window/reinforced/grilled, /obj/structure/cable/orange{ @@ -87987,19 +88787,13 @@ /turf/simulated/floor/plating, /area/station/maintenance/disposal/north) "vqp" = ( -/obj/effect/turf_decal/stripes/end{ - dir = 4 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24; - name = "east bump" - }, -/obj/machinery/quantumpad/cere/arrivals_cargo{ - name = "quantum pad" +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, +/obj/machinery/quantumpad/cere/arrivals_service, /turf/simulated/floor/plasteel{ - icon_state = "darkyellowfull" + icon_state = "whitegreenfull" }, /area/station/public/quantum/docking) "vqN" = ( @@ -88509,6 +89303,22 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/disposal/south) +"vxP" = ( +/obj/machinery/camera{ + c_tag = "Research Atmospherics Checkpoint"; + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 10; + level = 2 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/station/hallway/primary/aft/west) "vxS" = ( /obj/structure/closet/secure_closet/roboticist, /turf/simulated/floor/plasteel{ @@ -88525,8 +89335,9 @@ }, /area/station/service/barber) "vyk" = ( -/obj/structure/disposalpipe/segment/corner, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/port2) "vyI" = ( @@ -88587,19 +89398,6 @@ icon_state = "bcircuit" }, /area/station/turret_protected/ai) -"vzH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5; - level = 2 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/station/hallway/primary/aft/west) "vzL" = ( /obj/structure/cable/orange{ d1 = 1; @@ -88612,6 +89410,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/station/maintenance/starboard) +"vzP" = ( +/obj/structure/disposalpipe/segment/corner, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/port2) "vAg" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -89167,18 +89969,6 @@ "vHw" = ( /turf/simulated/floor/plating, /area/station/public/vacant_office) -"vHF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/turf/simulated/floor/plasteel/white, -/area/station/science/robotics) "vHH" = ( /turf/simulated/floor/plating, /area/station/maintenance/starboard) @@ -90000,9 +90790,6 @@ d2 = 8; icon_state = "1-8" }, -/obj/machinery/light{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -90259,10 +91046,32 @@ icon_state = "dark" }, /area/station/maintenance/disposal) +"vZz" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/port2) "vZN" = ( /obj/machinery/light, /turf/simulated/floor/plasteel, /area/station/public/fitness) +"wac" = ( +/obj/machinery/quantumpad/cere/service_arrivals, +/obj/structure/sign/directions/evac{ + pixel_y = 7; + dir = 4 + }, +/obj/effect/turf_decal/stripes/end, +/turf/simulated/floor/plasteel{ + icon_state = "darkgreenfull" + }, +/area/station/public/quantum/service) "waf" = ( /obj/machinery/door/airlock/security/glass{ name = "Security Office" @@ -90318,6 +91127,15 @@ icon_state = "asteroidplating" }, /area/station/maintenance/starboard) +"wbd" = ( +/obj/effect/landmark/spawner/nukedisc_respawn, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "wbe" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -90709,6 +91527,31 @@ icon_state = "whitepurple" }, /area/station/science/xenobiology) +"wij" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/orange{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment/corner{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "redcorner" + }, +/area/station/hallway/primary/fore/west) "wim" = ( /obj/machinery/light, /obj/structure/sign/electricshock{ @@ -91134,6 +91977,20 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/port/south) +"wnO" = ( +/obj/machinery/power/apc/directional/north, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable/orange{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whiteyellow" + }, +/area/station/science/robotics/chargebay) "woa" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -91164,16 +92021,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/maintenance/maintcentral) -"woL" = ( -/obj/structure/sign/directions/security{ - dir = 8; - pixel_y = 24 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "browncorner" - }, -/area/station/hallway/primary/fore/east) "woQ" = ( /obj/effect/spawner/window/reinforced/plasma/grilled, /obj/structure/cable{ @@ -91417,6 +92264,9 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/starboard/south) +"wse" = ( +/turf/simulated/mineral/ancient, +/area/station/public/quantum/service) "wst" = ( /obj/machinery/iv_drip, /obj/structure/closet/crate/freezer/iv_storage, @@ -91526,6 +92376,19 @@ dir = 4 }, /area/station/medical/reception) +"wtx" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkpurple" + }, +/area/station/science/robotics) "wty" = ( /obj/effect/spawner/airlock/e_to_w, /turf/simulated/wall, @@ -92967,6 +93830,14 @@ icon_state = "white" }, /area/station/medical/medbay) +"wMQ" = ( +/obj/machinery/door/airlock/multi_tile/glass, +/obj/effect/mapping_helpers/airlock/autoname, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/public/quantum/docking) "wMV" = ( /obj/structure/cable{ d1 = 4; @@ -93543,6 +94414,21 @@ icon_state = "tranquillite" }, /area/station/service/mime) +"wXc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/cyan, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/station/hallway/primary/aft/west) "wXm" = ( /obj/structure/cable/orange{ d1 = 1; @@ -93646,8 +94532,8 @@ /turf/simulated/floor/plating, /area/station/maintenance/apmaint) "wZF" = ( -/obj/machinery/alarm/directional/west, /obj/structure/reagent_dispensers/fueltank, +/obj/machinery/alarm/directional/west, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whiteyellow" @@ -93950,6 +94836,17 @@ icon_state = "whiteyellow" }, /area/station/medical/reception) +"xdr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" + }, +/area/station/maintenance/port2) "xdu" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -93991,9 +94888,6 @@ icon_state = "darkredcorners" }, /area/station/security/brig) -"xdy" = ( -/turf/simulated/floor/plating, -/area/station/maintenance/asmaint) "xdJ" = ( /obj/structure/disposalpipe/segment, /obj/effect/spawner/window/reinforced/polarized{ @@ -94110,17 +95004,11 @@ /turf/space, /area/station/engineering/solar/starboard) "xho" = ( -/obj/structure/punching_bag, -/obj/structure/sign/poster/random{ - name = "random official poster"; - pixel_y = 32; - random_basetype = /obj/structure/sign/poster/official - }, -/obj/item/radio/intercom{ - pixel_x = 28; - name = "custom placement" +/obj/structure/closet/boxinggloves, +/obj/machinery/light{ + dir = 4 }, -/turf/simulated/floor/carpet/cyan, +/turf/simulated/floor/plasteel, /area/station/public/fitness) "xhr" = ( /obj/structure/cable/orange{ @@ -94230,6 +95118,7 @@ "xiV" = ( /obj/structure/closet/emcloset, /obj/effect/decal/cleanable/cobweb, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/port) "xja" = ( @@ -94335,24 +95224,6 @@ /obj/effect/spawner/window/reinforced/grilled, /turf/simulated/floor/plating, /area/station/turret_protected/aisat/interior/secondary) -"xjO" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable/orange{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel/white, -/area/station/science/robotics) "xjX" = ( /obj/item/radio/intercom{ pixel_y = 28; @@ -94407,6 +95278,18 @@ "xla" = ( /turf/simulated/wall/r_wall, /area/station/security/prison/cell_block/A) +"xlF" = ( +/obj/structure/window/reinforced/polarized, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/station/science/robotics) "xlM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/light{ @@ -94507,35 +95390,22 @@ icon_state = "neutralfull" }, /area/station/hallway/primary/port/south) -"xnZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +"xod" = ( /obj/structure/cable/orange{ - d1 = 4; + d1 = 2; d2 = 8; - icon_state = "4-8" + icon_state = "2-8" }, -/obj/machinery/door/poddoor/shutters{ - dir = 8; - id_tag = "MechbayShutters2"; - name = "Mech Bay Shutters" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/door/firedoor, -/obj/machinery/door_control{ - id = "MechbayShutters2"; - name = "Mechbay Shutters"; - pixel_y = -24; - req_access_txt = "29" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "ramptop" +/turf/simulated/floor/plating{ + icon_state = "asteroidplating" }, -/area/station/science/robotics/chargebay) +/area/station/maintenance/port2) "xof" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -94894,6 +95764,23 @@ icon_state = "darkred" }, /area/station/security/checkpoint/secondary) +"xwy" = ( +/obj/effect/turf_decal/loading_area{ + dir = 1 + }, +/obj/structure/sign/directions/cargo{ + dir = 1; + pixel_y = 39 + }, +/obj/machinery/camera{ + c_tag = "Docking Quantum Pad"; + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkgreen" + }, +/area/station/public/quantum/docking) "xwI" = ( /turf/simulated/floor/engine{ slowdown = -0.3 @@ -94961,6 +95848,10 @@ /obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plating/asteroid/ancient, /area/station/maintenance/starboard) +"xxC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plasteel/white, +/area/station/science/robotics) "xxK" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -95277,6 +96168,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -95291,15 +96185,6 @@ }, /turf/simulated/floor/plasteel/white, /area/station/science/robotics/chargebay) -"xBE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/science/robotics) "xBI" = ( /obj/machinery/door/airlock/public/glass{ name = "Walkway" @@ -95531,6 +96416,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/sign/cargo{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -95547,6 +96435,21 @@ icon_state = "asteroidplating" }, /area/station/maintenance/gambling_den) +"xEX" = ( +/obj/effect/spawner/random_spawners/grille_maybe, +/turf/simulated/floor/plating/asteroid/ancient, +/area/station/maintenance/asmaint) +"xFn" = ( +/obj/structure/table, +/obj/item/mmi/robotic_brain, +/obj/item/reagent_containers/glass/beaker/large, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "darkpurple" + }, +/area/station/science/robotics) "xFJ" = ( /obj/structure/cable/orange{ d1 = 2; @@ -95838,19 +96741,6 @@ }, /turf/space, /area/station/engineering/solar/starboard/aft) -"xJO" = ( -/obj/structure/sign/directions/security{ - dir = 1; - pixel_y = -24 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - color = "#954535" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/station/hallway/primary/fore/west) "xJW" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -95968,20 +96858,10 @@ }, /area/station/hallway/secondary/entry/north) "xMA" = ( -/obj/structure/disposalpipe/segment{ - color = "#954535" - }, -/obj/machinery/door/airlock/security/glass{ - name = "Criminal Delivery Chute" - }, -/obj/effect/mapping_helpers/airlock/access/all/security/doors, -/obj/effect/turf_decal/stripes, -/obj/effect/turf_decal/stripes/red, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutralcorner" + icon_state = "dark" }, -/area/station/hallway/primary/aft/west) +/area/station/public/quantum/science) "xME" = ( /obj/machinery/light{ dir = 1 @@ -96183,22 +97063,6 @@ "xQc" = ( /turf/simulated/wall/r_wall, /area/station/public/quantum/science) -"xQj" = ( -/obj/structure/table, -/obj/item/mmi/robotic_brain, -/obj/structure/cable/orange{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/item/reagent_containers/glass/beaker/large, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "darkpurple" - }, -/area/station/science/robotics) "xQl" = ( /obj/effect/landmark/start/paramedic, /turf/simulated/floor/plasteel{ @@ -96317,18 +97181,6 @@ }, /turf/simulated/floor/plating, /area/station/supply/miningdock) -"xRU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/window/reinforced/polarized, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/science/robotics) "xSg" = ( /obj/effect/spawner/window/reinforced/polarized/grilled{ id = "rd" @@ -96586,7 +97438,6 @@ /area/station/security/prison/cell_block/A) "xVY" = ( /obj/structure/table/wood, -/obj/structure/table/wood, /obj/item/eftpos, /turf/simulated/floor/carpet/black, /area/station/service/chapel) @@ -96641,6 +97492,10 @@ icon_state = "purplecorner" }, /area/station/hallway/primary/aft/west) +"xWx" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/mineral/ancient, +/area/station/maintenance/port2) "xWF" = ( /obj/structure/sign/security, /turf/simulated/wall, @@ -96663,10 +97518,6 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/central/west) -"xXq" = ( -/obj/structure/closet/firecloset/full, -/turf/simulated/floor/plating, -/area/station/maintenance/asmaint) "xXt" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable{ @@ -96812,10 +97663,6 @@ }, /turf/simulated/floor/transparent/glass/reinforced, /area/station/maintenance/asmaint) -"xZM" = ( -/obj/structure/sign/security, -/turf/simulated/wall/r_wall, -/area/station/hallway/primary/aft/west) "xZN" = ( /obj/structure/cable/orange{ d1 = 1; @@ -97248,24 +98095,6 @@ icon_state = "wood-broken" }, /area/station/maintenance/asmaint) -"yhz" = ( -/obj/structure/window/reinforced/polarized, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/mecha_parts/core, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stock_parts/cell/high/plus, -/obj/item/stock_parts/cell/high/plus, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/station/science/robotics) "yhA" = ( /obj/structure/cable{ d1 = 4; @@ -97431,6 +98260,13 @@ icon_state = "neutralcorner" }, /area/station/hallway/primary/fore/west) +"yjz" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/station/maintenance/port2) "yjI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/engine{ @@ -107887,7 +108723,7 @@ xJa xJa rUo nxA -vbu +bzh xJa cRv rNK @@ -107985,7 +108821,7 @@ vtY uCK vtY uCK -uCK +eTI vtY ccW ccW @@ -110044,7 +110880,7 @@ uCK uCK uCK uCK -uCK +bWG vtY vtY ccW @@ -110739,7 +111575,7 @@ rNK rNK pXy pXy -ccx +ntf eCI aue uaW @@ -110819,7 +111655,7 @@ vtY vtY uCK uCK -neV +taQ vtY ccW rWw @@ -114834,7 +115670,7 @@ dlq drb bWx iEe -oTv +bNX kgd bKI ugt @@ -114936,7 +115772,7 @@ gux pdh pcf wAO -fPc +rMg mqT mOX jaK @@ -115094,7 +115930,7 @@ pZt hGp nla mmY -hYD +hPy fSn mXS abE @@ -115348,11 +116184,11 @@ aEn aWl bWx iEe -oTv +cjR onY -iyj +fBT tYi -sed +bmb mXS abE rNK @@ -115446,11 +116282,11 @@ oTn dIi uXY itm -xIP -mqW -pSN -vmU -fPc +sDR +nVd +eGC +van +lyI mSq rrN tVm @@ -115604,13 +116440,13 @@ cYr xla sZf aWA -xJO -kvD -cjR -cjR -cjR -bgb -cjR +iEe +pqq +ibX +jzf +hPy +fSn +mXS abE abE lzH @@ -115703,11 +116539,11 @@ pMB xIr fEl lyI -lyI -lyI -xQc -qdq -eEI +qLe +xMA +eGC +van +rMg cSI xEd rWs @@ -115862,13 +116698,13 @@ xla aVy bWx iEe -ice -cWq -hEQ -iGj -abW -cRv -cRv +lBk +nRs +fmA +sec +sed +mXS +abE abE rNK rNK @@ -115959,12 +116795,12 @@ tPJ odt rQS iLV -vcb -vzH -srw -vbZ -saO -xMA +lyI +xIP +mqW +pSN +vmU +txf ldf kCg sEg @@ -116118,13 +116954,13 @@ hyJ aEn drB bWx -aeO -fRa -cWq -cWq -iGj -abW -abW +iEe +kvD +cjR +cjR +cjR +bgb +cjR cRv abE rNK @@ -116215,13 +117051,13 @@ rWw nfF eqH eqH -etF -pMB -cmK -hJh -vbZ -vbZ -xZM +hDx +lyI +lyI +lyI +xQc +xQc +xQc cSI xEd lxP @@ -116376,11 +117212,11 @@ xla drB bWx iEe -dxD -dxD -dxD -dxD -dxD +ice +cWq +hEQ +abW +abW abW cRv abE @@ -116472,11 +117308,11 @@ rWw rWw rWw rWw -rWw -rWw +vxP hhd -fil -fil +hhd +wXc +evm fil ksi jGC @@ -116632,12 +117468,12 @@ xla goe drB haT -iEe -iiN -dyJ -nHy -evg -emw +hGf +fRa +cWq +cWq +abW +abW abW cRv abE @@ -116728,14 +117564,14 @@ cdb cdb cdb cdb -wiE -wiE -wiE -wiE -wiE -wiE -wiE -wiE +rWw +vkl +tXE +chQ +bNZ +pMB +kJp +vkl wMV xEd lxP @@ -116890,11 +117726,11 @@ aEn drB bWx iEe -qwd -pPN -fvV -dkb -emw +dxD +dxD +dxD +dxD +dxD abW cRv cRv @@ -116985,13 +117821,13 @@ cdb cdb cdb cdb -iWe -ceb -ceB -wZF -sLH -qAH -ixR +wiE +wiE +wiE +wiE +wiE +wiE +wiE wiE ete ciB @@ -117147,11 +117983,11 @@ xla drG bWx iEe -keF -rHk -ujb -etG -lKg +iiN +dyJ +nHy +evg +emw abW abW cRv @@ -117243,13 +118079,13 @@ cdb cdb cdb iWe -aHN -kDJ -xAR -wGS -kMq -qbf -uTv +ceb +ceB +wZF +sLH +qAH +ixR +wiE grQ xEd jEr @@ -117403,12 +118239,12 @@ xla xla drG dMP -lyC -dxD -oac -iGG -etG -aan +iEe +qwd +pPN +fvV +dkb +emw abW abW cRv @@ -117500,16 +118336,16 @@ cdb cdb cdb iWe -eTg -fxp -xBB -ksg -fxp -qni -nDp +aHN +kDJ +xAR +wGS +kMq +qbf +uTv xWu xEd -jEr +ifz uMr xOL frh @@ -117659,13 +118495,13 @@ tkd dfi peB oms -qHk -wDC -jUP -kTq -rzy -sIe -awL +bWx +iEe +keF +rHk +ujb +etG +lKg abW abW cRv @@ -117690,7 +118526,7 @@ vkc bQh eMW bRg -cFF +lPe pSW ktf uzy @@ -117753,18 +118589,18 @@ cdb cdb cdb cdb -rWw -rWw -rWw -wiE -jCg -pDK -pEb -lqw -kTN -piu -wiE -dHU +cdb +cdb +cdb +iWe +eTg +fxp +xBB +ksg +fxp +qni +nDp +wMV xEd qTc jRs @@ -117914,15 +118750,15 @@ cLF cNR cTp dfF -ebB +fMx drL dNw xKD dxD -sOx -qHH -bPO -dxG +iQr +iGG +etG +aan abW cRv cRv @@ -117947,7 +118783,7 @@ xru xru cFF cFF -cFF +lPe cFF uvv cFF @@ -118011,16 +118847,16 @@ cdb cdb rWw rWw -ccW -ccW -wiE -wiE -jUA -xnZ -wiE +rWw +rWw wiE +wnO +hxR +fna +lqw +kTN +piu wiE -tIt iqk xEd dnS @@ -118172,14 +119008,14 @@ cOh utC dgx xla -dsd -bWx -iEe -jmh -dxD -dxD -dxD -dxD +orp +qHk +wDC +iTt +nLs +rzy +sIe +awL abW cRv abE @@ -118192,19 +119028,19 @@ aXn aXn aXn aXn -cEM +aXn siY gtD nIF kWu -jsY -nOx +nJA +cFF xru xru xru cFF cFF -cFF +lPe cFF cFF cFF @@ -118270,14 +119106,14 @@ rWw ccW ccW ccW -vFW -iHA -uQE -jWb -fAm -sYa -mNc -fZs +wiE +wiE +hFh +lEW +wiE +wiE +wiE +wiE ovQ jTe dEz @@ -118428,15 +119264,15 @@ ncQ cOh utC dgF -aWX -wAb +jCx +wij bWx tyT -iGj -abW -abW -abW -abW +dxD +sOx +qHH +bPO +dxG cRv cRv abE @@ -118449,21 +119285,21 @@ aXn aXn aXn aXn -cEM -cEM -rDY +aXn +aXn +lPg igo kWu -kWu -kWu -kWu -tYu -kWu +lWR +uuF +qCo +cFF +afe xho -nJA -gEb -nJA -nJA +cFF +lPe +cFF +cFF llQ chH pow @@ -118528,13 +119364,13 @@ ccW ccW ccW vFW -iuX -jWP -xjO -eCT -xQj -fTG -oQD +nzH +oEl +suZ +kYN +gGE +pLU +uOP dWM idI xOc @@ -118689,11 +119525,11 @@ xla dsi dNN jeS -iGj -abW -abW -abW -abW +jmh +dxD +dxD +dxD +dxD cRv abE abE @@ -118707,20 +119543,20 @@ aXn aXn aXn aXn -cEM +hcI nDE -lPg -iKs -kUN -fSm -gaZ -ncn -kWu +tHQ kWu kWu kWu kWu +tYu kWu +wse +ePI +lEh +ePI +wse kWu kWu kWu @@ -118784,14 +119620,14 @@ ccW ccW ccW ccW -jJc -sOt -oUw -nNO -qWS -heU -wOH -alw +vFW +jIO +xxC +nOM +tiG +xFn +oJz +jRs vBs xEd jEr @@ -118963,24 +119799,24 @@ aXn aXn aXn aXn -aXn -cEM mTc wkS -ncn -ncn -ncn +nIF +xod +cLo +qxQ +lHU oAw -mqw -mqw -mqw +ncn +cEM +wse uKU fru +sBQ +wse ghr -nEk -ghr -nEk -nNm +dQZ +dQZ spx aZF boJ @@ -119042,17 +119878,17 @@ ccW ccW ccW jJc -lRI -wbe -vHF +sOt +oUw +eDf qWS -wUo -ifg -jRs +heU +wOH +alw xWu xEd jEr -cGd +dOm wIq uMr wIq @@ -119220,23 +120056,23 @@ aXn aXn aXn aXn -aXn -aXn -cEM +mTc +nIF +nIF +xdr cEM cEM -aZF -aYC -ncn -oUg -ncn -ncn -nIF -otN -dQZ -qxQ -qxQ -ghP +ieP +hoF +xWx +xWx +wse +lfG +bGP +awA +wse +hzj +qZm vyk wIm nOU @@ -119299,16 +120135,16 @@ ccW ccW ccW jJc -utp -wpR -gZF -drC -puk -npb -npb -aZQ -teH -pvV +lRI +wbe +hML +qWS +wUo +ifg +jRs +xWu +xEd +jEr cGd uxn nWA @@ -119477,23 +120313,23 @@ aXn aXn aXn aXn -aXn -aXn -aXn -aXn -aXn -cEM -cEM -cEM aZF +lPR +nIF +xdr cEM -cEM -cEM -lMj -aZF -aZF -aZF -gsS +jRW +qzg +mxh +spx +tCo +wse +aoh +bGP +ktA +wse +pFj +tEJ bBI ssq wxX @@ -119556,17 +120392,17 @@ ccW ccW ccW jJc -uRn -wuC -xBE -uCo -fXR -nTV -epr -rll -uuV -gPL -dOm +utp +wpR +wtx +drC +puk +npb +npb +aZQ +teH +pvV +cGd lmA kMZ giH @@ -119735,25 +120571,25 @@ aXn aXn aXn aXn -aXn -aXn -aXn -aXn -aXn -aXn -aXn -aXn -aXn -aXn +ncn +nIF +xdr cEM -mXA +oTz fNZ -kzd -rlX +wbd +iQb dOJ +wse +tTm +mXA +wac +wse +kmY +dQZ pQE ssE -cSR +aZF hfx hRg dmT @@ -119813,16 +120649,16 @@ ccW ccW ccW jJc -vgV +uRn +wuC +aZU uCo -xRU -xNF -jhA -shk -npb -cia -ciG -gPL +fXR +nTV +epr +bXp +uuV +iOG dXV sOr clY @@ -119990,24 +120826,24 @@ hUU hUU hUU hUU -hUU -hUU -aXn -aXn -aXn -aXn -aXn -aXn -aXn aXn aXn aXn +nIF +xdr cEM -cxI -qzg -qHd -rma -rHM +lMj +aZF +aZF +aZF +gsS +wse +wse +wse +wse +wse +kmY +qxQ rQk iwA cSR @@ -120070,13 +120906,13 @@ ccW ccW ccW jJc -vtz -uCo -yhz -uCo +vgV uCo -rAM -hVS +xlF +xNF +jhA +shk +npb lnY mBQ suu @@ -120246,25 +121082,25 @@ rNK rNK hUU lzH -lzH -lwN -hUU -hUU hUU hUU hUU hUU -aXn -aXn -aXn -aXn -aXn -cEM -cEM -cEM -cEM +ncn +vZz +reB +kZd +qRD +aXF +qxQ +otN +qxQ cEM cEM +qxQ +nIF +xdr +qxQ aZF cPN yiS @@ -120327,12 +121163,12 @@ ccW ccW ccW jJc -vwo -wRa -nhi -jkk -ouB -sLj +vtz +uCo +bty +uCo +uCo +rAM hVS cia ciG @@ -120503,25 +121339,25 @@ rNK rNK rNK rNK -rNK -aVN -rNK -rNK -rNK -rNK +lzH +mic rNK hUU -aXn -aXn -aXn -aXn -aXn -hUU -hUU -hUU -hUU -hUU hUU +vzP +huq +huq +nEk +nEk +nEk +lHz +jDV +vyk +kUN +kUN +kUN +fbf +aZF aZF cPN yiS @@ -120584,12 +121420,12 @@ ccW ccW ccW jJc -vxS -fyR -tXf -phx -jkh -kMa +vwo +wRa +mml +jkk +ouB +sLj hVS cia sWc @@ -120760,25 +121596,25 @@ rNK rNK rNK rNK -aVN -rNK -rNK -rNK rNK +aVN rNK rNK hUU -hUU -aXn aXn aXn hUU hUU +qxQ +qxQ +dYK +dQZ +yjz +qxQ +nIF +aXn hUU hUU -bhO -bhO -bhO qKh cPN dcw @@ -120840,14 +121676,14 @@ rWw ccW ccW ccW -qeq -qeq -qeq -qeq -qeq -qeq -qeq -npb +jJc +vxS +fyR +tXf +phx +jkh +kMa +hVS cia ciG vlI @@ -121017,24 +121853,24 @@ rNK rNK rNK rNK +aVN rNK rNK rNK -rNK -rNK -rNK -rNK +hUU +hUU +hUU mic hUU hUU aXn +aXn +hUU +aZF hUU hUU -rNK -rNK -bhO mic -rNK +hUU rNK euP cPN @@ -121097,19 +121933,19 @@ rWw ccW ccW ccW -ccW -ccW -ccW -ccW -ccW -ccW -ccW -izC +qeq +qeq +qeq +qeq +qeq +qeq +qeq +npb chX ciG gPL pQN -sKh +wQl nta cGd dzs @@ -121287,8 +122123,8 @@ hUU hUU hUU hUU -rNK -rNK +hUU +hUU rNK lzH rNK @@ -121359,9 +122195,9 @@ ccW ccW ccW ccW -ccW -ccW -izC +dXV +dXV +dXV chY ciG fIE @@ -121616,12 +122452,12 @@ ccW ccW ccW ccW -ccW -ccW -fpn -cia -ciG -pRd +dXV +iky +dtv +uIC +gIk +lQy pQN sKh nta @@ -121873,9 +122709,9 @@ ccW ccW ccW ccW -ccW -ccW -fpn +dXV +dXV +kJM nxX irU sOk @@ -122132,7 +122968,7 @@ ccW ccW ccW ccW -izC +fpn cib upM pRd @@ -122389,8 +123225,8 @@ ful ful ccW ccW -izC -vaS +fpn +cia ciG gPL dXD @@ -122647,7 +123483,7 @@ ful ful ful ful -cia +rsu ciG gPL nwv @@ -123422,7 +124258,7 @@ njR ciG gPL pQN -fYD +tnj clq cGd xPU @@ -124313,7 +125149,7 @@ uEU abW abW wDs -bbc +ccV rVx qLN aJp @@ -129299,7 +130135,7 @@ bWU bXA bYe bDR -kYJ +kyo oqB cRo kzf @@ -140818,11 +141654,11 @@ rNK rNK fMl aZM -aZM -aZM -aZM -aZM -aZM +gtw +gtw +gtw +gtw +gtw fMl lzH oyN @@ -141075,11 +141911,11 @@ rNK fMl fMl aZM -aZM -aZM -aZM -aZM -aZM +gtw +rsx +fva +llW +gtw fMl vXn scE @@ -141332,12 +142168,12 @@ fMl fMl aZM aZM -aZM -aZM -aZM -aZM -aZM -aZM +gtw +gVR +arE +hMB +gtw +fMl wQz kNz qUu @@ -141589,12 +142425,12 @@ fMl aZM aZM aZM -aZM -aZM -aZM -aZM -aZM -aZM +gtw +mYs +kBs +sqX +gtw +fMl vXn scG enD @@ -141846,12 +142682,12 @@ fMl aZM aZM aZM -aZM -tnq -tnq -tnq -aZM -aZM +gtw +aqR +kmd +oqR +gtw +fMl nVQ sXL stK @@ -142103,11 +142939,11 @@ aZM aZM aZM aZM -tnq -tnq +gtw +lkz uUU -tnq -tnq +lkz +gtw nVQ nVQ sdo @@ -142360,15 +143196,15 @@ aZM aZM aZM aZM -tnq +eAu pHb -qiV +pqr qiV qIC rmL rLb sdy -eWl +bff kDq sUA tFb @@ -142412,7 +143248,7 @@ xwI xwI fYG cWU -cWU +qnI wkP aXr mBh @@ -142436,7 +143272,7 @@ wlD vLS kUL qQb -kYz +aOR kYz rYf jdC @@ -142928,19 +143764,19 @@ xoU lrx lrx lrx -cIJ +lrx qCD lrx oBG dSV cEi -dxM +jnH kis -cvq -dxM -dxM dxM dxM +fIL +khH +khH cvq dxM cJW @@ -143194,10 +144030,10 @@ lmF wPr aXn vpJ -vpJ -vpJ cGc vpJ +neh +nvX vpJ vpJ vpJ @@ -143453,9 +144289,9 @@ aXn aXn aXn vpJ +omG +omG vpJ -xdy -xdy wJY moj euL @@ -143466,7 +144302,7 @@ cfh eJd rrt hNb -pLr +wMQ wxE djw sla @@ -143609,11 +144445,11 @@ lCC lCC lCC lCC -lzH -rNK -rNK -rzh -rzh +cHq +uqC +uqC +uqC +cHq dnA aAs lBG @@ -143710,10 +144546,10 @@ aXn aXn aXn wLr -xXq +vpJ sCn -mJk -mJk +vpJ +vRX rao mLO nrP @@ -143865,14 +144701,14 @@ frm frm alc alc -lCC -lCC -rzh -rzh -rzh -rzh +alc cHq -qQX +cMS +vQf +cWX +dkG +lIf +lxo fmI dmX aRx @@ -143968,19 +144804,19 @@ aXn aXn vpJ dJb -cdG -imG -vRX vRX +rJv +mJk +mLO vWF vpJ vWF pus vqp -kzS +nlJ tJP kQz -pLr +nFW daX djw fEC @@ -144122,14 +144958,14 @@ fri dEn alc alc -lCC -cHq -uqC -uqC -uqC -cHq +alc +rxd +eAQ kaS -woL +nxZ +uvN +lfs +lxo fmI vBk aRx @@ -144225,19 +145061,19 @@ aXn aXn wLr ogk -cdG -imG +rIn +qhD vWF vWF vWF vWF vWF nFW -nFW -nFW -nFW -nFW -nFW +pPj +noC +vcD +cLc +wMQ ckr ckW lXp @@ -144380,11 +145216,11 @@ qzy frm alc alc -cHq -cMS -vQf -cWX -dkG +rxd +qIX +ego +ipI +uvN cMQ lxo fmI @@ -144489,13 +145325,13 @@ vWF vWF vWF vWF -vWF -vWF -vWF -vpJ -omG -noC -aEv +fOb +kbj +xwy +hdX +cKU +vpQ +daX djw xRa xMQ @@ -144744,14 +145580,14 @@ vWF vWF vWF vWF -vRX -gpR cfH -vWF -vWF -vpJ -omG -neh +gpR +fOb +fOb +fOb +nFW +nFW +nFW mjG djw jUc @@ -144899,7 +145735,7 @@ cNa feN cXa dkK -cMQ +lfs lxo fmI bDQ @@ -145006,8 +145842,8 @@ mJk mJk mJk cdj -vpJ -vpJ +vRX +xEX vpJ dkc djw @@ -146016,7 +146852,7 @@ iJa imG imG imG -imG +gge aXn imG vRX @@ -147785,8 +148621,8 @@ bHr uhF mqe dYc -uso -uSc +oHm +urD xQF uhF nDq @@ -148041,8 +148877,8 @@ xeq cdI uhF owY -gqG -jOU +tKE +tKE fLp cnW gxB @@ -150626,7 +151462,7 @@ itf dCS xAV ozK -gFg +aUU wyL jeB hpB @@ -151902,7 +152738,7 @@ mOC frg lWu gSQ -gSQ +alq itf itf gSQ diff --git a/_maps/map_files/stations/deltastation.dmm b/_maps/map_files/stations/deltastation.dmm index 548b6ba2425d..37a1dedd2893 100644 --- a/_maps/map_files/stations/deltastation.dmm +++ b/_maps/map_files/stations/deltastation.dmm @@ -10845,7 +10845,6 @@ /area/station/maintenance/incinerator) "aLk" = ( /obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment, /obj/effect/turf_decal/stripes/line{ dir = 8 }, @@ -11828,7 +11827,6 @@ }, /area/station/service/bar) "aOd" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 }, @@ -18926,6 +18924,7 @@ "bgB" = ( /obj/effect/turf_decal/delivery/hollow, /obj/structure/table, +/obj/item/reagent_containers/condiment/enzyme, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -19247,6 +19246,13 @@ /area/station/hallway/primary/fore/south) "bhH" = ( /obj/machinery/smartfridge, +/obj/effect/mapping_helpers/airlock/windoor/access/all/service/hydroponics{ + dir = 8 + }, +/obj/machinery/door/window/reinforced/reversed{ + dir = 8; + name = "kitchen ingredient storage" + }, /turf/simulated/floor/plasteel, /area/station/service/kitchen) "bhI" = ( @@ -19325,6 +19331,7 @@ "bhR" = ( /obj/effect/turf_decal/delivery/hollow, /obj/structure/table, +/obj/item/food/snacks/mint, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -20748,8 +20755,6 @@ /turf/simulated/floor/plasteel, /area/station/service/kitchen) "blk" = ( -/obj/item/food/snacks/mint, -/obj/item/reagent_containers/condiment/enzyme, /obj/machinery/reagentgrinder, /obj/effect/turf_decal/delivery/hollow, /turf/simulated/floor/plasteel, @@ -70035,9 +70040,6 @@ /area/station/command/office/hop) "gFa" = ( /obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/turf_decal/delivery, /obj/structure/disposalpipe/segment{ dir = 4 @@ -82618,15 +82620,6 @@ }, /area/station/security/prison/cell_block) "ont" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, diff --git a/_maps/map_files/stations/metastation.dmm b/_maps/map_files/stations/metastation.dmm index 1d78a0d6871b..2876dab601b0 100644 --- a/_maps/map_files/stations/metastation.dmm +++ b/_maps/map_files/stations/metastation.dmm @@ -8313,7 +8313,7 @@ dir = 4 }, /obj/machinery/camera{ - c_tag = "Cargo - Quatermaster"; + c_tag = "Cargo - Quartermaster"; dir = 1 }, /turf/simulated/floor/plasteel{ @@ -71465,20 +71465,6 @@ /obj/effect/landmark/damageturf, /turf/simulated/floor/plating, /area/station/maintenance/apmaint) -"oDZ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/port) "oEe" = ( /obj/machinery/atmospherics/trinary/filter{ dir = 4; @@ -83619,7 +83605,6 @@ /area/station/public/fitness) "tHm" = ( /obj/structure/table/reinforced, -/obj/structure/table/reinforced, /obj/item/gavelblock, /obj/item/gavelhammer, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -92078,7 +92063,6 @@ /area/station/hallway/secondary/exit) "xtZ" = ( /obj/structure/table, -/obj/structure/table, /obj/item/wrench, /obj/item/crowbar, /obj/item/radio/intercom{ @@ -115251,7 +115235,7 @@ nBj cgt cdT wfa -oDZ +bqQ cCj cdT kNJ diff --git a/_maps/map_files220/RandomZLevels/gate_lizard.dmm b/_maps/map_files220/RandomZLevels/gate_lizard.dmm index b4d2a9e52503..fbc224ade2fc 100644 --- a/_maps/map_files220/RandomZLevels/gate_lizard.dmm +++ b/_maps/map_files220/RandomZLevels/gate_lizard.dmm @@ -95,9 +95,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "ahk" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) @@ -168,9 +166,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) "akj" = ( @@ -536,9 +532,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "aMI" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) "aNk" = ( @@ -693,7 +687,6 @@ name = "dead spider" }, /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 1 }, /turf/simulated/floor/plasteel{ @@ -726,9 +719,7 @@ "bdd" = ( /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "bdt" = ( @@ -769,9 +760,7 @@ /turf/simulated/floor/indestructible, /area/awaymission/jungle_planet/inside/complex) "bgE" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/structure/flora/tree/jungle, /obj/effect/light_emitter{ light_color = "#FFFFFF"; @@ -855,8 +844,7 @@ /area/awaymission/jungle_planet/inside/complex) "bkW" = ( /obj/structure/computerframe{ - dir = 4; - anchored = 1 + dir = 4 }, /obj/item/stack/cable_coil{ amount = 2 @@ -869,9 +857,7 @@ }, /area/awaymission/jungle_planet/outside) "blr" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/effect/landmark/awaymissions/gate_lizard/mob_spawn/melee_axe{ id = "pathway11" }, @@ -881,9 +867,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) "bmT" = ( @@ -898,7 +882,6 @@ /area/awaymission/jungle_planet/inside) "bon" = ( /obj/structure/flora/rock/pile/largejungle{ - icon_state = "rocks1"; pixel_y = 2; pixel_x = -2 }, @@ -977,7 +960,6 @@ /area/awaymission/jungle_planet/inside/complex) "bqH" = ( /obj/structure/computerframe{ - anchored = 1; dir = 1 }, /obj/item/shard{ @@ -1641,7 +1623,6 @@ }, /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "yellowcorner" }, /area/awaymission/jungle_planet/inside/complex) @@ -1948,7 +1929,6 @@ /area/awaymission/jungle_planet/outside/abandoned) "cAK" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 1 }, /obj/effect/turf_decal/stripes/line{ @@ -1991,19 +1971,6 @@ name = "ground" }, /area/awaymission/jungle_planet/outside/cave) -"cCl" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, -/obj/effect/light_emitter{ - light_color = "#FFFFFF"; - set_cap = 1; - icon = 'modular_ss220/maps220/icons/mapping_helpers.dmi'; - icon_state = "sunlight_helper"; - layer = 10 - }, -/turf/simulated/floor/indestructible/grass, -/area/awaymission/jungle_planet/outside) "cDs" = ( /obj/effect/spawner/random_spawners/dirt_maybe, /turf/simulated/floor/plasteel, @@ -2174,7 +2141,6 @@ /area/awaymission/jungle_planet/outside) "cKa" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 1 }, /obj/effect/turf_decal/stripes/corner{ @@ -2271,9 +2237,7 @@ }, /area/awaymission/jungle_planet/outside/river) "cTp" = ( -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /obj/structure/flora/ausbushes/sparsegrass, /obj/effect/light_emitter{ light_color = "#FFFFFF"; @@ -2339,7 +2303,6 @@ /area/awaymission/jungle_planet/outside) "cVI" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 6 }, /obj/effect/spawner/random_spawners/dirt_frequent, @@ -2396,9 +2359,7 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave/pirate) "dbU" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/structure/flora/ausbushes/ywflowers, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/river) @@ -2409,9 +2370,7 @@ /area/awaymission/jungle_planet/outside/river) "dcG" = ( /obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/river) "dcU" = ( @@ -2602,7 +2561,6 @@ /obj/effect/spawner/random_spawners/dirt_frequent, /obj/item/stock_parts/cell/high, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "yellowcorner" }, /area/awaymission/jungle_planet/inside/complex) @@ -2665,12 +2623,6 @@ }, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/abandoned) -"dsC" = ( -/obj/structure/railing{ - dir = 2 - }, -/turf/simulated/floor/beach/away/sand, -/area/awaymission/jungle_planet/outside/river) "dsE" = ( /obj/structure/flora/ausbushes/reedbush, /turf/simulated/floor/beach/away/water{ @@ -2842,7 +2794,6 @@ /area/awaymission/jungle_planet/outside/cave) "dMZ" = ( /obj/structure/table/reinforced, -/obj/structure/table/reinforced, /obj/item/clothing/head/welding{ pixel_x = 6; pixel_y = 6 @@ -2884,9 +2835,7 @@ /obj/item/shard{ icon_state = "medium" }, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/item/shard{ icon_state = "small" }, @@ -2997,12 +2946,6 @@ /obj/effect/decal/cleanable/cobweb2, /turf/simulated/floor/mineral/titanium/blue, /area/awaymission/jungle_planet/outside/abandoned) -"dVh" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, -/turf/simulated/floor/indestructible/grass, -/area/awaymission/jungle_planet/outside/river) "dVT" = ( /obj/machinery/door_control/shutter/north{ name = "Armory Shutters-control"; @@ -3223,9 +3166,7 @@ /area/awaymission/jungle_planet/outside) "eky" = ( /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "elg" = ( @@ -3314,9 +3255,7 @@ /turf/simulated/floor/engine/cult, /area/awaymission/jungle_planet/outside/cave) "erb" = ( -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) "ere" = ( @@ -3469,12 +3408,8 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "ezc" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/waterfall) "eAe" = ( @@ -3582,7 +3517,6 @@ /area/awaymission/jungle_planet/inside/complex) "eHa" = ( /obj/structure/closet/secure_closet{ - icon_state = "secure"; locked = 0; name = "kitchen Cabinet"; req_access = list(201) @@ -3713,7 +3647,6 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 9 }, /turf/simulated/floor/plasteel{ @@ -3801,9 +3734,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "eTu" = ( -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ausbushes/grassybush, /turf/simulated/floor/indestructible/grass, @@ -3882,9 +3813,7 @@ "fbH" = ( /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/river) "fck" = ( @@ -3956,9 +3885,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "fhn" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/machinery/light_construct/directional/east, /obj/structure/spider/stickyweb, /turf/simulated/floor/indestructible/grass, @@ -4135,9 +4062,7 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) "ftZ" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/effect/landmark/awaymissions/gate_lizard/mine_spawner{ id = "pathway3" }, @@ -4256,9 +4181,7 @@ /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside/complex) "fCe" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/structure/flora/tree/jungle, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/waterfall) @@ -4418,9 +4341,7 @@ pixel_y = -11; amount = 2 }, -/obj/structure/computerframe{ - anchored = 1 - }, +/obj/structure/computerframe, /obj/item/shard{ icon_state = "medium"; pixel_x = 9; @@ -4486,9 +4407,7 @@ /area/awaymission/jungle_planet/inside/complex) "fNF" = ( /obj/machinery/computer/nonfunctional{ - name = "broken computer"; desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - icon_state = "computer"; dir = 1 }, /turf/simulated/floor/plasteel{ @@ -4556,9 +4475,7 @@ }, /area/awaymission/jungle_planet/outside/river) "fTv" = ( -/obj/structure/computerframe{ - anchored = 1 - }, +/obj/structure/computerframe, /obj/machinery/firealarm{ name = "north fire alarm"; pixel_y = 24 @@ -4605,9 +4522,7 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave/pirate) "fZj" = ( -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /turf/simulated/floor/plating, /area/awaymission/jungle_planet/outside) "gad" = ( @@ -4795,7 +4710,6 @@ icon_state = "1-8" }, /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /turf/simulated/floor/plasteel{ @@ -5161,9 +5075,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "gQc" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/effect/landmark/awaymissions/gate_lizard/mine_spawner{ id = "pathway5" }, @@ -5374,9 +5286,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "hdu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) @@ -5418,9 +5328,7 @@ /turf/simulated/floor/engine, /area/awaymission/jungle_planet/inside/complex) "hfz" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/effect/landmark/awaymissions/gate_lizard/mob_spawn/melee_spear{ id = "waterfall4" }, @@ -5455,7 +5363,6 @@ /area/awaymission/jungle_planet/outside) "hgk" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /turf/simulated/floor/wood/oak, @@ -5705,9 +5612,7 @@ /area/awaymission/jungle_planet/outside/river) "hua" = ( /obj/structure/flora/rock, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/beach/away/water{ water_overlay_image = null }, @@ -5955,9 +5860,7 @@ /turf/simulated/wall/r_wall, /area/awaymission/jungle_planet/inside/complex) "hKc" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/structure/flora/tree/jungle/small, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/waterfall) @@ -5980,9 +5883,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "hMA" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/structure/flora/tree/jungle/small, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/river) @@ -6050,9 +5951,7 @@ /turf/simulated/floor/plating, /area/awaymission/jungle_planet/outside/abandoned) "hUi" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/structure/flora/tree/jungle, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/river) @@ -6091,7 +5990,6 @@ }, /obj/item/stack/rods, /obj/machinery/atmospherics/pipe/simple/visible/supply{ - icon_state = "intact-supply"; dir = 4 }, /turf/simulated/floor/plating, @@ -6119,7 +6017,6 @@ /area/awaymission/jungle_planet/inside/complex) "hWA" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 1 }, /turf/simulated/floor/plasteel{ @@ -6165,9 +6062,7 @@ /turf/simulated/floor/beach/away/sand, /area/awaymission/jungle_planet/outside/river) "iaV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/arrows{ dir = 4 }, @@ -6334,9 +6229,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "iim" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) @@ -6407,9 +6300,7 @@ /turf/simulated/floor/indestructible, /area/awaymission/jungle_planet/outside) "ina" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) "iob" = ( @@ -6474,9 +6365,7 @@ /area/awaymission/jungle_planet/outside/river) "isU" = ( /obj/structure/flora/rock, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/beach/away/coastline{ dir = 1; water_overlay_image = null @@ -6668,9 +6557,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/river) "iFa" = ( -/obj/structure/flora/rock/pile/largejungle{ - icon_state = "rocks1" - }, +/obj/structure/flora/rock/pile/largejungle, /turf/simulated/floor/beach/away/coastline/beachcorner{ water_overlay_image = null; dir = 1 @@ -6931,7 +6818,6 @@ }, /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "yellowcorner" }, /area/awaymission/jungle_planet/inside/complex) @@ -7061,9 +6947,7 @@ "jdE" = ( /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/effect/light_emitter{ light_color = "#FFFFFF"; set_cap = 1; @@ -7115,7 +6999,6 @@ /area/awaymission/jungle_planet/inside/complex) "jgY" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/effect/spawner/random_spawners/dirt_frequent, @@ -7172,7 +7055,6 @@ "jjL" = ( /obj/machinery/computer/nonfunctional{ desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - icon_state = "computer"; dir = 8 }, /turf/simulated/floor/plasteel, @@ -7234,7 +7116,6 @@ /area/awaymission/jungle_planet/outside) "jox" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 5 }, /obj/effect/spawner/random_spawners/dirt_frequent, @@ -7330,16 +7211,13 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "juZ" = ( -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/ywflowers, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/river) "jvs" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 6 }, /obj/effect/turf_decal/arrows{ @@ -7567,7 +7445,6 @@ dir = 4 }, /obj/effect/turf_decal/caution{ - icon_state = "caution"; dir = 8 }, /obj/effect/spawner/random_spawners/dirt_often, @@ -7723,7 +7600,6 @@ /obj/effect/decal/cleanable/blood/oil, /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "yellowcorner" }, /area/awaymission/jungle_planet/inside/complex) @@ -7740,7 +7616,6 @@ }, /obj/effect/spawner/random_spawners/blood_often, /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/machinery/door_control/shutter/south{ @@ -7835,7 +7710,6 @@ /area/awaymission/jungle_planet/outside/abandoned) "jZh" = ( /obj/structure/computerframe{ - anchored = 1; dir = 1 }, /obj/item/shard{ @@ -7918,8 +7792,7 @@ /area/awaymission/jungle_planet/inside) "kdW" = ( /obj/structure/computerframe{ - dir = 4; - anchored = 1 + dir = 4 }, /obj/item/shard, /turf/simulated/floor/plasteel{ @@ -8050,7 +7923,6 @@ /area/awaymission/jungle_planet/inside/complex) "kmw" = ( /obj/structure/flora/rock/pile/largejungle{ - icon_state = "rocks1"; pixel_y = 2; pixel_x = -2 }, @@ -8065,7 +7937,6 @@ icon_state = "4-8" }, /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/effect/turf_decal/arrows{ @@ -8186,8 +8057,6 @@ pixel_x = -3 }, /obj/structure/table, -/obj/structure/table, -/obj/structure/table, /obj/item/kitchen/rollingpin{ pixel_y = 7 }, @@ -8335,7 +8204,6 @@ /area/awaymission/jungle_planet/inside/complex) "kDy" = ( /obj/machinery/computer/nonfunctional{ - dir = 2; icon_state = "broken"; icon_screen = "broken"; icon_keyboard = "generic_key_broken" @@ -8579,9 +8447,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "kTx" = ( -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /obj/effect/light_emitter{ light_color = "#FFFFFF"; set_cap = 1; @@ -8592,9 +8458,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) "kTH" = ( -/obj/structure/computerframe{ - anchored = 1 - }, +/obj/structure/computerframe, /obj/item/shard{ icon_state = "medium"; pixel_x = 9; @@ -8729,7 +8593,6 @@ /area/awaymission/jungle_planet/inside/complex) "lbq" = ( /obj/effect/turf_decal/caution{ - icon_state = "caution"; dir = 8 }, /obj/effect/spawner/random_spawners/oil_maybe, @@ -8783,9 +8646,7 @@ /area/awaymission/jungle_planet/outside/river) "ldP" = ( /obj/item/stack/sheet/metal, -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -8953,7 +8814,6 @@ /area/awaymission/jungle_planet/inside/complex) "lms" = ( /obj/machinery/computer/nonfunctional{ - dir = 2; icon_state = "broken"; icon_screen = "broken"; icon_keyboard = "generic_key_broken" @@ -8995,7 +8855,6 @@ dir = 1 }, /obj/structure/computerframe{ - anchored = 1; dir = 1 }, /obj/effect/spawner/random_spawners/dirt_frequent, @@ -9043,7 +8902,6 @@ /area/awaymission/jungle_planet/inside/complex) "lsj" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /turf/simulated/floor/plasteel{ @@ -9281,18 +9139,7 @@ /area/awaymission/jungle_planet/outside/river) "lLh" = ( /obj/structure/flora/rock/jungle, -/obj/structure/flora/junglebush{ - anchored = 1 - }, -/turf/simulated/floor/indestructible/grass, -/area/awaymission/jungle_planet/outside) -"lLF" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "lNN" = ( @@ -9405,9 +9252,7 @@ /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside/complex) "lSN" = ( -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /obj/structure/flora/ausbushes/ywflowers, /obj/effect/light_emitter{ light_color = "#FFFFFF"; @@ -9715,9 +9560,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "mlv" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/waterfall) "mlQ" = ( @@ -9923,7 +9766,6 @@ /area/awaymission/jungle_planet/outside/river) "myG" = ( /obj/structure/flora/rock/pile/largejungle{ - icon_state = "rocks1"; pixel_y = 2; pixel_x = -2 }, @@ -10129,9 +9971,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/waterfall) "mKk" = ( -/obj/structure/computerframe{ - anchored = 1 - }, +/obj/structure/computerframe, /obj/item/shard{ icon_state = "medium"; pixel_x = 9; @@ -10351,9 +10191,7 @@ /obj/structure/railing{ dir = 4 }, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/river) "mVg" = ( @@ -10549,7 +10387,6 @@ /area/awaymission/jungle_planet/inside/complex) "ngO" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 5 }, /obj/effect/spawner/random_spawners/dirt_often, @@ -10564,9 +10401,7 @@ /area/awaymission/jungle_planet/outside/river) "nhA" = ( /obj/machinery/computer/nonfunctional{ - name = "broken computer"; desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - icon_state = "computer"; dir = 1 }, /turf/simulated/floor/plasteel{ @@ -10686,9 +10521,7 @@ /area/awaymission/jungle_planet/inside/complex) "nva" = ( /obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "nvA" = ( @@ -10730,7 +10563,6 @@ /obj/machinery/light/directional/west, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "rampbottom" }, /area/awaymission/jungle_planet/inside/complex) @@ -10828,9 +10660,7 @@ }, /area/awaymission/jungle_planet/outside/river) "nEG" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/spawner/random_spawners/dirt_maybe, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) @@ -10869,12 +10699,8 @@ }, /area/awaymission/jungle_planet/inside/complex) "nJX" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, +/obj/structure/flora/junglebush, /obj/structure/flora/ausbushes/ywflowers, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) @@ -10947,7 +10773,6 @@ /area/awaymission/jungle_planet/inside/complex) "nOA" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 5 }, /obj/effect/spawner/random_spawners/blood_often, @@ -10960,7 +10785,6 @@ }, /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "yellowcorner" }, /area/awaymission/jungle_planet/inside/complex) @@ -10992,7 +10816,6 @@ /area/awaymission/jungle_planet/inside) "nQT" = ( /obj/structure/flora/rock/pile/largejungle{ - icon_state = "rocks1"; pixel_y = 2; pixel_x = -2 }, @@ -11278,9 +11101,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/inside/complex) "olI" = ( -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -11311,7 +11132,6 @@ /area/awaymission/jungle_planet/outside/cave/small) "onb" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/machinery/light_construct/small/south, @@ -11371,8 +11191,7 @@ /area/awaymission/jungle_planet/inside/complex) "oqX" = ( /obj/structure/computerframe{ - dir = 4; - anchored = 1 + dir = 4 }, /obj/effect/decal/cleanable/glass, /obj/item/shard{ @@ -11511,9 +11330,7 @@ "oAs" = ( /obj/structure/flora/rock, /obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/waterfall) "oAu" = ( @@ -11580,9 +11397,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside/river) "oDl" = ( -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /obj/structure/reagent_dispensers/fueltank, /obj/effect/turf_decal/delivery/red, /turf/simulated/floor/plasteel, @@ -11598,9 +11413,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) "oDZ" = ( @@ -11857,9 +11670,7 @@ /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside/complex) "oTf" = ( -/obj/structure/computerframe{ - anchored = 1 - }, +/obj/structure/computerframe, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "oTr" = ( @@ -11896,7 +11707,6 @@ /area/awaymission/jungle_planet/outside/waterfall) "oYz" = ( /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "yellowcorner" }, /area/awaymission/jungle_planet/inside/complex) @@ -12023,9 +11833,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "pgx" = ( -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "pgy" = ( @@ -12300,9 +12108,7 @@ /obj/structure/sign/securearea{ pixel_x = 32 }, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "pzW" = ( @@ -12333,9 +12139,7 @@ /obj/structure/flora/junglebush/large{ icon_state = "bush3" }, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "pCi" = ( @@ -12526,9 +12330,7 @@ }, /area/awaymission/jungle_planet/outside/river) "pRZ" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/effect/landmark/awaymissions/gate_lizard/mob_spawn/melee_axe{ id = "lake5" }, @@ -12816,7 +12618,6 @@ "qmr" = ( /obj/structure/table, /obj/machinery/computer/nonfunctional{ - name = "broken computer"; desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; icon_state = "laptop"; dir = 8; @@ -12898,9 +12699,7 @@ pixel_y = -11; amount = 2 }, -/obj/structure/computerframe{ - anchored = 1 - }, +/obj/structure/computerframe, /obj/item/shard{ icon_state = "medium"; pixel_x = 9; @@ -13190,12 +12989,6 @@ icon_state = "darkneutralfull" }, /area/awaymission/jungle_planet/inside) -"qGN" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, -/turf/simulated/floor/indestructible/grass, -/area/awaymission/jungle_planet/outside) "qIk" = ( /obj/effect/spawner/random_spawners/blood_often, /obj/effect/spawner/random_spawners/blood_often, @@ -13247,7 +13040,6 @@ /area/awaymission/jungle_planet/outside/abandoned) "qLR" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/effect/spawner/random_spawners/dirt_often, @@ -13601,7 +13393,6 @@ dir = 4 }, /obj/item/bedsheet/red{ - icon_state = "sheetred"; dir = 4 }, /obj/effect/spawner/random_spawners/dirt_often, @@ -13629,9 +13420,7 @@ /area/awaymission/jungle_planet/outside/abandoned) "rks" = ( /obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/waterfall) "rlI" = ( @@ -13645,12 +13434,8 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "rlZ" = ( -/obj/structure/railing{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkneutralfull" @@ -13658,9 +13443,7 @@ /area/awaymission/jungle_planet/inside/complex) "rma" = ( /obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "rmO" = ( @@ -13900,7 +13683,6 @@ "rAr" = ( /obj/effect/spawner/random_spawners/blood_often, /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/effect/spawner/random_spawners/dirt_frequent, @@ -14134,9 +13916,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) "rNE" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/wall/indestructible/rock/mineral, /area/awaymission/jungle_planet/outside/cave) "rNJ" = ( @@ -14557,12 +14337,8 @@ }, /area/awaymission/jungle_planet/outside/river) "snP" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/line, /obj/machinery/light_construct/directional/south, /turf/simulated/floor/plasteel{ dir = 4; @@ -14608,9 +14384,7 @@ /area/awaymission/jungle_planet/outside/waterfall) "sqc" = ( /obj/structure/flora/ausbushes/ppflowers, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/waterfall) "sqI" = ( @@ -14657,7 +14431,6 @@ /obj/structure/sign/poster/official/random/east, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "rampbottom" }, /area/awaymission/jungle_planet/inside/complex) @@ -14945,9 +14718,7 @@ /turf/simulated/floor/wood/oak, /area/awaymission/jungle_planet/outside/cave) "sMA" = ( -/obj/structure/computerframe{ - anchored = 1 - }, +/obj/structure/computerframe, /obj/item/shard{ icon_state = "medium"; pixel_x = 9; @@ -15007,9 +14778,7 @@ /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/inside/complex) "sQH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/door_control/shutter/south{ id = "Cargo in"; req_access = list(271) @@ -15027,14 +14796,12 @@ /area/awaymission/jungle_planet/outside/cave) "sRf" = ( /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "rampbottom" }, /area/awaymission/jungle_planet/outside/river) "sRJ" = ( /obj/machinery/computer/nonfunctional{ - desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages."; - name = "broken computer" + desc = "A computer long since rendered non-functional due to lack of maintenance. Spitting out error messages." }, /turf/simulated/floor/plasteel{ icon_state = "purple"; @@ -15252,9 +15019,7 @@ /area/awaymission/jungle_planet/outside/waterfall) "tgl" = ( /obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/structure/flora/tree/jungle/small, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) @@ -15317,7 +15082,6 @@ /area/awaymission/jungle_planet/outside/cave/small) "tjL" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/effect/spawner/random_spawners/dirt_maybe, @@ -15447,9 +15211,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "tqF" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /obj/effect/light_emitter{ light_color = "#FFFFFF"; set_cap = 1; @@ -15522,9 +15284,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "twn" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/structure/flora/tree/jungle/small, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) @@ -15557,7 +15317,6 @@ id_tag = "hang2in" }, /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/machinery/door/poddoor/shutters{ @@ -15859,12 +15618,8 @@ /area/awaymission/jungle_planet/outside) "tTZ" = ( /obj/effect/turf_decal/caution, -/obj/structure/railing{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/structure/railing, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkneutralfull" @@ -16265,9 +16020,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "uqU" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/structure/flora/tree/jungle, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) @@ -16296,9 +16049,7 @@ /turf/simulated/floor/engine, /area/awaymission/jungle_planet/inside/complex) "usV" = ( -/obj/structure/flora/rock/pile/largejungle{ - icon_state = "rocks1" - }, +/obj/structure/flora/rock/pile/largejungle, /turf/simulated/floor/beach/away/water/deep/dense_canpass, /area/awaymission/jungle_planet/outside/river) "usY" = ( @@ -16538,9 +16289,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "uIb" = ( -/obj/structure/flora/rock/pile/largejungle{ - icon_state = "rocks1" - }, +/obj/structure/flora/rock/pile/largejungle, /turf/simulated/floor/beach/away/coastline{ dir = 4; water_overlay_image = null @@ -16775,9 +16524,7 @@ /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "uWU" = ( -/obj/structure/railing{ - dir = 2 - }, +/obj/structure/railing, /obj/structure/flora/ausbushes/sparsegrass, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) @@ -16811,7 +16558,6 @@ /area/awaymission/jungle_planet/inside) "vao" = ( /obj/structure/flora/rock/pile/largejungle{ - icon_state = "rocks1"; pixel_y = 2; pixel_x = -2 }, @@ -16943,9 +16689,7 @@ /area/awaymission/jungle_planet/outside/cave) "viC" = ( /obj/structure/flora/rock, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside) "viM" = ( @@ -17043,7 +16787,6 @@ /area/awaymission/jungle_planet/inside/complex) "voq" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/effect/landmark/damageturf, @@ -17182,7 +16925,6 @@ /area/awaymission/jungle_planet/outside/cave) "vwd" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 5 }, /turf/simulated/floor/plasteel{ @@ -17280,9 +17022,7 @@ /area/awaymission/jungle_planet/inside/complex) "vBw" = ( /obj/item/stack/rods, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/waterfall) "vBz" = ( @@ -17450,9 +17190,7 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; @@ -17494,9 +17232,7 @@ }, /area/awaymission/jungle_planet/outside/cave/small) "vMf" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/turf_decal/caution, /turf/simulated/floor/plasteel, /area/awaymission/jungle_planet/outside) @@ -17629,7 +17365,6 @@ "vTu" = ( /obj/effect/spawner/random_spawners/dirt_frequent, /turf/simulated/floor/plasteel{ - dir = 2; icon_state = "yellowcorner" }, /area/awaymission/jungle_planet/inside/complex) @@ -17723,7 +17458,6 @@ /area/awaymission/jungle_planet/inside/complex) "wax" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/effect/spawner/random_spawners/dirt_frequent, @@ -17773,7 +17507,6 @@ /area/awaymission/jungle_planet/outside/river) "weh" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 10 }, /obj/effect/spawner/random_spawners/dirt_frequent, @@ -18050,9 +17783,7 @@ pixel_y = -10 }, /obj/item/shard, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/structure/flora/tree/jungle/small, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/inside) @@ -18213,9 +17944,7 @@ /turf/simulated/wall/indestructible, /area/awaymission/jungle_planet/inside) "wJq" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/effect/light_emitter{ light_color = "#FFFFFF"; set_cap = 1; @@ -18256,7 +17985,6 @@ dir = 4 }, /obj/effect/turf_decal/caution{ - icon_state = "caution"; dir = 8 }, /turf/simulated/floor/plasteel, @@ -18340,9 +18068,7 @@ /turf/simulated/floor/beach/away/sand, /area/awaymission/jungle_planet/outside/river) "wQY" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /obj/effect/light_emitter{ light_color = "#FFFFFF"; set_cap = 1; @@ -18356,9 +18082,7 @@ /obj/effect/decal/cleanable/cobweb2{ icon_state = "cobweb1" }, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkneutralfull" @@ -18381,7 +18105,6 @@ /area/awaymission/jungle_planet/inside/complex) "wSt" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /turf/simulated/floor/plating, @@ -18444,7 +18167,6 @@ /area/awaymission/jungle_planet/inside/complex) "wYk" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/effect/spawner/random_spawners/dirt_often, @@ -18454,9 +18176,7 @@ }, /area/awaymission/jungle_planet/inside/complex) "wYy" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/effect/spawner/random_spawners/dirt_often, /turf/simulated/floor/plasteel{ dir = 4; @@ -18572,9 +18292,7 @@ /turf/simulated/floor/plating, /area/awaymission/jungle_planet/inside/complex) "xcy" = ( -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /mob/living/simple_animal/hostile/poison_snake{ wander = 0 }, @@ -18770,9 +18488,7 @@ "xtv" = ( /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ausbushes/ywflowers, -/obj/structure/flora/junglebush{ - anchored = 1 - }, +/obj/structure/flora/junglebush, /turf/simulated/floor/indestructible/grass, /area/awaymission/jungle_planet/outside/waterfall) "xuA" = ( @@ -18793,7 +18509,6 @@ "xwv" = ( /obj/structure/flora/ausbushes/sparsegrass, /obj/structure/flora/rock/pile/largejungle{ - icon_state = "rocks1"; pixel_y = 2; pixel_x = -2 }, @@ -19002,7 +18717,6 @@ /area/awaymission/jungle_planet/inside) "xJT" = ( /obj/machinery/computer/nonfunctional{ - icon_state = "computer"; dir = 8; name = "arrival console" }, @@ -19359,7 +19073,6 @@ /area/awaymission/jungle_planet/outside/cave) "yfS" = ( /obj/effect/decal/cleanable/blood/writing{ - icon_state = "tracks"; dir = 4 }, /obj/effect/spawner/random_spawners/dirt_frequent, @@ -22903,7 +22616,7 @@ miM miM miM miM -qGN +fKU miM miM miM @@ -22930,7 +22643,7 @@ bVh tKb oBh fQG -dVh +rxH fMx ebS kRO @@ -23089,7 +22802,7 @@ miM miM miM miM -qGN +fKU mYK lWL miM @@ -23277,7 +22990,7 @@ miM miM miM miM -cCl +aix qfd aHl xsI @@ -23464,8 +23177,8 @@ miM miM miM miM -qGN -qGN +fKU +fKU xdw lWL aHl @@ -23651,7 +23364,7 @@ miM miM miM miM -qGN +fKU lWL eZk rnx @@ -23844,11 +23557,11 @@ lWL lWL aHl lWL -qGN +fKU lWL fQG nhk -dVh +rxH oBh ahG kSX @@ -24029,14 +23742,14 @@ lWL aHl lWL qeW -qGN -qGN +fKU +fKU lWL lWL fQG vCC -dVh -dVh +rxH +rxH oBh osc gOJ @@ -24198,7 +23911,7 @@ miM miM miM miM -qGN +fKU qfd aHl xsI @@ -24217,8 +23930,8 @@ sCU nGx nGx fMq -qGN -qGN +fKU +fKU xsI xsI lWL @@ -24237,7 +23950,7 @@ vBz wIA aBV oBh -dVh +rxH wzs jrM rBC @@ -24385,8 +24098,8 @@ miM aHl miM aHl -qGN -qGN +fKU +fKU xdw lWL qur @@ -24405,7 +24118,7 @@ hWY nGx lWL aHl -qGN +fKU sNa lWL sNa @@ -24572,7 +24285,7 @@ lWL lWL lWL cJq -qGN +fKU lWL eZk gzq @@ -24777,7 +24490,7 @@ mHv tWG lWL iTk -qGN +fKU lWL lWL aHl @@ -24787,7 +24500,7 @@ uim aKg phs nhk -dVh +rxH aks osc gOJ @@ -24829,7 +24542,7 @@ bBM mxg pzw fhz -qGN +fKU lLh vFE liA @@ -24964,7 +24677,7 @@ hWY eZk iTk iTk -qGN +fKU lJs lWL ctB @@ -25335,7 +25048,7 @@ sNa qeW lWL aHl -qGN +fKU iTk iTk iTk @@ -25499,7 +25212,7 @@ cVe eFw hux mTn -qGN +fKU lsA iTk lWL @@ -25545,7 +25258,7 @@ gpG gpG gpG bhA -dsC +ybw lqX sDk wdZ @@ -25684,8 +25397,8 @@ pWH fhz bqH dWC -qGN -qGN +fKU +fKU eZk lsA iTk @@ -25709,11 +25422,11 @@ mYK lWL qeW lWL -qGN +fKU xsI iTk iTk -qGN +fKU lWL aHl lWL @@ -25732,7 +25445,7 @@ gpG gpG gpG bhA -dsC +ybw lIv pdL lqX @@ -25900,7 +25613,7 @@ lWL eZk iTk iTk -qGN +fKU lWL aHl lWL @@ -26037,10 +25750,10 @@ miM miM lWL mYK -qGN +fKU aHl lWL -qGN +fKU byp fKU mTn @@ -26272,10 +25985,10 @@ nva hux hux sNa -qGN +fKU iTk iTk -qGN +fKU lWL aHl lJs @@ -26411,9 +26124,9 @@ lWL wfe lWL lWL -qGN +fKU aHl -qGN +fKU lWL miM miM @@ -26423,7 +26136,7 @@ miM miM lWL lWL -qGN +fKU hux hux lWL @@ -26646,7 +26359,7 @@ mPQ mOS eZk qeW -qGN +fKU iTk iTk iTk @@ -26787,7 +26500,7 @@ miM miM miM miM -qGN +fKU miM miM miM @@ -26995,7 +26708,7 @@ sNa lWL sNa lWL -qGN +fKU lWL lWL lWL @@ -27172,7 +26885,7 @@ lWL lWL lWL lWL -qGN +fKU lWL lWL lWL @@ -27183,9 +26896,9 @@ gTb lWL lWL lWL -qGN +fKU lWL -qGN +fKU sNa sNa lNN @@ -27395,11 +27108,11 @@ lWL lWL lWL lWL -qGN +fKU iTk iTk iTk -qGN +fKU twn uim sNa @@ -27524,7 +27237,7 @@ miM miM miM miM -dVh +rxH miP fQG lWL @@ -27582,13 +27295,13 @@ lWL lWL dPQ lWL -qGN +fKU iTk iTk iTk lWL ctB -qGN +fKU lWL uim sNa @@ -27768,14 +27481,14 @@ lWL lWL lWL lWL -qGN +fKU uqU lWL aHl iyF lWL -qGN -qGN +fKU +fKU lWL sNa lWL @@ -27902,7 +27615,7 @@ aKg neX fQG cJq -qGN +fKU lWL miM miM @@ -27917,7 +27630,7 @@ lWL mYK lJs ylR -qGN +fKU lWL hux hux @@ -28097,15 +27810,15 @@ miM miM mYK eZk -qGN +fKU lWL lWL cJq -qGN +fKU lWL lWL lWL -qGN +fKU lWL lWL fMq @@ -28141,10 +27854,10 @@ miM miM miM miM -qGN -qGN +fKU +fKU bJa -qGN +fKU iTk iTk iTk @@ -28278,13 +27991,13 @@ fQG lWL sNa sNa -qGN +fKU lWL lWL lWL lWL -cCl -qGN +aix +fKU cYa lWL lJs @@ -28294,7 +28007,7 @@ lWL mYK lWL fMq -qGN +fKU lWL eZk fMq @@ -28467,7 +28180,7 @@ sNa sNa lWL enG -qGN +fKU sNa sNa sNa @@ -28674,7 +28387,7 @@ lWL qfd eZk aHl -qGN +fKU fMq lWL lWL @@ -29046,10 +28759,10 @@ lWL fMq lWL sNa -qGN +fKU lWL -qGN -qGN +fKU +fKU aHl lWL lWL @@ -29586,9 +29299,9 @@ fQG fQG cpI lWL -qGN -qGN -qGN +fKU +fKU +fKU miM miM miM @@ -29614,7 +29327,7 @@ lWL lWL aHl sNa -qGN +fKU lWL lWL mYK @@ -29659,7 +29372,7 @@ jiu qox qox vqT -dVh +rxH hPE gpG gpG @@ -29772,10 +29485,10 @@ fQG fQG fQG lWL -qGN +fKU cYa lJs -qGN +fKU eZk miM miM @@ -29797,9 +29510,9 @@ lWL aHl lWL aHl -qGN +fKU lWL -qGN +fKU lWL lWL lWL @@ -29959,12 +29672,12 @@ oBh fQG fQG mOa -qGN +fKU llu lWL -qGN -qGN -qGN +fKU +fKU +fKU miM miM miM @@ -29988,7 +29701,7 @@ key lWL lWL lWL -qGN +fKU xsI xsI lWL @@ -30033,7 +29746,7 @@ gon tfh vqT qox -dVh +rxH kSX gOJ xDV @@ -30151,7 +29864,7 @@ lWL cYa mOa cYa -qGN +fKU miM miM miM @@ -30170,12 +29883,12 @@ lWL lWL mYK lWL -qGN -qGN +fKU +fKU lWL lWL -qGN -qGN +fKU +fKU sNa mYK sNa @@ -30334,9 +30047,9 @@ oBh oBh lWL eZk -qGN +fKU lWL -qGN +fKU ctB qeW miM @@ -30358,11 +30071,11 @@ aHl lWL lWL oZh -qGN +fKU nva lWL fMq -qGN +fKU lWL mYK sNa @@ -30520,12 +30233,12 @@ bhA jhj oBh ctB -qGN -qGN -qGN +fKU +fKU +fKU eZk llu -qGN +fKU miM miM miM @@ -30543,16 +30256,16 @@ rHc jbn cVD mYK -qGN +fKU qeW -qGN +fKU sNa lWL lWL -qGN +fKU lWL mYK -qGN +fKU lWL qeW lWL @@ -30707,10 +30420,10 @@ bhA qpu oBh lWL -lLF +pli cYa lJs -qGN +fKU lWL lWL miM @@ -30730,13 +30443,13 @@ lWL lWL lWL mYK -qGN +fKU lWL -qGN +fKU lWL lWL lWL -qGN +fKU lWL aHl sNa @@ -30919,11 +30632,11 @@ aHl lWL sNa mYK -qGN +fKU lWL aHl lWL -qGN +fKU lWL mYK sNa @@ -31082,8 +30795,8 @@ oBh jhj llu mOa -qGN -qGN +fKU +fKU miM miM lWL @@ -31109,8 +30822,8 @@ mYK lWL lWL lWL -qGN -qGN +fKU +fKU lWL lWL aHl @@ -31296,7 +31009,7 @@ lWL oZh lWL jbn -qGN +fKU lWL lWL lWL @@ -31481,10 +31194,10 @@ lWL sNa mYK lWL -qGN -lLF +fKU +pli lWL -qGN +fKU fMq lWL lWL @@ -31669,10 +31382,10 @@ lWL sNa sNa iTk -qGN +fKU lWL aHl -qGN +fKU lWL aHl aHl @@ -31857,7 +31570,7 @@ lWL sNa iyF lWL -qGN +fKU lWL lWL xsI @@ -32045,7 +31758,7 @@ mYK iTk fMq lWL -qGN +fKU lWL aHl aHl @@ -32053,13 +31766,13 @@ lWL lWL ctB lWL -qGN -qGN +fKU +fKU lWL lWL miM -qGN -qGN +fKU +fKU miM miM lWL @@ -32084,13 +31797,13 @@ aHl aae aHl ecl -qGN +fKU qfd aHl jYd aHl vkt -dVh +rxH jhj osc gOJ @@ -32231,7 +31944,7 @@ qeW aHl lWL lWL -qGN +fKU lWL lWL lWL @@ -32239,13 +31952,13 @@ gkK sNa lJs lWL -qGN +fKU cJq jbn lWL -qGN -qGN -qGN +fKU +fKU +fKU lWL miM miM @@ -32272,7 +31985,7 @@ lWL lWL cVD uqU -qGN +fKU xdw lWL sNa @@ -32305,7 +32018,7 @@ gOJ bhA oBh neX -dVh +rxH nyY hPE gOJ @@ -32419,22 +32132,22 @@ qeW sNa aHl lWL -qGN +fKU sNa sNa lWL lJs lWL -qGN +fKU lWL sNa -qGN +fKU lWL -cCl -qGN +aix +fKU lWL aHl -qGN +fKU miM lWL lWL @@ -32458,13 +32171,13 @@ bdd fMq lWL lWL -qGN +fKU aHl eZk vkt vkt -qGN -dVh +fKU +rxH xuH osc gOJ @@ -32606,8 +32319,8 @@ eZk sNa lWL iTk -qGN -qGN +fKU +fKU sNa sNa lWL @@ -32615,28 +32328,28 @@ oaT sNa lJs lJs -qGN +fKU sNa lWL lWL lWL bgE -lLF +pli xdw lWL mYK cJq mYK lWL -qGN -cCl +fKU +aix xdw lWL sNa uqU lWL lWL -qGN +fKU qfd cVD xsI @@ -32791,10 +32504,10 @@ lWL rqY oZh lWL -qGN +fKU iTk -qGN -qGN +fKU +fKU lWL lWL lJs @@ -32808,7 +32521,7 @@ sNa lWL lWL lWL -qGN +fKU uqU lWL lWL @@ -32816,19 +32529,19 @@ lWL mYK mYK lWL -qGN -qGN -qGN -cCl +fKU +fKU +fKU +aix lWL lWL lWL bgE -qGN +fKU xdw fMq sNa -qGN +fKU lWL aHl aHl @@ -32978,7 +32691,7 @@ sNa mYK lWL lWL -qGN +fKU iTk lWL lWL @@ -32995,7 +32708,7 @@ uhg lWL pKX cJq -qGN +fKU uqU mYK miM @@ -33165,24 +32878,24 @@ lWL lWL aHl sNa -qGN +fKU iTk -qGN +fKU lWL -qGN +fKU lWL fHT lWL lWL sNa sNa -qGN +fKU qeW lWL sNa qeW -qGN -qGN +fKU +fKU miM miM miM @@ -33352,9 +33065,9 @@ qeW lWL lWL lWL -qGN +fKU aHl -qGN +fKU nva lWL lWL @@ -33363,7 +33076,7 @@ lJs lJs lWL sNa -qGN +fKU qfd aHl xsI @@ -33399,8 +33112,8 @@ lWL lWL lWL mYK -dVh -dVh +rxH +rxH oBh osc gpG @@ -33538,10 +33251,10 @@ sNa qeW qeW mYK -qGN -qGN +fKU +fKU lWL -lLF +pli sNa lWL lWL @@ -33550,8 +33263,8 @@ lWL lJs lWL lWL -qGN -qGN +fKU +fKU ygc aHl qXQ @@ -33613,7 +33326,7 @@ gpG gpG gpG bhA -dVh +rxH koU kxC vTu @@ -33728,7 +33441,7 @@ lWL lWL lWL lWL -lLF +pli lWL lWL lWL @@ -33737,7 +33450,7 @@ aHl lWL lWL sNa -qGN +fKU aHl eZk qfd @@ -33915,8 +33628,8 @@ sNa mYK lWL iTk -qGN -qGN +fKU +fKU aHl lWL lWL @@ -34103,9 +33816,9 @@ sNa lWL iTk lWL -qGN -qGN -qGN +fKU +fKU +fKU lWL aHl lWL @@ -34522,7 +34235,7 @@ lWL fMq fMq fQG -dVh +rxH fQG osc gpG @@ -34668,7 +34381,7 @@ lWL sNa lWL lWL -qGN +fKU mYK miM miM @@ -34706,9 +34419,9 @@ lWL fMq lWL fMq -qGN +fKU fMq -dVh +rxH oBh xuH nph @@ -34852,7 +34565,7 @@ sNa mYK aGN lWL -qGN +fKU lWL mYK rNE @@ -35039,7 +34752,7 @@ lWL lWL lWL jbn -cCl +aix eZk miM miM @@ -35080,7 +34793,7 @@ aHl lWL fMq fMq -qGN +fKU fMq fQG fQG @@ -35223,7 +34936,7 @@ mYK lWL lWL aHl -qGN +fKU lWL lWL lWL @@ -35266,10 +34979,10 @@ lWL lWL lWL fMq -qGN +fKU lWL fMq -dVh +rxH fQG nhk nwg @@ -35455,8 +35168,8 @@ lWL fMq fMq fMq -qGN -dVh +fKU +rxH qTn fQG osc @@ -35598,7 +35311,7 @@ qeW qeW lWL lWL -qGN +fKU lWL xsI lWL @@ -35643,8 +35356,8 @@ lWL lWL mYK lWL -dVh -dVh +rxH +rxH pJH hPE gOJ @@ -35789,7 +35502,7 @@ lWL lWL lWL cJq -qGN +fKU lWL cEd cJq @@ -35869,7 +35582,7 @@ gOJ fQG nhk fQG -dVh +rxH jhj aDI aoh @@ -36054,7 +35767,7 @@ fQG uCg pJn aoh -dVh +rxH nhk hUi aKg @@ -36345,7 +36058,7 @@ qeW lWL fMq jbn -qGN +fKU lWL lWL iyF @@ -36410,7 +36123,7 @@ fQG fQG fQG gOJ -dVh +rxH aKg sUJ aks @@ -36532,9 +36245,9 @@ lWL jbn lWL lWL -qGN -qGN -qGN +fKU +fKU +fKU iTk lWL aHl @@ -36592,12 +36305,12 @@ fQG fQG lWL lWL -qGN +fKU lWL lWL nGx fKz -qGN +fKU qfd aHl xsI @@ -36607,7 +36320,7 @@ eZk nGx lWL sNa -qGN +fKU mYK aHl mTn @@ -36721,7 +36434,7 @@ fMq lWL eZk lWL -qGN +fKU lWL lWL lWL @@ -36771,7 +36484,7 @@ fQG fQG fQG nhk -dVh +rxH fQG fQG ujY @@ -36784,8 +36497,8 @@ lWL aHl nGx lWL -qGN -qGN +fKU +fKU xdw lWL sNa @@ -36804,7 +36517,7 @@ neX gOJ neX wQY -dVh +rxH doc miM miM @@ -36912,7 +36625,7 @@ lWL lWL fMq cJq -qGN +fKU lWL mYK miM @@ -36960,7 +36673,7 @@ lWL mYK lWL lWL -qGN +fKU lWL lWL lWL @@ -36971,12 +36684,12 @@ lWL lWL nGx mYK -qGN +fKU aHl eZk qfd qfd -qGN +fKU nGx nGx lWL @@ -37099,7 +36812,7 @@ lWL lWL lWL sNa -qGN +fKU lWL lWL lWL @@ -37177,7 +36890,7 @@ miM gOJ aks rcw -dVh +rxH aks miM miM @@ -37286,7 +36999,7 @@ lWL fMq lWL lWL -qGN +fKU lWL cJq lWL @@ -37341,9 +37054,9 @@ lWL cIA nGx lWL -qGN +fKU mYK -qGN +fKU sNa nGx lWL @@ -37354,7 +37067,7 @@ aHl nGx qeW nJX -cCl +aix mYK vzJ miM @@ -37472,8 +37185,8 @@ sNa lWL lWL lWL -qGN -qGN +fKU +fKU lWL aHl lWL @@ -37528,9 +37241,9 @@ aHl lWL lWL lWL -qGN +fKU lWL -qGN +fKU xsI nGx nGx @@ -37541,7 +37254,7 @@ eZk nGx sNa ctB -qGN +fKU lWL miM miM @@ -37876,7 +37589,7 @@ nGx hux cEd fMq -qGN +fKU ctB lWL aHl @@ -37905,13 +37618,13 @@ lWL lWL lWL mYK -qGN +fKU lWL lWL -qGN +fKU mYK mYK -qGN +fKU nGx hWY sNa @@ -38063,16 +37776,16 @@ nGx lWL cEd fMq -qGN +fKU fMq -qGN -qGN +fKU +fKU msZ fMq lWL ctB lWL -qGN +fKU fMq lWL lWL @@ -38096,9 +37809,9 @@ lWL lWL aHl lWL -qGN +fKU mYK -qGN +fKU mYK nGx nGx @@ -38250,17 +37963,17 @@ lWL lWL cEd fMq -qGN -qGN +fKU +fKU jbn -qGN +fKU fMq -qGN -qGN +fKU +fKU xsI fMq -qGN -qGN +fKU +fKU iGT lWL lWL @@ -38285,8 +37998,8 @@ mYK lWL aHl mYK -qGN -qGN +fKU +fKU uFt sNa miM @@ -38434,21 +38147,21 @@ aHl nGx nGx sBD -qGN +fKU jbn -qGN -qGN +fKU +fKU ylZ -qGN -qGN -qGN -qGN -qGN +fKU +fKU +fKU +fKU +fKU fMq fMq ctB -qGN -qGN +fKU +fKU lWL lWL lWL @@ -38473,7 +38186,7 @@ mYK mYK lWL mYK -qGN +fKU mYK jbn miM @@ -38621,21 +38334,21 @@ myG nGx nGx fMq -qGN +fKU fMq -qGN -qGN -qGN +fKU +fKU +fKU fMq -qGN +fKU fMq -qGN +fKU rqY ofe fMq jbn fMq -qGN +fKU lWL lWL lWL @@ -38809,8 +38522,8 @@ nGx nGx lWL lWL -qGN -qGN +fKU +fKU ftZ fMq fMq @@ -38823,7 +38536,7 @@ fMq fMq lWL fMq -qGN +fKU lWL lWL lWL @@ -38996,8 +38709,8 @@ nGx nGx rce lWL -qGN -qGN +fKU +fKU iTk iTk lWL @@ -39005,12 +38718,12 @@ aHl fMq fMq lWL -lLF -qGN +pli +fKU fMq lWL aHl -qGN +fKU lWL lWL lWL @@ -39183,30 +38896,30 @@ tWG nGx myG lWL -qGN +fKU fMq fMq -qGN -qGN -qGN -qGN -qGN -qGN +fKU +fKU +fKU +fKU +fKU +fKU gQc -qGN -qGN +fKU +fKU lWL fMq -qGN +fKU fMq lWL lWL lWL qeW lWL -qGN -qGN -qGN +fKU +fKU +fKU lWL rvH lWL @@ -39370,30 +39083,30 @@ nGx nGx lWL fMq -qGN +fKU fMq -qGN -qGN +fKU +fKU eUG -qGN -qGN -qGN -qGN +fKU +fKU +fKU +fKU qeW alw fMq iTk fMq fMq -qGN +fKU eZk xsI fMq pho -qGN -qGN +fKU +fKU lWL -qGN +fKU lWL lWL iTk @@ -39559,8 +39272,8 @@ fMq lWL lWL lWL -qGN -qGN +fKU +fKU fMq fMq fMq @@ -39570,18 +39283,18 @@ iGT fMq lWL iyF -qGN -qGN -qGN +fKU +fKU +fKU eZk hHO fMq lWL -qGN +fKU iTk iTk -qGN -qGN +fKU +fKU cJq lWL iyF @@ -39757,7 +39470,7 @@ kqc lWL aHl iTk -qGN +fKU fMq lWL eZk @@ -39767,8 +39480,8 @@ qeW cJq lWL aHl -qGN -qGN +fKU +fKU lWL iBS lWL @@ -39939,11 +39652,11 @@ mYK lWL lWL lWL -qGN -qGN +fKU +fKU fMq fMq -qGN +fKU viC qeW lWL @@ -40116,7 +39829,7 @@ nGx lWL eZk qeW -qGN +fKU miM qEs eZk @@ -40127,11 +39840,11 @@ lWL dPQ mYK fMq -qGN +fKU xsI -qGN -qGN -qGN +fKU +fKU +fKU qeW fMq lWL @@ -40297,11 +40010,11 @@ mYK sNa aHl miM -qGN -qGN +fKU +fKU lWL iah -qGN +fKU miM miM miM @@ -40316,7 +40029,7 @@ mYK mYK uTk fMq -qGN +fKU gwZ fzF iTk @@ -40332,7 +40045,7 @@ miM miM miM miM -qGN +fKU sNa aHl iTk @@ -40485,10 +40198,10 @@ mYK miM miM miM -qGN +fKU miM -qGN -qGN +fKU +fKU miM miM miM @@ -40504,7 +40217,7 @@ mYK fMq fMq fMq -qGN +fKU lWL fMq lWL @@ -40519,8 +40232,8 @@ miM miM miM miM -qGN -qGN +fKU +fKU lWL iyF lWL @@ -40691,7 +40404,7 @@ lWL miM miM miM -qGN +fKU miM miM miM @@ -40706,15 +40419,15 @@ miM miM miM lWL -qGN -qGN -qGN +fKU +fKU +fKU iTk lWL lWL sNa mYK -qGN +fKU nva lWL lWL @@ -40893,15 +40606,15 @@ frk sNa sNa sNa -qGN +fKU cJq -qGN +fKU iTk sNa sNa eZk nva -qGN +fKU nva nva mYK @@ -41081,14 +40794,14 @@ fMq enG sNa sNa -qGN -qGN -qGN -qGN +fKU +fKU +fKU +fKU sNa eZk sNa -qGN +fKU nva nva lWL @@ -41221,14 +40934,14 @@ miM miM miM miM -qGN -qGN -cCl +fKU +fKU +aix lWL lWL twn uFL -qGN +fKU lWL lWL lWL @@ -41410,12 +41123,12 @@ miM miM aHl nGx -qGN +fKU lWL aHl -qGN +fKU lWL -qGN +fKU cJq lWL iTk @@ -41453,7 +41166,7 @@ miM miM miM miM -qGN +fKU sNa sNa iTk @@ -41610,7 +41323,7 @@ lWL cJq lWL lWL -qGN +fKU tQB iTk sNa @@ -41640,11 +41353,11 @@ miM miM miM miM -qGN +fKU lNN lWL iTk -qGN +fKU eZk uMl lWL @@ -41831,8 +41544,8 @@ eZk lWL eZk lWL -qGN -qGN +fKU +fKU xsI qeW lWL @@ -42009,7 +41722,7 @@ lWL mYK fMq eZk -qGN +fKU miM miM miM @@ -42020,12 +41733,12 @@ lWL lWL xsI sNa -qGN +fKU qeW xsI sNa qeW -qGN +fKU lWL lWL lWL @@ -42212,8 +41925,8 @@ lWL jbn eZk qeW -qGN -qGN +fKU +fKU lWL nva sNa @@ -42379,8 +42092,8 @@ lWL iTk fzF fMq -qGN -qGN +fKU +fKU iTk fzF lWL @@ -42398,12 +42111,12 @@ lWL aHl eZk eZk -qGN -qGN -qGN +fKU +fKU +fKU fMq lWL -qGN +fKU sNa lWL lWL @@ -42558,12 +42271,12 @@ lWL eZk kUv eZk -qGN +fKU udS iTk lNN lWL -qGN +fKU iTk iTk iyF @@ -42579,19 +42292,19 @@ aHl lWL lWL lWL -qGN -qGN +fKU +fKU mYK lWL xsI lWL -qGN +fKU ydD -qGN +fKU qeW qeW lWL -qGN +fKU sNa sNa lWL @@ -42767,20 +42480,20 @@ lWL lWL sOV xsI -qGN +fKU jbn xsI eZk qeW lWL -qGN -qGN +fKU +fKU lWL aHl lWL -qGN +fKU hfz -qGN +fKU sNa lWL tfz @@ -42932,19 +42645,19 @@ iTk lWL iTk iTk -qGN +fKU lWL ctB ctB sNa -qGN -qGN +fKU +fKU ctB sNa sNa -qGN -qGN -qGN +fKU +fKU +fKU lWL lWL iTk @@ -42953,18 +42666,18 @@ lWL qeW lWL xsI -qGN +fKU eZk xsI xsI qeW qeW -qGN -qGN -qGN +fKU +fKU +fKU sNa lWL -qGN +fKU lWL lWL lWL @@ -43125,21 +42838,21 @@ aHl ctB sNa ctB -qGN -qGN -qGN +fKU +fKU +fKU sNa sNa lWL -qGN -qGN +fKU +fKU lWL iTk iTk lWL qeW eZk -qGN +fKU lWL lWL lWL @@ -43304,7 +43017,7 @@ nhk aoh aoh jhj -dVh +rxH aks aks fQG @@ -43323,15 +43036,15 @@ lWL lWL lWL lWL -qGN +fKU lWL qeW qeW lWL eZk eky -qGN -qGN +fKU +fKU lWL lWL oZh @@ -43492,8 +43205,8 @@ fQG oBh fQG oBh -dVh -dVh +rxH +rxH oBh oBh iaj @@ -43503,20 +43216,20 @@ lWL lWL mYK lWL -qGN +fKU lWL fMq lWL fMq lWL lWL -qGN +fKU lWL lWL lWL -qGN -qGN -qGN +fKU +fKU +fKU lWL lWL iTk @@ -43690,13 +43403,13 @@ lWL lWL lWL rKf -qGN +fKU lWL lWL fMq lWL ePR -qGN +fKU lWL fMq oZh @@ -43709,8 +43422,8 @@ sNa sNa lWL mYK -qGN -qGN +fKU +fKU hfz sNa bLF @@ -43790,7 +43503,7 @@ gOJ fQG ujY vVD -dVh +rxH aoh jCs jCs @@ -43871,7 +43584,7 @@ vBz mxx fKP fQG -dVh +rxH fQG fQG aoh @@ -43891,12 +43604,12 @@ lWL lWL lWL lWL -qGN -qGN +fKU +fKU lWL -qGN -qGN -qGN +fKU +fKU +fKU lWL lWL fKz @@ -43982,7 +43695,7 @@ fQG nhk fQG gOJ -dVh +rxH gOJ gpG gpG @@ -44059,10 +43772,10 @@ gOJ dLM neX neX -dVh -dVh -dVh -dVh +rxH +rxH +rxH +rxH fMq lWL lWL @@ -44073,12 +43786,12 @@ iTk iTk iTk fMq -qGN +fKU lWL lWL lWL -qGN -qGN +fKU +fKU qeW qeW lWL @@ -44263,7 +43976,7 @@ lWL oZt lWL lWL -qGN +fKU qeW eZk hoX @@ -44836,10 +44549,10 @@ lWL lWL xsI lWL -qGN -qGN -qGN -qGN +fKU +fKU +fKU +fKU mFh owK mlv @@ -45357,12 +45070,12 @@ fQG fQG fQG ujY -dVh +rxH fQG fQG -dVh +rxH chq -dVh +rxH tpH heN chq @@ -45551,7 +45264,7 @@ ujY gOJ heN gOJ -dVh +rxH gOJ gOJ gOJ @@ -45738,9 +45451,9 @@ fQG qTn gOJ chq -dVh +rxH qTn -dVh +rxH gOJ gOJ gpG @@ -45762,13 +45475,13 @@ pJH hPE gOJ gOJ -qGN -qGN +fKU +fKU lWL hux aHl lWL -qGN +fKU lWL lWL lWL @@ -45926,8 +45639,8 @@ ujY fQG gOJ chq -dVh -dVh +rxH +rxH fQG gOJ gOJ @@ -45949,14 +45662,14 @@ hPE gOJ gOJ gOJ -qGN +fKU mYK hux hux lWL -qGN -qGN -qGN +fKU +fKU +fKU lWL lWL xsI @@ -46135,8 +45848,8 @@ wIY gOJ mtz gOJ -dVh -dVh +rxH +rxH hux lWL lWL @@ -46147,7 +45860,7 @@ fQG neX neX fQG -dVh +rxH fQG owK ljY @@ -46305,7 +46018,7 @@ jCs fQG nhk fQG -dVh +rxH gOJ gOJ gpG @@ -46320,9 +46033,9 @@ gOJ gOJ mtz rcw -dVh +rxH tpH -dVh +rxH aKg hux lWL @@ -46332,9 +46045,9 @@ fQG fQG fQG fQG -dVh -dVh -dVh +rxH +rxH +rxH qTn dvN dvN @@ -46468,9 +46181,9 @@ lWL lWL lWL lWL -qGN +fKU fMq -qGN +fKU lWL sNa sNa @@ -46492,8 +46205,8 @@ jCs jCs aoh aoh -dVh -dVh +rxH +rxH gOJ gOJ gpG @@ -46506,7 +46219,7 @@ ouu tpH gOJ gOJ -dVh +rxH mtz fQG fQG @@ -46655,13 +46368,13 @@ hux lWL iTk lWL -qGN +fKU lWL mYK -qGN -qGN +fKU +fKU lWL -qGN +fKU fMq lWL qeW @@ -46677,10 +46390,10 @@ nGx qeW fQG jCs -dVh +rxH fQG fQG -dVh +rxH nhk gOJ gOJ @@ -46842,13 +46555,13 @@ xsI lWL iTk iTk -qGN -qGN -qGN -qGN -qGN -qGN -qGN +fKU +fKU +fKU +fKU +fKU +fKU +fKU lWL qeW qeW @@ -46857,12 +46570,12 @@ aHl lWL aHl aHl -qGN -qGN +fKU +fKU nGx nGx -qGN -qGN +fKU +fKU hux fQG fQG @@ -46883,7 +46596,7 @@ gOJ gOJ gOJ gOJ -dVh +rxH fQG fQG fQG @@ -47024,17 +46737,17 @@ lWL lWL hux hux -qGN +fKU lWL -qGN +fKU lWL iTk lWL -qGN -qGN +fKU +fKU lWL -qGN -qGN +fKU +fKU aHl mYK lWL @@ -47044,7 +46757,7 @@ lWL lWL lWL qeW -qGN +fKU hux lWL fKz @@ -47056,7 +46769,7 @@ fQG fQG fQG aoh -dVh +rxH fQG gOJ gOJ @@ -47073,8 +46786,8 @@ gOJ gOJ gOJ gOJ -dVh -dVh +rxH +rxH gOJ gOJ gOJ @@ -47201,13 +46914,13 @@ gOJ nGx lWL lWL -qGN +fKU lWL nGx nGx lWL lWL -qGN +fKU lWL hux eZk @@ -47216,8 +46929,8 @@ eZk hux iyF lWL -qGN -qGN +fKU +fKU hux hux aHl @@ -47231,8 +46944,8 @@ mYK xsI kqc lWL -qGN -qGN +fKU +fKU fMq nGx lWL @@ -47243,7 +46956,7 @@ gOJ ouu fQG aoh -dVh +rxH fQG fQG gOJ @@ -47388,11 +47101,11 @@ gOJ lWL lWL lWL -qGN +fKU lWL lWL lWL -qGN +fKU lWL lWL hux @@ -47404,7 +47117,7 @@ mYK iTk lWL lWL -qGN +fKU eZk hux hux @@ -47416,10 +47129,10 @@ eZk lWL lWL fMq -qGN -qGN +fKU +fKU lWL -qGN +fKU eZk nGx nGx @@ -47430,7 +47143,7 @@ nhk gOJ fQG fQG -dVh +rxH neX ujY fQG @@ -47539,10 +47252,10 @@ gpG gpG chq gOJ -dVh +rxH fQG jCs -dVh +rxH fQG gOJ gOJ @@ -47566,7 +47279,7 @@ aoh aKg jCs lkE -dVh +rxH neX jCs neX @@ -47577,21 +47290,21 @@ lWL hux hux lWL -qGN -qGN -qGN +fKU +fKU +fKU lWL hux hux hux hux -qGN +fKU qeW lWL iTk iTk fMq -qGN +fKU eZk eZk hux @@ -47605,9 +47318,9 @@ mYK lWL lWL xsI -qGN -qGN -qGN +fKU +fKU +fKU qeW nGx fMq @@ -47616,14 +47329,14 @@ gOJ gOJ rwz fQG -dVh -dVh +rxH +rxH fQG -dVh -dVh -dVh -dVh -dVh +rxH +rxH +rxH +rxH +rxH fQG fQG fQG @@ -47639,8 +47352,8 @@ gOJ gOJ gOJ fQG -dVh -dVh +rxH +rxH oBh oBh oBh @@ -47725,7 +47438,7 @@ gpG gOJ gOJ fQG -dVh +rxH fQG qTn fQG @@ -47750,7 +47463,7 @@ fQG aoh bka neX -dVh +rxH neX neX neX @@ -47759,7 +47472,7 @@ neX neX aKg fQG -qGN +fKU lWL lWL hux @@ -47767,17 +47480,17 @@ hux lWL lWL lWL -qGN +fKU hux xsI hux mYK lWL -qGN +fKU lWL iTk lWL -qGN +fKU lWL lWL eZk @@ -47792,9 +47505,9 @@ mYK mYK qeW fMq -qGN +fKU lWL -qGN +fKU lWL nGx hux @@ -47805,8 +47518,8 @@ gOJ ouu fQG fQG -dVh -dVh +rxH +rxH mYK qeW lWL @@ -47816,22 +47529,22 @@ eZk lWL lWL lWL -qGN +fKU lWL lWL -qGN -qGN -qGN -qGN -qGN +fKU +fKU +fKU +fKU +fKU lWL xsI -qGN +fKU lWL -qGN -qGN -qGN -cCl +fKU +fKU +fKU +aix owK jLE jYl @@ -47942,11 +47655,11 @@ miM miM miM miM -dVh -dVh +rxH +rxH rdF nhk -qGN +fKU hux hux lWL @@ -47964,11 +47677,11 @@ eZk fMq iTk iTk -qGN +fKU lWL lWL aHl -qGN +fKU fMq hux hux @@ -47986,37 +47699,37 @@ lWL fKz hux lWL -qGN -qGN +fKU +fKU lWL lWL mCz lWL -qGN -qGN -qGN +fKU +fKU +fKU qeW qeW lWL lWL -qGN +fKU lWL lWL -qGN -qGN +fKU +fKU mYK lWL -qGN -qGN +fKU +fKU hux aHl -qGN +fKU xsI xsI -lLF +pli fid lWL -qGN +fKU lWL lWL tfz @@ -48138,7 +47851,7 @@ hux lWL nLu lWL -qGN +fKU lWL lWL uEa @@ -48151,11 +47864,11 @@ bHE lWL iTk iTk -qGN +fKU lWL hux lWL -qGN +fKU lWL xsI hux @@ -48165,35 +47878,35 @@ uhg hux cSH hux -qGN -qGN +fKU +fKU ueo lWL fMq nGx lWL -qGN -qGN +fKU +fKU lWL -qGN -qGN +fKU +fKU lWL mYK -qGN -qGN +fKU +fKU lWL mYK lWL mYK -qGN -qGN +fKU +fKU hux hux -qGN +fKU lWL hux hux -qGN +fKU hux hux hux @@ -48305,7 +48018,7 @@ bVh bVh fQG fQG -dVh +rxH fQG fQG jCs @@ -48328,9 +48041,9 @@ lWL lWL iTk lWL -qGN -qGN -qGN +fKU +fKU +fKU lWL lWL mYK @@ -48338,11 +48051,11 @@ lWL lWL iTk lWL -qGN +fKU mYK hux lWL -qGN +fKU lWL xsI hux @@ -48352,35 +48065,35 @@ lWL hux hux kBQ -qGN +fKU lWL lWL lWL lWL nGx lWL -qGN +fKU lWL lWL aHl lWL lWL xcy -qGN +fKU hux hux hux hux lWL -qGN +fKU hux hux -qGN -qGN +fKU +fKU lWL hux xsI -qGN +fKU hux hux hux @@ -48478,7 +48191,7 @@ bVh qTn jCs fQG -dVh +rxH fQG rdF jCs @@ -48520,7 +48233,7 @@ lWL iTk iTk iTk -qGN +fKU nzh fMq iTk @@ -48529,8 +48242,8 @@ lWL lWL lWL fMq -qGN -qGN +fKU +fKU qeW lWL lWL @@ -48539,8 +48252,8 @@ lWL hux cSH itw -qGN -qGN +fKU +fKU qeW nGx nGx @@ -48559,9 +48272,9 @@ eZk eZk eZk lWL -qGN +fKU lWL -qGN +fKU lWL eZk lWL @@ -48571,7 +48284,7 @@ lWL lWL lWL lWL -qGN +fKU lWL hux lWL @@ -48685,7 +48398,7 @@ gzU fQG fQG aKg -dVh +rxH bVh bVh fQG @@ -48698,12 +48411,12 @@ lWL lWL jbn lWL -qGN +fKU lWL lWL xsI lWL -qGN +fKU lWL lWL lWL @@ -48711,13 +48424,13 @@ iTk iTk iTk iTk -qGN +fKU lWL lWL aHl hux -qGN -qGN +fKU +fKU qeW lWL mYK @@ -48746,9 +48459,9 @@ eZk lWL bHE lWL -qGN -qGN -qGN +fKU +fKU +fKU mYK lWL xsI @@ -48765,7 +48478,7 @@ eZk cJq hux hux -qGN +fKU miM miM miM @@ -48884,7 +48597,7 @@ ofn lWL miM lWL -qGN +fKU eZk lWL qeW @@ -48898,16 +48611,16 @@ lWL lWL iTk iTk -qGN +fKU fMq lWL -qGN +fKU hux -qGN -qGN +fKU +fKU lWL qeW -qGN +fKU lWL cJq mYK @@ -48921,7 +48634,7 @@ fKz nGx lWL lWL -qGN +fKU eZk eZk hux @@ -48933,7 +48646,7 @@ eZk lWL lWL hux -qGN +fKU lWL hux lWL @@ -48952,7 +48665,7 @@ lWL lWL lWL hux -qGN +fKU miM miM miM @@ -49037,7 +48750,7 @@ bVh bVh nhk bka -dVh +rxH jCs fQG nhk @@ -49085,9 +48798,9 @@ lWL fMq lWL iTk -qGN -qGN -qGN +fKU +fKU +fKU lWL lWL lWL @@ -49107,7 +48820,7 @@ fMq mYK nGx lWL -qGN +fKU lWL lWL eZk @@ -49275,11 +48988,11 @@ iTk lWL lWL lWL -qGN -qGN -qGN +fKU +fKU +fKU lWL -qGN +fKU lWL cJq lWL @@ -49294,11 +49007,11 @@ mYK lWL nGx sNa -qGN +fKU lWL lWL aHl -qGN +fKU jbn hux hux @@ -49307,7 +49020,7 @@ qeW lWL lWL xsI -qGN +fKU lWL cJq lWL @@ -49465,9 +49178,9 @@ iTk iTk fMq lWL -qGN -qGN -qGN +fKU +fKU +fKU lWL aHl miM @@ -49481,11 +49194,11 @@ lWL dPQ nGx lWL -qGN -qGN +fKU +fKU hux lWL -qGN +fKU lWL xsI hux @@ -49669,10 +49382,10 @@ lWL hWY hWY lWL -qGN +fKU hux lWL -qGN +fKU lWL xsI hux @@ -49832,7 +49545,7 @@ lWL sNa sNa nva -qGN +fKU lWL lWL nva @@ -49856,11 +49569,11 @@ lWL sNa nGx lWL -qGN +fKU lWL lWL -qGN -qGN +fKU +fKU qeW lWL lWL @@ -50019,15 +49732,15 @@ miM miM mYK aHl -qGN -qGN +fKU +fKU lWL sNa sNa sNa sNa lWL -qGN +fKU fMq miM miM @@ -50043,11 +49756,11 @@ jbn cJq nGx lWL -qGN +fKU aHl hux -qGN -qGN +fKU +fKU qeW lWL mYK @@ -50058,9 +49771,9 @@ hux hux lWL fMq -qGN +fKU jpO -qGN +fKU jbn miM miM @@ -50230,29 +49943,29 @@ lWL fMq nGx lWL -qGN -qGN +fKU +fKU hux -qGN -qGN +fKU +fKU lWL qeW -qGN +fKU lWL lWL cJq lWL hux hux -cCl +aix fMq lWL eZk fid hux -qGN +fKU jbn -cCl +aix miM miM fMq @@ -50418,7 +50131,7 @@ lWL nGx fKz lWL -qGN +fKU lWL lWL lWL @@ -50436,13 +50149,13 @@ miM fMq eZk aHl -qGN +fKU fMq miM -qGN +fKU hux -cCl -qGN +aix +fKU miM miM miM @@ -50605,10 +50318,10 @@ qqF lWL nGx mYK -qGN +fKU lWL xsI -qGN +fKU lWL hux lWL @@ -50795,7 +50508,7 @@ sNa lWL aHl fMq -qGN +fKU lWL hux lWL @@ -50982,7 +50695,7 @@ lWL lWL lWL mYK -qGN +fKU cJq lWL lWL diff --git a/_maps/map_files220/RandomZLevels/wildwest.dmm b/_maps/map_files220/RandomZLevels/wildwest.dmm index 02ce5bf208a4..b173bf84d316 100644 --- a/_maps/map_files220/RandomZLevels/wildwest.dmm +++ b/_maps/map_files220/RandomZLevels/wildwest.dmm @@ -882,9 +882,7 @@ /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) "iJ" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/light/small/directional/south, /turf/simulated/floor/plating, /area/awaymission/wildwest/wildwest_refine) @@ -905,9 +903,7 @@ }, /area/awaymission/wildwest/wildwest_mines) "iW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/awaymission/wildwest/wildwest_refine) "iY" = ( @@ -1242,9 +1238,7 @@ /area/awaymission/wildwest/wildwest_refine) "lL" = ( /obj/structure/fans/tiny, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /obj/machinery/door/poddoor/multi_tile/three_tile_ver{ id_tag = "ww_pod" }, @@ -2909,9 +2903,7 @@ }, /area/awaymission/wildwest/wildwest_vaultdoors) "CF" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating/airless, /area/space) "CG" = ( @@ -3524,9 +3516,7 @@ /area/awaymission/wildwest/wildwest_mines) "IF" = ( /obj/structure/marker_beacon/dock_marker, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating/airless, /area/space) "IH" = ( @@ -3680,9 +3670,7 @@ /turf/simulated/floor/wood/oak, /area/awaymission/wildwest/wildwest_mines) "KN" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plating, /area/awaymission/wildwest/wildwest_refine) "KO" = ( @@ -4270,9 +4258,7 @@ }, /area/awaymission/wildwest/wildwest_refine) "QB" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating/airless, /area/awaymission/wildwest/wildwest_refine) "QG" = ( @@ -4642,9 +4628,7 @@ dir = 8; id_tag = "ww_hang2" }, -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/line, /turf/simulated/floor/plating, /area/awaymission/wildwest/wildwest_refine) "UH" = ( @@ -4750,7 +4734,6 @@ /area/awaymission/wildwest/wildwest_mines) "VW" = ( /obj/structure/table/holotable/wood, -/obj/structure/table/holotable/wood, /obj/item/reagent_containers/drinks/drinkingglass/soda{ pixel_x = 6 }, @@ -4803,9 +4786,7 @@ }, /area/awaymission/wildwest/wildwest_mines) "WJ" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 2 - }, +/obj/effect/turf_decal/stripes/corner, /turf/simulated/floor/plating/airless, /area/awaymission/wildwest/wildwest_refine) "WK" = ( diff --git a/_maps/map_files220/stations/deltastation.dmm b/_maps/map_files220/stations/deltastation.dmm index 0efb9e24aaa0..18845904ce21 100644 --- a/_maps/map_files220/stations/deltastation.dmm +++ b/_maps/map_files220/stations/deltastation.dmm @@ -22729,7 +22729,6 @@ d2 = 4; icon_state = "1-4" }, -/obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/security/glass, /obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/polarized{ @@ -30801,19 +30800,6 @@ /obj/machinery/light/small/directional/east, /turf/simulated/floor/plating, /area/station/engineering/mechanic) -"cty" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/station/maintenance/dormitory_maintenance) "ctA" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/crate, @@ -61975,7 +61961,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -67993,9 +67978,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/station/supply/office) "kiB" = ( @@ -74973,7 +74955,6 @@ /area/station/security/storage) "mwz" = ( /obj/structure/table/wood, -/obj/structure/table/wood, /obj/machinery/recharger, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -100748,7 +100729,6 @@ "uAY" = ( /obj/machinery/light/directional/south, /obj/structure/table/reinforced, -/obj/structure/table/reinforced, /obj/structure/extinguisher_cabinet/directional/south, /obj/item/clothing/glasses/meson/engine, /obj/item/clothing/glasses/meson/engine{ @@ -106585,7 +106565,6 @@ "wtG" = ( /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -164075,7 +164054,7 @@ xxc flV hIK oQq -cty +wSl wSl xwz csi diff --git a/_maps/map_files220/stations/metastation.dmm b/_maps/map_files220/stations/metastation.dmm index b96950a7c4cb..5cf8b2b2e2cc 100644 --- a/_maps/map_files220/stations/metastation.dmm +++ b/_maps/map_files220/stations/metastation.dmm @@ -9269,9 +9269,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plating, /area/station/maintenance/starboard) "aQU" = ( @@ -30331,9 +30328,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, @@ -30370,9 +30364,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/airlock/maintenance, /obj/effect/mapping_helpers/airlock/autoname, /obj/effect/mapping_helpers/airlock/access/any/engineering/construction, @@ -30982,26 +30973,6 @@ "cfw" = ( /turf/simulated/wall, /area/station/science/research) -"cfy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable/yellow{ - 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 - }, -/turf/simulated/floor/plating, -/area/station/maintenance/starboard) "cfz" = ( /obj/structure/disposalpipe/segment/corner{ dir = 8 @@ -66607,7 +66578,6 @@ /area/station/medical/surgery/primary) "nqr" = ( /obj/structure/table, -/obj/structure/table, /obj/item/wrench, /obj/item/crowbar, /obj/effect/turf_decal/delivery/hollow, @@ -79646,7 +79616,6 @@ /area/station/public/fitness) "tHm" = ( /obj/structure/table/reinforced, -/obj/structure/table/reinforced, /obj/item/gavelblock, /obj/item/gavelhammer, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -128879,7 +128848,7 @@ kry asJ asJ bln -cfy +jta asJ aoG cgW diff --git a/code/__DEFINES/antag_defines.dm b/code/__DEFINES/antag_defines.dm index 7b88e983ac2f..fe136abd200e 100644 --- a/code/__DEFINES/antag_defines.dm +++ b/code/__DEFINES/antag_defines.dm @@ -61,3 +61,10 @@ GLOBAL_LIST(contractors) * Pulse Demon */ #define PULSEDEMON_SOURCE_DRAIN_INVALID (-1) + +/proc/ischangeling(mob/M) // TODO: Someone please convert these to proper defines some day. + return M.mind?.has_antag_datum(/datum/antagonist/changeling) + +// Helper proc that determines if a mob is a mindslave. +/proc/ismindslave(mob/living/carbon/human/H) + return istype(H) && H.mind.has_antag_datum(/datum/antagonist/mindslave, FALSE) diff --git a/code/__DEFINES/combat_defines.dm b/code/__DEFINES/combat_defines.dm index ee2ec5345af2..01e0c8990c74 100644 --- a/code/__DEFINES/combat_defines.dm +++ b/code/__DEFINES/combat_defines.dm @@ -157,3 +157,10 @@ #define STATUS_EFFECT_CONSTANT * 20 #define IS_HORIZONTAL(x) x.body_position + +/// Compatible firemode is in the gun. Wait until it's held in the user hands. +#define AUTOFIRE_STAT_IDLE (1<<0) +/// Gun is active and in the user hands. Wait until user does a valid click. +#define AUTOFIRE_STAT_ALERT (1<<1) +/// Gun is shooting. +#define AUTOFIRE_STAT_FIRING (1<<2) diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 05150f925529..f10dc5d3334a 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -219,8 +219,17 @@ ///////////////// -///from base of client/Click(): (atom/target, atom/location, control, params, mob/user) +// /client signals + +/// from base of client/Click(): (atom/target, atom/location, control, params, mob/user) #define COMSIG_CLIENT_CLICK "atom_client_click" +/// from base of client/MouseDown(): (/client, object, location, control, params) +#define COMSIG_CLIENT_MOUSEDOWN "client_mousedown" +/// from base of client/MouseUp(): (/client, object, location, control, params) +#define COMSIG_CLIENT_MOUSEUP "client_mouseup" + #define COMPONENT_CLIENT_MOUSEUP_INTERCEPT (1<<0) +/// from base of client/MouseUp(): (/client, object, location, control, params) +#define COMSIG_CLIENT_MOUSEDRAG "client_mousedrag" ///from base of area/Entered(): (/area) #define COMSIG_ENTER_AREA "enter_area" @@ -708,11 +717,16 @@ // /obj/item/gun signals -///called in /obj/item/gun/process_fire (user, target, params, zone_override) +/// called in /obj/item/gun/process_fire (user, target, params, zone_override) #define COMSIG_MOB_FIRED_GUN "mob_fired_gun" - -///called in /obj/item/gun/process_fire (user, target) +/// called in /obj/item/gun/process_fire (user, target) #define COMSIG_GUN_FIRED "gun_fired" +/// called in /datum/component/automatic_fire/proc/on_mouse_down: (client/clicker, atom/target, turf/location, control, params) +#define COMSIG_AUTOFIRE_ONMOUSEDOWN "autofire_onmousedown" + #define COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS (1<<0) +/// called in /datum/component/automatic_fire/proc/process_shot(): (atom/target, mob/living/shooter, allow_akimbo, params) +#define COMSIG_AUTOFIRE_SHOT "autofire_shot" + #define COMPONENT_AUTOFIRE_SHOT_SUCCESS (1<<0) // /obj/item/grenade signals @@ -1044,3 +1058,6 @@ // Sent when a mob spawner is attacked directly or via projectile. #define COMSIG_SPAWNER_SET_TARGET "spawner_set_target" + +/// Used by admin-tooling to remove radiation +#define COMSIG_ADMIN_DECONTAMINATE "admin_decontaminate" diff --git a/code/__DEFINES/dna.dm b/code/__DEFINES/dna.dm index c3cdf346f925..6f6b03b29ad8 100644 --- a/code/__DEFINES/dna.dm +++ b/code/__DEFINES/dna.dm @@ -50,17 +50,18 @@ #define DNA_UI_EYES_G 35 #define DNA_UI_EYES_B 36 #define DNA_UI_GENDER 37 -#define DNA_UI_BEARD_STYLE 38 -#define DNA_UI_HAIR_STYLE 39 -#define DNA_UI_HACC_STYLE 40 -#define DNA_UI_BACC_STYLE 41 -#define DNA_UI_HAIR_GRADIENT_STYLE 42 -#define DNA_UI_HEAD_MARK_STYLE 43 -#define DNA_UI_BODY_MARK_STYLE 44 -#define DNA_UI_TAIL_MARK_STYLE 45 -#define DNA_UI_PHYSIQUE 46 -#define DNA_UI_HEIGHT 47 -#define DNA_UI_LENGTH 48 // Update this when you add something, or you WILL break shit. +#define DNA_UI_BODY_TYPE 38 +#define DNA_UI_BEARD_STYLE 39 +#define DNA_UI_HAIR_STYLE 40 +#define DNA_UI_HACC_STYLE 41 +#define DNA_UI_BACC_STYLE 42 +#define DNA_UI_HAIR_GRADIENT_STYLE 43 +#define DNA_UI_HEAD_MARK_STYLE 44 +#define DNA_UI_BODY_MARK_STYLE 45 +#define DNA_UI_TAIL_MARK_STYLE 46 +#define DNA_UI_PHYSIQUE 47 +#define DNA_UI_HEIGHT 48 +#define DNA_UI_LENGTH 49 // Update this when you add something, or you WILL break shit. #define DNA_SE_LENGTH 55 // Was STRUCDNASIZE, size 27. 15 new blocks added = 42, plus room to grow. diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 4f808a9ad0a3..62d3df6514e0 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -58,6 +58,10 @@ #define isclothing(A) (istype(A, /obj/item/clothing)) +#define isprojectile(A) (istype(A, /obj/item/projectile)) + +#define isgun(A) (istype(A, /obj/item/gun)) + #define is_pen(W) (istype(W, /obj/item/pen) || istype(W, /obj/item/flashlight/pen)) #define is_pda(W) (istype(W, /obj/item/pda)) diff --git a/code/__DEFINES/martial_arts.dm b/code/__DEFINES/martial_arts.dm index 4e8111e05733..566c7a7a714f 100644 --- a/code/__DEFINES/martial_arts.dm +++ b/code/__DEFINES/martial_arts.dm @@ -14,4 +14,4 @@ #define MARTIAL_COMBO_STEP_HELP "Help" // A check used for all act types. Such as disarm_act -#define MARTIAL_ARTS_ACT_CHECK if((. = ..()) != FALSE) return . +#define MARTIAL_ARTS_ACT_CHECK if((. = ..()) != FALSE) return diff --git a/code/__DEFINES/misc_defines.dm b/code/__DEFINES/misc_defines.dm index 47d29be3c7e2..d946b9763acf 100644 --- a/code/__DEFINES/misc_defines.dm +++ b/code/__DEFINES/misc_defines.dm @@ -398,7 +398,7 @@ #define INVESTIGATE_BOMB "bombs" // The SQL version required by this version of the code -#define SQL_VERSION 542206 // SS220 EDIT +#define SQL_VERSION 552206 // SS220 EDIT // Vending machine stuff #define CAT_NORMAL (1<<0) @@ -695,3 +695,6 @@ do { \ #define TEAM_ADMIN_ADD_OBJ_SUCCESS (1<<0) #define TEAM_ADMIN_ADD_OBJ_CANCEL_LOG (1<<1) #define TEAM_ADMIN_ADD_OBJ_PURPOSEFUL_CANCEL (1<<2) + +/// A helper used by `restrict_file_types.py` to identify types to restrict in a file. Not used by byond at all. +#define RESTRICT_TYPE(type) // do nothing diff --git a/code/__DEFINES/mob_defines.dm b/code/__DEFINES/mob_defines.dm index 1d66a0504ff7..ebc22191907e 100644 --- a/code/__DEFINES/mob_defines.dm +++ b/code/__DEFINES/mob_defines.dm @@ -263,8 +263,6 @@ #define ispathsilicon(A) (ispath(A, /mob/living/silicon)) #define ispathanimal(A) (ispath(A, /mob/living/simple_animal)) -#define isAutoAnnouncer(A) (istype((A), /mob/living/automatedannouncer)) - #define iscameramob(A) (istype((A), /mob/camera)) #define isAIEye(A) (istype((A), /mob/camera/aiEye)) #define isovermind(A) (istype((A), /mob/camera/blob)) diff --git a/code/__DEFINES/radio_defines.dm b/code/__DEFINES/radio_defines.dm index 386b64ad749d..bfe3f26259ba 100644 --- a/code/__DEFINES/radio_defines.dm +++ b/code/__DEFINES/radio_defines.dm @@ -41,7 +41,7 @@ #define TRANSMISSION_WIRE 0 #define TRANSMISSION_RADIO 1 -//This filter is special because devices belonging to default also recieve signals sent to any other filter. +//This filter is special because devices belonging to default also receive signals sent to any other filter. #define RADIO_DEFAULT "radio_default" #define RADIO_TO_AIRALARM "radio_airalarm" //air alarms #define RADIO_FROM_AIRALARM "radio_airalarm_rcvr" //devices interested in recieving signals from air alarms diff --git a/code/__HELPERS/colour_helpers.dm b/code/__HELPERS/colour_helpers.dm index b9853409725d..2c8668fd400e 100644 --- a/code/__HELPERS/colour_helpers.dm +++ b/code/__HELPERS/colour_helpers.dm @@ -3,9 +3,9 @@ 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 + if(length(RGB1) < length(RGB2)) RGB1 += 255 + else if(length(RGB2) < length(RGB1)) RGB2 += 255 + var/usealpha = length(RGB1) > 3 var/r = round(RGB1[1] + (RGB2[1] - RGB1[1]) * amount, 1) var/g = round(RGB1[2] + (RGB2[2] - RGB1[2]) * amount, 1) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 1bba4042d0cc..59da69200262 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -242,7 +242,6 @@ continue if(is_same_root_atom(M, speaker_coverage[ear])) . |= M - return . /proc/inLineOfSight(X1,Y1,X2,Y2,Z=1,PX1=16.5,PY1=16.5,PX2=16.5,PY2=16.5) var/turf/T @@ -314,7 +313,7 @@ var/roletext = get_roletext(be_special_type) var/list/candidates = list() // Keep looping until we find a non-afk candidate within the time bracket (we limit the bracket to 10 minutes (6000)) - while(!candidates.len && afk_bracket < 6000) + while(!length(candidates) && afk_bracket < 6000) for(var/mob/dead/observer/G in GLOB.player_list) if(G.client != null) if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) @@ -330,7 +329,7 @@ var/roletext = get_roletext(be_special_type) var/list/candidates = list() // Keep looping until we find a non-afk candidate within the time bracket (we limit the bracket to 10 minutes (6000)) - while(!candidates.len && afk_bracket < 6000) + while(!length(candidates) && afk_bracket < 6000) for(var/mob/dead/observer/G in GLOB.player_list) if(G.client != null) if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) @@ -362,7 +361,7 @@ /proc/get_active_player_count() // Get active players who are playing in the round var/active_players = 0 - for(var/i = 1; i <= GLOB.player_list.len; i++) + for(var/i = 1; i <= length(GLOB.player_list); i++) var/mob/M = GLOB.player_list[i] if(M && M.client) if(isnewplayer(M)) // exclude people in the lobby @@ -447,7 +446,7 @@ /proc/pollCandidatesWithVeto(adminclient, adminusr, max_slots, Question, be_special_type, antag_age_check = FALSE, poll_time = 300, ignore_respawnability = FALSE, min_hours = FALSE, flashwindow = TRUE, check_antaghud = TRUE, source, role_cleanname) var/list/willing_ghosts = SSghost_spawns.poll_candidates(Question, be_special_type, antag_age_check, poll_time, ignore_respawnability, min_hours, flashwindow, check_antaghud, source, role_cleanname) var/list/selected_ghosts = list() - if(!willing_ghosts.len) + if(!length(willing_ghosts)) return selected_ghosts var/list/candidate_ghosts = willing_ghosts.Copy() @@ -459,7 +458,7 @@ else candidate_ghosts -= G - for(var/i = max_slots, (i > 0 && candidate_ghosts.len), i--) + for(var/i = max_slots, (i > 0 && length(candidate_ghosts)), i--) var/this_ghost = input("Pick players. This will go on until there either no more ghosts to pick from or the [i] remaining slot(s) are full.", "Candidates") as null|anything in candidate_ghosts candidate_ghosts -= this_ghost selected_ghosts += this_ghost diff --git a/code/__HELPERS/heap.dm b/code/__HELPERS/heap.dm index c9ad037755f0..3d827dda0cfb 100644 --- a/code/__HELPERS/heap.dm +++ b/code/__HELPERS/heap.dm @@ -12,23 +12,23 @@ cmp = compare /datum/heap/proc/IsEmpty() - return !L.len + return !length(L) //Insert and place at its position a new node in the heap /datum/heap/proc/Insert(atom/A) L.Add(A) - Swim(L.len) + Swim(length(L)) //removes and returns the first element of the heap //(i.e the max or the min dependant on the comparison function) /datum/heap/proc/Pop() - if(!L.len) + if(!length(L)) return null . = L[1] - L[1] = L[L.len] - L.Cut(L.len) + L[1] = L[length(L)] + L.Cut(length(L)) Sink(1) @@ -53,10 +53,10 @@ //Returns the greater (relative to the comparison proc) of a node children //or 0 if there's no child /datum/heap/proc/GetGreaterChild(index) - if(index * 2 > L.len) + if(index * 2 > length(L)) return 0 - if(index * 2 + 1 > L.len) + if(index * 2 + 1 > length(L)) return index * 2 if(call(cmp)(L[index * 2], L[index * 2 + 1]) < 0) diff --git a/code/__HELPERS/icon_helpers.dm b/code/__HELPERS/icon_helpers.dm index da7a0cfb9be5..f51269e72b1b 100644 --- a/code/__HELPERS/icon_helpers.dm +++ b/code/__HELPERS/icon_helpers.dm @@ -86,7 +86,7 @@ var/curblend = A.blend_mode || defblend - if(A.overlays.len || A.underlays.len) + if(length(A.overlays) || length(A.underlays)) 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() @@ -102,7 +102,7 @@ // 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) + for(var/i in 1 to length(process)) var/image/current = process[i] if(!current) continue @@ -114,7 +114,7 @@ return flat current_layer = process_set + A.layer + current_layer / 1000 - for(var/p in 1 to layers.len) + for(var/p in 1 to length(layers)) var/image/cmp = layers[p] if(current_layer < layers[cmp]) layers.Insert(p, current) diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index 025be39f3b4f..affda69950a6 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -266,7 +266,7 @@ DEFINE_BITFIELD(smoothing_junction, list( A.bottom_left_corner = se new_overlays += se - if(new_overlays.len) + if(length(new_overlays)) A.add_overlay(new_overlays) ///Scans direction to find targets to smooth with. diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index 7a90a0543e5f..cd6d5d8820b2 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -101,9 +101,9 @@ //Returns list element or null. Should prevent "index out of bounds" error. /proc/listgetindex(list/list, index) - if(istype(list) && list.len) + if(istype(list) && length(list)) if(isnum(index)) - if(InRange(index,1,list.len)) + if(InRange(index,1,length(list))) return list[index] else if(index in list) return list[index] @@ -111,13 +111,13 @@ //Return either pick(list) or null if list is not of type /list or is empty /proc/safepick(list/list) - if(!islist(list) || !list.len) + if(!islist(list) || !length(list)) return return pick(list) //Checks if the list is empty /proc/isemptylist(list/list) - if(!list.len) + if(!length(list)) return 1 return 0 @@ -132,7 +132,7 @@ //Checks for specific types in specifically structured (Assoc "type" = TRUE) lists ('typecaches') /proc/is_type_in_typecache(atom/A, list/L) - if(!L || !L.len || !A) + if(!L || !length(L) || !A) return 0 return L[A.type] @@ -250,7 +250,7 @@ //Pick a random element from the list and remove it from the list. /proc/pick_n_take(list/listfrom) - if(listfrom.len > 0) + if(length(listfrom) > 0) var/picked = pick(listfrom) listfrom -= picked return picked @@ -275,12 +275,12 @@ //Returns the top(last) element from the list and removes it from the list (typical stack function) /proc/pop(list/L) - if(L.len) - . = L[L.len] + if(length(L)) + . = L[length(L)] L.len-- /proc/popleft(list/L) - if(L.len) + if(length(L)) . = L[1] L.Cut(1,2) @@ -293,7 +293,7 @@ /proc/reverselist(list/L) var/list/output = list() if(L) - for(var/i = L.len; i >= 1; i--) + for(var/i = length(L); i >= 1; i--) output += L[i] return output @@ -303,8 +303,8 @@ return L = L.Copy() - for(var/i=1, i sorted_text.len) + if(insert_index > length(sorted_text)) sorted_text += current_sort_text continue @@ -673,13 +673,13 @@ #define LAZYINITLIST(L) if(!L) { L = list() } -#define UNSETEMPTY(L) if(L && !L.len) L = null -#define LAZYREMOVE(L, I) if(L) { L -= I; if(!L.len) { L = null; } } +#define UNSETEMPTY(L) if(L && !length(L)) L = null +#define LAZYREMOVE(L, I) if(L) { L -= I; if(!length(L)) { L = null; } } #define LAZYADD(L, I) if(!L) { L = list(); } L += I; #define LAZYOR(L, I) if(!L) { L = list(); } L |= I; /// Adds I to L, initializing L if necessary, if I is not already in L #define LAZYDISTINCTADD(L, I) if(!L) { L = list(); } L |= I; -#define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= L.len ? L[I] : null) : L[I]) : null) +#define LAZYACCESS(L, I) (L ? (isnum(I) ? (I > 0 && I <= length(L) ? L[I] : null) : L[I]) : null) #define LAZYLEN(L) length(L) // Despite how pointless this looks, it's still needed in order to convey that the list is specificially a 'Lazy' list. #define LAZYCLEARLIST(L) if(L) L.Cut() @@ -707,8 +707,8 @@ if(!L) return - for(var/i=1, i= 2) - fromIndex = fromIndex % L.len - toIndex = toIndex % (L.len + 1) + if(length(L) >= 2) + fromIndex = fromIndex % length(L) + toIndex = toIndex % (length(L) + 1) if(fromIndex <= 0) - fromIndex += L.len + fromIndex += length(L) if(toIndex <= 0) - toIndex += L.len + 1 + toIndex += length(L) + 1 var/datum/sortInstance/SI = GLOB.sortInstance if(!SI) diff --git a/code/__HELPERS/sorts/MergeSort.dm b/code/__HELPERS/sorts/MergeSort.dm index b6072842b682..0ce79909b5cd 100644 --- a/code/__HELPERS/sorts/MergeSort.dm +++ b/code/__HELPERS/sorts/MergeSort.dm @@ -1,12 +1,12 @@ //merge-sort - gernerally faster than insert sort, for runs of 7 or larger /proc/sortMerge(list/L, cmp = GLOBAL_PROC_REF(cmp_numeric_asc), associative, fromIndex = 1, toIndex) - if(L && L.len >= 2) - fromIndex = fromIndex % L.len - toIndex = toIndex % (L.len + 1) + if(L && length(L) >= 2) + fromIndex = fromIndex % length(L) + toIndex = toIndex % (length(L) + 1) if(fromIndex <= 0) - fromIndex += L.len + fromIndex += length(L) if(toIndex <= 0) - toIndex += L.len + 1 + toIndex += length(L) + 1 var/datum/sortInstance/SI = GLOB.sortInstance if(!SI) diff --git a/code/__HELPERS/sorts/TimSort.dm b/code/__HELPERS/sorts/TimSort.dm index f71cb05b0669..faf3e74aa7df 100644 --- a/code/__HELPERS/sorts/TimSort.dm +++ b/code/__HELPERS/sorts/TimSort.dm @@ -1,12 +1,12 @@ //TimSort interface /proc/sortTim(list/L, cmp = GLOBAL_PROC_REF(cmp_numeric_asc), associative, fromIndex = 1, toIndex = 0) - if(L && L.len >= 2) - fromIndex = fromIndex % L.len - toIndex = toIndex % (L.len + 1) + if(L && length(L) >= 2) + fromIndex = fromIndex % length(L) + toIndex = toIndex % (length(L) + 1) if(fromIndex <= 0) - fromIndex += L.len + fromIndex += length(L) if(toIndex <= 0) - toIndex += L.len + 1 + toIndex += length(L) + 1 var/datum/sortInstance/SI = GLOB.sortInstance if(!SI) diff --git a/code/__HELPERS/sorts/__main.dm b/code/__HELPERS/sorts/__main.dm index b5368330d59b..6da4fc6e8784 100644 --- a/code/__HELPERS/sorts/__main.dm +++ b/code/__HELPERS/sorts/__main.dm @@ -75,7 +75,7 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new()) //Merge all remaining runs to complete sort //ASSERT(start == end) mergeForceCollapse(); - //ASSERT(runBases.len == 1) + //ASSERT(length(runBases) == 1) //reset minGallop, for successive calls minGallop = MIN_GALLOP @@ -177,8 +177,8 @@ reverse a descending sequence without violating stability. //This method is called each time a new run is pushed onto the stack. //So the invariants are guaranteed to hold for i= 2) - var/n = runBases.len - 1 + while(length(runBases) >= 2) + var/n = length(runBases) - 1 if(n > 1 && runLens[n - 1] <= runLens[n] + runLens[n + 1]) if(runLens[n - 1] < runLens[n + 1]) --n @@ -192,8 +192,8 @@ reverse a descending sequence without violating stability. //Merges all runs on the stack until only one remains. //Called only once, to finalise the sort /datum/sortInstance/proc/mergeForceCollapse() - while(runBases.len >= 2) - var/n = runBases.len - 1 + while(length(runBases) >= 2) + var/n = length(runBases) - 1 if(n > 1 && runLens[n - 1] < runLens[n + 1]) --n mergeAt(n) @@ -203,9 +203,9 @@ reverse a descending sequence without violating stability. //Run i must be the penultimate or antepenultimate run on the stack //In other words, i must be equal to stackSize-2 or stackSize-3 /datum/sortInstance/proc/mergeAt(i) - //ASSERT(runBases.len >= 2) + //ASSERT(length(runBases) >= 2) //ASSERT(i >= 1) - //ASSERT(i == runBases.len - 1 || i == runBases.len - 2) + //ASSERT(i == length(runBases) - 1 || i == length(runBases) - 2) var/base1 = runBases[i] var/base2 = runBases[i + 1] @@ -590,8 +590,8 @@ reverse a descending sequence without violating stability. while(remaining > 0) - while(runBases.len >= 2) - var/n = runBases.len - 1 + while(length(runBases) >= 2) + var/n = length(runBases) - 1 if(n > 1 && runLens[n - 1] <= runLens[n] + runLens[n + 1]) if(runLens[n - 1] < runLens[n + 1]) --n @@ -601,8 +601,8 @@ reverse a descending sequence without violating stability. else break //Invariant is established - while(runBases.len >= 2) - var/n = runBases.len - 1 + while(length(runBases) >= 2) + var/n = length(runBases) - 1 if(n > 1 && runLens[n - 1] < runLens[n + 1]) --n mergeAt2(n) diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index 68320b724522..5e7475afad4f 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -553,9 +553,9 @@ if(tag == "img") var/list/img_props = splittext(arg, ";") - if(img_props.len == 3) + if(length(img_props) == 3) return "" - if(img_props.len == 2) + if(length(img_props) == 2) return "" return "" diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 9b8e2bb3ae4e..ce8bf3888506 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -193,7 +193,6 @@ if(rights & R_MENTOR) . += "[seperator]+MENTOR" if(rights & R_VIEWRUNTIMES) . += "[seperator]+VIEWRUNTIMES" if(rights & R_MAINTAINER) . += "[seperator]+MAINTAINER" - return . /proc/ui_style2icon(ui_style) switch(ui_style) @@ -323,7 +322,7 @@ if(entry == null) return null matrix_list += entry - if(matrix_list.len < 6) + if(length(matrix_list) < 6) return null var/a = matrix_list[1] var/b = matrix_list[2] diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 49d666e63101..58a5d612d301 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -323,7 +323,6 @@ if(A.control_disabled) continue . += A - return . //Find an active ai with the least borgs. VERBOSE PROCNAME HUH! /proc/select_active_ai_with_fewest_borgs() @@ -1951,6 +1950,27 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) pixel_x = initialpixelx pixel_y = initialpixely +/// Returns a turf based on text inputs, original turf and viewing client +/proc/parse_caught_click_modifiers(list/modifiers, turf/origin, client/viewing_client) + if(!modifiers) + return + + var/screen_loc = splittext(modifiers["screen-loc"], ",") + var/list/actual_view = getviewsize(viewing_client ? viewing_client.view : world.view) + var/click_turf_x = splittext(screen_loc[1], ":") + var/click_turf_y = splittext(screen_loc[2], ":") + var/click_turf_z = origin.z + + var/click_turf_px = text2num(click_turf_x[2]) + var/click_turf_py = text2num(click_turf_y[2]) + click_turf_x = origin.x + text2num(click_turf_x[1]) - round(actual_view[1] / 2) - 1 + click_turf_y = origin.y + text2num(click_turf_y[1]) - round(actual_view[2] / 2) - 1 + + var/turf/click_turf = locate(clamp(click_turf_x, 1, world.maxx), clamp(click_turf_y, 1, world.maxy), click_turf_z) + LAZYSET(modifiers, "icon-x", "[(click_turf_px - click_turf.pixel_x) + ((click_turf_x - click_turf.x) * world.icon_size)]") + LAZYSET(modifiers, "icon-y", "[(click_turf_py - click_turf.pixel_y) + ((click_turf_y - click_turf.y) * world.icon_size)]") + return click_turf + /proc/params2turf(scr_loc, turf/origin, client/C) if(!scr_loc) return null diff --git a/code/_onclick/drag_drop.dm b/code/_onclick/drag_drop.dm index 420e9d4d9fa7..9f40c657b959 100644 --- a/code/_onclick/drag_drop.dm +++ b/code/_onclick/drag_drop.dm @@ -40,11 +40,78 @@ FALSE if not usr.ClickOn(src, params) // if not, we click object /* -recieve a mousedrop +receive a mousedrop called on object which was under the object you dragged and dropped return TRUE if you want to prevent us click the object actually if you do something in that proc like changing user location or whatever, you expected to return TRUE to inform the game this action was expected and its fine */ /atom/proc/MouseDrop_T(atom/dropping, mob/user, params) // return TRUE if you want to prevent us click the object after it - return + return FALSE + +/client/MouseDown(datum/object, location, control, params) + if(QDELETED(object)) // Yep, you can click on qdeleted things before they have time to nullspace. Fun. + return + SEND_SIGNAL(src, COMSIG_CLIENT_MOUSEDOWN, object, location, control, params) + if(mouse_down_icon) + mouse_pointer_icon = mouse_down_icon + var/delay = mob.CanMobAutoclick(object, location, params) + if(delay) + selected_target[1] = object + selected_target[2] = params + while(selected_target[1]) + Click(selected_target[1], location, control, selected_target[2]) + sleep(delay) + +/client/MouseUp(object, location, control, params) + if(SEND_SIGNAL(src, COMSIG_CLIENT_MOUSEUP, object, location, control, params) & COMPONENT_CLIENT_MOUSEUP_INTERCEPT) + click_intercept_time = world.time + if(mouse_up_icon) + mouse_pointer_icon = mouse_up_icon + selected_target[1] = null + +/mob/proc/CanMobAutoclick(object, location, params) + return FALSE + +/mob/living/carbon/CanMobAutoclick(atom/object, location, params) + if(!object.IsAutoclickable()) + return FALSE + var/obj/item/active_item = get_active_hand() + return active_item?.CanItemAutoclick(object, location, params) + +/obj/item/proc/CanItemAutoclick(object, location, params) + return FALSE + +/atom/proc/IsAutoclickable() + return TRUE + +/obj/screen/IsAutoclickable() + return FALSE + +/obj/screen/click_catcher/IsAutoclickable() + return TRUE + +// The actual arguments of this: +// MouseDrag(src_object as null|atom in usr.client, +// over_object as null|atom in usr.client, +// src_location as null|turf|text in usr.client, +// over_location as null|turf|text in usr.client, +// src_control as text, over_control as text, params as text) +/client/MouseDrag(src_object, atom/over_object, src_location, turf/over_location, src_control, over_control, params) + var/list/modifiers = params2list(params) + if(!drag_start) // If we're just starting to drag + drag_start = world.time + drag_details = modifiers.Copy() + mouseParams = params + mouse_location_UID = isturf(over_location) ? over_location.UID() : over_location + mouse_object_UID = over_object?.UID() + if(selected_target[1] && over_object?.IsAutoclickable()) + selected_target[1] = over_object + selected_target[2] = params + SEND_SIGNAL(src, COMSIG_CLIENT_MOUSEDRAG, src_object, over_object, src_location, over_location, src_control, over_control, params) + return ..() + +/client/MouseDrop(atom/src_object, atom/over_object, atom/src_location, atom/over_location, src_control, over_control, params) + ..() + drag_start = 0 + drag_details = null diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 6cf0868dd45f..8af3de91da03 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -776,10 +776,10 @@ so as to remain in compliance with the most up-to-date laws." return FALSE var/icon_pref if(!hud_shown) - for(var/i in 1 to alerts.len) + for(var/i in 1 to length(alerts)) mymob.client.screen -= alerts[alerts[i]] return TRUE - for(var/i in 1 to alerts.len) + for(var/i in 1 to length(alerts)) var/atom/movable/screen/alert/alert = alerts[alerts[i]] if(alert.icon_state == "template") if(!icon_pref) diff --git a/code/_onclick/hud/hud_datum.dm b/code/_onclick/hud/hud_datum.dm index 6ac4cce04b8e..804e0c0f90f7 100644 --- a/code/_onclick/hud/hud_datum.dm +++ b/code/_onclick/hud/hud_datum.dm @@ -252,3 +252,7 @@ /datum/hud/proc/update_locked_slots() return + +/datum/hud/proc/remove_vampire_hud() + static_inventory -= vampire_blood_display + QDEL_NULL(vampire_blood_display) diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index e52f6476cebe..36082679a21c 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -10,6 +10,7 @@ GLOBAL_LIST_EMPTY(radial_menus) var/datum/radial_menu/parent /atom/movable/screen/radial/Destroy() + parent.current_user.screen -= src parent = null return ..() @@ -90,9 +91,9 @@ GLOBAL_LIST_EMPTY(radial_menus) zone = 360 - starting_angle + ending_angle max_elements = round(zone / min_angle) - var/paged = max_elements < choices.len - if(elements.len < max_elements) - var/elements_to_add = max_elements - elements.len + var/paged = max_elements < length(choices) + if(length(elements) < max_elements) + var/elements_to_add = max_elements - length(elements) for(var/i in 1 to elements_to_add) //Create all elements var/atom/movable/screen/radial/new_element = new /atom/movable/screen/radial/slice new_element.parent = src @@ -102,18 +103,18 @@ GLOBAL_LIST_EMPTY(radial_menus) page_data = list(null) var/list/current = list() var/list/choices_left = choices.Copy() - while(choices_left.len) - if(current.len == max_elements) + while(length(choices_left)) + if(length(current) == max_elements) page_data[page] = current page++ page_data.len++ current = list() - if(paged && current.len == max_elements - 1) + if(paged && length(current) == max_elements - 1) current += NEXT_PAGE_ID continue else current += popleft(choices_left) - if(paged && current.len < max_elements) + if(paged && length(current) < max_elements) current += NEXT_PAGE_ID page_data[page] = current @@ -123,14 +124,14 @@ GLOBAL_LIST_EMPTY(radial_menus) /datum/radial_menu/proc/update_screen_objects() var/list/page_choices = page_data[current_page] - var/angle_per_element = round(zone / page_choices.len) + var/angle_per_element = round(zone / length(page_choices)) if(current_user.mob.z && anchor.z) pixel_x_difference = ((world.icon_size * anchor.x) + anchor.step_x + anchor.pixel_x) - ((world.icon_size * current_user.mob.x) + current_user.mob.step_x + current_user.mob.pixel_x) pixel_y_difference = ((world.icon_size * anchor.y) + anchor.step_y + anchor.pixel_y) - ((world.icon_size * current_user.mob.y) + current_user.mob.step_y + current_user.mob.pixel_y) - for(var/i in 1 to elements.len) + for(var/i in 1 to length(elements)) var/atom/movable/screen/radial/E = elements[i] var/angle = WRAP(starting_angle + (i - 1) * angle_per_element, 0, 360) - if(i > page_choices.len) + if(i > length(page_choices)) HideElement(E) else SetElement(E,page_choices[i], angle) @@ -187,10 +188,10 @@ GLOBAL_LIST_EMPTY(radial_menus) selected_choice = choices_values[choice_id] /datum/radial_menu/proc/get_next_id() - return "c_[choices.len]" + return "c_[length(choices)]" /datum/radial_menu/proc/set_choices(list/new_choices) - if(choices.len) + if(length(choices)) Reset() for(var/E in new_choices) var/id = get_next_id() @@ -245,7 +246,7 @@ GLOBAL_LIST_EMPTY(radial_menus) QDEL_LIST_CONTENTS(elements) QDEL_NULL(close_button) anchor = null - . = ..() + return ..() /* Presents radial menu to user anchored to anchor (or user if the anchor is currently in users screen) diff --git a/code/_onclick/hud/robot_hud.dm b/code/_onclick/hud/robot_hud.dm index ae1e54f9fe2b..b2c692dfc320 100644 --- a/code/_onclick/hud/robot_hud.dm +++ b/code/_onclick/hud/robot_hud.dm @@ -216,7 +216,7 @@ if(!R.robot_modules_background) return - var/display_rows = CEILING(R.module.modules.len / 8, 1) + var/display_rows = CEILING(length(R.module.modules) / 8, 1) R.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7" R.client.screen += R.robot_modules_background diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 48c0664d7405..bb0413235279 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -204,7 +204,7 @@ return if(I in S.contents) // If the item is already in the storage, move them to the end of the list - if(S.contents[S.contents.len] == I) // No point moving them at the end if they're already there! + if(S.contents[length(S.contents)] == I) // No point moving them at the end if they're already there! return var/list/new_contents = S.contents.Copy() diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 0e789eacb89c..17d9c8c54e46 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -145,7 +145,7 @@ if(I.discrete) return var/message_verb = "attacked" - if(I.attack_verb && I.attack_verb.len) + if(I.attack_verb && length(I.attack_verb)) message_verb = "[pick(I.attack_verb)]" else if(!I.force) return diff --git a/code/controllers/globals.dm b/code/controllers/globals.dm index 3b448d91462c..a10701fa5389 100644 --- a/code/controllers/globals.dm +++ b/code/controllers/globals.dm @@ -52,10 +52,10 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars) gvars_datum_init_order = list() gvars_datum_protected_varlist = list("gvars_datum_protected_varlist" = TRUE) var/list/global_procs = typesof(/datum/controller/global_vars/proc) - var/expected_len = vars.len - gvars_datum_in_built_vars.len - if(global_procs.len != expected_len) - warning("Unable to detect all global initialization procs! Expected [expected_len] got [global_procs.len]!") - if(global_procs.len) + var/expected_len = length(vars) - length(gvars_datum_in_built_vars) + if(length(global_procs) != expected_len) + warning("Unable to detect all global initialization procs! Expected [expected_len] got [length(global_procs)]!") + if(length(global_procs)) var/list/expected_global_procs = vars - gvars_datum_in_built_vars for(var/I in global_procs) expected_global_procs -= replacetext("[I]", "InitGlobal", "") diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 4ecc06b54d3c..5593027e4822 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -332,9 +332,9 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/ss_runlevels = SS.runlevels var/added_to_any = FALSE - for(var/I in 1 to GLOB.bitflags.len) + for(var/I in 1 to length(GLOB.bitflags)) if(ss_runlevels & GLOB.bitflags[I]) - while(runlevel_sorted_subsystems.len < I) + while(length(runlevel_sorted_subsystems) < I) runlevel_sorted_subsystems += list(list()) runlevel_sorted_subsystems[I] += SS added_to_any = TRUE diff --git a/code/controllers/subsystem/SSacid.dm b/code/controllers/subsystem/SSacid.dm index 469cd7d06fcb..6f470b451bcf 100644 --- a/code/controllers/subsystem/SSacid.dm +++ b/code/controllers/subsystem/SSacid.dm @@ -25,8 +25,8 @@ SUBSYSTEM_DEF(acid) //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/obj/O = currentrun[currentrun.len] + while(length(currentrun)) + var/obj/O = currentrun[length(currentrun)] currentrun.len-- if(!O || QDELETED(O)) processing -= O diff --git a/code/controllers/subsystem/SSafk.dm b/code/controllers/subsystem/SSafk.dm index b83f7d05d73e..6bf0e99629e3 100644 --- a/code/controllers/subsystem/SSafk.dm +++ b/code/controllers/subsystem/SSafk.dm @@ -86,7 +86,7 @@ SUBSYSTEM_DEF(afk) /datum/controller/subsystem/afk/proc/removeFromWatchList(list/toRemove) for(var/C in toRemove) - for(var/i in 1 to afk_players.len) + for(var/i in 1 to length(afk_players)) if(afk_players[i] == C) afk_players.Cut(i, i + 1) break diff --git a/code/controllers/subsystem/SSair.dm b/code/controllers/subsystem/SSair.dm index d5901824dc91..832b52cb5717 100644 --- a/code/controllers/subsystem/SSair.dm +++ b/code/controllers/subsystem/SSair.dm @@ -59,13 +59,13 @@ SUBSYSTEM_DEF(air) msg += "DPN:[round(cost_deferred_pipenets,1)]|" msg += "AM:[round(cost_atmos_machinery,1)]" msg += "} " - msg += "AT:[active_turfs.len]|" - msg += "EG:[excited_groups.len]|" - msg += "HS:[hotspots.len]|" - msg += "PN:[networks.len]|" - msg += "HP:[high_pressure_delta.len]|" - msg += "AS:[active_super_conductivity.len]|" - msg += "AT/MS:[round((cost ? active_turfs.len/cost : 0),0.1)]" + msg += "AT:[length(active_turfs)]|" + msg += "EG:[length(excited_groups)]|" + msg += "HS:[length(hotspots)]|" + msg += "PN:[length(networks)]|" + msg += "HP:[length(high_pressure_delta)]|" + msg += "AS:[length(active_super_conductivity)]|" + msg += "AT/MS:[round((cost ? length(active_turfs)/cost : 0),0.1)]" return msg.Join("") /datum/controller/subsystem/air/get_metrics() @@ -179,8 +179,8 @@ SUBSYSTEM_DEF(air) src.currentrun = deferred_pipenet_rebuilds.Copy() //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/obj/machinery/atmospherics/A = currentrun[currentrun.len] + while(length(currentrun)) + var/obj/machinery/atmospherics/A = currentrun[length(currentrun)] currentrun.len-- if(A) A.build_network(remove_deferral = TRUE) @@ -194,8 +194,8 @@ SUBSYSTEM_DEF(air) src.currentrun = networks.Copy() //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/datum/pipeline/thing = currentrun[currentrun.len] + while(length(currentrun)) + var/datum/pipeline/thing = currentrun[length(currentrun)] currentrun.len-- if(thing) thing.process() @@ -210,8 +210,8 @@ SUBSYSTEM_DEF(air) src.currentrun = atmos_machinery.Copy() //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/obj/machinery/atmospherics/M = currentrun[currentrun.len] + while(length(currentrun)) + var/obj/machinery/atmospherics/M = currentrun[length(currentrun)] currentrun.len-- if(!M || (M.process_atmos(seconds) == PROCESS_KILL)) atmos_machinery.Remove(M) @@ -223,8 +223,8 @@ SUBSYSTEM_DEF(air) src.currentrun = active_super_conductivity.Copy() //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/turf/simulated/T = currentrun[currentrun.len] + while(length(currentrun)) + var/turf/simulated/T = currentrun[length(currentrun)] currentrun.len-- T.super_conduct() if(MC_TICK_CHECK) @@ -235,8 +235,8 @@ SUBSYSTEM_DEF(air) src.currentrun = hotspots.Copy() //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/obj/effect/hotspot/H = currentrun[currentrun.len] + while(length(currentrun)) + var/obj/effect/hotspot/H = currentrun[length(currentrun)] currentrun.len-- if(H) H.process() @@ -246,8 +246,8 @@ SUBSYSTEM_DEF(air) return /datum/controller/subsystem/air/proc/process_high_pressure_delta(resumed = 0) - while(high_pressure_delta.len) - var/turf/simulated/T = high_pressure_delta[high_pressure_delta.len] + while(length(high_pressure_delta)) + var/turf/simulated/T = high_pressure_delta[length(high_pressure_delta)] high_pressure_delta.len-- T.high_pressure_movements() T.pressure_difference = 0 @@ -261,8 +261,8 @@ SUBSYSTEM_DEF(air) src.currentrun = active_turfs.Copy() //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/turf/simulated/T = currentrun[currentrun.len] + while(length(currentrun)) + var/turf/simulated/T = currentrun[length(currentrun)] currentrun.len-- if(T) T.process_cell(fire_count) @@ -274,8 +274,8 @@ SUBSYSTEM_DEF(air) src.currentrun = excited_groups.Copy() //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/datum/excited_group/EG = currentrun[currentrun.len] + while(length(currentrun)) + var/datum/excited_group/EG = currentrun[length(currentrun)] currentrun.len-- EG.breakdown_cooldown++ if(EG.breakdown_cooldown == 10) diff --git a/code/controllers/subsystem/SSblackbox.dm b/code/controllers/subsystem/SSblackbox.dm index 6cc8f9c71415..cdd10077d26b 100644 --- a/code/controllers/subsystem/SSblackbox.dm +++ b/code/controllers/subsystem/SSblackbox.dm @@ -68,10 +68,10 @@ SUBSYSTEM_DEF(blackbox) /datum/controller/subsystem/blackbox/Shutdown() sealed = FALSE for(var/obj/machinery/message_server/MS in GLOB.message_servers) - if(MS.pda_msgs.len) - record_feedback("tally", "radio_usage", MS.pda_msgs.len, "PDA") - if(MS.rc_msgs.len) - record_feedback("tally", "radio_usage", MS.rc_msgs.len, "request console") + if(length(MS.pda_msgs)) + record_feedback("tally", "radio_usage", length(MS.pda_msgs), "PDA") + if(length(MS.rc_msgs)) + record_feedback("tally", "radio_usage", length(MS.rc_msgs), "request console") if(length(research_levels)) record_feedback("associative", "high_research_level", 1, research_levels) @@ -248,7 +248,7 @@ SUBSYSTEM_DEF(blackbox) * * depth - Depth to use */ /datum/controller/subsystem/blackbox/proc/record_feedback_recurse_list(list/L, list/key_list, increment, depth = 1) - if(depth == key_list.len) + if(depth == length(key_list)) if(L.Find(key_list[depth])) L["[key_list[depth]]"] += increment else diff --git a/code/controllers/subsystem/SSfires.dm b/code/controllers/subsystem/SSfires.dm index f811713e6321..c98d7f01d5df 100644 --- a/code/controllers/subsystem/SSfires.dm +++ b/code/controllers/subsystem/SSfires.dm @@ -26,8 +26,8 @@ SUBSYSTEM_DEF(fires) //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/obj/O = currentrun[currentrun.len] + while(length(currentrun)) + var/obj/O = currentrun[length(currentrun)] currentrun.len-- if(!O || QDELETED(O)) processing -= O diff --git a/code/controllers/subsystem/SSgarbage.dm b/code/controllers/subsystem/SSgarbage.dm index f567255f7038..9201b040191b 100644 --- a/code/controllers/subsystem/SSgarbage.dm +++ b/code/controllers/subsystem/SSgarbage.dm @@ -89,6 +89,7 @@ SUBSYSTEM_DEF(garbage) if(I.hard_deletes) dellog += "\tTotal Hard Deletes [I.hard_deletes]" dellog += "\tTime Spent Hard Deleting: [I.hard_delete_time]ms" + dellog += "\tAverage References During Hardel: [I.reference_average] references." if(I.slept_destroy) dellog += "\tSleeps: [I.slept_destroy]" if(I.no_respect_force) @@ -258,6 +259,7 @@ SUBSYSTEM_DEF(garbage) I.hard_deletes++ I.hard_delete_time += TICK_DELTA_TO_MS(tick) + I.reference_average = (refcount(I) + I.reference_average) / I.hard_deletes if(tick > highest_del_tickusage) @@ -275,7 +277,7 @@ SUBSYSTEM_DEF(garbage) /datum/controller/subsystem/garbage/Recover() InitQueues() //We first need to create the queues before recovering data if(istype(SSgarbage.queues)) - for(var/i in 1 to SSgarbage.queues.len) + for(var/i in 1 to length(SSgarbage.queues)) queues[i] |= SSgarbage.queues[i] @@ -289,6 +291,8 @@ SUBSYSTEM_DEF(garbage) var/no_respect_force = 0//Number of times it's not respected force=TRUE var/no_hint = 0 //Number of times it's not even bother to give a qdel hint var/slept_destroy = 0 //Number of times it's slept in its destroy + /// Average amount of references that the hard deleted item holds when hard deleted + var/reference_average = 0 /datum/qdel_item/New(mytype) name = "[mytype]" diff --git a/code/controllers/subsystem/SSicon_smooth.dm b/code/controllers/subsystem/SSicon_smooth.dm index 5513d9152d89..1b33f458dadf 100644 --- a/code/controllers/subsystem/SSicon_smooth.dm +++ b/code/controllers/subsystem/SSicon_smooth.dm @@ -10,13 +10,13 @@ SUBSYSTEM_DEF(icon_smooth) var/list/smooth_queue = list() /datum/controller/subsystem/icon_smooth/fire() - while(smooth_queue.len) - var/atom/A = smooth_queue[smooth_queue.len] + while(length(smooth_queue)) + var/atom/A = smooth_queue[length(smooth_queue)] smooth_queue.len-- A.smooth_icon() if(MC_TICK_CHECK) return - if(!smooth_queue.len) + if(!length(smooth_queue)) can_fire = 0 /datum/controller/subsystem/icon_smooth/Initialize() diff --git a/code/controllers/subsystem/SSidlenpcpool.dm b/code/controllers/subsystem/SSidlenpcpool.dm index b5c52f23ae6a..c424950791ed 100644 --- a/code/controllers/subsystem/SSidlenpcpool.dm +++ b/code/controllers/subsystem/SSidlenpcpool.dm @@ -24,8 +24,8 @@ SUBSYSTEM_DEF(idlenpcpool) //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/mob/living/simple_animal/SA = currentrun[currentrun.len] + while(length(currentrun)) + var/mob/living/simple_animal/SA = currentrun[length(currentrun)] --currentrun.len if(!SA) log_debug("idlenpcpool encountered an invalid entry, resumed: [resumed], SA [SA], type of SA [SA?.type], null [SA == null], qdelled [QDELETED(SA)], SA in AI_IDLE list: [SA in GLOB.simple_animals[AI_IDLE]]") diff --git a/code/controllers/subsystem/SSjobs.dm b/code/controllers/subsystem/SSjobs.dm index 3efc1a1731fa..500440bb6429 100644 --- a/code/controllers/subsystem/SSjobs.dm +++ b/code/controllers/subsystem/SSjobs.dm @@ -44,7 +44,7 @@ SUBSYSTEM_DEF(jobs) /datum/controller/subsystem/jobs/proc/SetupOccupations(list/faction = list("Station")) occupations = list() var/list/all_jobs = subtypesof(/datum/job) - if(!all_jobs.len) + if(!length(all_jobs)) to_chat(world, "Error setting up jobs, no job datums found.") return 0 @@ -63,12 +63,12 @@ SUBSYSTEM_DEF(jobs) job_debug.Add(text) /datum/controller/subsystem/jobs/proc/GetJob(rank) - if(!occupations.len) + if(!length(occupations)) SetupOccupations() return name_occupations[rank] /datum/controller/subsystem/jobs/proc/GetJobType(jobtype) - if(!occupations.len) + if(!length(occupations)) SetupOccupations() return type_occupations[jobtype] @@ -241,7 +241,7 @@ SUBSYSTEM_DEF(jobs) if(!job) continue var/list/candidates = FindOccupationCandidates(job, level) - if(!candidates.len) + if(!length(candidates)) continue var/list/filteredCandidates = list() @@ -252,7 +252,7 @@ SUBSYSTEM_DEF(jobs) continue filteredCandidates += V - if(!filteredCandidates.len) + if(!length(filteredCandidates)) continue var/mob/new_player/candidate = pick(filteredCandidates) @@ -269,7 +269,7 @@ SUBSYSTEM_DEF(jobs) if(!job) continue var/list/candidates = FindOccupationCandidates(job, level) - if(!candidates.len) + if(!length(candidates)) continue var/mob/new_player/candidate = pick(candidates) AssignRole(candidate, command_position) @@ -288,7 +288,7 @@ SUBSYSTEM_DEF(jobs) for(var/level = 1 to 3) var/list/candidates = list() candidates = FindOccupationCandidates(job, level) - if(candidates.len) + if(length(candidates)) var/mob/new_player/candidate = pick(candidates) if(AssignRole(candidate, "AI")) ai_selected++ @@ -323,7 +323,7 @@ SUBSYSTEM_DEF(jobs) if(player.ready && player.mind && !player.mind.assigned_role) unassigned += player - Debug("DO, Len: [unassigned.len]") + Debug("DO, Len: [length(unassigned)]") if(!length(unassigned)) return FALSE @@ -336,7 +336,7 @@ SUBSYSTEM_DEF(jobs) Debug("DO, Running Assistant Check 1") var/datum/job/ast = new /datum/job/assistant() var/list/assistant_candidates = FindOccupationCandidates(ast, 3) - Debug("AC1, Candidates: [assistant_candidates.len]") + Debug("AC1, Candidates: [length(assistant_candidates)]") for(var/mob/new_player/player in assistant_candidates) Debug("AC1 pass, Player: [player]") AssignRole(player, "Assistant") diff --git a/code/controllers/subsystem/SSmachinery.dm b/code/controllers/subsystem/SSmachinery.dm index b625979eae5c..e17cf6ec8d66 100644 --- a/code/controllers/subsystem/SSmachinery.dm +++ b/code/controllers/subsystem/SSmachinery.dm @@ -39,15 +39,15 @@ SUBSYSTEM_DEF(machines) propagate_network(PC, PC.powernet) /datum/controller/subsystem/machines/get_stat_details() - return "Machines: [processing.len] | Powernets: [powernets.len] | Deferred: [deferred_powernet_rebuilds.len]" + return "Machines: [length(processing)] | Powernets: [length(powernets)] | Deferred: [length(deferred_powernet_rebuilds)]" /datum/controller/subsystem/machines/proc/process_defered_powernets(resumed = 0) if(!resumed) src.currentrun = deferred_powernet_rebuilds.Copy() //cache for sanid speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/obj/O = currentrun[currentrun.len] + while(length(currentrun)) + var/obj/O = currentrun[length(currentrun)] currentrun.len-- if(O && !QDELETED(O)) var/datum/regional_powernet/newPN = new() // create a new powernet... @@ -62,8 +62,8 @@ SUBSYSTEM_DEF(machines) src.currentrun = powernets.Copy() //cache for sanid speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/datum/regional_powernet/P = currentrun[currentrun.len] + while(length(currentrun)) + var/datum/regional_powernet/P = currentrun[length(currentrun)] currentrun.len-- if(P) P.process_power() // reset the power state @@ -78,8 +78,8 @@ SUBSYSTEM_DEF(machines) src.currentrun = processing.Copy() //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/obj/machinery/thing = currentrun[currentrun.len] + while(length(currentrun)) + var/obj/machinery/thing = currentrun[length(currentrun)] currentrun.len-- if(!QDELETED(thing) && thing.process(seconds) != PROCESS_KILL) if(prob(MACHINE_FLICKER_CHANCE)) diff --git a/code/controllers/subsystem/SSmobs.dm b/code/controllers/subsystem/SSmobs.dm index 537683f1d608..1a3683937b39 100644 --- a/code/controllers/subsystem/SSmobs.dm +++ b/code/controllers/subsystem/SSmobs.dm @@ -35,8 +35,8 @@ SUBSYSTEM_DEF(mobs) //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun var/times_fired = src.times_fired - while(currentrun.len) - var/mob/living/L = currentrun[currentrun.len] + while(length(currentrun)) + var/mob/living/L = currentrun[length(currentrun)] currentrun.len-- if(L) L.Life(seconds, times_fired) diff --git a/code/controllers/subsystem/SSnano_mob_hunter.dm b/code/controllers/subsystem/SSnano_mob_hunter.dm index 49b433ca6b0c..93e622f3ae1b 100644 --- a/code/controllers/subsystem/SSnano_mob_hunter.dm +++ b/code/controllers/subsystem/SSnano_mob_hunter.dm @@ -21,7 +21,7 @@ SUBSYSTEM_DEF(mob_hunt) if(!server_status) return client_mob_update() - if(normal_spawns.len < max_normal_spawns) + if(length(normal_spawns) < max_normal_spawns) spawn_mob() //leaving this here in case admins want to use it for a random mini-event or something @@ -51,7 +51,7 @@ SUBSYSTEM_DEF(mob_hunt) if(!H || H != connected_clients[client]) ex_players |= connected_clients[client] connected_clients[client] = H - if(ex_players.len) //to make sure we don't do this if we didn't lose any player since the last update + if(length(ex_players)) //to make sure we don't do this if we didn't lose any player since the last update for(var/obj/effect/nanomob/N in (normal_spawns + trap_spawns)) N.conceal(ex_players) @@ -59,7 +59,7 @@ SUBSYSTEM_DEF(mob_hunt) if(server_status != 0) return server_status = 1 - while(normal_spawns.len < max_normal_spawns) //repopulate the server's spawns completely if we auto-recover from crash + while(length(normal_spawns) < max_normal_spawns) //repopulate the server's spawns completely if we auto-recover from crash spawn_mob() /datum/controller/subsystem/mob_hunt/proc/manual_reboot() @@ -94,7 +94,7 @@ SUBSYSTEM_DEF(mob_hunt) var/obj/effect/nanomob/new_mob = new /obj/effect/nanomob(mob_info.spawn_point, mob_info) trap_spawns += new_mob new_mob.reveal() - if(trap_spawns.len > max_trap_spawns) + if(length(trap_spawns) > max_trap_spawns) var/obj/effect/nanomob/old_trap = trap_spawns[1] old_trap.despawn() return 1 diff --git a/code/controllers/subsystem/SSnpcpool.dm b/code/controllers/subsystem/SSnpcpool.dm index ca9c3befbeed..8e17b860ac7b 100644 --- a/code/controllers/subsystem/SSnpcpool.dm +++ b/code/controllers/subsystem/SSnpcpool.dm @@ -18,8 +18,8 @@ SUBSYSTEM_DEF(npcpool) var/list/currentrun = src.currentrun - while(currentrun.len) - var/mob/living/simple_animal/SA = currentrun[currentrun.len] + while(length(currentrun)) + var/mob/living/simple_animal/SA = currentrun[length(currentrun)] --currentrun.len if(!SA) log_debug("npcpool encountered an invalid entry, resumed: [resumed], SA [SA], type of SA [SA?.type], null [SA == null], qdelled [QDELETED(SA)], SA in AI_ON list: [SA in GLOB.simple_animals[AI_ON]]") diff --git a/code/controllers/subsystem/SSoverlays.dm b/code/controllers/subsystem/SSoverlays.dm index dad9c3683cf5..ed3382382c96 100644 --- a/code/controllers/subsystem/SSoverlays.dm +++ b/code/controllers/subsystem/SSoverlays.dm @@ -113,7 +113,7 @@ SUBSYSTEM_DEF(overlays) priority_overlays.Cut() //If not already queued for work and there are overlays to remove - if(NOT_QUEUED_ALREADY && remove_overlays.len) + if(NOT_QUEUED_ALREADY && length(remove_overlays)) QUEUE_FOR_COMPILE /atom/proc/cut_overlay(list/overlays, priority) @@ -123,9 +123,9 @@ SUBSYSTEM_DEF(overlays) LAZYINITLIST(add_overlays) //always initialized after this point LAZYINITLIST(priority_overlays) LAZYINITLIST(remove_overlays) - var/a_len = add_overlays.len - var/r_len = remove_overlays.len - var/p_len = priority_overlays.len + var/a_len = length(add_overlays) + var/r_len = length(remove_overlays) + var/p_len = length(priority_overlays) remove_overlays += overlays add_overlays -= overlays @@ -133,9 +133,9 @@ SUBSYSTEM_DEF(overlays) var/list/cached_priority = priority_overlays LAZYREMOVE(cached_priority, overlays) - var/fa_len = add_overlays.len - var/fr_len = remove_overlays.len - var/fp_len = priority_overlays.len + var/fa_len = length(add_overlays) + var/fr_len = length(remove_overlays) + var/fp_len = length(priority_overlays) //If not already queued and there is work to be done if(NOT_QUEUED_ALREADY && (fa_len != a_len || fr_len != r_len || fp_len != p_len)) @@ -149,17 +149,17 @@ SUBSYSTEM_DEF(overlays) LAZYINITLIST(add_overlays) //always initialized after this point LAZYINITLIST(priority_overlays) - var/a_len = add_overlays.len - var/p_len = priority_overlays.len + var/a_len = length(add_overlays) + var/p_len = length(priority_overlays) if(priority) priority_overlays += overlays //or in the image. Can we use [image] = image? - var/fp_len = priority_overlays.len + var/fp_len = length(priority_overlays) if(NOT_QUEUED_ALREADY && fp_len != p_len) QUEUE_FOR_COMPILE else add_overlays += overlays - var/fa_len = add_overlays.len + var/fa_len = length(add_overlays) if(NOT_QUEUED_ALREADY && fa_len != a_len) QUEUE_FOR_COMPILE @@ -200,7 +200,7 @@ SUBSYSTEM_DEF(overlays) var/list/cached_other = other.overlays.Copy() if(cached_other) - if(cut_old || !overlays.len) + if(cut_old || !length(overlays)) overlays = cached_other else overlays |= cached_other diff --git a/code/controllers/subsystem/SSparallax.dm b/code/controllers/subsystem/SSparallax.dm index 99024fd0d1e9..60637955cdf4 100644 --- a/code/controllers/subsystem/SSparallax.dm +++ b/code/controllers/subsystem/SSparallax.dm @@ -31,7 +31,7 @@ SUBSYSTEM_DEF(parallax) var/list/currentrun = src.currentrun while(length(currentrun)) - var/client/C = currentrun[currentrun.len] + var/client/C = currentrun[length(currentrun)] currentrun.len-- if(!C || !C.eye) if(MC_TICK_CHECK) diff --git a/code/controllers/subsystem/SSping.dm b/code/controllers/subsystem/SSping.dm index 42df890f9b7d..5e95309b8e3d 100644 --- a/code/controllers/subsystem/SSping.dm +++ b/code/controllers/subsystem/SSping.dm @@ -27,7 +27,7 @@ SUBSYSTEM_DEF(ping) var/list/current_run = src.current_run while(length(current_run)) - var/client/client = current_run[current_run.len] + var/client/client = current_run[length(current_run)] current_run.len-- if(client?.tgui_panel?.is_ready()) diff --git a/code/controllers/subsystem/SSradiation.dm b/code/controllers/subsystem/SSradiation.dm index 540e56ce19ac..c30f40a1363c 100644 --- a/code/controllers/subsystem/SSradiation.dm +++ b/code/controllers/subsystem/SSradiation.dm @@ -13,6 +13,8 @@ PROCESSING_SUBSYSTEM_DEF(radiation) var/rad_cache_update_interval = 5 SECONDS var/list/turf_rad_cache = list() var/list/prev_rad_cache = list() + /// Lazy list of all radioactive components + var/list/all_radiations /datum/controller/subsystem/processing/radiation/proc/warn(datum/component/radioactive/contamination) diff --git a/code/controllers/subsystem/SSshuttles.dm b/code/controllers/subsystem/SSshuttles.dm index d4b921f36eb7..5e5a92bdb05a 100644 --- a/code/controllers/subsystem/SSshuttles.dm +++ b/code/controllers/subsystem/SSshuttles.dm @@ -246,7 +246,7 @@ SUBSYSTEM_DEF(shuttle) /datum/controller/subsystem/shuttle/proc/get_dock_overlap(x0, y0, x1, y1, z) . = list() var/list/stationary_cache = stationary - for(var/i in 1 to stationary_cache.len) + for(var/i in 1 to length(stationary_cache)) var/obj/docking_port/port = stationary_cache[i] if(!port || port.z != z) continue @@ -254,7 +254,7 @@ SUBSYSTEM_DEF(shuttle) var/list/overlap = get_overlap(x0, y0, x1, y1, bounds[1], bounds[2], bounds[3], bounds[4]) var/list/xs = overlap[1] var/list/ys = overlap[2] - if(xs.len && ys.len) + if(length(xs) && length(ys)) .[port] = overlap /datum/controller/subsystem/shuttle/proc/update_hidden_docking_ports(list/remove_turfs, list/add_turfs) @@ -272,7 +272,7 @@ SUBSYSTEM_DEF(shuttle) for(var/V in add_turfs) var/turf/T = V var/image/I - if(remove_images.len) + if(length(remove_images)) //we can just reuse any images we are about to delete instead of making new ones I = remove_images[1] remove_images.Cut(1, 2) diff --git a/code/controllers/subsystem/SSspacedrift.dm b/code/controllers/subsystem/SSspacedrift.dm index 96aa68a8e2a8..cb489b55c2ab 100644 --- a/code/controllers/subsystem/SSspacedrift.dm +++ b/code/controllers/subsystem/SSspacedrift.dm @@ -26,8 +26,8 @@ SUBSYSTEM_DEF(spacedrift) //cache for sanic speed (lists are references anyways) var/list/currentrun = src.currentrun - while(currentrun.len) - var/atom/movable/AM = currentrun[currentrun.len] + while(length(currentrun)) + var/atom/movable/AM = currentrun[length(currentrun)] currentrun.len-- if(!AM) processing -= AM diff --git a/code/controllers/subsystem/SStgui.dm b/code/controllers/subsystem/SStgui.dm index 924a5f02919b..d84c486c6159 100644 --- a/code/controllers/subsystem/SStgui.dm +++ b/code/controllers/subsystem/SStgui.dm @@ -42,8 +42,8 @@ SUBSYSTEM_DEF(tgui) src.current_run = open_uis.Copy() // Cache for sanic speed (lists are references anyways) var/list/current_run = src.current_run - while(current_run.len) - var/datum/tgui/ui = current_run[current_run.len] + while(length(current_run)) + var/datum/tgui/ui = current_run[length(current_run)] current_run.len-- // TODO: Move user/src_object check to process() if(ui && ui.user && ui.src_object) diff --git a/code/controllers/subsystem/SSthrowing.dm b/code/controllers/subsystem/SSthrowing.dm index 621c5020028c..3e4bc1536ff0 100644 --- a/code/controllers/subsystem/SSthrowing.dm +++ b/code/controllers/subsystem/SSthrowing.dm @@ -30,7 +30,7 @@ SUBSYSTEM_DEF(throwing) var/list/currentrun = src.currentrun while(length(currentrun)) - var/atom/movable/AM = currentrun[currentrun.len] + var/atom/movable/AM = currentrun[length(currentrun)] var/datum/thrownthing/TT = currentrun[AM] currentrun.len-- if(!AM || !TT) diff --git a/code/controllers/subsystem/SSticker.dm b/code/controllers/subsystem/SSticker.dm index 2ef15314417a..26e1833b439b 100644 --- a/code/controllers/subsystem/SSticker.dm +++ b/code/controllers/subsystem/SSticker.dm @@ -81,9 +81,9 @@ SUBSYSTEM_DEF(ticker) switch(current_state) if(GAME_STATE_STARTUP) // This is ran as soon as the MC starts firing, and should only run ONCE, unless startup fails - round_start_time = world.time + (GLOB.configuration.general.lobby_time SECONDS) pregame_timeleft = GLOB.configuration.general.lobby_time SECONDS - to_chat(world, "Welcome to the pre-game lobby!") + round_start_time = world.time + pregame_timeleft + to_chat(world, "Welcome to the pre-game lobby!") to_chat(world, "Please, setup your character and select ready. Game will start in [GLOB.configuration.general.lobby_time] seconds") current_state = GAME_STATE_PREGAME fire() // TG says this is a good idea @@ -95,12 +95,9 @@ SUBSYSTEM_DEF(ticker) return // This is so we dont have sleeps in controllers, because that is a bad, bad thing - if(!delay_end) - pregame_timeleft = max(0, round_start_time - world.time) // Normal lobby countdown when roundstart was not delayed - else - pregame_timeleft = max(0, pregame_timeleft - wait) // If roundstart was delayed, we should resume the countdown where it left off + pregame_timeleft = max(0, round_start_time - world.time) - if(pregame_timeleft <= 600 && !tipped) // 60 seconds + if(pregame_timeleft <= 1 MINUTES && !tipped) send_tip_of_the_round() tipped = TRUE @@ -529,9 +526,9 @@ SUBSYSTEM_DEF(ticker) else var/list/randomtips = file2list("strings/tips.txt") var/list/memetips = file2list("strings/sillytips.txt") - if(randomtips.len && prob(95)) + if(length(randomtips) && prob(95)) m = pick(randomtips) - else if(memetips.len) + else if(length(memetips)) m = pick(memetips) if(m) @@ -708,8 +705,8 @@ SUBSYSTEM_DEF(ticker) for(var/loc_type in subtypesof(/datum/trade_destination)) var/datum/trade_destination/D = new loc_type - GLOB.weighted_randomevent_locations[D] = D.viable_random_events.len - GLOB.weighted_mundaneevent_locations[D] = D.viable_mundane_events.len + GLOB.weighted_randomevent_locations[D] = length(D.viable_random_events) + GLOB.weighted_mundaneevent_locations[D] = length(D.viable_mundane_events) // Easy handler to make rebooting the world not a massive sleep in world/Reboot() /datum/controller/subsystem/ticker/proc/reboot_helper(reason, end_string, delay) diff --git a/code/controllers/subsystem/non_firing/SSatoms.dm b/code/controllers/subsystem/non_firing/SSatoms.dm index 4226c93f98dd..a1c515fdb80d 100644 --- a/code/controllers/subsystem/non_firing/SSatoms.dm +++ b/code/controllers/subsystem/non_firing/SSatoms.dm @@ -36,7 +36,7 @@ SUBSYSTEM_DEF(atoms) var/count var/list/mapload_arg = list(TRUE) if(atoms) - count = atoms.len + count = length(atoms) for(var/I in atoms) var/atom/A = I if(A && !A.initialized) @@ -58,7 +58,7 @@ SUBSYSTEM_DEF(atoms) initialized = INITIALIZATION_INNEW_REGULAR - if(late_loaders.len) + if(length(late_loaders)) watch = start_watch() if(noisy) log_startup_progress("Late-initializing atoms...") diff --git a/code/controllers/subsystem/non_firing/SSmapping.dm b/code/controllers/subsystem/non_firing/SSmapping.dm index c89e413c38eb..4ec76788bd7b 100644 --- a/code/controllers/subsystem/non_firing/SSmapping.dm +++ b/code/controllers/subsystem/non_firing/SSmapping.dm @@ -203,7 +203,7 @@ SUBSYSTEM_DEF(mapping) log_startup_progress("Loaded Lavaland in [stop_watch(watch)]s") /datum/controller/subsystem/mapping/proc/seedRuins(list/z_levels = null, budget = 0, whitelist = /area/space, list/potentialRuins) - if(!z_levels || !z_levels.len) + if(!z_levels || !length(z_levels)) WARNING("No Z levels provided - Not generating ruins") return @@ -230,10 +230,10 @@ SUBSYSTEM_DEF(mapping) continue ruins_availible[R] = R.placement_weight - while(budget > 0 && (ruins_availible.len || forced_ruins.len)) + while(budget > 0 && (length(ruins_availible) || length(forced_ruins))) var/datum/map_template/ruin/current_pick var/forced = FALSE - if(forced_ruins.len) //We have something we need to load right now, so just pick it + if(length(forced_ruins)) //We have something we need to load right now, so just pick it for(var/ruin in forced_ruins) current_pick = ruin if(forced_ruins[ruin] > 0) //Load into designated z diff --git a/code/controllers/subsystem/non_firing/SSradio.dm b/code/controllers/subsystem/non_firing/SSradio.dm index 402fc3375c63..e17bc1e42d10 100644 --- a/code/controllers/subsystem/non_firing/SSradio.dm +++ b/code/controllers/subsystem/non_firing/SSradio.dm @@ -85,7 +85,7 @@ SUBSYSTEM_DEF(radio) if(frequency) frequency.remove_listener(device) - if(frequency.devices.len == 0) + if(length(frequency.devices) == 0) qdel(frequency) frequencies -= f_text diff --git a/code/controllers/subsystem/non_firing/SStitlescreen.dm b/code/controllers/subsystem/non_firing/SStitlescreen.dm index 100dff90cda2..6591e67dd4f0 100644 --- a/code/controllers/subsystem/non_firing/SStitlescreen.dm +++ b/code/controllers/subsystem/non_firing/SStitlescreen.dm @@ -10,10 +10,10 @@ SUBSYSTEM_DEF(title) for(var/S in provisional_title_screens) var/list/L = splittext(S,"+") - if(L.len == 1 && L[1] != "blank.png") + if(length(L) == 1 && L[1] != "blank.png") title_screens += S - else if(L.len > 1) + else if(length(L) > 1) if(use_rare_screens && lowertext(L[1]) == "rare") title_screens += S @@ -21,7 +21,7 @@ SUBSYSTEM_DEF(title) if(length(title_screens) > 1) for(var/S in title_screens) var/list/L = splittext(S,".") - if(L.len != 2 || L[1] != "default") + if(length(L) != 2 || L[1] != "default") continue title_screens -= S break diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm index 14ab39fdcdfc..1abc4b89116a 100644 --- a/code/controllers/subsystem/processing/processing.dm +++ b/code/controllers/subsystem/processing/processing.dm @@ -26,8 +26,8 @@ SUBSYSTEM_DEF(processing) //cache for sanic speed (lists are references anyways) var/list/current_run = currentrun - while(current_run.len) - var/datum/thing = current_run[current_run.len] + while(length(current_run)) + var/datum/thing = current_run[length(current_run)] current_run.len-- if(QDELETED(thing)) processing -= thing diff --git a/code/controllers/subsystem/tickets/tickets.dm b/code/controllers/subsystem/tickets/tickets.dm index 444ca63d0633..7cf79bae0062 100644 --- a/code/controllers/subsystem/tickets/tickets.dm +++ b/code/controllers/subsystem/tickets/tickets.dm @@ -334,7 +334,7 @@ SUBSYSTEM_DEF(tickets) for(var/datum/ticket/T in allTickets) if(T.client_ckey == C.ckey && (T.ticketState == TICKET_OPEN || T.ticketState == TICKET_STALE)) tickets += T - if(tickets.len) + if(length(tickets)) return tickets return FALSE diff --git a/code/datums/action.dm b/code/datums/action.dm index d85eaa080a3c..511865a1c61a 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -120,7 +120,8 @@ return if(!status_only) button.name = name - button.desc = desc + if(desc) + button.desc = "[desc] [initial(button.desc)]" if(owner?.hud_used && background_icon_state == ACTION_BUTTON_DEFAULT_BACKGROUND) var/list/settings = owner.hud_used.get_action_buttons_icons() if(button.icon != settings["bg_icon"]) @@ -679,7 +680,7 @@ var/datum/spell/spell = target if(owner) - return spell.can_cast(owner) + return spell.can_cast(owner, show_message = TRUE) return FALSE /datum/action/spell_action/apply_unavailable_effect(atom/movable/screen/movable/action_button/button) diff --git a/code/datums/ai_laws_datums.dm b/code/datums/ai_laws_datums.dm index c844b72657dd..dd9e29fbb939 100644 --- a/code/datums/ai_laws_datums.dm +++ b/code/datums/ai_laws_datums.dm @@ -53,7 +53,7 @@ return statements /datum/ai_laws/proc/sort_laws() - if(sorted_laws.len) + if(length(sorted_laws)) return if(zeroth_law) @@ -65,7 +65,7 @@ var/index = 1 for(var/datum/ai_law/inherent_law in inherent_laws) inherent_law.index = index++ - if(supplied_laws.len < inherent_law.index || !istype(supplied_laws[inherent_law.index], /datum/ai_law)) + if(length(supplied_laws) < inherent_law.index || !istype(supplied_laws[inherent_law.index], /datum/ai_law)) sorted_laws += inherent_law for(var/datum/ai_law/AL in supplied_laws) @@ -77,11 +77,11 @@ if(change_zeroth) S.sync_zeroth(zeroth_law, zeroth_law_borg) - if(full_sync || ion_laws.len) + if(full_sync || length(ion_laws)) S.laws.clear_ion_laws() - if(full_sync || inherent_laws.len) + if(full_sync || length(inherent_laws)) S.laws.clear_inherent_laws() - if(full_sync || supplied_laws.len) + if(full_sync || length(supplied_laws)) S.laws.clear_supplied_laws() for(var/datum/ai_law/law in ion_laws) @@ -130,7 +130,7 @@ var/new_law = new/datum/ai_law/ion(law) ion_laws += new_law - if(state_ion.len < ion_laws.len) + if(length(state_ion) < length(ion_laws)) state_ion += 1 sorted_laws.Cut() @@ -145,7 +145,7 @@ var/new_law = new/datum/ai_law/inherent(law) inherent_laws += new_law - if(state_inherent.len < inherent_laws.len) + if(length(state_inherent) < length(inherent_laws)) state_inherent += 1 sorted_laws.Cut() @@ -154,22 +154,22 @@ if(!law) return - if(supplied_laws.len >= number) + if(length(supplied_laws) >= number) var/datum/ai_law/existing_law = supplied_laws[number] if(existing_law && existing_law.law == law) return - if(supplied_laws.len >= number && supplied_laws[number]) + if(length(supplied_laws) >= number && supplied_laws[number]) delete_law(supplied_laws[number]) - while(src.supplied_laws.len < number) + while(length(src.supplied_laws) < number) src.supplied_laws += "" - if(state_supplied.len < supplied_laws.len) + if(length(state_supplied) < length(supplied_laws)) state_supplied += 1 var/new_law = new/datum/ai_law/supplied(law, number) supplied_laws[number] = new_law - if(state_supplied.len < supplied_laws.len) + if(length(state_supplied) < length(supplied_laws)) state_supplied += 1 sorted_laws.Cut() @@ -203,7 +203,7 @@ var/index = laws.Find(law) if(index) laws -= law - for(index, index < state.len, index++) + for(index, index < length(state), index++) state[index] = state[index+1] sorted_laws.Cut() diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index 4c4ea93241a2..fffa11ef74d3 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -102,7 +102,7 @@ components_of_type = test if(I == our_type) //exact match, take priority var/inserted = FALSE - for(var/J in 1 to components_of_type.len) + for(var/J in 1 to length(components_of_type)) var/datum/component/C = components_of_type[J] if(C.type != our_type) //but not over other exact matches components_of_type.Insert(J, I) @@ -127,13 +127,13 @@ var/list/components_of_type = dc[I] if(length(components_of_type)) // var/list/subtracted = components_of_type - src - if(subtracted.len == 1) //only 1 guy left + if(length(subtracted) == 1) //only 1 guy left dc[I] = subtracted[1] //make him special else dc[I] = subtracted else //just us dc -= I - if(!dc.len) + if(!length(dc)) P.datum_components = null UnregisterFromParent() @@ -163,7 +163,7 @@ * Register to listen for a signal from the passed in target * * This sets up a listening relationship such that when the target object emits a signal - * the source datum this proc is called upon, will recieve a callback to the given proctype + * the source datum this proc is called upon, will receive a callback to the given proctype * Return values from procs registered must be a bitfield * * Arguments: @@ -241,7 +241,7 @@ lookup[sig] -= src signal_procs[target] -= sig_type_or_types - if(!signal_procs[target].len) + if(!length(signal_procs[target])) signal_procs -= target /// Registers multiple signals to the same proc. diff --git a/code/datums/components/boss_music.dm b/code/datums/components/boss_music.dm index 85af91c4d5e1..5805052b9b55 100644 --- a/code/datums/components/boss_music.dm +++ b/code/datums/components/boss_music.dm @@ -37,7 +37,7 @@ UnregisterSignal(parent, COMSIG_HOSTILE_FOUND_TARGET) return ..() -///Handles giving the boss music to a new target the fauna has recieved. +///Handles giving the boss music to a new target the fauna has received. ///Keeps track of them to not repeatedly overwrite its own track. /datum/component/boss_music/proc/on_target_found(atom/source, mob/new_target) SIGNAL_HANDLER diff --git a/code/datums/components/fullauto.dm b/code/datums/components/fullauto.dm new file mode 100644 index 000000000000..cfd4da69ce12 --- /dev/null +++ b/code/datums/components/fullauto.dm @@ -0,0 +1,325 @@ +#define AUTOFIRE_MOUSEUP 0 +#define AUTOFIRE_MOUSEDOWN 1 + +/datum/component/automatic_fire + var/client/clicker + var/mob/living/shooter + var/atom/target + var/turf/target_loc // For dealing with locking on targets due to BYOND engine limitations (the mouse input only happening when mouse moves). + var/autofire_stat = AUTOFIRE_STAT_IDLE + var/mouse_parameters + /// Time between individual shots. + var/autofire_shot_delay = 0.3 SECONDS + /// This seems hacky but there can be two MouseDown() without a MouseUp() in between if the user holds click and uses alt+tab, printscreen or similar. + var/mouse_status = AUTOFIRE_MOUSEUP + /// Should dual wielding be allowed? + var/allow_akimbo + + /// windup autofire vars + /// Whether the delay between shots increases over time, simulating a spooling weapon + var/windup_autofire = FALSE + /// the reduction to shot delay for windup + var/current_windup_reduction = 0 + /// the percentage of autfire_shot_delay that is added to current_windup_reduction + var/windup_autofire_reduction_multiplier = 0.3 + /// How high of a reduction that current_windup_reduction can reach + var/windup_autofire_cap = 0.3 + /// How long it takes for weapons that have spooled-up to reset back to the original firing speed + var/windup_spindown = 3 SECONDS + /// Timer for tracking the spindown reset timings + var/timerid + COOLDOWN_DECLARE(next_shot_cd) + +/datum/component/automatic_fire/Initialize(autofire_shot_delay, windup_autofire, windup_autofire_reduction_multiplier, windup_autofire_cap, windup_spindown, allow_akimbo = TRUE) + . = ..() + if(!isgun(parent)) + return COMPONENT_INCOMPATIBLE + var/obj/item/gun = parent + RegisterSignal(parent, COMSIG_ITEM_EQUIPPED, PROC_REF(wake_up)) + if(autofire_shot_delay) + src.autofire_shot_delay = autofire_shot_delay + src.allow_akimbo = allow_akimbo + if(windup_autofire) + src.windup_autofire = windup_autofire + src.windup_autofire_reduction_multiplier = windup_autofire_reduction_multiplier + src.windup_autofire_cap = windup_autofire_cap + src.windup_spindown = windup_spindown + if(autofire_stat == AUTOFIRE_STAT_IDLE && ismob(gun.loc)) + var/mob/user = gun.loc + wake_up(src, user) + +/datum/component/automatic_fire/Destroy() + autofire_off() + return ..() + +/datum/component/automatic_fire/process(seconds_per_tick) + if(autofire_stat != AUTOFIRE_STAT_FIRING) + STOP_PROCESSING(SSprojectiles, src) + return + process_shot() + +/datum/component/automatic_fire/proc/wake_up(datum/source, mob/user, slot) + SIGNAL_HANDLER // COMSIG_ITEM_EQUIPPED + + if(autofire_stat == AUTOFIRE_STAT_ALERT) + return // We've updated the firemode. No need for more. + if(autofire_stat == AUTOFIRE_STAT_FIRING) + stop_autofiring() // Let's stop shooting to avoid issues. + return + if(user.is_holding(parent)) + autofire_on(user.client) + +// There is a gun and there is a user wielding it. The component now waits for the mouse click. +/datum/component/automatic_fire/proc/autofire_on(client/user_client) + if(autofire_stat != AUTOFIRE_STAT_IDLE) + return + autofire_stat = AUTOFIRE_STAT_ALERT + if(!QDELETED(user_client)) + clicker = user_client + shooter = user_client.mob + RegisterSignal(user_client, COMSIG_CLIENT_MOUSEDOWN, PROC_REF(on_mouse_down)) + if(!QDELETED(shooter)) + RegisterSignal(shooter, COMSIG_MOB_LOGOUT, PROC_REF(autofire_off)) + UnregisterSignal(shooter, COMSIG_MOB_LOGIN) + RegisterSignal(parent, list(COMSIG_PARENT_QDELETING, COMSIG_ITEM_DROPPED), PROC_REF(autofire_off)) + parent.RegisterSignal(src, COMSIG_AUTOFIRE_ONMOUSEDOWN, TYPE_PROC_REF(/obj/item/gun, autofire_bypass_check)) + parent.RegisterSignal(parent, COMSIG_AUTOFIRE_SHOT, TYPE_PROC_REF(/obj/item/gun, do_autofire)) + +/datum/component/automatic_fire/proc/autofire_off(datum/source) + SIGNAL_HANDLER // COMSIG_MOB_LOGOUT + + if(autofire_stat == AUTOFIRE_STAT_IDLE) + return + if(autofire_stat == AUTOFIRE_STAT_FIRING) + stop_autofiring() + + autofire_stat = AUTOFIRE_STAT_IDLE + + if(!QDELETED(clicker)) + UnregisterSignal(clicker, list(COMSIG_CLIENT_MOUSEDOWN, COMSIG_CLIENT_MOUSEUP, COMSIG_CLIENT_MOUSEDRAG)) + mouse_status = AUTOFIRE_MOUSEUP // In regards to the component there's no click anymore to care about. + clicker = null + if(!QDELETED(shooter)) + RegisterSignal(shooter, COMSIG_MOB_LOGIN, PROC_REF(on_client_login)) + UnregisterSignal(shooter, COMSIG_MOB_LOGOUT) + UnregisterSignal(parent, list(COMSIG_PARENT_QDELETING, COMSIG_ITEM_DROPPED)) + shooter = null + parent.UnregisterSignal(parent, COMSIG_AUTOFIRE_SHOT) + parent.UnregisterSignal(src, COMSIG_AUTOFIRE_ONMOUSEDOWN) + +/datum/component/automatic_fire/proc/on_client_login(mob/source) + SIGNAL_HANDLER // COMSIG_MOB_LOGIN + if(!source.client) + return + if(source.is_holding(parent)) + autofire_on(source.client) + +/datum/component/automatic_fire/proc/on_mouse_down(client/source, atom/_target, turf/location, control, params) + SIGNAL_HANDLER // COMSIG_CLIENT_MOUSEDOWN + + var/list/modifiers = params2list(params) // If they're shift+clicking, for example, let's not have them accidentally shoot. + + if(modifiers["shift"]) + return + if(modifiers["ctrl"]) + return + if(modifiers["middle"]) + return + if(modifiers["right"]) + return + if(modifiers["alt"]) + return + if(source.mob.in_throw_mode) + return + if(!isturf(source.mob.loc)) // No firing inside lockers and stuff. + return + if(get_dist(source.mob, _target) < 2) // Adjacent clicking. + return + + if(isnull(location) || istype(_target, /obj/screen)) // Clicking on a screen object. + if(_target.plane != CLICKCATCHER_PLANE) // The clickcatcher is a special case. We want the click to trigger then, under it. + return // If we click and drag on our worn backpack, for example, we want it to open instead. + _target = parse_caught_click_modifiers(modifiers, get_turf(source.eye), source) + params = list2params(modifiers) + if(!_target) + CRASH("Failed to get the turf under clickcatcher") + + if(SEND_SIGNAL(src, COMSIG_AUTOFIRE_ONMOUSEDOWN, source, _target, location, control, params) & COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS) + return + + source.click_intercept_time = world.time // From this point onwards Click() will no longer be triggered. + + if(autofire_stat == AUTOFIRE_STAT_IDLE) + CRASH("on_mouse_down() called with [autofire_stat] autofire_stat") + if(autofire_stat == AUTOFIRE_STAT_FIRING) + stop_autofiring() // This can happen if we click and hold and then alt+tab, printscreen or other such action. MouseUp won't be called then and it will keep autofiring. + + target = _target + target_loc = get_turf(target) + mouse_parameters = params + INVOKE_ASYNC(src, PROC_REF(start_autofiring)) + +/datum/component/automatic_fire/proc/start_autofiring() + if(autofire_stat == AUTOFIRE_STAT_FIRING) + return + autofire_stat = AUTOFIRE_STAT_FIRING + + clicker.mouse_override_icon = 'icons/effects/mouse_pointers/weapon_pointer.dmi' + clicker.mouse_pointer_icon = clicker.mouse_override_icon + + if(mouse_status == AUTOFIRE_MOUSEUP) // See mouse_status definition for the reason for this. + RegisterSignal(clicker, COMSIG_CLIENT_MOUSEUP, PROC_REF(on_mouse_up)) + mouse_status = AUTOFIRE_MOUSEDOWN + + RegisterSignal(shooter, COMSIG_MOB_SWAPPED_HANDS, PROC_REF(stop_autofiring)) + + if(isgun(parent)) + var/obj/item/gun/shoota = parent + if(!shoota.on_autofire_start(shooter)) // This is needed because the minigun has a do_after before firing and signals are async. + stop_autofiring() + return + + if(autofire_stat != AUTOFIRE_STAT_FIRING) + return // Things may have changed while on_autofire_start() was being processed, due to do_after's sleep. + + if(!process_shot()) // First shot is processed instantly. + return // If it fails, such as when the gun is empty, then there's no need to schedule a second shot. + + START_PROCESSING(SSprojectiles, src) + RegisterSignal(clicker, COMSIG_CLIENT_MOUSEDRAG, PROC_REF(on_mouse_drag)) + +/datum/component/automatic_fire/proc/on_mouse_up(datum/source, atom/object, turf/location, control, params) + SIGNAL_HANDLER // COMSIG_CLIENT_MOUSEUP + + UnregisterSignal(clicker, COMSIG_CLIENT_MOUSEUP) + mouse_status = AUTOFIRE_MOUSEUP + if(autofire_stat == AUTOFIRE_STAT_FIRING) + stop_autofiring() + return COMPONENT_CLIENT_MOUSEUP_INTERCEPT + +/datum/component/automatic_fire/proc/stop_autofiring(datum/source, atom/object, turf/location, control, params) + SIGNAL_HANDLER // COMSIG_MOB_SWAPPED_HANDS + + if(autofire_stat != AUTOFIRE_STAT_FIRING) + return + + STOP_PROCESSING(SSprojectiles, src) + autofire_stat = AUTOFIRE_STAT_ALERT + if(clicker) + clicker.mouse_override_icon = null + clicker.mouse_pointer_icon = clicker.mouse_override_icon + UnregisterSignal(clicker, COMSIG_CLIENT_MOUSEDRAG) + if(!QDELETED(shooter)) + UnregisterSignal(shooter, COMSIG_MOB_SWAPPED_HANDS) + target = null + target_loc = null + mouse_parameters = null + +/datum/component/automatic_fire/proc/on_mouse_drag(client/source, atom/src_object, atom/over_object, turf/src_location, turf/over_location, src_control, over_control, params) + SIGNAL_HANDLER // COMSIG_CLIENT_MOUSEDRAG + + if(isnull(over_location)) // This happens when the mouse is over an inventory or screen object, or on entering deep darkness, for example. + var/list/modifiers = params2list(params) + var/new_target = parse_caught_click_modifiers(modifiers, get_turf(source.eye), source) + params = list2params(modifiers) + mouse_parameters = params + if(!new_target) + if(QDELETED(target)) // No new target acquired, and old one was deleted, get us out of here. + stop_autofiring() + CRASH("on_mouse_drag failed to get the turf under screen object [over_object.type]. Old target was incidentally QDELETED.") + target = get_turf(target) // If previous target wasn't a turf, let's turn it into one to avoid locking onto a potentially moving target. + target_loc = target + CRASH("on_mouse_drag failed to get the turf under screen object [over_object.type]") + target = new_target + target_loc = new_target + return + + target = over_object + target_loc = get_turf(over_object) + mouse_parameters = params + +/datum/component/automatic_fire/proc/process_shot() + if(autofire_stat != AUTOFIRE_STAT_FIRING) + return FALSE + + if(!COOLDOWN_FINISHED(src, next_shot_cd)) + return TRUE + + if(QDELETED(target) || get_turf(target) != target_loc) // Target moved or got destroyed since we last aimed. + target = target_loc // So we keep firing on the emptied tile until we move our mouse and find a new target. + + if(get_dist(shooter, target) <= 0) + target = get_step(shooter, shooter.dir) // Shoot in the direction faced if the mouse is on the same tile as we are. + target_loc = target + else if(!in_view_range(shooter, target)) + stop_autofiring() // Elvis has left the building. + return FALSE + + shooter.face_atom(target) + var/next_delay = autofire_shot_delay + if(windup_autofire) + next_delay = clamp(next_delay - current_windup_reduction, round(autofire_shot_delay * windup_autofire_cap), autofire_shot_delay) + current_windup_reduction = (current_windup_reduction + round(autofire_shot_delay * windup_autofire_reduction_multiplier)) + timerid = addtimer(CALLBACK(src, PROC_REF(windup_reset), FALSE), windup_spindown, TIMER_UNIQUE|TIMER_OVERRIDE|TIMER_STOPPABLE) + + COOLDOWN_START(src, next_shot_cd, next_delay) + + if(SEND_SIGNAL(parent, COMSIG_AUTOFIRE_SHOT, target, shooter, allow_akimbo, mouse_parameters) & COMPONENT_AUTOFIRE_SHOT_SUCCESS) + return TRUE + + stop_autofiring() + return FALSE + +/// Reset for our windup, resetting everything back to initial values after a variable set amount of time (determined by var/windup_spindown). +/datum/component/automatic_fire/proc/windup_reset(deltimer) + current_windup_reduction = initial(current_windup_reduction) + if(deltimer && timerid) + deltimer(timerid) + +// Gun procs. + +/obj/item/gun/proc/on_autofire_start(mob/living/shooter) + if(semicd || shooter.incapacitated() || !can_trigger_gun(shooter)) + return FALSE + + if(!can_shoot()) + shoot_with_empty_chamber(shooter) + return FALSE + + var/other_hand = shooter.get_organ(shooter.hand ? BODY_ZONE_PRECISE_R_HAND : BODY_ZONE_PRECISE_L_HAND) + if(weapon_weight == WEAPON_HEAVY && (shooter.get_inactive_hand() || !other_hand)) + to_chat(shooter, "You need to use both hands!") + return FALSE + + return TRUE + +/obj/item/gun/proc/autofire_bypass_check(datum/source, client/clicker, atom/target, turf/location, control, params) + SIGNAL_HANDLER // COMSIG_AUTOFIRE_ONMOUSEDOWN + + if(clicker.mob.get_active_hand() != src) + return COMPONENT_AUTOFIRE_ONMOUSEDOWN_BYPASS + +/obj/item/gun/proc/do_autofire(datum/source, atom/target, mob/living/shooter, allow_akimbo, params) + SIGNAL_HANDLER // COMSIG_AUTOFIRE_SHOT + + if(semicd || shooter.incapacitated()) + return NONE + + if(!can_shoot()) + shoot_with_empty_chamber(shooter) + return NONE + + INVOKE_ASYNC(src, PROC_REF(do_autofire_shot), source, target, shooter, allow_akimbo, params) + return COMPONENT_AUTOFIRE_SHOT_SUCCESS // All is well, we can continue shooting. + +/obj/item/gun/proc/do_autofire_shot(datum/source, atom/target, mob/living/shooter, allow_akimbo, params) + var/obj/item/gun/akimbo_gun = shooter.get_inactive_hand() + var/bonus_spread = 0 + if(isgun(akimbo_gun) && weapon_weight < WEAPON_MEDIUM && allow_akimbo) + if(akimbo_gun.weapon_weight < WEAPON_MEDIUM && akimbo_gun.can_trigger_gun(shooter)) + bonus_spread = dual_wield_spread + addtimer(CALLBACK(akimbo_gun, TYPE_PROC_REF(/obj/item/gun, process_fire), target, shooter, TRUE, params, null, bonus_spread), 1) + process_fire(target, shooter, TRUE, params, null, bonus_spread) + +#undef AUTOFIRE_MOUSEUP +#undef AUTOFIRE_MOUSEDOWN diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index 42d9731dbc0d..6041460d068c 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -184,7 +184,7 @@ //For consuming material //mats is a list of types of material to use and the corresponding amounts, example: list(MAT_METAL=100, MAT_GLASS=200) /datum/component/material_container/proc/use_amount(list/mats, multiplier=1) - if(!mats || !mats.len) + if(!mats || !length(mats)) return FALSE var/datum/material/M @@ -292,7 +292,7 @@ return (total_amount + amt) <= max_amount /datum/component/material_container/proc/has_materials(list/mats, multiplier=1) - if(!mats || !mats.len) + if(!mats || !length(mats)) return FALSE var/datum/material/M diff --git a/code/datums/components/proximity_monitor.dm b/code/datums/components/proximity_monitor.dm index e4a3112f8606..b37712b9d1f7 100644 --- a/code/datums/components/proximity_monitor.dm +++ b/code/datums/components/proximity_monitor.dm @@ -68,7 +68,7 @@ * Arguments: * * datum/source - this will be the `hasprox_receiver` * * atom/old_loc - the location the receiver just moved from - * * dir - the direction the reciever just moved in + * * dir - the direction the receiver just moved in */ /datum/component/proximity_monitor/proc/on_receiver_move(datum/source, atom/old_loc, dir) SIGNAL_HANDLER @@ -120,7 +120,7 @@ /** * Called when the receiver or an atom in the `nested_receiver_locs` list moves into a disposals holder object. * - * This proc recieves arguments, but they aren't needed. + * This proc receives arguments, but they aren't needed. */ /datum/component/proximity_monitor/proc/on_disposal_enter(datum/source) SIGNAL_HANDLER @@ -130,7 +130,7 @@ /** * Called when the receiver or an atom in the `nested_receiver_locs` list moves out of a disposals holder object. * - * This proc recieves arguments, but they aren't needed. + * This proc receives arguments, but they aren't needed. */ /datum/component/proximity_monitor/proc/on_disposal_exit(datum/source) SIGNAL_HANDLER diff --git a/code/datums/components/radioactive.dm b/code/datums/components/radioactive.dm index 97d0591c4ebc..ba240898e34f 100644 --- a/code/datums/components/radioactive.dm +++ b/code/datums/components/radioactive.dm @@ -13,17 +13,17 @@ var/can_contaminate /datum/component/radioactive/Initialize(_strength = 0, _source, _half_life = RAD_HALF_LIFE, _can_contaminate = TRUE) + if(!istype(parent, /atom)) + return COMPONENT_INCOMPATIBLE strength = _strength source = _source hl3_release_date = _half_life can_contaminate = _can_contaminate - if(istype(parent, /atom)) - RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(rad_examine)) - if(isitem(parent)) - RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(rad_attack)) - RegisterSignal(parent, COMSIG_ITEM_ATTACK_OBJ, PROC_REF(rad_attack)) - else - return COMPONENT_INCOMPATIBLE + RegisterSignal(parent, COMSIG_PARENT_EXAMINE, PROC_REF(rad_examine)) + RegisterSignal(parent, COMSIG_ADMIN_DECONTAMINATE, PROC_REF(admin_decontaminate)) + if(isitem(parent)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK, PROC_REF(rad_attack)) + RegisterSignal(parent, COMSIG_ITEM_ATTACK_OBJ, PROC_REF(rad_attack)) if(strength > RAD_MINIMUM_CONTAMINATION) SSradiation.warn(src) //Let's make er glow @@ -31,10 +31,12 @@ var/atom/movable/master = parent master.add_filter("rad_glow", 2, list("type" = "outline", "color" = "#39ff1430", "size" = 2)) addtimer(CALLBACK(src, PROC_REF(glow_loop), master), rand(1, 19)) //Things should look uneven + LAZYADD(SSradiation.all_radiations, src) START_PROCESSING(SSradiation, src) /datum/component/radioactive/Destroy() STOP_PROCESSING(SSradiation, src) + LAZYREMOVE(SSradiation.all_radiations, src) var/atom/movable/master = parent master.remove_filter("rad_glow") return ..() @@ -99,6 +101,17 @@ return strength -= strength / hl3_release_date +/datum/component/radioactive/proc/admin_decontaminate() + SIGNAL_HANDLER + . = TRUE + if(ismob(parent)) + var/mob/M = parent + M.radiation = 0 + if(ismob(source)) + var/mob/M = source + M.radiation = 0 + qdel(src) + #undef RAD_AMOUNT_LOW #undef RAD_AMOUNT_MEDIUM #undef RAD_AMOUNT_HIGH diff --git a/code/datums/components/shielded.dm b/code/datums/components/shielded.dm index effad26c8fec..adbe78c3b7f3 100644 --- a/code/datums/components/shielded.dm +++ b/code/datums/components/shielded.dm @@ -158,7 +158,7 @@ var/charge_loss = 1 // how many charges do we lose - if(istype(hitby, /obj/item/projectile)) + if(isprojectile(hitby)) var/obj/item/projectile/P = hitby if(P.shield_buster) charge_loss = 3 diff --git a/code/datums/components/slippery.dm b/code/datums/components/slippery.dm index 4b79900cd439..4488c8dcb838 100644 --- a/code/datums/components/slippery.dm +++ b/code/datums/components/slippery.dm @@ -45,7 +45,7 @@ UnregisterSignal(parent, list(COMSIG_MOVABLE_CROSSED, COMSIG_ATOM_ENTERED)) /** - Called whenever the parent recieves either the `MOVABLE_CROSSED` signal or the `ATOM_ENTERED` signal. + Called whenever the parent receives either the `MOVABLE_CROSSED` signal or the `ATOM_ENTERED` signal. Calls the `victim`'s `slip()` proc with the component's variables as arguments. Additionally calls the parent's `after_slip()` proc on the `victim`. diff --git a/code/datums/components/spawner.dm b/code/datums/components/spawner.dm index 9780db16407b..b1d6e8679759 100644 --- a/code/datums/components/spawner.dm +++ b/code/datums/components/spawner.dm @@ -39,7 +39,7 @@ /datum/component/spawner/proc/try_spawn_mob() var/atom/P = parent - if(spawned_mobs.len >= max_mobs) + if(length(spawned_mobs) >= max_mobs) return 0 if(spawn_delay > world.time) return 0 diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index 7445e5776056..c2aef66bcaaf 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -76,7 +76,7 @@ var/obj/item/I = AM if(I.flags & ABSTRACT) return - else if(istype(AM, /obj/item/projectile)) + else if(isprojectile(AM)) var/obj/item/projectile/P = AM if(P.original != parent) return diff --git a/code/datums/components/swarming.dm b/code/datums/components/swarming.dm index ac81ea6aefa3..928589fbaaa8 100644 --- a/code/datums/components/swarming.dm +++ b/code/datums/components/swarming.dm @@ -17,7 +17,7 @@ for(var/other in swarm_members) var/datum/component/swarming/other_swarm = other other_swarm.swarm_members -= src - if(!other_swarm.swarm_members.len) + if(!length(other_swarm.swarm_members)) other_swarm.unswarm() swarm_members = null return ..() @@ -36,10 +36,10 @@ if(!other_swarm || !(other_swarm in swarm_members)) return swarm_members -= other_swarm - if(!swarm_members.len) + if(!length(swarm_members)) unswarm() other_swarm.swarm_members -= src - if(!other_swarm.swarm_members.len) + if(!length(other_swarm.swarm_members)) other_swarm.unswarm() /datum/component/swarming/proc/swarm() diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 94657d3c038d..0b1062a3dad7 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -15,7 +15,7 @@ using /datum/datacore/proc/manifest_inject(), or manifest_insert() GLOBAL_LIST_EMPTY(PDA_Manifest) /datum/datacore/proc/get_manifest_json() - if(GLOB.PDA_Manifest.len) + if(length(GLOB.PDA_Manifest)) return var/heads[0] var/sec[0] @@ -38,44 +38,44 @@ GLOBAL_LIST_EMPTY(PDA_Manifest) heads[++heads.len] = list("name" = name, "rank" = rank, "active" = isactive) department = 1 depthead = 1 - if(rank == "Captain" && heads.len != 1) - heads.Swap(1, heads.len) + if(rank == "Captain" && length(heads) != 1) + heads.Swap(1, length(heads)) if(real_rank in GLOB.active_security_positions) sec[++sec.len] = list("name" = name, "rank" = rank, "active" = isactive) department = 1 - if(depthead && sec.len != 1) - sec.Swap(1, sec.len) + if(depthead && length(sec) != 1) + sec.Swap(1, length(sec)) if(real_rank in GLOB.engineering_positions) eng[++eng.len] = list("name" = name, "rank" = rank, "active" = isactive) department = 1 - if(depthead && eng.len != 1) - eng.Swap(1, eng.len) + if(depthead && length(eng) != 1) + eng.Swap(1, length(eng)) if(real_rank in GLOB.medical_positions) med[++med.len] = list("name" = name, "rank" = rank, "active" = isactive) department = 1 - if(depthead && med.len != 1) - med.Swap(1, med.len) + if(depthead && length(med) != 1) + med.Swap(1, length(med)) if(real_rank in GLOB.science_positions) sci[++sci.len] = list("name" = name, "rank" = rank, "active" = isactive) department = 1 - if(depthead && sci.len != 1) - sci.Swap(1, sci.len) + if(depthead && length(sci) != 1) + sci.Swap(1, length(sci)) if(real_rank in GLOB.service_positions) ser[++ser.len] = list("name" = name, "rank" = rank, "active" = isactive) department = 1 - if(depthead && ser.len != 1) - ser.Swap(1, ser.len) + if(depthead && length(ser) != 1) + ser.Swap(1, length(ser)) if(real_rank in GLOB.supply_positions) sup[++sup.len] = list("name" = name, "rank" = rank, "active" = isactive) department = 1 - if(depthead && sup.len != 1) - sup.Swap(1, sup.len) + if(depthead && length(sup) != 1) + sup.Swap(1, length(sup)) if(real_rank in GLOB.nonhuman_positions) bot[++bot.len] = list("name" = name, "rank" = rank, "active" = isactive) @@ -105,7 +105,7 @@ GLOBAL_LIST_EMPTY(PDA_Manifest) manifest_inject(H) /datum/datacore/proc/manifest_modify(name, assignment) - if(GLOB.PDA_Manifest.len) + if(length(GLOB.PDA_Manifest)) GLOB.PDA_Manifest.Cut() var/datum/data/record/foundrecord var/real_title = assignment @@ -137,7 +137,7 @@ GLOBAL_LIST_EMPTY(PDA_Manifest) GLOBAL_VAR_INIT(record_id_num, 1001) /datum/datacore/proc/manifest_inject(mob/living/carbon/human/H) - if(GLOB.PDA_Manifest.len) + if(length(GLOB.PDA_Manifest)) GLOB.PDA_Manifest.Cut() if(H.mind && (H.mind.assigned_role != H.mind.special_role)) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 5483b5a4c21b..9abedd63a0d4 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -225,7 +225,7 @@ var/list/variable_html = list() if(islist) var/list/L = D - for(var/i in 1 to L.len) + for(var/i in 1 to length(L)) var/key = L[i] var/value if(IS_NORMAL_LIST(L) && !isnum(key)) @@ -511,8 +511,8 @@ var/list/L = value var/list/items = list() - if(L.len > 0 && !(name == "underlays" || name == "overlays" || name == "vars" || L.len > (IS_NORMAL_LIST(L) ? 250 : 300))) - for(var/i in 1 to L.len) + if(length(L) > 0 && !(name == "underlays" || name == "overlays" || name == "vars" || length(L) > (IS_NORMAL_LIST(L) ? 250 : 300))) + for(var/i in 1 to length(L)) var/key = L[i] var/val if(IS_NORMAL_LIST(L) && !isnum(key)) @@ -523,10 +523,10 @@ items += debug_variable(key, val, level + 1, sanitize = sanitize) - item = "[VV_HTML_ENCODE(name)] = /list ([L.len])
    [items.Join()]
" + item = "[VV_HTML_ENCODE(name)] = /list ([length(L)])
    [items.Join()]
" else - item = "[VV_HTML_ENCODE(name)] = /list ([L.len])" + item = "[VV_HTML_ENCODE(name)] = /list ([length(L)])" else item = "[VV_HTML_ENCODE(name)] = [VV_HTML_ENCODE(value)]" @@ -1049,7 +1049,7 @@ to_chat(usr, "This can only be done to instances of type /mob") return - if(!H.languages.len) + if(!length(H.languages)) to_chat(usr, "This mob knows no languages.") return @@ -1400,9 +1400,9 @@ return TRUE L.len = value["value"] - log_world("### ListVarEdit by [src]: /list len: [L.len]") - log_admin("[key_name(src)] modified list's len: [L.len]") - message_admins("[key_name_admin(src)] modified list's len: [L.len]") + log_world("### ListVarEdit by [src]: /list len: [length(L)]") + log_admin("[key_name(src)] modified list's len: [length(L)]") + message_admins("[key_name_admin(src)] modified list's len: [length(L)]") return TRUE if(href_list["listshuffle"]) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index 0675cdf52bff..ccfabbd9a880 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -49,9 +49,9 @@ GLOBAL_LIST_INIT(advance_cures, list( D = null // Generate symptoms if we weren't given any. - if(!symptoms || !symptoms.len) + if(!symptoms || !length(symptoms)) - if(!D || !D.symptoms || !D.symptoms.len) + if(!D || !D.symptoms || !length(D.symptoms)) symptoms = GenerateSymptoms(0, 2) else for(var/datum/symptom/S in D.symptoms) @@ -71,7 +71,7 @@ GLOBAL_LIST_INIT(advance_cures, list( /datum/disease/advance/stage_act() if(!..()) return FALSE - if(symptoms && symptoms.len) + if(symptoms && length(symptoms)) if(!processing) processing = TRUE @@ -162,7 +162,7 @@ GLOBAL_LIST_INIT(advance_cures, list( if(!HasSymptom(S)) possible_symptoms += S - if(!possible_symptoms.len) + if(!length(possible_symptoms)) return generated // Random chance to get more than one symptom @@ -172,7 +172,7 @@ GLOBAL_LIST_INIT(advance_cures, list( while(prob(20)) number_of += 1 - for(var/i = 1; number_of >= i && possible_symptoms.len; i++) + for(var/i = 1; number_of >= i && length(possible_symptoms); i++) generated += pick_n_take(possible_symptoms) return generated @@ -194,7 +194,7 @@ GLOBAL_LIST_INIT(advance_cures, list( //Generate disease properties based on the effects. Returns an associated list. /datum/disease/advance/proc/GenerateProperties() - if(!symptoms || !symptoms.len) + if(!symptoms || !length(symptoms)) CRASH("We did not have any symptoms before generating properties.") var/list/properties = list("resistance" = 1, "stealth" = 0, "stage rate" = 1, "transmittable" = 1, "severity" = 0) @@ -212,7 +212,7 @@ GLOBAL_LIST_INIT(advance_cures, list( // Assign the properties that are in the list. /datum/disease/advance/proc/AssignProperties(list/properties = list()) - if(properties && properties.len) + if(properties && length(properties)) switch(properties["stealth"]) if(2) visibility_flags = HIDDEN_SCANNER @@ -220,7 +220,7 @@ GLOBAL_LIST_INIT(advance_cures, list( visibility_flags = HIDDEN_SCANNER|HIDDEN_PANDEMIC // The more symptoms we have, the less transmittable it is but some symptoms can make up for it. - SetSpread(clamp(2 ** (properties["transmittable"] - symptoms.len), BLOOD, AIRBORNE)) + SetSpread(clamp(2 ** (properties["transmittable"] - length(symptoms)), BLOOD, AIRBORNE)) permeability_mod = max(CEILING(0.4 * properties["transmittable"], 1), 1) cure_chance = 15 - clamp(properties["resistance"], -5, 5) // can be between 10 and 20 stage_prob = max(properties["stage rate"], 2) @@ -266,8 +266,8 @@ GLOBAL_LIST_INIT(advance_cures, list( // Will generate a random cure, the less resistance the symptoms have, the harder the cure. /datum/disease/advance/proc/GenerateCure(list/properties = list()) - if(properties && properties.len) - var/res = clamp(properties["resistance"] - (symptoms.len / 2), 1, GLOB.advance_cures.len) + if(properties && length(properties)) + var/res = clamp(properties["resistance"] - (length(symptoms) / 2), 1, length(GLOB.advance_cures)) // to_chat(world, "Res = [res]") cures = list(GLOB.advance_cures[res]) @@ -288,7 +288,7 @@ GLOBAL_LIST_INIT(advance_cures, list( // Randomly remove a symptom. /datum/disease/advance/proc/Devolve() - if(symptoms.len > 1) + if(length(symptoms) > 1) var/s = safepick(symptoms) if(s) RemoveSymptom(s) @@ -319,7 +319,7 @@ GLOBAL_LIST_INIT(advance_cures, list( if(HasSymptom(S)) return - if(symptoms.len < (VIRUS_SYMPTOM_LIMIT - 1) + rand(-1, 1)) + if(length(symptoms) < (VIRUS_SYMPTOM_LIMIT - 1) + rand(-1, 1)) symptoms += S else RemoveSymptom(pick(symptoms)) @@ -347,14 +347,14 @@ GLOBAL_LIST_INIT(advance_cures, list( for(var/datum/disease/advance/A in D_list) diseases += A.Copy() - if(!diseases.len) + if(!length(diseases)) return null - if(diseases.len <= 1) + if(length(diseases) <= 1) return pick(diseases) // Just return the only entry. var/i = 0 // Mix our diseases until we are left with only one result. - while(i < 20 && diseases.len > 1) + while(i < 20 && length(diseases) > 1) i++ @@ -377,7 +377,7 @@ GLOBAL_LIST_INIT(advance_cures, list( for(var/datum/disease/A in data["viruses"]) preserve += A.Copy() R.data = data.Copy() - if(preserve.len) + if(length(preserve)) R.data["viruses"] = preserve /proc/AdminCreateVirus(client/user) @@ -407,7 +407,7 @@ GLOBAL_LIST_INIT(advance_cures, list( i -= 1 while(i > 0) - if(D.symptoms.len > 0) + if(length(D.symptoms) > 0) var/new_name = stripped_input(user, "Name your new disease.", "New Name") if(!new_name) diff --git a/code/datums/diseases/advance/symptoms/damage_converter.dm b/code/datums/diseases/advance/symptoms/damage_converter.dm index 9b5fcf6981f8..9d8c47451f8a 100644 --- a/code/datums/diseases/advance/symptoms/damage_converter.dm +++ b/code/datums/diseases/advance/symptoms/damage_converter.dm @@ -42,7 +42,7 @@ Bonus var/list/parts = H.get_damaged_organs(TRUE, TRUE, AFFECT_ORGANIC_ORGAN) //1,1 because it needs inputs. - if(!parts.len) + if(!length(parts)) return var/healed = 0 for(var/obj/item/organ/external/E in parts) diff --git a/code/datums/diseases/advance/symptoms/heal.dm b/code/datums/diseases/advance/symptoms/heal.dm index ddec1008c4c6..c6e68cd3f28e 100644 --- a/code/datums/diseases/advance/symptoms/heal.dm +++ b/code/datums/diseases/advance/symptoms/heal.dm @@ -82,7 +82,7 @@ Bonus // Remove all the diseases we cured. var/mob/living/M = A.affected_mob if(istype(M)) - if(cured_diseases.len) + if(length(cured_diseases)) for(var/res in M.resistances) if(res in cured_diseases) M.resistances -= res diff --git a/code/datums/diseases/advance/symptoms/symptoms.dm b/code/datums/diseases/advance/symptoms/symptoms.dm index 8f72de7f5998..454f71fc8bfb 100644 --- a/code/datums/diseases/advance/symptoms/symptoms.dm +++ b/code/datums/diseases/advance/symptoms/symptoms.dm @@ -18,7 +18,7 @@ GLOBAL_LIST_INIT(list_symptoms, subtypesof(/datum/symptom)) /datum/symptom/New() var/list/S = GLOB.list_symptoms - for(var/i = 1; i <= S.len; i++) + for(var/i = 1; i <= length(S); i++) if(type == S[i]) id = "[i]" return diff --git a/code/datums/helper_datums/async_input.dm b/code/datums/helper_datums/async_input.dm index e25fd0ac3e05..35c9b715e41d 100644 --- a/code/datums/helper_datums/async_input.dm +++ b/code/datums/helper_datums/async_input.dm @@ -110,11 +110,11 @@ /datum/async_input/ranked/render_choices() var/dat = "
" dat += "" - for(var/i = 1, i <= choices.len, i++) + for(var/i = 1, i <= length(choices), i++) var/choice = choices[i] dat += "" dat += "" - dat += "" + dat += "" dat += "" dat += "" dat += "
[button("+", i != 1 ? "upvote=[i]" : "", null, i == 1)][button("-", i != choices.len ? "downvote=[i]" : "", null, i == choices.len)][button("-", i != length(choices) ? "downvote=[i]" : "", null, i == length(choices))][i]. [choice]
" @@ -157,7 +157,7 @@ ..() popup.add_script("autocomplete.js", 'html/browser/autocomplete.js') - for(var/i=1, i <= choices.len, i++) + for(var/i=1, i <= length(choices), i++) var/C = choices[choices[i]] choices[i] = url_encode(choices[i], TRUE) choices[choices[i]] = C diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index 5b534b848b99..9d74a79bae2c 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -14,15 +14,15 @@ if(!holder) //don't want this without a holder spawn qdel(src) - set_desc(steps.len) + set_desc(length(steps)) return /datum/construction/proc/next_step(mob/user as mob) steps.len-- - if(!steps.len) + if(!length(steps)) spawn_result(user) else - set_desc(steps.len) + set_desc(length(steps)) return /datum/construction/proc/action(atom/used_atom,mob/user as mob) @@ -37,9 +37,9 @@ return 0 /datum/construction/proc/is_right_key(atom/used_atom) // returns current step num if used_atom is of the right type. - var/list/L = steps[steps.len] + var/list/L = steps[length(steps)] if(do_tool_or_atom_check(used_atom, L["key"])) - return steps.len + return length(steps) return 0 @@ -67,12 +67,12 @@ return 1 /datum/construction/proc/check_all_steps(atom/used_atom,mob/user as mob) //check all steps, remove matching one. - for(var/i=1;i<=steps.len;i++) + for(var/i=1;i<=length(steps);i++) var/list/L = steps[i] if(do_tool_or_atom_check(used_atom, L["key"]) && custom_action(i, used_atom, user)) steps[i]=null;//stupid byond list from list removal... listclearnulls(steps) - if(!steps.len) + if(!length(steps)) spawn_result(user) return 1 return 0 @@ -130,7 +130,7 @@ /datum/construction/reversible/New(atom) ..() - index = steps.len + index = length(steps) return /datum/construction/reversible/proc/update_index(diff as num, mob/user as mob) diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index ec374b634e1b..dfb66d084f63 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -23,9 +23,7 @@ effect_in = effect if(isnull(effect_out)) effect_out = effect - if(D.start(atom_to_teleport, destination, variance_range, force_teleport, effect_in, effect_out, sound_in, sound_out, bypass_area_flag, safe_turf_pick, do_effect)) - return TRUE - return FALSE + return D.start(atom_to_teleport, destination, variance_range, force_teleport, effect_in, effect_out, sound_in, sound_out, bypass_area_flag, safe_turf_pick, do_effect) /datum/teleport var/atom/movable/teleatom //atom to teleport @@ -166,6 +164,16 @@ playSpecials(curturf,effectin,soundin) + if(isliving(teleatom)) + var/mob/living/target_mob = teleatom + if(target_mob.buckled) + target_mob.buckled.unbuckle_mob(target_mob, force = TRUE) + if(target_mob.has_buckled_mobs()) + target_mob.unbuckle_all_mobs(force = TRUE) + if(ismachinery(target_mob.loc) || istype(target_mob.loc, /obj/item/mecha_parts/mecha_equipment/medical/sleeper)) + var/obj/location = target_mob.loc + location.force_eject_occupant(target_mob) + if(force_teleport) teleatom.forceMove(destturf) playSpecials(destturf,effectout,soundout) @@ -173,13 +181,6 @@ if(teleatom.Move(destturf)) playSpecials(destturf,effectout,soundout) - if(isliving(teleatom)) - var/mob/living/L = teleatom - if(L.buckled) - L.buckled.unbuckle_mob(L, force = TRUE) - if(L.has_buckled_mobs()) - L.unbuckle_all_mobs(force = TRUE) - destarea.Entered(teleatom) return TRUE @@ -205,7 +206,7 @@ precision = rand(1, 100) var/list/bagholding = teleatom.search_contents_for(/obj/item/storage/backpack/holding) - if(bagholding.len) + if(length(bagholding)) if(safe_turf_first) //If this is true, this is already a random teleport. Make it unsafe but do not touch the precision. safe_turf_first = FALSE else diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index bf93b4039bee..e7fc3faef51b 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -34,7 +34,7 @@ LAZYADD(H.holo_calls, src) H.atom_say("[area] pad beeps: Incoming call from [caller]!") - if(!dialed_holopads.len) + if(!length(dialed_holopads)) calling_holopad.atom_say("Connection failure.") qdel(src) return @@ -105,7 +105,7 @@ LAZYREMOVE(H.holo_calls, src) dialed_holopads -= H - if(!dialed_holopads.len) + if(!length(dialed_holopads)) if(graceful) calling_holopad.atom_say("Call rejected.") qdel(src) diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 21d24b3f172b..fe8ab41c65c6 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -489,12 +489,12 @@ if(istype(robot) && robot.emagged) . += "
Cyborg: Is emagged! Unemag!
0th law: [robot.laws.zeroth_law]" var/mob/living/silicon/ai/ai = current - if(istype(ai) && ai.connected_robots.len) + if(istype(ai) && length(ai.connected_robots)) var/n_e_robots = 0 for(var/mob/living/silicon/robot/R in ai.connected_robots) if(R.emagged) n_e_robots++ - . += "
[n_e_robots] of [ai.connected_robots.len] slaved cyborgs are emagged. Unemag" + . += "
[n_e_robots] of [length(ai.connected_robots)] slaved cyborgs are emagged. Unemag" /datum/mind/proc/memory_edit_uplink() . = "" @@ -692,7 +692,7 @@ if("destroy") var/list/possible_targets = active_ais(1) - if(possible_targets.len) + if(length(possible_targets)) var/mob/new_target = input("Select target:", "Objective target") as null|anything in possible_targets new_objective = new /datum/objective/destroy new_objective.target = new_target.mind @@ -1111,10 +1111,10 @@ if(!(src in SSticker.mode.syndicates)) SSticker.mode.syndicates += src SSticker.mode.update_synd_icons_added(src) - if(SSticker.mode.syndicates.len==1) + if(length(SSticker.mode.syndicates) == 1) SSticker.mode.prepare_syndicate_leader(src) else - current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]" + current.real_name = "[syndicate_name()] Operative #[length(SSticker.mode.syndicates) - 1]" special_role = SPECIAL_ROLE_NUKEOPS to_chat(current, "You are a [syndicate_name()] agent!") SSticker.mode.forge_syndicate_objectives(src) @@ -1141,7 +1141,7 @@ if(!SSticker.mode.equip_syndicate(current)) to_chat(usr, "Equipping a syndicate failed!") return - SSticker.mode.update_syndicate_id(current.mind, SSticker.mode.syndicates.len == 1) + SSticker.mode.update_syndicate_id(current.mind, length(SSticker.mode.syndicates) == 1) log_admin("[key_name(usr)] has equipped [key_name(current)] as a nuclear operative") message_admins("[key_name_admin(usr)] has equipped [key_name_admin(current)] as a nuclear operative") @@ -1600,10 +1600,10 @@ if(!(src in SSticker.mode.syndicates)) SSticker.mode.syndicates += src SSticker.mode.update_synd_icons_added(src) - if(SSticker.mode.syndicates.len==1) + if(length(SSticker.mode.syndicates) == 1) SSticker.mode.prepare_syndicate_leader(src) else - current.real_name = "[syndicate_name()] Operative #[SSticker.mode.syndicates.len-1]" + current.real_name = "[syndicate_name()] Operative #[length(SSticker.mode.syndicates) - 1]" special_role = SPECIAL_ROLE_NUKEOPS assigned_role = SPECIAL_ROLE_NUKEOPS to_chat(current, "You are a [syndicate_name()] agent!") diff --git a/code/datums/outfits/vv_outfit.dm b/code/datums/outfits/vv_outfit.dm index c211e1001c13..36401cb41fd3 100644 --- a/code/datums/outfits/vv_outfit.dm +++ b/code/datums/outfits/vv_outfit.dm @@ -182,7 +182,7 @@ for(var/edit in vedits) if(istext(vedits[edit]) || isnum(vedits[edit]) || isnull(vedits[edit])) stripped_edits[edit] = vedits[edit] - if(stripped_edits.len) + if(length(stripped_edits)) stripped_vv[slot] = stripped_edits .["vv_values"] = stripped_vv diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index 3efc5b1e0948..aecbe44d2d2c 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -26,7 +26,7 @@ LAZYINITLIST(user.progressbars[bar.loc]) var/list/bars = user.progressbars[bar.loc] bars.Add(src) - listindex = bars.len + listindex = length(bars) animate(bar, pixel_y = 32 + (PROGRESSBAR_HEIGHT * (listindex - 1)), alpha = 255, time = 5, easing = SINE_EASING) /datum/progressbar/proc/update(progress) @@ -58,7 +58,7 @@ var/list/bars = user.progressbars[bar.loc] bars.Remove(src) - if(!bars.len) + if(!length(bars)) LAZYREMOVE(user.progressbars, bar.loc) animate(bar, alpha = 0, time = 5) spawn(5) diff --git a/code/datums/radiation_wave.dm b/code/datums/radiation_wave.dm index c7ff5d74af57..19533fd7ebbf 100644 --- a/code/datums/radiation_wave.dm +++ b/code/datums/radiation_wave.dm @@ -90,7 +90,7 @@ width-- width = 1 + (2 * width) - for(var/k in 1 to atoms.len) + for(var/k in 1 to length(atoms)) var/atom/thing = atoms[k] if(!thing) continue diff --git a/code/datums/radio_frequency.dm b/code/datums/radio_frequency.dm index 71e891ed3ce6..89ffaebf1bca 100644 --- a/code/datums/radio_frequency.dm +++ b/code/datums/radio_frequency.dm @@ -47,9 +47,9 @@ return devices_line += device // var/list/obj/devices_line___ = devices[filter_str] -// var/l = devices_line___.len - //log_admin("DEBUG: devices_line.len=[devices_line.len]") - //log_admin("DEBUG: devices(filter_str).len=[l]") +// var/l = length(devices_line___) + //log_admin("DEBUG: length(devices_line)=[length(devices_line)]") + //log_admin("DEBUG: length(devices(filter_str))=[l]") /datum/radio_frequency/proc/remove_listener(obj/device) for(var/devices_filter in devices) @@ -57,7 +57,7 @@ devices_line-=device while(null in devices_line) devices_line -= null - if(devices_line.len==0) + if(length(devices_line) == 0) devices -= devices_filter qdel(devices_line) diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm index 3582772446ae..8d0f7a7c0a1e 100644 --- a/code/datums/recipe.dm +++ b/code/datums/recipe.dm @@ -51,9 +51,8 @@ . = -1 else return 0 - if((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) + if((reagents?(length(reagents)):(0)) < length(avail_reagents.reagent_list)) return -1 - return . /datum/recipe/proc/check_items(obj/container, list/ignored_items = null) //1=precisely, 0=insufficiently, -1=superfluous . = 1 @@ -71,9 +70,8 @@ break if(!found) . = -1 - if(checklist.len) + if(length(checklist)) return 0 - return . //general version /datum/recipe/proc/make(obj/container) @@ -103,22 +101,21 @@ for(var/datum/recipe/recipe in available_recipes) if(recipe.check_reagents(obj.reagents) == exact && recipe.check_items(obj, ignored_items) == exact) possible_recipes += recipe - if(possible_recipes.len == 0) + if(length(possible_recipes) == 0) return null - else if(possible_recipes.len == 1) + else if(length(possible_recipes) == 1) return possible_recipes[1] else //okay, let's select the most complicated recipe var/r_count = 0 var/i_count = 0 . = possible_recipes[1] for(var/datum/recipe/recipe in possible_recipes) - var/N_i = (recipe.items)?(recipe.items.len):0 - var/N_r = (recipe.reagents)?(recipe.reagents.len):0 + var/N_i = (recipe.items)?(length(recipe.items)):0 + var/N_r = (recipe.reagents)?(length(recipe.reagents)):0 if(N_i > i_count || (N_i== i_count && N_r > r_count)) r_count = N_r i_count = N_i . = recipe - return . /datum/recipe/proc/get_byproduct() if(byproduct) @@ -128,6 +125,6 @@ /datum/recipe/proc/count_n_items() var/count = 0 - if(items && items.len) - count += items.len + if(items && length(items)) + count += length(items) return count diff --git a/code/datums/spells/alien_spells/basetype_alien_spell.dm b/code/datums/spells/alien_spells/basetype_alien_spell.dm index 547cba3c4389..12d98e8e489b 100644 --- a/code/datums/spells/alien_spells/basetype_alien_spell.dm +++ b/code/datums/spells/alien_spells/basetype_alien_spell.dm @@ -32,6 +32,9 @@ Updates the spell's actions on use as well, so they know when they can or can't ..() if(plasma_cost) name = "[name] ([plasma_cost])" + action.name = name + action.desc = desc + action.UpdateButtons() /datum/spell/alien_spell/write_custom_logs(list/targets, mob/user) user.create_log(ATTACK_LOG, "Cast the spell [name]") diff --git a/code/datums/spells/area_teleport.dm b/code/datums/spells/area_teleport.dm index b7d349b5a32d..3cd160c1cc74 100644 --- a/code/datums/spells/area_teleport.dm +++ b/code/datums/spells/area_teleport.dm @@ -49,7 +49,7 @@ if(clear) L+=T - if(!L.len) + if(!length(L)) to_chat(usr, "The spell matrix was unable to locate a suitable teleport destination for an unknown reason. Sorry.") return @@ -62,7 +62,7 @@ var/list/tempL = L var/attempt = null var/success = 0 - while(tempL.len) + while(length(tempL)) attempt = pick(tempL) success = target.Move(attempt) if(!success) diff --git a/code/datums/spells/charge.dm b/code/datums/spells/charge.dm index be5c5a09b888..a35a923267bf 100644 --- a/code/datums/spells/charge.dm +++ b/code/datums/spells/charge.dm @@ -20,7 +20,7 @@ if(L.pulling && (isliving(L.pulling))) var/mob/living/M = L.pulling - if(M.mob_spell_list.len != 0 || (M.mind && M.mind.spell_list.len != 0)) + if(length(M.mob_spell_list) != 0 || (M.mind && length(M.mind.spell_list) != 0)) for(var/datum/spell/S in M.mob_spell_list) S.cooldown_handler.revert_cast() if(M.mind) diff --git a/code/datums/spells/conjure.dm b/code/datums/spells/conjure.dm index 74f4a885e4d8..048454fbbbfe 100644 --- a/code/datums/spells/conjure.dm +++ b/code/datums/spells/conjure.dm @@ -30,7 +30,7 @@ if(delay <= 0 || do_after(user, delay, target = user)) for(var/i=0,iNo target found in range.") return diff --git a/code/datums/spells/lichdom.dm b/code/datums/spells/lichdom.dm index 30c0dd39ec4e..68af16b3a792 100644 --- a/code/datums/spells/lichdom.dm +++ b/code/datums/spells/lichdom.dm @@ -13,22 +13,12 @@ var/marked_item_uid var/mob/living/current_body var/resurrections = 0 - var/existence_stops_round_end = FALSE action_icon_state = "skeleton" /datum/spell/lichdom/create_new_targeting() return new /datum/spell_targeting/self -/datum/spell/lichdom/Destroy() - for(var/datum/mind/M in SSticker.mode.wizards) //Make sure no other bones are about - for(var/datum/spell/S in M.spell_list) - if(istype(S,/datum/spell/lichdom) && S != src) - return ..() - if(existence_stops_round_end) - GLOB.configuration.gamemode.disable_certain_round_early_end = FALSE - return ..() - /datum/spell/lichdom/cast(list/targets, mob/user = usr) for(var/mob/M in targets) if(stat_allowed) @@ -89,7 +79,6 @@ lich.Weaken(stun_time) user.mind.transfer_to(lich) equip_lich(lich) - RegisterSignal(lich, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_Z_CHANGED), PROC_REF(check_revivability_handler)) current_body = lich cooldown_handler.recharge_duration += 1 MINUTES @@ -134,13 +123,8 @@ H.unEquip(H.head) equip_lich(H) - RegisterSignal(target, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_Z_CHANGED), PROC_REF(check_revivability_handler)) - RegisterSignal(current_body, list(COMSIG_PARENT_QDELETING, COMSIG_MOVABLE_Z_CHANGED), PROC_REF(check_revivability_handler)) to_chat(user, "With a hideous feeling of emptiness you watch in horrified fascination as skin sloughs off bone! Blood boils, nerves disintegrate, eyes boil in their sockets! As your organs crumble to dust in your fleshless chest you come to terms with your choice. You're a lich!") - existence_stops_round_end = TRUE - GLOB.configuration.gamemode.disable_certain_round_early_end = TRUE - /datum/spell/lichdom/proc/is_revive_possible() var/obj/item/marked_item = locateUID(marked_item_uid) if(QDELETED(marked_item)) @@ -153,23 +137,6 @@ return FALSE return TRUE -/datum/spell/lichdom/proc/check_revivability_handler() - SIGNAL_HANDLER - - // There are other liches about, so round may still continue - for(var/datum/mind/M in SSticker.mode.wizards) - for(var/datum/spell/lichdom/S in M.spell_list) - if(S == src) - continue - // Other lich can still revive - if(S.is_revive_possible()) - return - // Other lich is still alive - if(!QDELETED(S.current_body) && S.current_body.stat != DEAD) - return - - GLOB.configuration.gamemode.disable_certain_round_early_end = is_revive_possible() - /datum/spell/lichdom/proc/equip_lich(mob/living/carbon/human/H) H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe/black(H), SLOT_HUD_OUTER_SUIT) H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard/black(H), SLOT_HUD_HEAD) diff --git a/code/datums/spells/mind_transfer.dm b/code/datums/spells/mind_transfer.dm index ffefd1534a17..b980233a9cb2 100644 --- a/code/datums/spells/mind_transfer.dm +++ b/code/datums/spells/mind_transfer.dm @@ -50,18 +50,18 @@ Also, you never added distance checking after target is selected. I've went ahea var/mob/living/caster = user//The wizard/whomever doing the body transferring. //MIND TRANSFER BEGIN - if(caster.mind.special_verbs.len)//If the caster had any special verbs, remove them from the mob verb list. + if(length(caster.mind.special_verbs))//If the caster had any special verbs, remove them from the mob verb list. for(var/V in caster.mind.special_verbs)//Since the caster is using an object spell system, this is mostly moot. remove_verb(caster, V) //But a safety nontheless. - if(victim.mind.special_verbs.len)//Now remove all of the victim's verbs. + if(length(victim.mind.special_verbs))//Now remove all of the victim's verbs. for(var/V in victim.mind.special_verbs) remove_verb(victim, V) var/mob/dead/observer/ghost = victim.ghostize(0) caster.mind.transfer_to(victim) - if(victim.mind.special_verbs.len)//To add all the special verbs for the original caster. + if(length(victim.mind.special_verbs))//To add all the special verbs for the original caster. for(var/V in caster.mind.special_verbs)//Not too important but could come into play. add_verb(caster, V) @@ -71,7 +71,7 @@ Also, you never added distance checking after target is selected. I've went ahea caster.key = ghost.key //have to transfer the key since the mind was not active qdel(ghost) - if(caster.mind.special_verbs.len)//If they had any special verbs, we add them here. + if(length(caster.mind.special_verbs))//If they had any special verbs, we add them here. for(var/V in caster.mind.special_verbs) add_verb(caster, V) //MIND TRANSFER END diff --git a/code/datums/spells/turf_teleport.dm b/code/datums/spells/turf_teleport.dm index 936d4c3fda9c..ac20dea2ae8a 100644 --- a/code/datums/spells/turf_teleport.dm +++ b/code/datums/spells/turf_teleport.dm @@ -35,7 +35,7 @@ continue turfs += T - if(!turfs.len) + if(!length(turfs)) var/list/turfs_to_pick_from = list() for(var/turf/T in orange(target,outer_tele_radius)) if(!(T in orange(target,inner_tele_radius))) diff --git a/code/datums/uplink_items/uplink_general.dm b/code/datums/uplink_items/uplink_general.dm index 7f36a7275447..21bea123b930 100644 --- a/code/datums/uplink_items/uplink_general.dm +++ b/code/datums/uplink_items/uplink_general.dm @@ -6,7 +6,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) var/list/uplink_items = list() var/list/sales_items = list() var/newreference = 1 - if(!uplink_items.len) + if(!length(uplink_items)) var/list/last = list() for(var/path in GLOB.uplink_items) diff --git a/code/datums/weather/weather_types/ash_storm.dm b/code/datums/weather/weather_types/ash_storm.dm index 0c1407e8aed8..636dbb3dc606 100644 --- a/code/datums/weather/weather_types/ash_storm.dm +++ b/code/datums/weather/weather_types/ash_storm.dm @@ -54,7 +54,7 @@ if(!golemShuttleOnPlanet) eligible_areas -= get_areas(/area/shuttle/freegolem) - for(var/i in 1 to eligible_areas.len) + for(var/i in 1 to length(eligible_areas)) var/area/place = eligible_areas[i] if(place.outdoors) outside_areas += place diff --git a/code/defines/procs/admin_keyname_procs.dm b/code/defines/procs/admin_keyname_procs.dm index ec371a6a6dab..166540f7b13b 100644 --- a/code/defines/procs/admin_keyname_procs.dm +++ b/code/defines/procs/admin_keyname_procs.dm @@ -68,8 +68,6 @@ . += "/([name])" - return . - /proc/key_name_admin(whom) if(whom) var/datum/whom_datum = whom //As long as it's not null, will be close enough/has the proc UID() that is all that's needed @@ -92,3 +90,7 @@ /proc/log_and_message_admins(message) log_admin("[key_name(usr)] " + message) message_admins("[key_name_admin(usr)] " + message) + +/proc/log_and_message_admins_no_usr(message) + log_admin(message) + message_admins(message) diff --git a/code/game/alternate_appearance.dm b/code/game/alternate_appearance.dm index 4e6c0b052de7..b7cdb4f8d558 100644 --- a/code/game/alternate_appearance.dm +++ b/code/game/alternate_appearance.dm @@ -23,7 +23,7 @@ displayTo - a list of MOBS to show this appearance to */ /datum/alternate_appearance/proc/display_to(list/displayTo) - if(!displayTo || !displayTo.len) + if(!displayTo || !length(displayTo)) return for(var/m in displayTo) var/mob/M = m @@ -47,7 +47,7 @@ var/mob/M = m if(M.client) M.client.images -= img - if(M.viewing_alternate_appearances && M.viewing_alternate_appearances.len) + if(M.viewing_alternate_appearances && length(M.viewing_alternate_appearances)) M.viewing_alternate_appearances -= src viewers -= M @@ -94,7 +94,7 @@ if(alternate_appearances[key]) qdel(alternate_appearances[key]) alternate_appearances[key] = AA - if(displayTo && displayTo.len) + if(displayTo && length(displayTo)) display_alt_appearance(key, displayTo) diff --git a/code/game/area/areas/depot-areas.dm b/code/game/area/areas/depot-areas.dm index 8831d8089810..b9e045e1d456 100644 --- a/code/game/area/areas/depot-areas.dm +++ b/code/game/area/areas/depot-areas.dm @@ -133,7 +133,7 @@ /area/syndicate_depot/core/proc/armory_locker_looted() if(!run_finished && !used_self_destruct) - if(shield_list.len) + if(length(shield_list)) activate_self_destruct("Armory compromised despite armory shield being online.", FALSE) return declare_finished() @@ -221,7 +221,7 @@ var/obj/effect/landmark/L = thing if(L.name == "syndi_depot_bot") possible_bot_spawns |= L - if(possible_bot_spawns.len) + if(length(possible_bot_spawns)) var/obj/effect/landmark/S = pick(possible_bot_spawns) new /obj/effect/portal(get_turf(S)) var/mob/living/simple_animal/bot/ed209/syndicate/B = new /mob/living/simple_animal/bot/ed209/syndicate(get_turf(S)) @@ -345,7 +345,7 @@ SEND_SOUND(R, sound('sound/misc/notice1.ogg')) /area/syndicate_depot/core/proc/shields_up() - if(shield_list.len) + if(length(shield_list)) return for(var/thing in GLOB.landmarks_list) var/obj/effect/landmark/L = thing @@ -362,7 +362,7 @@ A.lock() /area/syndicate_depot/core/proc/shields_key_check() - if(!shield_list.len) + if(!length(shield_list)) return if(detected_mech || detected_pod || detected_double_agent) return @@ -485,7 +485,7 @@ var/list/shield_list = list() /area/syndicate_depot/perimeter/proc/perimeter_shields_up() - if(shield_list.len) + if(length(shield_list)) return for(var/turf/T in src) var/obj/machinery/shieldwall/syndicate/S = new /obj/machinery/shieldwall/syndicate(T) diff --git a/code/game/area/asteroid_areas.dm b/code/game/area/asteroid_areas.dm index 770be1271998..97935e23bc25 100644 --- a/code/game/area/asteroid_areas.dm +++ b/code/game/area/asteroid_areas.dm @@ -22,12 +22,3 @@ /area/asteroid/artifactroom name = "\improper Asteroid - Artifact" icon_state = "cave" - -//Labor camp -/area/mine/laborcamp - name = "Labor Camp" - icon_state = "brig" - -/area/mine/laborcamp/security - name = "Labor Camp Security" - icon_state = "security" diff --git a/code/game/area/away_content_areas.dm b/code/game/area/away_content_areas.dm index efbb66edb5ce..dcaccc160733 100644 --- a/code/game/area/away_content_areas.dm +++ b/code/game/area/away_content_areas.dm @@ -66,14 +66,11 @@ /area/awaycontent/a11 icon_state = "awaycontent11" -/area/awaycontent/a11 - icon_state = "awaycontent12" - /area/awaycontent/a12 - icon_state = "awaycontent13" + icon_state = "awaycontent12" /area/awaycontent/a13 - icon_state = "awaycontent14" + icon_state = "awaycontent13" /area/awaycontent/a14 icon_state = "awaycontent14" diff --git a/code/game/area/ss13_areas/public_areas.dm b/code/game/area/ss13_areas/public_areas.dm index f5c9408384e1..7fc9f2922630 100644 --- a/code/game/area/ss13_areas/public_areas.dm +++ b/code/game/area/ss13_areas/public_areas.dm @@ -245,3 +245,9 @@ /area/station/public/quantum/cargo name = "Cargo Quantum Pad" + +/area/station/public/quantum/service + name = "Service Quantum Pad" + +/area/station/public/quantum/medbay + name = "Medbay Quantum Pad" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index c76d3d6d7f87..996ba8dd2f65 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -368,7 +368,7 @@ pass |= istype(A, type) if(!pass) continue - if(A.contents.len) + if(length(A.contents)) found += A.search_contents_for(path, filter_path) return found @@ -393,13 +393,13 @@ if(reagents) if(container_type & TRANSPARENT) . += "It contains:" - if(reagents.reagent_list.len) + if(length(reagents.reagent_list)) if(user.can_see_reagents()) //Show each individual reagent for(var/I in reagents.reagent_list) var/datum/reagent/R = I . += "[R.volume] units of [R.name]" else //Otherwise, just show the total volume - if(reagents && reagents.reagent_list.len) + if(reagents && length(reagents.reagent_list)) . += "[reagents.total_volume] units of various reagents." else . += "Nothing." @@ -845,9 +845,9 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) /atom/proc/transfer_blood_dna(list/blood_dna) if(!blood_DNA) blood_DNA = list() - var/old_length = blood_DNA.len + var/old_length = length(blood_DNA) blood_DNA |= blood_dna - if(blood_DNA.len > old_length) + if(length(blood_DNA) > old_length) return TRUE//some new blood DNA was added //to add blood from a mob onto something, and transfer their dna info @@ -1027,7 +1027,7 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) var/cur_x = null var/cur_y = null var/list/y_arr = null - for(cur_x in 1 to GLOB.global_map.len) + for(cur_x in 1 to length(GLOB.global_map)) y_arr = GLOB.global_map[cur_x] cur_y = y_arr.Find(src.z) if(cur_y) @@ -1155,12 +1155,12 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) Adds an instance of colour_type to the atom's atom_colours list */ /atom/proc/add_atom_colour(coloration, colour_priority) - if(!atom_colours || !atom_colours.len) + if(!atom_colours || !length(atom_colours)) atom_colours = list() atom_colours.len = COLOUR_PRIORITY_AMOUNT //four priority levels currently. if(!coloration) return - if(colour_priority > atom_colours.len) + if(colour_priority > length(atom_colours)) return atom_colours[colour_priority] = coloration update_atom_colour() @@ -1172,7 +1172,7 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) if(!atom_colours) atom_colours = list() atom_colours.len = COLOUR_PRIORITY_AMOUNT //four priority levels currently. - if(colour_priority > atom_colours.len) + if(colour_priority > length(atom_colours)) return if(coloration && atom_colours[colour_priority] != coloration) return //if we don't have the expected color (for a specific priority) to remove, do nothing @@ -1191,7 +1191,7 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) for(var/C in atom_colours) if(islist(C)) var/list/L = C - if(L.len) + if(length(L)) color = L return else if(C) diff --git a/code/game/dna/dna2.dm b/code/game/dna/dna2.dm index 090aa51320fa..cb5cd14435c3 100644 --- a/code/game/dna/dna2.dm +++ b/code/game/dna/dna2.dm @@ -126,9 +126,9 @@ GLOBAL_LIST_EMPTY(bad_blocks) SetUIValueRange(DNA_UI_SKIN_TONE, 35-character.s_tone, 220, 1) // Value can be negative. - SetUIValueRange(DNA_UI_HEAD_MARK_STYLE, head_marks, GLOB.marking_styles_list.len, 1) - SetUIValueRange(DNA_UI_BODY_MARK_STYLE, body_marks, GLOB.marking_styles_list.len, 1) - SetUIValueRange(DNA_UI_TAIL_MARK_STYLE, tail_marks, GLOB.marking_styles_list.len, 1) + SetUIValueRange(DNA_UI_HEAD_MARK_STYLE, head_marks, length(GLOB.marking_styles_list), 1) + SetUIValueRange(DNA_UI_BODY_MARK_STYLE, body_marks, length(GLOB.marking_styles_list), 1) + SetUIValueRange(DNA_UI_TAIL_MARK_STYLE, tail_marks, length(GLOB.marking_styles_list), 1) SetUIValueRange(DNA_UI_PHYSIQUE, GLOB.character_physiques.Find(character.physique), length(GLOB.character_physiques), 1) SetUIValueRange(DNA_UI_HEIGHT, GLOB.character_heights.Find(character.height), length(GLOB.character_heights), 1) @@ -136,6 +136,12 @@ GLOBAL_LIST_EMPTY(bad_blocks) var/list/bodyacc = GLOB.body_accessory_by_name.Find(character.body_accessory?.name || "None") SetUIValueRange(DNA_UI_BACC_STYLE, bodyacc, length(GLOB.body_accessory_by_name), 1) + switch(character.body_type) + if(FEMALE) + SetUIState(DNA_UI_BODY_TYPE, DNA_GENDER_FEMALE, TRUE) + if(MALE) + SetUIState(DNA_UI_BODY_TYPE, DNA_GENDER_MALE, TRUE) + //Set the Gender switch(character.gender) if(FEMALE) @@ -393,7 +399,7 @@ GLOBAL_LIST_EMPTY(bad_blocks) // Just checks our character has all the crap it needs. /datum/dna/proc/check_integrity(mob/living/carbon/human/character) if(character) - if(UI.len != DNA_UI_LENGTH) + if(length(UI) != DNA_UI_LENGTH) ResetUIFrom(character) if(length(struc_enzymes)!= 3 * DNA_SE_LENGTH) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index e8008e25ba92..c387b34e5c33 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -154,6 +154,12 @@ H.s_tone = 35 - dna.GetUIValueRange(DNA_UI_SKIN_TONE, 220) // Value can be negative. + switch(dna.GetUIState(DNA_UI_BODY_TYPE)) + if(DNA_GENDER_FEMALE) + H.change_body_type(FEMALE, FALSE) + if(DNA_GENDER_MALE) + H.change_body_type(MALE, FALSE) + switch(dna.GetUITriState(DNA_UI_GENDER)) if(DNA_GENDER_FEMALE) H.change_gender(FEMALE, FALSE) @@ -163,16 +169,16 @@ H.change_gender(PLURAL, FALSE) //Head Markings - var/head_marks = dna.GetUIValueRange(DNA_UI_HEAD_MARK_STYLE, GLOB.marking_styles_list.len) - if((head_marks > 0) && (head_marks <= GLOB.marking_styles_list.len)) + var/head_marks = dna.GetUIValueRange(DNA_UI_HEAD_MARK_STYLE, length(GLOB.marking_styles_list)) + if((head_marks > 0) && (head_marks <= length(GLOB.marking_styles_list))) H.m_styles["head"] = GLOB.marking_styles_list[head_marks] //Body Markings - var/body_marks = dna.GetUIValueRange(DNA_UI_BODY_MARK_STYLE, GLOB.marking_styles_list.len) - if((body_marks > 0) && (body_marks <= GLOB.marking_styles_list.len)) + var/body_marks = dna.GetUIValueRange(DNA_UI_BODY_MARK_STYLE, length(GLOB.marking_styles_list)) + if((body_marks > 0) && (body_marks <= length(GLOB.marking_styles_list))) H.m_styles["body"] = GLOB.marking_styles_list[body_marks] //Tail Markings - var/tail_marks = dna.GetUIValueRange(DNA_UI_TAIL_MARK_STYLE, GLOB.marking_styles_list.len) - if((tail_marks > 0) && (tail_marks <= GLOB.marking_styles_list.len)) + var/tail_marks = dna.GetUIValueRange(DNA_UI_TAIL_MARK_STYLE, length(GLOB.marking_styles_list)) + if((tail_marks > 0) && (tail_marks <= length(GLOB.marking_styles_list))) H.m_styles["tail"] = GLOB.marking_styles_list[tail_marks] // Physique (examine fluff) @@ -207,8 +213,8 @@ /datum/dna/proc/write_head_attributes(obj/item/organ/external/head/head_organ) //Hair - var/hair = GetUIValueRange(DNA_UI_HAIR_STYLE,GLOB.hair_styles_full_list.len) - if((hair > 0) && (hair <= GLOB.hair_styles_full_list.len)) + var/hair = GetUIValueRange(DNA_UI_HAIR_STYLE,length(GLOB.hair_styles_full_list)) + if((hair > 0) && (hair <= length(GLOB.hair_styles_full_list))) head_organ.h_style = GLOB.hair_styles_full_list[hair] head_organ.hair_colour = rgb(head_organ.dna.GetUIValueRange(DNA_UI_HAIR_R, 255), head_organ.dna.GetUIValueRange(DNA_UI_HAIR_G, 255), head_organ.dna.GetUIValueRange(DNA_UI_HAIR_B, 255)) @@ -223,8 +229,8 @@ head_organ.h_grad_colour = rgb(head_organ.dna.GetUIValueRange(DNA_UI_HAIR_GRADIENT_R, 255), head_organ.dna.GetUIValueRange(DNA_UI_HAIR_GRADIENT_G, 255), head_organ.dna.GetUIValueRange(DNA_UI_HAIR_GRADIENT_B, 255)) //Facial Hair - var/beard = GetUIValueRange(DNA_UI_BEARD_STYLE,GLOB.facial_hair_styles_list.len) - if((beard > 0) && (beard <= GLOB.facial_hair_styles_list.len)) + var/beard = GetUIValueRange(DNA_UI_BEARD_STYLE,length(GLOB.facial_hair_styles_list)) + if((beard > 0) && (beard <= length(GLOB.facial_hair_styles_list))) head_organ.f_style = GLOB.facial_hair_styles_list[beard] head_organ.facial_colour = rgb(head_organ.dna.GetUIValueRange(DNA_UI_BEARD_R, 255), head_organ.dna.GetUIValueRange(DNA_UI_BEARD_G, 255), head_organ.dna.GetUIValueRange(DNA_UI_BEARD_B, 255)) @@ -308,8 +314,8 @@ SetUIValueRange(DNA_UI_HAIR_GRADIENT_X, head_organ.h_grad_offset_x + 16, 32, 1) SetUIValueRange(DNA_UI_HAIR_GRADIENT_Y, head_organ.h_grad_offset_y + 16, 32, 1) - SetUIValueRange(DNA_UI_HAIR_STYLE, hair, GLOB.hair_styles_full_list.len, 1) - SetUIValueRange(DNA_UI_BEARD_STYLE, beard, GLOB.facial_hair_styles_list.len, 1) + SetUIValueRange(DNA_UI_HAIR_STYLE, hair, length(GLOB.hair_styles_full_list), 1) + SetUIValueRange(DNA_UI_BEARD_STYLE, beard, length(GLOB.facial_hair_styles_list), 1) SetUIValueRange(DNA_UI_HAIR_GRADIENT_STYLE, gradient, length(GLOB.hair_gradients_list), 1) var/list/available = character.generate_valid_head_accessories() diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index cfb8f17e08a7..89b670b09756 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -351,7 +351,7 @@ /obj/machinery/computer/scan_consolenew/proc/all_dna_blocks(list/buffer) var/list/arr = list() - for(var/i = 1, i <= buffer.len, i++) + for(var/i = 1, i <= length(buffer), i++) arr += "[i]:[EncodeDNABlock(buffer[i])]" return arr @@ -468,7 +468,7 @@ data["beakerVolume"] = 0 if(connected.beaker) data["beakerLabel"] = connected.beaker.label_text ? connected.beaker.label_text : null - if(connected.beaker.reagents && connected.beaker.reagents.reagent_list.len) + if(length(connected.beaker.reagents.reagent_list)) for(var/datum/reagent/R in connected.beaker.reagents.reagent_list) data["beakerVolume"] += R.volume diff --git a/code/game/dna/mutations/disabilities.dm b/code/game/dna/mutations/disabilities.dm index f6b570d6f4db..c0140fcb7cac 100644 --- a/code/game/dna/mutations/disabilities.dm +++ b/code/game/dna/mutations/disabilities.dm @@ -435,7 +435,7 @@ var/list/words = splittext(message," ") var/list/rearranged = list() - for(var/i=1;i<=words.len;i++) + for(var/i=1;i<=length(words);i++) var/cword = pick(words) words.Remove(cword) var/suffix = copytext(cword,length(cword)-1,length(cword)) diff --git a/code/game/dna/mutations/mutation_powers.dm b/code/game/dna/mutations/mutation_powers.dm index 58a538d19af5..463b32757867 100644 --- a/code/game/dna/mutations/mutation_powers.dm +++ b/code/game/dna/mutations/mutation_powers.dm @@ -391,7 +391,7 @@ /datum/spell/eat/cast(list/targets, mob/user = usr) - if(!targets.len) + if(!length(targets)) to_chat(user, "No target found in range.") return @@ -700,8 +700,8 @@ if(H.mind && H.mind.initial_account) numbers += H.mind.initial_account.account_number numbers += H.mind.initial_account.account_pin - if(numbers.len>0) - to_chat(user, "Numbers: You sense the number[numbers.len>1?"s":""] [english_list(numbers)] [numbers.len>1?"are":"is"] important to [M.name].") + if(length(numbers)>0) + to_chat(user, "Numbers: You sense the number[length(numbers)>1?"s":""] [english_list(numbers)] [length(numbers)>1?"are":"is"] important to [M.name].") to_chat(user, "Thoughts: [M.name] is currently [thoughts].") if(M.dna?.GetSEState(GLOB.empathblock)) @@ -867,10 +867,10 @@ M.change_skin_tone(new_tone) if(M.dna.species.bodyflags & HAS_ICON_SKIN_TONE) - var/prompt = "Please select skin tone: 1-[M.dna.species.icon_skin_tones.len] (" - for(var/i = 1 to M.dna.species.icon_skin_tones.len) + var/prompt = "Please select skin tone: 1-[length(M.dna.species.icon_skin_tones)] (" + for(var/i = 1 to length(M.dna.species.icon_skin_tones)) prompt += "[i] = [M.dna.species.icon_skin_tones[i]]" - if(i != M.dna.species.icon_skin_tones.len) + if(i != length(M.dna.species.icon_skin_tones)) prompt += ", " prompt += ")" @@ -878,7 +878,7 @@ if(!new_tone) new_tone = 0 else - new_tone = max(min(round(text2num(new_tone)), M.dna.species.icon_skin_tones.len), 1) + new_tone = max(min(round(text2num(new_tone)), length(M.dna.species.icon_skin_tones)), 1) M.change_skin_tone(new_tone) //Skin colour. diff --git a/code/game/gamemodes/autotraitor/autotraitor.dm b/code/game/gamemodes/autotraitor/autotraitor.dm index be7bf110aa3e..371a90bdfabb 100644 --- a/code/game/gamemodes/autotraitor/autotraitor.dm +++ b/code/game/gamemodes/autotraitor/autotraitor.dm @@ -32,7 +32,7 @@ traitor_prob = (num_players - (max_traitors - 1) * 10) * 10 // Stop setup if no possible traitors - if(!possible_traitors.len) + if(!length(possible_traitors)) return 0 if(GLOB.configuration.gamemode.traitor_scaling) @@ -56,7 +56,7 @@ traitor.special_role = SPECIAL_ROLE_TRAITOR traitor.restricted_roles = restricted_jobs -// if(!traitors.len) +// if(!length(traitors)) // return 0 return 1 @@ -120,7 +120,7 @@ if(prob(traitor_prob)) message_admins("Making a new Traitor.") - if(!possible_traitors.len) + if(!length(possible_traitors)) message_admins("No potential traitors. Cancelling new traitor.") traitorcheckloop() return diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 85f7d63b971b..54d299509518 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -1,11 +1,7 @@ - // This list is basically a copy of GLOB.greek_letters, but it also removes letters when a changeling spawns in with that ID GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","Epsilon","Zeta","Eta","Theta","Iota","Kappa","Lambda","Mu","Nu","Xi","Omicron","Pi","Rho","Sigma","Tau","Upsilon","Phi","Chi","Psi","Omega")) -/datum/game_mode - var/list/datum/mind/changelings = list() - /datum/game_mode/changeling name = "changeling" config_tag = "changeling" diff --git a/code/game/gamemodes/cult/blood_magic.dm b/code/game/gamemodes/cult/blood_magic.dm index 30370c7d9052..5a62abbd8c18 100644 --- a/code/game/gamemodes/cult/blood_magic.dm +++ b/code/game/gamemodes/cult/blood_magic.dm @@ -546,7 +546,7 @@ var/input_rune_key = tgui_input_list(user, "Choose a rune to teleport to", "Rune to Teleport to", potential_runes) //we know what key they picked var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? - if(QDELETED(src) || !user || user.l_hand != src && user.r_hand != src || user.incapacitated() || !actual_selected_rune) + if(QDELETED(src) || !user || !user.is_holding(src) || user.incapacitated() || !actual_selected_rune) return if(HAS_TRAIT(user, TRAIT_FLOORED)) diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index f72ed0d0b15f..f8a3ca79d772 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -466,7 +466,7 @@ if(IS_CULTIST(owner) && !owner.holy_check()) // Cultist holding the shield // Hit by a projectile - if(istype(hitby, /obj/item/projectile)) + if(isprojectile(hitby)) var/obj/item/projectile/P = hitby var/shatter_chance = 0 // Percent chance of the shield shattering on a projectile hit var/threshold // Depends on the damage Type (Brute or Burn) diff --git a/code/game/gamemodes/cult/cult_mode.dm b/code/game/gamemodes/cult/cult_mode.dm index 3e5c5145c37d..44bb458dc1dc 100644 --- a/code/game/gamemodes/cult/cult_mode.dm +++ b/code/game/gamemodes/cult/cult_mode.dm @@ -1,6 +1,3 @@ -/datum/game_mode - var/datum/team/cult/cult_team - /datum/game_mode/proc/get_cult_team() if(!cult_team) new /datum/team/cult() // assignment happens in create_team() diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 84832aeaabe6..397a78d41ebe 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -45,6 +45,51 @@ /// Each item in this list can only be rolled once on average. var/list/single_antag_positions = list("Head of Personnel", "Chief Engineer", "Research Director", "Chief Medical Officer", "Quartermaster") + /// A list of all minds which have the traitor antag datum. + var/list/datum/mind/traitors = list() + /// An associative list with mindslave minds as keys and their master's minds as values. + var/list/datum/mind/implanted = list() + /// A list of all minds which have the changeling antag datum + var/list/datum/mind/changelings = list() + /// A list of all minds which have the vampire antag datum + var/list/datum/mind/vampires = list() + /// A list of all minds which are thralled by a vampire + var/list/datum/mind/vampire_enthralled = list() + /// A list of all minds which have the wizard special role + var/list/datum/mind/wizards = list() + /// A list of all minds that are wizard apprentices + var/list/datum/mind/apprentices = list() + + /// The cult team datum + var/datum/team/cult/cult_team + + /// How many abductor teams do we have + var/abductor_teams = 0 + /// A list which contains the minds of all abductors + var/list/datum/mind/abductors = list() + /// A list which contains the minds of all abductees + var/list/datum/mind/abductees = list() + + /// A list of all the nuclear operatives' minds + var/list/datum/mind/syndicates = list() + + /// A list of all the minds of head revolutionaries + var/list/datum/mind/head_revolutionaries = list() + /// A list of all the minds of revolutionaries + var/list/datum/mind/revolutionaries = list() + /// The revololution team datum + var/datum/team/revolution/rev_team + + /// A list of all the minds with the superhero special role + var/list/datum/mind/superheroes = list() + /// A list of all the minds with the supervillain special role + var/list/datum/mind/supervillains = list() + /// A list of all the greyshirt minds + var/list/datum/mind/greyshirts = list() + + /// A list of all the minds that have the ERT special role + var/list/datum/mind/ert = list() + /datum/game_mode/proc/announce() //to be calles when round starts to_chat(world, "Notice: [src] did not define announce()") @@ -481,7 +526,7 @@ goal_weights += initial(picked.weight) station_goals += new picked - if(station_goals.len) + if(length(station_goals)) send_station_goals_message() /datum/game_mode/proc/send_station_goals_message() diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm index 61a3e9458245..15aa4bd2ffd8 100644 --- a/code/game/gamemodes/intercept_report.dm +++ b/code/game/gamemodes/intercept_report.dm @@ -93,7 +93,7 @@ if(!man.mind) continue if(man.mind.assigned_role == man.mind.special_role) continue dudes += man - if(dudes.len==0) + if(length(dudes)==0) return null return pick(dudes) @@ -119,7 +119,7 @@ if(man.dna.species.name in SSticker.mode.protected_species) return dudes += man - for(var/i = 0, i < max(GLOB.player_list.len/10,2), i++) + for(var/i = 0, i < max(length(GLOB.player_list)/10,2), i++) dudes += pick(GLOB.player_list) return pick(dudes) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 6c418ff32b78..da3599a1479e 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -464,14 +464,15 @@ user.playsound_local(user, "sparks", 50, FALSE, use_reverb = FALSE) adjust_uses(-1, user) - target.audible_message("You hear a loud electrical buzzing sound coming from [target]!") + target.audible_message("You hear a loud electrical buzzing sound coming from [target]!") + playsound(target, 'sound/goonstation/misc/fuse.ogg', 50, FALSE, use_reverb = FALSE) addtimer(CALLBACK(src, PROC_REF(detonate_machine), target), 5 SECONDS) //kaboom! to_chat(user, "Overloading machine circuitry...") return TRUE /datum/spell/ai_spell/ranged/overload_machine/proc/detonate_machine(obj/machinery/M) if(M && !QDELETED(M)) - explosion(get_turf(M), 0, 3, 5, 0) + explosion(get_turf(M), 0, 2, 3, 0) if(M) //to check if the explosion killed it before we try to delete it qdel(M) @@ -851,12 +852,6 @@ selection_deactivated_message = "APC logic thread restarting..." var/is_active = FALSE -/datum/spell/ai_spell/ranged/repair_cyborg/create_new_targeting() - var/datum/spell_targeting/click/T = new - T.allowed_type = /mob/living/silicon/robot - T.try_auto_target = FALSE - return T - /datum/spell/ai_spell/ranged/repair_cyborg/cast(list/targets, mob/user) var/mob/living/silicon/robot/robot_target = targets[1] if(!istype(robot_target)) diff --git a/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm index e567f5e0d52f..4cbef8c77b9a 100644 --- a/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm +++ b/code/game/gamemodes/miniantags/abduction/abductee_objectives.dm @@ -35,7 +35,7 @@ for(var/datum/job/J in jobs) if(J.current_positions < 1) jobs -= J - if(jobs.len > 0) + if(length(jobs) > 0) var/datum/job/target = pick(jobs) explanation_text += " a [target.title]." else @@ -131,7 +131,7 @@ /datum/objective/abductee/party explanation_text = "You're throwing a huge rager. Make it as awesome as possible so the whole crew comes... OR ELSE!" -/datum/objective/abductee/pets +/datum/objective/abductee/cooler_pets explanation_text = "All the pets around here suck. You need to make them cooler. Replace them with exotic beasts!" /datum/objective/abductee/conspiracy diff --git a/code/game/gamemodes/miniantags/abduction/abduction.dm b/code/game/gamemodes/miniantags/abduction/abduction.dm index 9dc28ac372b1..70cdf2edc9f3 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction.dm @@ -1,8 +1,3 @@ -/datum/game_mode - var/abductor_teams = 0 - var/list/datum/mind/abductors = list() - var/list/datum/mind/abductees = list() - /datum/game_mode/abduction name = "abduction" config_tag = "abduction" @@ -27,11 +22,11 @@ /datum/game_mode/abduction/pre_setup() possible_abductors = get_players_for_role(ROLE_ABDUCTOR) - if(!possible_abductors.len) + if(!length(possible_abductors)) return 0 abductor_teams = max(1, min(max_teams,round(num_players()/15))) - var/possible_teams = max(1,round(possible_abductors.len / 2)) + var/possible_teams = max(1,round(length(possible_abductors) / 2)) abductor_teams = min(abductor_teams,possible_teams) abductors.len = 2*abductor_teams @@ -56,7 +51,7 @@ //Team Members if(!preset_agent || !preset_scientist) - if(possible_abductors.len <=2) + if(length(possible_abductors) <=2) return 0 var/datum/mind/scientist diff --git a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm index 2322549036a9..4027079a2f81 100644 --- a/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm +++ b/code/game/gamemodes/miniantags/abduction/machinery/experiment.dm @@ -216,6 +216,38 @@ occupant = null update_icon(UPDATE_ICON_STATE) +/obj/machinery/abductor/experiment/relaymove() + if(!occupant) + return + to_chat(occupant, "You start trying to break free!") + if(!do_after(occupant, 20 SECONDS, FALSE, src)) + return + var/list/possible_results = list( + CALLBACK(src, PROC_REF(electrocute_abductee)) = 1, + CALLBACK(src, PROC_REF(sedate_abductee)) = 1, + CALLBACK(src, PROC_REF(eject_abductee)) = 2 + ) + var/datum/callback/result = pickweight(possible_results) + result.Invoke() + +/obj/machinery/abductor/experiment/proc/electrocute_abductee() + if(!occupant) + return + to_chat(occupant, "Something is electrifying you!") + sleep(1 SECONDS) + occupant.electrocute_act(10, src) + do_sparks(5, TRUE, src) + +/obj/machinery/abductor/experiment/proc/sedate_abductee() + if(!occupant) + return + to_chat(occupant, "Something is stabbing you in the back!") + occupant.apply_damage(5, BRUTE, BODY_ZONE_CHEST) + occupant.reagents.add_reagent("ether", 5) + +/obj/machinery/abductor/experiment/force_eject_occupant(mob/target) + eject_abductee() + /obj/machinery/abductor/experiment/broken stat = BROKEN diff --git a/code/game/gamemodes/miniantags/demons/slaughter demon/slaughter.dm b/code/game/gamemodes/miniantags/demons/slaughter_demon/slaughter.dm similarity index 99% rename from code/game/gamemodes/miniantags/demons/slaughter demon/slaughter.dm rename to code/game/gamemodes/miniantags/demons/slaughter_demon/slaughter.dm index 1dce1c415ff7..3812df84a3ab 100644 --- a/code/game/gamemodes/miniantags/demons/slaughter demon/slaughter.dm +++ b/code/game/gamemodes/miniantags/demons/slaughter_demon/slaughter.dm @@ -133,7 +133,7 @@ ..() spawn(5) var/list/demon_candidates = SSghost_spawns.poll_candidates("Do you want to play as a slaughter demon?", ROLE_DEMON, TRUE, 10 SECONDS, source = /mob/living/simple_animal/demon/slaughter/cult) - if(!demon_candidates.len) + if(!length(demon_candidates)) visible_message("[src] disappears in a flash of red light!") qdel(src) return @@ -182,7 +182,7 @@ validtargets += M - if(!validtargets.len) + if(!length(validtargets)) to_chat(usr, "There are no valid targets!") return diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index e56038057e28..0f2e2f4efaa1 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -305,7 +305,7 @@ var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as the [mob_name] ([guardian_type]) of [user.real_name]?", ROLE_GUARDIAN, FALSE, 10 SECONDS, source = src, role_cleanname = "[mob_name] ([guardian_type])") var/mob/dead/observer/theghost = null - if(candidates.len) + if(length(candidates)) theghost = pick(candidates) if(has_guardian(user)) to_chat(user, "You already have a [mob_name]!") diff --git a/code/game/gamemodes/miniantags/guardian/types/lightning_guardian.dm b/code/game/gamemodes/miniantags/guardian/types/lightning_guardian.dm index 34e8dd2195bc..98a0b706413f 100644 --- a/code/game/gamemodes/miniantags/guardian/types/lightning_guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/types/lightning_guardian.dm @@ -35,7 +35,7 @@ var/datum/beam/B = chain if(B.target == target) return //oh this guy already HAS a chain, let's not chain again - if(enemychains.len > 2) + if(length(enemychains) > 2) var/datum/beam/C = pick(enemychains) qdel(C) enemychains -= C @@ -64,7 +64,7 @@ /mob/living/simple_animal/hostile/guardian/beam/proc/cleardeletedchains() if(summonerchain && QDELETED(summonerchain)) summonerchain = null - if(enemychains.len) + if(length(enemychains)) for(var/chain in enemychains) var/datum/cd = chain if(!chain || QDELETED(cd)) @@ -77,14 +77,14 @@ if(!summonerchain) summonerchain = Beam(summoner, "lightning[rand(1,12)]", 'icons/effects/effects.dmi', time=INFINITY, maxdistance=INFINITY, beam_type=/obj/effect/ebeam/chain) . += chainshock(summonerchain) - if(enemychains.len) + if(length(enemychains)) for(var/chain in enemychains) . += chainshock(chain) /mob/living/simple_animal/hostile/guardian/beam/proc/removechains() if(summonerchain) QDEL_NULL(summonerchain) - if(enemychains.len) + if(length(enemychains)) for(var/chain in enemychains) qdel(chain) enemychains = list() diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index e65824685188..81a9f9592188 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -113,6 +113,7 @@ var/obj/item/clothing/under/U = H.w_uniform U.turn_sensors_off() + A.pulledby.stop_pulling() A.extinguish_light() A.forceMove(src) var/food_value = calc_food_gained(A) diff --git a/code/game/gamemodes/miniantags/morph/morph_event.dm b/code/game/gamemodes/miniantags/morph/morph_event.dm index 070f4a8bb1e9..4367557e3893 100644 --- a/code/game/gamemodes/miniantags/morph/morph_event.dm +++ b/code/game/gamemodes/miniantags/morph/morph_event.dm @@ -4,7 +4,7 @@ /datum/event/spawn_morph/proc/get_morph() spawn() var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a morph?", ROLE_MORPH, TRUE, source = /mob/living/simple_animal/hostile/morph) - if(!candidates.len) + if(!length(candidates)) key_of_morph = null kill() return diff --git a/code/game/gamemodes/miniantags/morph/spells/morph_spell.dm b/code/game/gamemodes/miniantags/morph/spells/morph_spell.dm index d25810208249..af85ca311211 100644 --- a/code/game/gamemodes/miniantags/morph/spells/morph_spell.dm +++ b/code/game/gamemodes/miniantags/morph/spells/morph_spell.dm @@ -8,6 +8,9 @@ ..() if(hunger_cost) name = "[name] ([hunger_cost])" + action.name = name + action.desc = desc + action.UpdateButtons() /datum/spell/morph_spell/create_new_handler() var/datum/spell_handler/morph/H = new diff --git a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm index fb537324b9ab..8bb7f2a626c9 100644 --- a/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm +++ b/code/game/gamemodes/miniantags/pulsedemon/pulsedemon_abilities.dm @@ -28,10 +28,10 @@ /datum/spell/pulse_demon/proc/update_info() if(locked) name = "[initial(name)] (Locked) ([format_si_suffix(unlock_cost)]W)" - desc = "[initial(desc)] It costs [format_si_suffix(unlock_cost)]W to unlock." + desc = "[initial(desc)] It costs [format_si_suffix(unlock_cost)]W to unlock. Alt-Click this spell to unlock it." else name = "[initial(name)][cast_cost == 0 ? "" : " ([format_si_suffix(cast_cost)]W)"]" - desc = "[initial(desc)][spell_level == level_max ? "" : " It costs [format_si_suffix(upgrade_cost)]W to upgrade."]" + desc = "[initial(desc)][spell_level == level_max ? "" : " It costs [format_si_suffix(upgrade_cost)]W to upgrade. Alt-Click this spell to upgrade it."]" action.name = name action.desc = desc action.UpdateButtons() diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 790fa4ee4478..ef28580d6753 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -162,7 +162,7 @@ else var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as a revenant?", poll_time = 15 SECONDS, source = /mob/living/simple_animal/revenant) var/mob/dead/observer/theghost = null - if(candidates.len) + if(length(candidates)) theghost = pick(candidates) message_admins("[key_name_admin(theghost)] has taken control of a revenant created without a mind") key = theghost.key diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index 0bb6122c1b22..0913180f2ef1 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -163,6 +163,9 @@ name = "[initial(name)] ([unlock_amount]E)" else name = "[initial(name)] ([cast_amount]E)" + action.name = name + action.desc = desc + action.UpdateButtons() /datum/spell/aoe/revenant/revert_cast(mob/user) . = ..() diff --git a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm index 4eb77abb5320..227d89666dff 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm @@ -14,7 +14,7 @@ spawn() var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a revenant?", ROLE_REVENANT, TRUE, source = /mob/living/simple_animal/revenant) - if(!candidates.len) + if(!length(candidates)) key_of_revenant = null kill() return diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 10161f7d0bff..79f2f7bcbf43 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -1,8 +1,5 @@ #define NUKESCALINGMODIFIER 6 -/datum/game_mode - var/list/datum/mind/syndicates = list() - /proc/issyndicate(mob/living/M as mob) return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.syndicates) @@ -34,13 +31,13 @@ var/list/possible_syndicates = get_players_for_role(ROLE_OPERATIVE) var/agent_number = 0 - if(possible_syndicates.len < 1) + if(length(possible_syndicates) < 1) return 0 if(LAZYLEN(possible_syndicates) > agents_possible) agent_number = agents_possible else - agent_number = possible_syndicates.len + agent_number = length(possible_syndicates) var/n_players = num_players() if(agent_number > n_players) @@ -115,7 +112,7 @@ break for(var/datum/mind/synd_mind in syndicates) - if(spawnpos > synd_spawn.len) + if(spawnpos > length(synd_spawn)) spawnpos = 2 synd_mind.current.loc = synd_spawn[spawnpos] synd_mind.offstation_role = TRUE @@ -151,8 +148,8 @@ var/player_tc var/remainder - player_tc = round(total_tc / GLOB.nuclear_uplink_list.len) //round to get an integer and not floating point - remainder = total_tc % GLOB.nuclear_uplink_list.len + player_tc = round(total_tc / length(GLOB.nuclear_uplink_list)) //round to get an integer and not floating point + remainder = total_tc % length(GLOB.nuclear_uplink_list) for(var/obj/item/radio/uplink/nuclear/U in GLOB.nuclear_uplink_list) U.hidden_uplink.uses += player_tc diff --git a/code/game/gamemodes/nuclear/nuclear_challenge.dm b/code/game/gamemodes/nuclear/nuclear_challenge.dm index 178399588d9b..01694f122ce9 100644 --- a/code/game/gamemodes/nuclear/nuclear_challenge.dm +++ b/code/game/gamemodes/nuclear/nuclear_challenge.dm @@ -1,9 +1,9 @@ #define CHALLENGE_TELECRYSTALS 1400 -#define CHALLENGE_TIME_LIMIT 6000 +#define CHALLENGE_TIME_LIMIT 10 MINUTES #define CHALLENGE_SCALE_PLAYER 1 // How many player per scaling bonus #define CHALLENGE_SCALE_BONUS 10 // How many TC per scaling bonus #define CHALLENGE_MIN_PLAYERS 50 -#define CHALLENGE_SHUTTLE_DELAY 18000 //30 minutes, so the ops have at least 10 minutes before the shuttle is callable. Gives the nuke ops at least 15 minutes before shuttle arrive. +#define CHALLENGE_SHUTTLE_DELAY 30 MINUTES // So the ops have at least 10 minutes before the shuttle is callable. Gives the nuke ops at least 15 minutes before shuttle arrive. /obj/item/nuclear_challenge name = "Declaration of War (Challenge Mode)" @@ -68,8 +68,8 @@ var/player_tc var/remainder - player_tc = round(total_tc / GLOB.nuclear_uplink_list.len) //round to get an integer and not floating point - remainder = total_tc % GLOB.nuclear_uplink_list.len + player_tc = round(total_tc / length(GLOB.nuclear_uplink_list)) //round to get an integer and not floating point + remainder = total_tc % length(GLOB.nuclear_uplink_list) for(var/obj/item/radio/uplink/nuclear/U in GLOB.nuclear_uplink_list) U.hidden_uplink.uses += player_tc @@ -84,7 +84,7 @@ if(declaring_war) to_chat(user, "You are already in the process of declaring war! Make your mind up.") return FALSE - if(GLOB.player_list.len < CHALLENGE_MIN_PLAYERS) + if(length(GLOB.player_list) < CHALLENGE_MIN_PLAYERS) to_chat(user, "The enemy crew is too small to be worth declaring war on.") return FALSE if(!is_admin_level(user.z)) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index f1b09f316e24..327bc892abf5 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -504,7 +504,7 @@ GLOBAL_VAR(bomb_set) update_icon(UPDATE_OVERLAYS) if(!safety) message_admins("[key_name_admin(usr)] engaged a nuclear bomb [ADMIN_JMP(src)]") - if(!is_syndicate) + if(!is_syndicate && SSsecurity_level.get_current_level_as_number() != SEC_LEVEL_EPSILON) SSsecurity_level.set_level(SEC_LEVEL_DELTA) GLOB.bomb_set = TRUE // There can still be issues with this resetting when there are multiple bombs. Not a big deal though for Nuke else diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm index 4860096946fd..6ed2761e5c43 100644 --- a/code/game/gamemodes/nuclear/pinpointer.dm +++ b/code/game/gamemodes/nuclear/pinpointer.dm @@ -488,7 +488,7 @@ names[name] = H name_counts[name] = 1 - if(!names.len) + if(!length(names)) user.visible_message("[user]'s pinpointer fails to detect a signal.", "Your pinpointer fails to detect a signal.") return diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 320c2578cdd6..222ff61365bb 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -121,7 +121,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) possible_targets += possible_target - if(possible_targets.len > 0) + if(length(possible_targets) > 0) target = pick(possible_targets) SEND_SIGNAL(src, COMSIG_OBJECTIVE_TARGET_FOUND, target) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 9583e0e849f5..1f0f048cc64e 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -4,11 +4,6 @@ #define REV_VICTORY 1 #define STATION_VICTORY 2 -/datum/game_mode - var/list/datum/mind/head_revolutionaries = list() - var/list/datum/mind/revolutionaries = list() - var/datum/team/revolution/rev_team - /datum/game_mode/revolution name = "revolution" config_tag = "revolution" diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index 66cd614b9660..f65680cad613 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -1,5 +1,5 @@ /proc/getAssignedBlock(name, list/blocksLeft, activity_bounds=DNA_DEFAULT_BOUNDS, good=0) - if(blocksLeft.len==0) + if(!length(blocksLeft)) warning("[name]: No more blocks left to assign!") return 0 var/assigned = pick(blocksLeft) @@ -129,4 +129,4 @@ warning("DNA2: Mutation [mutation.name] trying to add to already assigned gene block list (used by [english_list(GLOB.assigned_mutation_blocks[block])])") GLOB.assigned_mutation_blocks[block] = mutation - //testing("DNA2: [numsToAssign.len] blocks are unused: [english_list(numsToAssign)]") + //testing("DNA2: [length(numsToAssign)] blocks are unused: [english_list(numsToAssign)]") diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index 6ef463546aac..db1e758add63 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -1,9 +1,3 @@ -/datum/game_mode - /// A list of all minds which have the traitor antag datum. - var/list/datum/mind/traitors = list() - /// An associative list with mindslave minds as keys and their master's minds as values. - var/list/datum/mind/implanted = list() - /datum/game_mode/traitor name = "traitor" config_tag = "traitor" diff --git a/code/game/gamemodes/vampire/traitor_vamp.dm b/code/game/gamemodes/vampire/traitor_vamp.dm index 960112084045..cdb9fa1036ed 100644 --- a/code/game/gamemodes/vampire/traitor_vamp.dm +++ b/code/game/gamemodes/vampire/traitor_vamp.dm @@ -28,7 +28,7 @@ if((player.mind in possible_vampires) && (player.client.prefs.active_character.species in secondary_protected_species)) possible_vampires -= player.mind - if(possible_vampires.len > 0) + if(length(possible_vampires) > 0) for(var/I in possible_vampires) if(length(pre_vampires) >= secondary_enemies) break diff --git a/code/game/gamemodes/vampire/vampire_gamemode.dm b/code/game/gamemodes/vampire/vampire_gamemode.dm index 306ef74cb9a7..6e274c5b3a80 100644 --- a/code/game/gamemodes/vampire/vampire_gamemode.dm +++ b/code/game/gamemodes/vampire/vampire_gamemode.dm @@ -1,7 +1,3 @@ -/datum/game_mode - var/list/datum/mind/vampires = list() - var/list/datum/mind/vampire_enthralled = list() //those controlled by a vampire - /datum/game_mode/vampire name = "vampire" config_tag = "vampire" diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 3074242b50a8..a20b8d70f051 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -677,7 +677,7 @@ GLOBAL_LIST_EMPTY(multiverse) check_spooky()//clean out/refresh the list - if(spooky_scaries.len >= 3 && !unlimited) + if(length(spooky_scaries) >= 3 && !unlimited) to_chat(user, "This artifact can only affect three undead at a time!") return if(heresy) @@ -691,7 +691,7 @@ GLOBAL_LIST_EMPTY(multiverse) spooky_scaries |= M to_chat(M, "You have been revived by [user.real_name]!") to_chat(M, "[user.p_theyre(TRUE)] your master now, assist them even if it costs you your new life!") - desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [spooky_scaries.len]/3 active thralls."]" + desc = "A shard capable of resurrecting humans as skeleton thralls[unlimited ? "." : ", [length(spooky_scaries)]/3 active thralls."]" /obj/item/necromantic_stone/proc/check_spooky() if(unlimited) //no point, the list isn't used. diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm index a524a17e5bf2..f312d1f4de09 100644 --- a/code/game/gamemodes/wizard/raginmages.dm +++ b/code/game/gamemodes/wizard/raginmages.dm @@ -105,7 +105,7 @@ var/mob/dead/observer/harry = null message_admins("SWF is still pissed, sending another wizard - [max_mages - mages_made] left.") - if(!candidates.len) + if(!length(candidates)) message_admins("This is awkward, sleeping until another mage check..") making_mage = FALSE sleep(300) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index ccff189cb7c3..743079d34e55 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -439,7 +439,6 @@ . = ..() if(.) user.mind.AddSpell(new /datum/spell/aoe/conjure/construct(null)) - return . /datum/spellbook_entry/item/wands name = "Wand Assortment" @@ -668,14 +667,14 @@ return FALSE to_chat(user, "[book] crumbles to ashes as you acquire its knowledge.") qdel(book) - else if(items_path.len) + else if(length(items_path)) var/response = tgui_alert(user, "The [src] loadout contains items that will not be refundable if bought. Are you sure this is what you want?", "No refunds!", list("No", "Yes")) if(response != "Yes") return FALSE if(!CanBuy(user, book)) to_chat(user, "You can't afford that anymore!") return FALSE - if(items_path.len) + if(length(items_path)) var/obj/item/storage/box/wizard/B = new(src) for(var/path in items_path) new path(B) @@ -881,7 +880,7 @@ dat += "" var/datum/spellbook_entry/E - for(var/i=1,i<=entries.len,i++) + for(var/i=1,i<=length(entries),i++) var/spell_info = "" E = entries[i] spell_info += E.GetInfo() diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index c0aacd4cf8ef..960be8e8375f 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -1,7 +1,3 @@ -/datum/game_mode - var/list/datum/mind/wizards = list() - var/list/datum/mind/apprentices = list() - /datum/game_mode/wizard name = "wizard" config_tag = "wizard" @@ -45,21 +41,11 @@ if(but_wait_theres_more) return ..() - // Wizards - for(var/datum/mind/wizard in wizards) - if(!iscarbon(wizard.current) || wizard.current.stat == DEAD) // wizard is in an MMI, don't count them as alive - continue - return ..() - - // Apprentices - for(var/datum/mind/apprentice in apprentices) - if(!iscarbon(apprentice.current)) - continue - if(apprentice.current.stat == DEAD) - continue - if(istype(apprentice.current, /obj/item/mmi)) // apprentice is in an MMI, don't count them as alive - continue - return ..() + // Wizards and Apprentices + for(var/datum/mind/wizard in (wizards + apprentices)) // yes, this works so it iterates through wizards, then apprentices + var/datum/antagonist/wizard/datum_wizard = wizard.has_antag_datum(/datum/antagonist/wizard) + if(datum_wizard?.wizard_is_alive()) + return ..() finished = TRUE return TRUE @@ -67,7 +53,7 @@ /datum/game_mode/wizard/declare_completion(ragin = 0) if(finished && !ragin) SSticker.mode_result = "wizard loss - wizard killed" - to_chat(world, " The wizard[(wizards.len>1)?"s":""] has been killed by the crew! The Space Wizards Federation has been taught a lesson they will not soon forget!") + to_chat(world, " The wizard[(length(wizards)>1)?"s":""] has been killed by the crew! The Space Wizards Federation has been taught a lesson they will not soon forget!") ..() return TRUE diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 560c136d45e3..01d85316fb74 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -56,7 +56,7 @@ for(var/req in req_access) if(!(req in accesses)) //doesn't have this access return 0 - if(req_one_access.len) + if(length(req_one_access)) for(var/req in req_one_access) if(req in accesses) //has an access from the single access list return 1 diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index 2a07b6634ae6..adfa45b48642 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -224,7 +224,7 @@ imprint_pda(H) - if(gear_leftovers.len) + if(length(gear_leftovers)) for(var/datum/gear/G in gear_leftovers) var/atom/placed_in = H.equip_or_collect(G.spawn_item(null, H.client.prefs.active_character.loadout_gear[G.display_name])) if(istype(placed_in)) diff --git a/code/game/jobs/job/silicon_jobs.dm b/code/game/jobs/job/silicon_jobs.dm index a1ab1e683ec8..9fdfc71b5f70 100644 --- a/code/game/jobs/job/silicon_jobs.dm +++ b/code/game/jobs/job/silicon_jobs.dm @@ -17,7 +17,7 @@ return FALSE /datum/job/ai/is_position_available() - return (GLOB.empty_playable_ai_cores.len != 0) + return (length(GLOB.empty_playable_ai_cores) != 0) /datum/job/cyborg title = "Cyborg" diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index d6800da4a116..f4d62e08a8f7 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -176,7 +176,7 @@ GLOBAL_LIST_INIT(role_playtime_requirements, list( if(!GLOB.configuration.jobs.enable_exp_tracking) return "Tracking is disabled in the server configuration file." var/list/play_records = params2list(prefs.exp) - if(!play_records.len) + if(!length(play_records)) return "[key] has no records." var/return_text = "
    " var/list/exp_data = list() @@ -201,11 +201,11 @@ GLOBAL_LIST_INIT(role_playtime_requirements, list( jobs_unlocked += job.title else jobs_locked += "[job.title] - [job.get_exp_restrictions(mob.client)]" - if(jobs_unlocked.len) + if(length(jobs_unlocked)) return_text += "

    Jobs Unlocked:
    • " return_text += jobs_unlocked.Join("
    • ") return_text += "
    " - if(jobs_locked.len) + if(length(jobs_locked)) return_text += "

    Jobs Not Unlocked:
    • " return_text += jobs_locked.Join("
    • ") return_text += "
    " diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index c34dcfc7b5cc..dafa25fc175a 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -287,7 +287,7 @@ implantSubData["name"] = sanitize(I.name) implantData.Add(list(implantSubData)) occupantData["implant"] = implantData - occupantData["implant_len"] = implantData.len + occupantData["implant_len"] = length(implantData) var/extOrganData[0] for(var/obj/item/organ/external/E in occupant.bodyparts) @@ -310,7 +310,7 @@ shrapnelData.Add(list(shrapnelSubData)) organData["shrapnel"] = shrapnelData - organData["shrapnel_len"] = shrapnelData.len + organData["shrapnel_len"] = length(shrapnelData) var/organStatus[0] if(E.status & ORGAN_BROKEN) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 462289775366..b5d28534dd9c 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -111,7 +111,7 @@ /obj/machinery/autolathe/ui_static_data(mob/user) var/list/data = list() data["categories"] = categories - if(!recipiecache.len) + if(!length(recipiecache)) var/list/recipes = list() for(var/v in files.known_designs) var/datum/design/D = files.known_designs[v] @@ -164,7 +164,7 @@ data["busyamt"] = length(being_built) > 1 ? being_built[2] : 1 data["showhacked"] = hacked ? TRUE : FALSE data["buildQueue"] = queue - data["buildQueueLen"] = queue.len + data["buildQueueLen"] = length(queue) return data /obj/machinery/autolathe/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) @@ -179,7 +179,7 @@ queue = list() if("remove_from_queue") var/index = text2num(params["remove_from_queue"]) - if(isnum(index) && ISINRANGE(index, 1, queue.len)) + if(isnum(index) && ISINRANGE(index, 1, length(queue))) remove_from_queue(index) to_chat(usr, "Removed item from queue.") if("make") @@ -213,7 +213,7 @@ if(!(multiplier in list(1, 10, 25, max_multiplier))) //"enough materials ?" is checked in the build proc message_admins("Player [key_name_admin(usr)] attempted to pass invalid multiplier [multiplier] to an autolathe in ui_act. Possible href exploit.") return - if((queue.len + 1) < queue_max_len) + if((length(queue) + 1) < queue_max_len) add_to_queue(design_last_ordered, multiplier) else to_chat(usr, "The autolathe queue is full!") @@ -247,8 +247,8 @@ var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) var/temp_metal = materials.amount(MAT_METAL) var/temp_glass = materials.amount(MAT_GLASS) - data["processing"] = being_built.len ? get_processing_line() : null - if(istype(queue) && queue.len) + data["processing"] = length(being_built) ? get_processing_line() : null + if(istype(queue) && length(queue)) var/list/data_queue = list() for(var/list/L in queue) var/datum/design/D = L[1] @@ -257,7 +257,7 @@ temp_metal = max(temp_metal - LL[1], 1) temp_glass = max(temp_glass - LL[2], 1) data["queue"] = data_queue - data["queue_len"] = data_queue.len + data["queue_len"] = length(data_queue) else data["queue"] = null return data @@ -417,7 +417,7 @@ desc = initial(desc) /obj/machinery/autolathe/proc/can_build(datum/design/D, multiplier = 1, custom_metal, custom_glass) - if(D.make_reagents.len) + if(length(D.make_reagents)) return 0 var/coeff = get_coeff(D) @@ -456,10 +456,10 @@ queue = list() if(D) queue.Add(list(list(D,multiplier))) - return queue.len + return length(queue) /obj/machinery/autolathe/proc/remove_from_queue(index) - if(!isnum(index) || !istype(queue) || (index<1 || index>queue.len)) + if(!isnum(index) || !istype(queue) || (index<1 || index>length(queue))) return 0 queue.Cut(index,++index) return 1 @@ -469,7 +469,7 @@ var/multiplier = queue[1][2] if(!D) remove_from_queue(1) - if(queue.len) + if(length(queue)) return process_queue() else return diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index b6af0a44e951..071cf52415fe 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -36,6 +36,10 @@ var/toggle_sound = 'sound/items/wirecutter.ogg' blocks_emissive = EMISSIVE_BLOCK_GENERIC + var/list/localMotionTargets = list() + var/detectTime = 0 + var/area/station/ai_monitored/area_motion = null + var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm() /obj/machinery/camera/Initialize(mapload, should_add_to_cameranet = TRUE) . = ..() diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index eff8932848bf..0844f892ac64 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -61,7 +61,7 @@ return ..() /obj/item/camera_assembly/crowbar_act(mob/user, obj/item/I) - if(!upgrades.len) + if(!length(upgrades)) return . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) @@ -87,7 +87,7 @@ return var/list/tempnetwork = splittext(input, ",") - if(tempnetwork.len < 1) + if(length(tempnetwork) < 1) state = ASSEMBLY_WIRED to_chat(usr, "No network found please hang up and try your call again.") return diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm index 99f24d9a4eed..68010c1fb3c1 100644 --- a/code/game/machinery/camera/motion.dm +++ b/code/game/machinery/camera/motion.dm @@ -1,9 +1,3 @@ -/obj/machinery/camera - var/list/localMotionTargets = list() - var/detectTime = 0 - var/area/station/ai_monitored/area_motion = null - var/alarm_delay = 30 // Don't forget, there's another 3 seconds in queueAlarm() - /obj/machinery/camera/process() // motion camera event loop if(!isMotion()) diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 9d7e884319dc..49189320e092 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -22,7 +22,7 @@ for(var/obj/machinery/camera/C in L) var/list/tempnetwork = C.network & src.network - if(tempnetwork.len) + if(length(tempnetwork)) T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C track.cameras = T @@ -195,7 +195,7 @@ var/obj/machinery/camera/a var/obj/machinery/camera/b - for(var/i = L.len, i > 0, i--) + for(var/i = length(L), i > 0, i--) for(var/j = 1 to i - 1) a = L[j] b = L[j + 1] diff --git a/code/game/machinery/clonepod.dm b/code/game/machinery/clonepod.dm index a2dc8fca9f15..4853ae760b02 100644 --- a/code/game/machinery/clonepod.dm +++ b/code/game/machinery/clonepod.dm @@ -564,11 +564,17 @@ return if(istype(I, /obj/item/card/id) || istype(I, /obj/item/pda)) - if(allowed(user)) - locked = !locked - to_chat(user, "Access restriction is now [locked ? "enabled" : "disabled"].") - else + if(!allowed(user)) to_chat(user, "Access denied.") + return + + switch(tgui_alert(user, "Change access restrictions or perform an emergency ejection of [src]?", "Cloning pod", list("Change access", "Emergency ejection"))) + if("Change access") + locked = !locked + to_chat(user, "Access restriction is now [locked ? "enabled" : "disabled"].") + if("Emergency ejection") + eject_clone(TRUE) // GET OUT + to_chat(user, "You force [src] to eject its clone!") return if(is_organ(I) || is_type_in_list(I, ALLOWED_ROBOT_PARTS)) //fun fact, robot parts aren't organs! diff --git a/code/game/machinery/clonescanner.dm b/code/game/machinery/clonescanner.dm index ef123acfb4ad..83105a45ba44 100644 --- a/code/game/machinery/clonescanner.dm +++ b/code/game/machinery/clonescanner.dm @@ -60,7 +60,7 @@ if(console) console.scanner = null if(occupant) - remove_mob(occupant) + remove_mob() return ..() /obj/machinery/clonescanner/MouseDrop_T(atom/movable/O, mob/user) @@ -84,16 +84,16 @@ if(!occupant) return if(issilicon(user)) - remove_mob(occupant) + remove_mob() return if(!Adjacent(user) || !ishuman(user) || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED)) return - remove_mob(occupant) + remove_mob() /obj/machinery/clonescanner/relaymove(mob/user) if(user.stat) return - remove_mob(user) + remove_mob() /obj/machinery/clonescanner/proc/try_scan(mob/living/carbon/human/scanned) if(!scanned) @@ -158,10 +158,10 @@ occupant = inserted update_icon(UPDATE_ICON_STATE) -/obj/machinery/clonescanner/proc/remove_mob(mob/living/carbon/human/removed) - if(!istype(removed)) +/obj/machinery/clonescanner/proc/remove_mob() + if(!occupant) return - removed.forceMove(get_turf(loc)) + occupant.forceMove(get_turf(loc)) occupant = null update_scan_status() update_icon(UPDATE_ICON_STATE) @@ -192,3 +192,6 @@ return var/obj/item/multitool/M = I M.set_multitool_buffer(user, src) + +/obj/machinery/clonescanner/force_eject_occupant(mob/target) + remove_mob() diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm index f8898a07b65c..26e3f7760533 100644 --- a/code/game/machinery/computer/ai_core.dm +++ b/code/game/machinery/computer/ai_core.dm @@ -271,7 +271,7 @@ for(var/obj/structure/AIcore/deactivated/D in world) cores["[D] ([D.loc.loc])"] = D - if(!cores.len) + if(!length(cores)) to_chat(src, "No deactivated AI cores were found.") var/id = input("Which core?", "Toggle AI Core Latejoin", null) as null|anything in cores diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 1c127fe212cc..1a9b2a908715 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -22,7 +22,7 @@ /obj/machinery/computer/arcade/proc/prizevend(score) - if(!contents.len) + if(!length(contents)) var/prize_amount if(score) prize_amount = score @@ -354,7 +354,7 @@ /obj/machinery/computer/arcade/orion_trail/attack_hand(mob/user) if(..()) return - if(fuel <= 0 || food <=0 || settlers.len == 0) + if(fuel <= 0 || food <=0 || length(settlers) == 0) gameover = 1 event = null user.set_machine(src) @@ -362,7 +362,7 @@ if(gameover) dat = "

    Game Over

    " dat += "Like many before you, your crew never made it to Orion, lost to space...
    Forever." - if(settlers.len == 0) + if(length(settlers) == 0) dat += "
    Your entire crew died, your ship joins the fleet of ghost-ships littering the galaxy." else if(food <= 0) @@ -757,7 +757,7 @@ if(ORION_TRAIL_LING) eventdat += "Strange reports warn of changelings infiltrating crews on trips to Orion..." - if(settlers.len <= 2) + if(length(settlers) <= 2) eventdat += "
    Your crew's chance of reaching Orion is so slim the changelings likely avoided your ship..." eventdat += "

    Continue

    " eventdat += "

    Close

    " @@ -924,7 +924,6 @@ alive++ return newcrew - //Remove Random/Specific crewmember /obj/machinery/computer/arcade/orion_trail/proc/remove_crewmember(specific = "", dont_remove = "") var/list/safe2remove = settlers @@ -934,7 +933,7 @@ if(specific && specific != dont_remove) safe2remove = list(specific) else - if(safe2remove.len >= 1) //need to make sure we even have anyone to remove + if(length(safe2remove) >= 1) //need to make sure we even have anyone to remove removed = pick(safe2remove) if(removed) diff --git a/code/game/machinery/computer/brigcells.dm b/code/game/machinery/computer/brigcells.dm index 07a84e492f0d..e87afa16c980 100644 --- a/code/game/machinery/computer/brigcells.dm +++ b/code/game/machinery/computer/brigcells.dm @@ -61,7 +61,7 @@ var/obj/machinery/door_timer/T = locate(ref) if(T) T.timer_end() - T.Radio.autosay("Timer stopped manually from a cell management console.", T.name, "Security", list(z)) + T.Radio.autosay("Timer stopped manually from a cell management console.", T.name, "Security") return TRUE return FALSE diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index bd648b911026..8c5a22d25449 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -197,7 +197,7 @@ for(var/obj/machinery/camera/netcam in L) var/list/tempnetwork = netcam.network&origin.networks - if(tempnetwork.len) + if(length(tempnetwork)) T[text("[][]", netcam.c_tag, (netcam.can_use() ? null : " (Deactivated)"))] = netcam diff --git a/code/game/machinery/computer/camera_console.dm b/code/game/machinery/computer/camera_console.dm index 046d2445b448..ae5764d4da3f 100644 --- a/code/game/machinery/computer/camera_console.dm +++ b/code/game/machinery/computer/camera_console.dm @@ -161,7 +161,7 @@ stack_trace("Camera in a cameranet has a non-list camera network") continue var/list/tempnetwork = C.network & network - if(tempnetwork.len) + if(length(tempnetwork)) D["[C.c_tag]"] = C return D diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 2727b8c110e7..40f707866e0e 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -189,7 +189,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return FALSE if(job.job_banned_gamemode) // you cannot open a slot for more sec/legal after revs win return FALSE - if((job.total_positions > GLOB.player_list.len * (max_relative_positions / 100))) + if((job.total_positions > length(GLOB.player_list) * (max_relative_positions / 100))) return FALSE if(opened_positions[job.title] < 0) return TRUE @@ -228,7 +228,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return FALSE if(job in SSjobs.prioritized_jobs) return TRUE // because this also lets us un-prioritize the job - if(SSjobs.prioritized_jobs.len >= 3) + if(length(SSjobs.prioritized_jobs) >= 3) return FALSE if(job.total_positions <= job.current_positions) return FALSE @@ -645,7 +645,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) if(R.fields["id"] == E.fields["id"]) if(status_valid_for_demotion(R.fields["criminal"])) set_criminal_status(usr, R, SEC_RECORD_STATUS_DEMOTE, reason, scan.assignment) - Radio.autosay("[scan.registered_name] ([scan.assignment]) has set [tempname] ([temprank]) to demote for: [reason]", name, "Command", list(z)) + Radio.autosay("[scan.registered_name] ([scan.assignment]) has set [tempname] ([temprank]) to demote for: [reason]", name, "Command") message_admins("[key_name_admin(usr)] ([scan.assignment]) has set [tempname] ([temprank]) to demote for: \"[reason]\"") log_game("[key_name(usr)] ([scan.assignment]) has set \"[tempname]\" ([temprank]) to demote for: \"[reason]\".") SSjobs.notify_by_name(tempname, "[scan.registered_name] ([scan.assignment]) has ordered your demotion. Report to their office, or the HOP. Reason given: \"[reason]\"") diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index d374fada3cf2..854e307fd605 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -475,7 +475,7 @@ data["str_security_level"] = capitalize(SSsecurity_level.get_current_level_as_text()) var/list/msg_data = list() - for(var/i = 1; i <= messagetext.len; i++) + for(var/i = 1; i <= length(messagetext); i++) msg_data.Add(list(list("title" = messagetitle[i], "body" = messagetext[i], "id" = i))) data["messages"] = msg_data diff --git a/code/game/machinery/computer/message_monitor.dm b/code/game/machinery/computer/message_monitor.dm index c8c08fe993db..5394a21bd309 100644 --- a/code/game/machinery/computer/message_monitor.dm +++ b/code/game/machinery/computer/message_monitor.dm @@ -409,7 +409,7 @@ if(!PM || !PM.can_receive()) continue sendPDAs += P - if(GLOB.PDAs && GLOB.PDAs.len > 0) + if(GLOB.PDAs && length(GLOB.PDAs) > 0) customrecepient = tgui_input_list(usr, "Select a PDA from the list.", items = sortAtom(sendPDAs)) else customrecepient = null diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 96bd846fd7d8..28001aa8ba61 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -58,12 +58,12 @@ var/hasContent = 0 desc = "Requires" - for(var/i = 1 to req_components.len) + for(var/i = 1 to length(req_components)) var/tname = req_components[i] var/amt = req_components[tname] if(amt == 0) continue - var/use_and = i == req_components.len + var/use_and = i == length(req_components) desc += "[(hasContent ? (use_and ? ", and" : ",") : "")] [amt] [amt == 1 ? req_component_names[tname] : "[req_component_names[tname]]\s"]" hasContent = 1 @@ -133,7 +133,7 @@ state = 2 circuit.loc = src.loc circuit = null - if(components.len == 0) + if(length(components) == 0) to_chat(user, "You remove the circuit board.") else to_chat(user, "You remove the circuit board and other components.") @@ -146,7 +146,7 @@ icon_state = "box_1" return - if(istype(P, /obj/item/storage/part_replacer) && P.contents.len && get_req_components_amt()) + if(istype(P, /obj/item/storage/part_replacer) && length(P.contents) && get_req_components_amt()) var/obj/item/storage/part_replacer/replacer = P var/list/added_components = list() var/list/part_list = list() diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 8df74ed68eef..fadd07fa1241 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -153,7 +153,7 @@ /obj/machinery/computer/cryopod/emag_act(mob/user) user.changeNext_move(CLICK_CD_MELEE) - if(!objective_items.len) + if(!length(objective_items)) visible_message("The console buzzes in an annoyed manner.") playsound(src, 'sound/machines/buzz-sigh.ogg', 30, 1) return @@ -390,7 +390,7 @@ // Delete them from datacore. var/announce_rank = null - if(GLOB.PDA_Manifest.len) + if(length(GLOB.PDA_Manifest)) GLOB.PDA_Manifest.Cut() for(var/datum/data/record/R in GLOB.data_core.medical) if(R.fields["name"] == occupant.real_name) @@ -433,7 +433,7 @@ announce.autosay("[occupant.real_name] ([announce_rank]) [on_store_message]", "[on_store_name]") else if(announce_rank) - announce.autosay("[occupant.real_name] ([announce_rank]) [on_store_message]", "[on_store_name]") + announce.autosay("[occupant.real_name] ([announce_rank]) [on_store_message]", "[on_store_name]") else announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]") visible_message("[src] hums and hisses as it moves [occupant.real_name] into storage.") @@ -592,7 +592,7 @@ if(Gh.key == FT) if(Gh.client && Gh.client.holder) //just in case someone has a byond name with @ at the start, which I don't think is even possible but whatever to_chat(Gh, "Warning: Your body has entered cryostorage.") - log_admin("[key_name(E)] entered a stasis pod.") + log_admin("[key_name(E)] entered a stasis pod.") if(SSticker.mode.tdm_gamemode) SSblackbox.record_feedback("nested tally", "TDM_quitouts", 1, list(SSticker.mode.name, "TDM Cryopods")) message_admins("[key_name_admin(E)] entered a stasis pod. (JMP)") @@ -613,6 +613,9 @@ /obj/machinery/cryopod/blob_act() return //Sorta gamey, but we don't really want these to be destroyed. +/obj/machinery/cryopod/force_eject_occupant(mob/target) + go_out() + /obj/machinery/cryopod/offstation // Won't announce when used for cryoing. silent = TRUE @@ -667,7 +670,7 @@ /proc/cryo_ssd(mob/living/person_to_cryo) if(istype(person_to_cryo.loc, /obj/machinery/cryopod)) - return 0 + return FALSE if(isobj(person_to_cryo.loc)) var/obj/O = person_to_cryo.loc O.force_eject_occupant(person_to_cryo) @@ -678,15 +681,15 @@ if((ishuman(person_to_cryo) && istype(get_area(P), /area/station/public/sleep)) || istype(P, /obj/machinery/cryopod/robot)) free_cryopods += P var/obj/machinery/cryopod/target_cryopod = null - if(free_cryopods.len) + if(length(free_cryopods)) target_cryopod = safepick(free_cryopods) if(target_cryopod.check_occupant_allowed(person_to_cryo)) var/turf/T = get_turf(person_to_cryo) var/obj/effect/portal/SP = new /obj/effect/portal(T, null, null, 40, create_sparks = FALSE) SP.name = "NT SSD Teleportation Portal" target_cryopod.take_occupant(person_to_cryo, 1) - return 1 - return 0 + return TRUE + return FALSE /proc/force_cryo_human(mob/living/carbon/person_to_cryo) if(!istype(person_to_cryo)) diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index f3e3025c7ab1..63b1325a2603 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -56,7 +56,7 @@ /obj/structure/barricade/CanPass(atom/movable/mover, turf/target)//So bullets will fly over and stuff. if(locate(/obj/structure/barricade) in get_turf(mover)) return TRUE - else if(istype(mover, /obj/item/projectile)) + else if(isprojectile(mover)) if(!anchored) return TRUE var/obj/item/projectile/proj = mover @@ -449,7 +449,7 @@ /obj/structure/barricade/dropwall/firewall/Crossed(atom/movable/AM, oldloc) . = ..() - if(!istype(AM, /obj/item/projectile)) + if(!isprojectile(AM)) return var/obj/item/projectile/P = AM P.immolate ++ diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 1ad706022103..2945227c1164 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1556,9 +1556,9 @@ GLOBAL_LIST_EMPTY(airlock_emissive_underlays) if(!electronics) ae = new/obj/item/airlock_electronics(loc) check_access() - if(req_access.len) + if(length(req_access)) ae.selected_accesses = req_access - else if(req_one_access.len) + else if(length(req_one_access)) ae.selected_accesses = req_one_access ae.one_access = 1 ae.unres_access_from = unres_sides diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index fbc5c3fb08df..9af68c60df58 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -166,7 +166,7 @@ return if(timing) if(timeleft() <= 0) - Radio.autosay("Timer has expired. Releasing prisoner.", name, "Security", list(z)) + Radio.autosay("Timer has expired. Releasing prisoner.", name, "Security") occupant = CELL_NONE timer_end() // open doors, reset timer, clear status screen timing = FALSE @@ -385,7 +385,7 @@ return FALSE releasetime = world.timeofday + timetoset var/resettext = isobserver(usr) ? "for: [reset_reason]." : "by [usr.name] for: [reset_reason]." - Radio.autosay("Prisoner [occupant] had their timer reset [resettext]", name, "Security", list(z)) + Radio.autosay("Prisoner [occupant] had their timer reset [resettext]", name, "Security") notify_prisoner("Your brig timer has been reset for: '[reset_reason]'.") var/datum/data/record/R = find_security_record("name", occupant) if(istype(R)) @@ -396,7 +396,7 @@ if(timing) timer_end() var/stoptext = isobserver(usr) ? "from cell control." : "by [usr.name]." - Radio.autosay("Timer stopped manually [stoptext]", name, "Security", list(z)) + Radio.autosay("Timer stopped manually [stoptext]", name, "Security") else . = FALSE if("flash") diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index 2fd5d6c4e800..dc453742bd29 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -134,11 +134,6 @@ to_chat(user, "The electronic systems in this door are far too advanced for your primitive hacking peripherals.") return -/obj/machinery/door/poddoor/multi_tile/impassable/two_tile_hor - icon = 'icons/obj/doors/1x2blast_hor.dmi' - width = 2 - dir = EAST - /obj/machinery/door/poddoor/multi_tile/impassable/four_tile_ver icon = 'icons/obj/doors/1x4blast_vert.dmi' width = 4 diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 30f9691d98db..19d80bb7d037 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -28,7 +28,7 @@ /obj/machinery/door/window/Initialize(mapload) . = ..() - if(req_access && req_access.len) + if(req_access && length(req_access)) base_state = icon_state if(name != initial(name)) @@ -367,9 +367,9 @@ ae = new/obj/item/airlock_electronics(loc) if(!req_access) check_access() - if(req_access.len) + if(length(req_access)) ae.selected_accesses = req_access - else if(req_one_access.len) + else if(length(req_one_access)) ae.selected_accesses = req_one_access ae.one_access = 1 else diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index bce1e147caeb..007bfa82703d 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -73,7 +73,7 @@ GLOBAL_LIST_EMPTY(doppler_arrays) to_chat(user, "You rotate [src].") /obj/machinery/doppler_array/proc/print_explosive_logs(mob/user) - if(!logged_explosions.len) + if(!length(logged_explosions)) atom_say("No logs currently stored in internal database.") return if(active_timers) diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 78029b71833c..ef3c41ec96c8 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -399,7 +399,7 @@ GLOBAL_LIST_EMPTY(holopads) /*This is the proc for special two-way communication between AI and holopad/people talking near holopad. For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/hear_talk(atom/movable/speaker, list/message_pieces, verb) - if(speaker && masters.len)//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. + if(speaker && length(masters))//Master is mostly a safety in case lag hits or something. Radio_freq so AIs dont hear holopad stuff through radios. for(var/mob/living/silicon/ai/master in masters) if(masters[master] && speaker != master) master.relay_speech(speaker, message_pieces, verb) @@ -415,7 +415,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ /obj/machinery/hologram/holopad/proc/SetLightsAndPower() - var/total_users = masters.len + LAZYLEN(holo_calls) + var/total_users = length(masters) + LAZYLEN(holo_calls) change_power_mode(total_users > 0 ? ACTIVE_POWER_USE : IDLE_POWER_USE) active_power_consumption = HOLOPAD_PASSIVE_POWER_USAGE + (HOLOGRAM_POWER_USAGE * total_users) if(total_users) diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm index e4a3ce3450df..4afbe9da35ea 100644 --- a/code/game/machinery/iv_drip.dm +++ b/code/game/machinery/iv_drip.dm @@ -93,7 +93,7 @@ /obj/machinery/iv_drip/Move(NewLoc, direct) . = ..() if(!.) // ..() will return 0 if we didn't actually move anywhere. - return . + return playsound(loc, pick('sound/items/cartwheel1.ogg', 'sound/items/cartwheel2.ogg'), 100, 1, ignore_walls = FALSE) #undef IV_TAKING diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 5898d0c14acb..158e245fccc2 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -272,7 +272,7 @@ /obj/machinery/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) on_deconstruction() - if(component_parts && component_parts.len) + if(component_parts && length(component_parts)) spawn_frame(disassembled) for(var/obj/item/I in component_parts) I.forceMove(loc) diff --git a/code/game/machinery/magnetic_module.dm b/code/game/machinery/magnetic_module.dm index 87442eac7123..f10aae48db5a 100644 --- a/code/game/machinery/magnetic_module.dm +++ b/code/game/machinery/magnetic_module.dm @@ -234,7 +234,7 @@ RegisterSignal(M, COMSIG_PARENT_QDELETING, PROC_REF(on_magnet_del), TRUE) /obj/machinery/magnetic_controller/process() - if(magnets.len == 0 && autolink) + if(length(magnets) == 0 && autolink) link_magnets() /obj/machinery/magnetic_controller/ui_state(mob/user) @@ -416,7 +416,7 @@ /obj/machinery/magnetic_controller/proc/MagnetMove() if(looping) return - while(moving && rpath.len >= 1) + while(moving && length(rpath) >= 1) if(stat & (BROKEN|NOPOWER)) break @@ -430,7 +430,7 @@ signal.frequency = frequency signal.data["code"] = code - if(pathpos > rpath.len) // if the position is greater than the length, we just loop through the list! + if(pathpos > length(rpath)) // if the position is greater than the length, we just loop through the list! pathpos = 1 var/nextmove = uppertext(rpath[pathpos]) // makes it un-case-sensitive diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index 13e71b0d39c6..46df33dfc237 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -149,7 +149,7 @@ /obj/machinery/poolcontroller/proc/miston() //Spawn /obj/effect/mist (from the shower) on all linked pool tiles - if(linkedmist.len) + if(length(linkedmist)) return for(var/turf/simulated/floor/beach/water/W in linkedturfs) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index acf292c693c1..e95ef133f7b9 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -75,7 +75,7 @@ /obj/machinery/porta_turret/Initialize(mapload) . = ..() - if(req_access && req_access.len) + if(req_access && length(req_access)) req_access.Cut() req_one_access = list(ACCESS_SECURITY, ACCESS_HEADS) one_access = TRUE @@ -93,7 +93,7 @@ /obj/machinery/porta_turret/centcom/Initialize(mapload) . = ..() - if(req_one_access && req_one_access.len) + if(req_one_access && length(req_one_access)) req_one_access.Cut() req_access = list(ACCESS_CENT_SPECOPS) one_access = FALSE @@ -179,7 +179,7 @@ GLOBAL_LIST_EMPTY(turret_icons) /obj/machinery/porta_turret/proc/HasController() var/area/A = get_area(src) - return A && A.turret_controls.len > 0 + return A && length(A.turret_controls) > 0 /obj/machinery/porta_turret/proc/access_is_configurable() return targetting_is_configurable && !HasController() @@ -635,10 +635,10 @@ GLOBAL_LIST_EMPTY(turret_icons) return TURRET_NOT_TARGET /obj/machinery/porta_turret/proc/tryToShootAt(list/mob/living/targets) - if(targets.len && last_target && (last_target in targets) && target(last_target)) + if(length(targets) && last_target && (last_target in targets) && target(last_target)) return 1 - while(targets.len > 0) + while(length(targets) > 0) var/mob/living/M = pick(targets) targets -= M if(target(M)) @@ -1100,7 +1100,7 @@ GLOBAL_LIST_EMPTY(turret_icons) /obj/machinery/porta_turret/syndicate/Initialize(mapload) . = ..() - if(req_one_access && req_one_access.len) + if(req_one_access && length(req_one_access)) req_one_access.Cut() req_access = list(ACCESS_SYNDICATE) one_access = FALSE diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 98d8d4a0f953..0a6f672216b4 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -30,9 +30,29 @@ preset_target = /obj/machinery/quantumpad/cere/science_arrivals /obj/machinery/quantumpad/cere/arrivals_cargo preset_target = /obj/machinery/quantumpad/cere/cargo_arrivals +/obj/machinery/quantumpad/cere/security_medbay + preset_target = /obj/machinery/quantumpad/cere/medbay_security +/obj/machinery/quantumpad/cere/medbay_security + preset_target = /obj/machinery/quantumpad/cere/security_medbay +/obj/machinery/quantumpad/cere/medbay_science + preset_target = /obj/machinery/quantumpad/cere/science_medbay +/obj/machinery/quantumpad/cere/science_medbay + preset_target = /obj/machinery/quantumpad/cere/medbay_science +/obj/machinery/quantumpad/cere/arrivals_service + preset_target = /obj/machinery/quantumpad/cere/service_arrivals +/obj/machinery/quantumpad/cere/service_arrivals + preset_target = /obj/machinery/quantumpad/cere/arrivals_service +/obj/machinery/quantumpad/cere/cargo_service + preset_target = /obj/machinery/quantumpad/cere/service_cargo +/obj/machinery/quantumpad/cere/service_cargo + preset_target = /obj/machinery/quantumpad/cere/cargo_service + /obj/machinery/quantumpad/Initialize(mapload) . = ..() + PopulateParts() + +/obj/machinery/quantumpad/proc/PopulateParts() component_parts = list() component_parts += new /obj/item/circuitboard/quantumpad(null) component_parts += new /obj/item/stack/ore/bluespace_crystal/artificial(null) @@ -45,6 +65,12 @@ . = ..() linked_pad = locate(preset_target) +/obj/machinery/quantumpad/cere/PopulateParts() + // No parts in Cere telepads, just hardcode the efficiencies + power_efficiency = 4 + teleport_speed = 10 + teleport_cooldown = 0 + /obj/machinery/quantumpad/Destroy() linked_pad = null return ..() diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 3ad641155673..4010ba264534 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -547,7 +547,7 @@ if(istype(mover) && mover.checkpass(PASSGLASS)) return prob(20) else - if(istype(mover, /obj/item/projectile)) + if(isprojectile(mover)) return prob(10) else return !density @@ -563,7 +563,7 @@ var/mob/living/M = mover if("syndicate" in M.faction) return TRUE - if(istype(mover, /obj/item/projectile)) + if(isprojectile(mover)) return FALSE return ..(mover, target, height) diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index 7b8b9d835196..ad5ba2bb0d9a 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -537,7 +537,7 @@ /obj/item/bombcore/chemical/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/reagent_containers/glass/beaker) || istype(I, /obj/item/reagent_containers/glass/bottle)) - if(beakers.len < max_beakers) + if(length(beakers) < max_beakers) if(!user.drop_item()) return beakers += I @@ -553,7 +553,7 @@ . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - if(beakers.len == 0) + if(length(beakers) == 0) return for(var/obj/item/B in beakers) B.loc = get_turf(src) @@ -574,7 +574,7 @@ spread_range += 2 // Extra range, reduced density. temp_boost += 50 // maximum of +150K blast using only large beakers. Not enough to self ignite. for(var/obj/item/slime_extract/S in LG.beakers) // And slime cores. - if(beakers.len < max_beakers) + if(length(beakers) < max_beakers) beakers += S S.loc = src else @@ -591,7 +591,7 @@ time_release += 50 // A typical bomb, using basic beakers, will explode over 2-4 seconds. Using two will make the reaction last for less time, but it will be more dangerous overall. for(var/obj/item/reagent_containers/glass/B in G) - if(beakers.len < max_beakers) + if(length(beakers) < max_beakers) beakers += B B.loc = src else diff --git a/code/game/machinery/tcomms/tcomms_base.dm b/code/game/machinery/tcomms/tcomms_base.dm index beb0bb442330..f89810dd4d8d 100644 --- a/code/game/machinery/tcomms/tcomms_base.dm +++ b/code/game/machinery/tcomms/tcomms_base.dm @@ -191,7 +191,7 @@ GLOBAL_LIST_EMPTY(tcomms_machines) /// Origin of the signal var/datum/radio_frequency/connection /// Who sent it - var/mob/sender + var/atom/movable/sender /// The radio it was sent from var/obj/item/radio/radio /// The signal data (See defines/radio.dm) @@ -206,7 +206,7 @@ GLOBAL_LIST_EMPTY(tcomms_machines) var/vname /// sender_name before modify_message modifies it, because it introduces html tags. var/pre_modify_name - /// List of all channels this can be sent or recieved on + /// List of all channels this can be sent or received on var/list/zlevels = list() /// Should this signal be re-broadcasted (Can be modified by NTTC, defaults to TRUE) var/pass = TRUE diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index cece7b32c0a5..5d82f8830b81 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -245,7 +245,7 @@ var/list/L = list() var/list/areaindex = list() var/list/S = power_station.linked_stations - if(!S.len) + if(!length(S)) return L for(var/obj/machinery/teleport/station/R in S) var/turf/T = get_turf(R) @@ -632,7 +632,7 @@ var/obj/item/multitool/M = I if(!panel_open) if(M.buffer && istype(M.buffer, /obj/machinery/teleport/station) && M.buffer != src) - if(linked_stations.len < efficiency) + if(length(linked_stations) < efficiency) linked_stations.Add(M.buffer) M.buffer = null to_chat(user, "You upload the data from [M]'s buffer.") diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index b72b6a7b7143..1b84d8faef3b 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -223,7 +223,7 @@ sleep(30) /obj/machinery/transformer/xray/proc/scan_rec(obj/item/I) - if(istype(I, /obj/item/gun)) + if(isgun(I)) return TRUE if(istype(I, /obj/item/transfer_valve)) return TRUE diff --git a/code/game/machinery/vendors/tilt_crits.dm b/code/game/machinery/vendors/tilt_crits.dm index f4421707641c..f2eaf0a9befa 100644 --- a/code/game/machinery/vendors/tilt_crits.dm +++ b/code/game/machinery/vendors/tilt_crits.dm @@ -96,7 +96,7 @@ /datum/tilt_crit/vendor/embed/tip_crit_effect(obj/machinery/economy/vending/machine, mob/living/carbon/victim, incoming_damage) victim.visible_message( "[machine]'s panel shatters against [victim]!", - "[machine] lands on you, its panel shattering!" ) for(var/i in 1 to machine.num_shards) diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index 5ddca924d185..8e25bf3dac6d 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -120,7 +120,7 @@ /obj/mecha/combat/honker/get_equipment_list() - if(!equipment.len) + if(!length(equipment)) return var/output = "Honk-ON-Systems:
    " for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index f57aa643db78..f53faf145158 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -91,7 +91,7 @@ /obj/mecha/combat/marauder/seraph/loaded/Initialize(mapload) . = ..() //Let it equip whatever is needed. var/obj/item/mecha_parts/mecha_equipment/ME - if(equipment.len)//Now to remove it and equip anew. + if(length(equipment))//Now to remove it and equip anew. for(ME in equipment) equipment -= ME qdel(ME) diff --git a/code/game/mecha/equipment/mecha_equipment.dm b/code/game/mecha/equipment/mecha_equipment.dm index 28dbc2f5bea2..4af1b23ae6d3 100644 --- a/code/game/mecha/equipment/mecha_equipment.dm +++ b/code/game/mecha/equipment/mecha_equipment.dm @@ -99,7 +99,7 @@ /obj/item/mecha_parts/mecha_equipment/proc/can_attach(obj/mecha/M) if(istype(M)) - if(M.equipment.len[mode? "Analyze" : "Launch"]\]
    \[Syringes: [syringes.len]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\]
    Reagents list" + return "[output] \[[mode? "Analyze" : "Launch"]\]
    \[Syringes: [length(syringes)]/[max_syringes] | Reagents: [reagents.total_volume]/[reagents.maximum_volume]\]
    Reagents list" /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/action(atom/movable/target) if(!action_checks(target)) @@ -289,7 +291,7 @@ return if(mode) return analyze_reagents(target) - if(!syringes.len) + if(!length(syringes)) occupant_message("No syringes loaded.") return if(reagents.total_volume<=0) @@ -356,7 +358,7 @@ processed_reagents.len = 0 var/m = 0 var/message - for(var/i=1 to known_reagents.len) + for(var/i=1 to length(known_reagents)) if(m>=synth_speed) break var/reagent = afilter.get("reagent_[i]") @@ -364,7 +366,7 @@ message = "[m ? ", " : null][known_reagents[reagent]]" processed_reagents += reagent m++ - if(processed_reagents.len) + if(length(processed_reagents)) message += " added to production" START_PROCESSING(SSobj, src) occupant_message(message) @@ -427,7 +429,7 @@ /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/get_reagents_list() var/output - for(var/i=1 to known_reagents.len) + for(var/i=1 to length(known_reagents)) var/reagent_id = known_reagents[i] output += {" [known_reagents[reagent_id]]
    "} return output @@ -442,7 +444,7 @@ return output || "None" /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/proc/load_syringe(obj/item/reagent_containers/syringe/S) - if(syringes.len= 2) occupant_message("The syringe is too far away.") return FALSE @@ -501,12 +503,12 @@ /obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/process() if(..()) return - if(!processed_reagents.len || reagents.total_volume >= reagents.maximum_volume || !chassis.has_charge(energy_drain)) + if(!length(processed_reagents) || reagents.total_volume >= reagents.maximum_volume || !chassis.has_charge(energy_drain)) occupant_message("Reagent processing stopped.") log_message("Reagent processing stopped.") STOP_PROCESSING(SSobj, src) return - var/amount = synth_speed / processed_reagents.len + var/amount = synth_speed / length(processed_reagents) for(var/reagent in processed_reagents) reagents.add_reagent(reagent,amount) chassis.use_power(energy_drain) @@ -554,6 +556,6 @@ /obj/item/mecha_parts/mecha_equipment/medical/rescue_jaw/can_attach(obj/mecha/M) if(istype(M, /obj/mecha/medical) || istype(M, /obj/mecha/working/ripley/firefighter)) //Odys or firefighters - if(M.equipment.len < M.max_equip) + if(length(M.equipment) < M.max_equip) return TRUE return FALSE diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 575bad890e32..f6a33da3af40 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -94,7 +94,7 @@ if(isobj(target)) var/obj/O = target if(!O.anchored) - if(cargo_holder.cargo.len < cargo_holder.cargo_capacity) + if(length(cargo_holder.cargo) < cargo_holder.cargo_capacity) chassis.visible_message("[chassis] lifts [target] and starts to load it into cargo compartment.") O.anchored = TRUE if(do_after_cooldown(target)) @@ -102,7 +102,7 @@ O.forceMove(chassis) O.anchored = FALSE occupant_message("[target] successfully loaded.") - log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - cargo_holder.cargo.len]") + log_message("Loaded [O]. Cargo compartment capacity: [cargo_holder.cargo_capacity - length(cargo_holder.cargo)]") else O.anchored = initial(O.anchored) else diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index bae4537ee058..05b6ac9a111e 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -495,7 +495,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/can_attach(obj/mecha/M) if(istype(M, /obj/mecha/working)) - if(M.equipment.len" for(var/obj/item/mecha_parts/mecha_equipment/MT in equipment) @@ -229,11 +229,11 @@ /obj/mecha/proc/log_message(message as text,red=null) log.len++ - log[log.len] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]") - return log.len + log[length(log)] = list("time"=world.timeofday,"message"="[red?"":null][message][red?"":null]") + return length(log) /obj/mecha/proc/log_append_to_last(message as text,red=null) - var/list/last_entry = log[log.len] + var/list/last_entry = log[length(log)] last_entry["message"] += "
    [red?"":null][message][red?"":null]" return diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm index 72a5f8daacd0..c5e87d3789d0 100644 --- a/code/game/mecha/mecha_wreckage.dm +++ b/code/game/mecha/mecha_wreckage.dm @@ -21,7 +21,7 @@ . = ..() if(parts) for(var/i in 1 to 2) - if(!parts.len) + if(!length(parts)) break if(prob(60)) continue @@ -53,7 +53,7 @@ . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - if(crowbar_salvage.len) + if(length(crowbar_salvage)) var/obj/S = pick(crowbar_salvage) S.forceMove(user.drop_location()) user.visible_message("[user] pries [S] from [src].", "You pry [S] from [src].") diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 6fd31c927440..6ba689b31dcc 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -155,7 +155,7 @@ var/turf/T = get_turf(O) if(T) T.Entered(O) - log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - cargo.len]") + log_message("Unloaded [O]. Cargo compartment capacity: [cargo_capacity - length(cargo)]") return @@ -163,7 +163,7 @@ /obj/mecha/working/ripley/get_stats_part() var/output = ..() output += "Cargo Compartment Contents:
    " - if(cargo.len) + if(length(cargo)) for(var/obj/O in cargo) output += "Unload : [O]
    " else diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index cd63de1feafc..5fe748f2d181 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -236,7 +236,7 @@ /obj/effect/decal/cleanable/blood/writing/Initialize(mapload) . = ..() - if(random_icon_states.len) + if(length(random_icon_states)) for(var/obj/effect/decal/cleanable/blood/writing/W in loc) random_icon_states.Remove(W.icon_state) icon_state = pick(random_icon_states) diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 35d339aebcb7..e2c8e72e9a1c 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -56,7 +56,7 @@ bloodiness -= add_blood S.bloody_shoes[blood_state] = min(MAX_SHOE_BLOODINESS, S.bloody_shoes[blood_state] + add_blood) S.bloody_shoes[BLOOD_BASE_ALPHA] = BLOODY_FOOTPRINT_BASE_ALPHA * (alpha/255) - if(blood_DNA && blood_DNA.len) + if(blood_DNA && length(blood_DNA)) S.add_blood(H.blood_DNA, basecolor) S.blood_state = blood_state S.blood_color = basecolor diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index 562c7390b6c1..9f5471fb2ce4 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -91,7 +91,7 @@ if(direction & i) dirList += i - if(dirList.len) + if(length(dirList)) var/newDir = pick(dirList) if(newDir == 16) floor = 1 diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index a127b327d13c..a2f5b11cbdd2 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -416,7 +416,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/newplayer_start) //Without this you sp /obj/effect/landmark/costume/random/Initialize(mapload) //costume spawner, selects a random subclass and disappears . = ..() var/list/options = (typesof(/obj/effect/landmark/costume) - /obj/effect/landmark/costume/random) - var/PICK= options[rand(1,options.len)] + var/PICK= options[rand(1,length(options))] new PICK(src.loc) return INITIALIZE_HINT_QDEL @@ -580,7 +580,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/newplayer_start) //Without this you sp var/datum/map_template/ruin/ruin_template /obj/effect/landmark/ruin/New(loc, my_ruin_template) - name = "ruin_[GLOB.ruin_landmarks.len + 1]" + name = "ruin_[length(GLOB.ruin_landmarks) + 1]" ..(loc) ruin_template = my_ruin_template GLOB.ruin_landmarks |= src diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 4f2ece5959f9..3005942594ca 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -47,7 +47,7 @@ if(prob(50)) to_chat(mover, "You get stuck in [src] for a moment.") return FALSE - else if(istype(mover, /obj/item/projectile)) + else if(isprojectile(mover)) return prob(30) return TRUE @@ -132,7 +132,7 @@ var/list/vents = list() for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in entry_vent.parent.other_atmosmch) vents.Add(temp_vent) - if(!vents.len) + if(!length(vents)) entry_vent = null return var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = pick(vents) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 3e9a495dff8f..b199de17d62a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -229,7 +229,7 @@ GLOBAL_DATUM_INIT(welding_sparks, /mutable_appearance, mutable_appearance('icons msg += "No tech origins detected.
    " - if(materials.len) + if(length(materials)) msg += "Extractable materials:
    " for(var/mat in materials) msg += "[CallMaterialName(mat)]
    " //Capitize first word, remove the "$" diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm index 63e2d25fdada..037709e2c00b 100644 --- a/code/game/objects/items/ashtray.dm +++ b/code/game/objects/items/ashtray.dm @@ -7,7 +7,7 @@ /obj/item/ashtray/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/cigbutt) || istype(I, /obj/item/clothing/mask/cigarette) || istype(I, /obj/item/match)) - if(contents.len >= max_butts) + if(length(contents) >= max_butts) to_chat(user, "This ashtray is full.") return if(!user.unEquip(I)) @@ -31,18 +31,18 @@ return ..() /obj/item/ashtray/update_icon_state() - if(contents.len == max_butts) + if(length(contents) == max_butts) icon_state = icon_full - else if(contents.len > max_butts * 0.5) + else if(length(contents) > max_butts * 0.5) icon_state = icon_half else icon_state = initial(icon_state) /obj/item/ashtray/update_desc() . = ..() - if(contents.len == max_butts) + if(length(contents) == max_butts) desc = initial(desc) + " It's stuffed full." - else if(contents.len > max_butts * 0.5) + else if(length(contents) > max_butts * 0.5) desc = initial(desc) + " It's half-filled." else desc = initial(desc) @@ -53,7 +53,7 @@ update_appearance(UPDATE_DESC|UPDATE_ICON_STATE) /obj/item/ashtray/throw_impact(atom/hit_atom) - if(contents.len) + if(length(contents)) visible_message("[src] slams into [hit_atom] spilling its contents!") empty_tray() return ..() diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index a7b423a097e6..66258630f481 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -211,7 +211,7 @@ A.always_unpowered = FALSE A.set_dynamic_lighting() - for(var/i in 1 to turfs.len) + for(var/i in 1 to length(turfs)) var/turf/thing = turfs[i] var/area/old_area = thing.loc A.contents += thing @@ -293,8 +293,8 @@ /obj/item/areaeditor/proc/detect_room(turf/first) var/list/turf/found = new var/list/turf/pending = list(first) - while(pending.len) - if(found.len+pending.len > 300) + while(length(pending)) + if(found.len+length(pending) > 300) return ROOM_ERR_TOOLARGE var/turf/T = pending[1] //why byond havent list::pop()? pending -= T diff --git a/code/game/objects/items/devices/autopsy.dm b/code/game/objects/items/devices/autopsy.dm index 141a89738957..af9646366c7d 100644 --- a/code/game/objects/items/devices/autopsy.dm +++ b/code/game/objects/items/devices/autopsy.dm @@ -43,7 +43,7 @@ return W /obj/item/autopsy_scanner/proc/add_data(obj/item/organ/O) - if(O.autopsy_data.len) + if(length(O.autopsy_data)) for(var/V in O.autopsy_data) var/datum/autopsy_data/W = O.autopsy_data[V] @@ -62,7 +62,7 @@ qdel(D.organs_scanned[O.name]) D.organs_scanned[O.name] = W.copy() - if(O.trace_chemicals.len) + if(length(O.trace_chemicals)) for(var/V in O.trace_chemicals) if(O.trace_chemicals[V] > 0 && !chemtraces.Find(V)) chemtraces += V @@ -97,7 +97,7 @@ else scan_data += "Time of death: Unknown / Still alive

    " - if(wdata.len) + if(length(wdata)) var/n = 1 for(var/wdata_idx in wdata) var/datum/autopsy_data_scanner/D = wdata[wdata_idx] @@ -140,7 +140,7 @@ n++ - if(chemtraces.len) + if(length(chemtraces)) scan_data += "Trace Chemicals:
    " for(var/chemID in chemtraces) scan_data += chemID diff --git a/code/game/objects/items/devices/enginepicker.dm b/code/game/objects/items/devices/enginepicker.dm index 46cd53485651..f5fe75216089 100644 --- a/code/game/objects/items/devices/enginepicker.dm +++ b/code/game/objects/items/devices/enginepicker.dm @@ -49,7 +49,7 @@ var/G //Generator that will be spawned var/turf/T = get_turf(choice) - if(choice.enginetype.len > 1) //If the beacon has multiple engine types + if(length(choice.enginetype) > 1) //If the beacon has multiple engine types var/E = tgui_input_list(user, "You have selected a combined beacon, which option would you prefer?", "[src]", choice.enginetype) if(E) engtype = E @@ -76,7 +76,7 @@ var/ailist[] = list() for(var/mob/living/silicon/ai/A in GLOB.alive_mob_list) ailist += A - if(ailist.len) + if(length(ailist)) var/mob/living/silicon/ai/announcer = pick(ailist) announcer.say(";Engine delivery detected. Type: [engtype].") //Let's announce the terrible choice to everyone diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index ec2b512f79f4..683f6462f3d2 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -13,6 +13,7 @@ var/looking_for_personality = 0 var/mob/living/silicon/pai/pai var/list/faction = list("neutral") // The factions the pAI will inherit from the card + var/current_emotion = 1 resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE /obj/item/paicard/syndicate @@ -302,8 +303,6 @@ overlays.Cut() overlays += "pai-off" -/obj/item/paicard - var/current_emotion = 1 /obj/item/paicard/proc/setEmotion(emotion) if(pai) overlays.Cut() diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 490ee42151d5..84e2a15ba1a5 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -148,17 +148,6 @@ icon_state = "com_cypherkey" channels = list("Command" = 1, "Security" = 1) -/* -/obj/item/encryptionkey/headset_mine - name = "Mining Radio Encryption Key" - icon_state = "mine_cypherkey" - channels = list("Mining" = 1) - -/obj/item/encryptionkey/heads/qm - name = "Quartermaster's Encryption Key" - icon_state = "qm_cypherkey" - channels = list("Cargo" = 1, "Mining" = 1) -*/ /obj/item/encryptionkey/headset_cargo name = "Supply Radio Encryption Key" icon_state = "cargo_cypherkey" diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index f04502612d6f..dbb4ecb723a6 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -387,21 +387,22 @@ return FALSE return ..() -/obj/item/radio/headset/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/encryptionkey/)) +/obj/item/radio/headset/attackby(obj/item/key, mob/user) + if(istype(key, /obj/item/encryptionkey/)) if(keyslot1 && keyslot2) to_chat(user, "The headset can't hold another key!") return + if(!user.unEquip(key)) + to_chat(user, "[key] is stuck to your hand, you can't insert it in [src].") + return + + key.forceMove(src) if(!keyslot1) - user.drop_item() - W.loc = src - keyslot1 = W + keyslot1 = key else - user.drop_item() - W.loc = src - keyslot2 = W + keyslot2 = key recalculateChannels() return @@ -489,11 +490,11 @@ /obj/item/radio/headset/proc/setupRadioDescription() var/radio_text = "" - for(var/i = 1 to channels.len) + for(var/i = 1 to length(channels)) var/channel = channels[i] var/key = get_radio_key_from_channel(channel) radio_text += "[key] - [channel]" - if(i != channels.len) + if(i != length(channels)) radio_text += ", " radio_desc = radio_text diff --git a/code/game/objects/items/devices/radio/radio_objects.dm b/code/game/objects/items/devices/radio/radio_objects.dm index 2f7f5e4f1845..a26c5a126faa 100644 --- a/code/game/objects/items/devices/radio/radio_objects.dm +++ b/code/game/objects/items/devices/radio/radio_objects.dm @@ -256,9 +256,9 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) /obj/item/radio/proc/ToggleReception() listening = !listening && !(wires.is_cut(WIRE_RADIO_RECEIVER) || wires.is_cut(WIRE_RADIO_SIGNAL)) -/obj/item/radio/proc/autosay(message, from, channel, role = "Unknown", follow_target_override) //BS12 EDIT +/obj/item/radio/proc/autosay(message, from, channel, follow_target_override) //BS12 EDIT var/datum/radio_frequency/connection = null - if(channel && channels && channels.len > 0) + if(channel && channels && length(channels) > 0) if(channel == "department") channel = channels[1] connection = secure_radio_connections[channel] @@ -274,10 +274,6 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) return if(!connection) return - var/mob/living/automatedannouncer/A = new /mob/living/automatedannouncer(src) - A.name = from - A.role = role - A.message = message var/jammed = FALSE for(var/obj/item/jammer/jammer in GLOB.active_jammers) if(get_dist(get_turf(src), get_turf(jammer)) < jammer.range) @@ -290,7 +286,7 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) // Make us a message datum! var/datum/tcomms_message/tcm = new tcm.connection = connection - tcm.sender = A + tcm.sender = src tcm.radio = src tcm.sender_name = from tcm.message_pieces = message_pieces @@ -312,29 +308,6 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) for(var/obj/machinery/tcomms/core/C in GLOB.tcomms_machines) C.handle_message(tcm) qdel(tcm) // Delete the message datum - qdel(A) - -// Just a dummy mob used for making announcements, so we don't create AIs to do this -// I'm not sure who thought that was a good idea. -- Crazylemon -/mob/living/automatedannouncer - var/role = "" - var/lifetime_timer - var/message = "" - universal_speak = TRUE - -/mob/living/automatedannouncer/New() - lifetime_timer = addtimer(CALLBACK(src, PROC_REF(autocleanup)), 10 SECONDS, TIMER_STOPPABLE) - ..() - -/mob/living/automatedannouncer/Destroy() - if(lifetime_timer) - deltimer(lifetime_timer) - lifetime_timer = null - return ..() - -/mob/living/automatedannouncer/proc/autocleanup() - stack_trace("An announcer somehow managed to outlive the radio! Deleting! (Message: [message])") - qdel(src) // Interprets the message mode when talking into a radio, possibly returning a connection datum /obj/item/radio/proc/handle_message_mode(mob/living/M as mob, list/message_pieces, message_mode) @@ -343,7 +316,7 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) return radio_connection // Otherwise, if a channel is specified, look for it. - if(channels && channels.len > 0) + if(channels && length(channels) > 0) if(message_mode == "department") // Department radio shortcut message_mode = channels[1] @@ -527,7 +500,7 @@ GLOBAL_LIST_EMPTY(deadsay_radio_systems) if(freq in SSradio.ANTAG_FREQS) if(!(syndiekey))//Checks to see if it's allowed on that frequency, based on the encryption keys return -1 - if(!freq) //recieved on main frequency + if(!freq) //received on main frequency if(!listening) return -1 else diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index c2d93a5cb98b..04d3b60581a0 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -80,13 +80,13 @@ SLIME SCANNER if(ishuman(M)) var/mob/living/carbon/human/H = M if(H.reagents) - if(H.reagents.reagent_list.len) + if(length(H.reagents.reagent_list)) msgs += "Subject contains the following reagents:" for(var/datum/reagent/R in H.reagents.reagent_list) msgs += "[R.volume]u of [R.name][R.overdosed ? " - OVERDOSING" : ".
    "]" else msgs += "Subject contains no reagents." - if(H.reagents.addiction_list.len) + if(length(H.reagents.addiction_list)) msgs += "Subject is addicted to the following reagents:" for(var/datum/reagent/R in H.reagents.addiction_list) msgs += "[R.name] Stage: [R.addiction_stage]/5" @@ -664,7 +664,7 @@ SLIME SCANNER if(!isnull(O.reagents)) var/dat = "" var/blood_type = "" - if(O.reagents.reagent_list.len > 0) + if(length(O.reagents.reagent_list) > 0) var/one_percent = O.reagents.total_volume / 100 for(var/datum/reagent/R in O.reagents.reagent_list) if(R.id != "blood") diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 40fbaec9bc81..463a69a18d3c 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -75,7 +75,7 @@ /obj/item/taperecorder/attack_hand(mob/user) if(loc == user) if(mytape) - if(user.l_hand != src && user.r_hand != src) + if(!user.is_holding(src)) ..() return eject(user) @@ -231,7 +231,7 @@ playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1) var/obj/item/paper/P = new /obj/item/paper(get_turf(src)) var/t1 = "Transcript:

    " - for(var/i = 1, mytape.storedinfo.len >= i, i++) + for(var/i = 1, length(mytape.storedinfo) >= i, i++) t1 += "[mytape.storedinfo[i]]
    " P.info = t1 P.name = "paper- 'Transcript'" diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index a8817a1b7222..62c6af8cb8d3 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -145,7 +145,7 @@ new/obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc) playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) new/obj/effect/temp_visual/teleport_abductor/syndi_teleporter(destination) - else if(!EMP_D && !(bagholding.len && !flawless)) // This is where the fun begins + else if(!EMP_D && !(length(bagholding) && !flawless)) // This is where the fun begins var/direction = get_dir(user, destination) panic_teleport(user, destination, direction) else // Emp activated? Bag of holding? No saving throw for you diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 522ee656d724..1439b9134c6e 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -64,13 +64,13 @@ GLOBAL_LIST_EMPTY(world_uplinks) for(var/category in uplink_items) cats[++cats.len] = list("cat" = category, "items" = list()) for(var/datum/uplink_item/I in uplink_items[category]) - if(I.job && I.job.len) + if(I.job && length(I.job)) if(!(I.job.Find(job)) && uplink_type != UPLINK_TYPE_ADMIN) continue if(length(I.species)) if(!(I.species.Find(species)) && uplink_type != UPLINK_TYPE_ADMIN) continue - cats[cats.len]["items"] += list(list( + cats[length(cats)]["items"] += list(list( "name" = sanitize(I.name), "desc" = sanitize(I.description()), "cost" = I.cost, @@ -88,10 +88,10 @@ GLOBAL_LIST_EMPTY(world_uplinks) var/list/random_items = list() - for(var/IR in uplink_items) - var/datum/uplink_item/UI = uplink_items[IR] - if(UI.cost <= uses && UI.limited_stock != 0) - random_items += UI + for(var/uplink_section in uplink_items) + for(var/datum/uplink_item/UI in uplink_items[uplink_section]) + if(UI.cost <= uses && UI.limited_stock != 0) + random_items += UI return pick(random_items) diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm index 7766452893d1..12d5a908dce9 100644 --- a/code/game/objects/items/his_grace.dm +++ b/code/game/objects/items/his_grace.dm @@ -110,7 +110,7 @@ go_rabid() return - if(!(src in list(master.l_hand, master.r_hand))) + if(!master.is_holding(src)) go_rabid() return diff --git a/code/game/objects/items/mixing_bowl.dm b/code/game/objects/items/mixing_bowl.dm index 286e68e30887..59898eec3f18 100644 --- a/code/game/objects/items/mixing_bowl.dm +++ b/code/game/objects/items/mixing_bowl.dm @@ -26,7 +26,7 @@ to_chat(user, "You should clean [src] before you use it for food prep.") return 0 if(is_type_in_list(I, GLOB.cooking_ingredients[RECIPE_MICROWAVE]) || is_type_in_list(I, GLOB.cooking_ingredients[RECIPE_GRILL]) || is_type_in_list(I, GLOB.cooking_ingredients[RECIPE_OVEN]) || is_type_in_list(I, GLOB.cooking_ingredients[RECIPE_CANDY])) - if(contents.len>=max_n_of_items) + if(length(contents)>=max_n_of_items) to_chat(user, "This [src] is full of ingredients, you cannot put more.") return 1 if(istype(I, /obj/item/stack)) @@ -103,7 +103,7 @@ display_name = "Coldsauce" dat += {"[display_name]: [R.volume] unit\s
    "} - if(items_counts.len==0 && reagents.reagent_list.len==0) + if(length(items_counts)==0 && length(reagents.reagent_list)==0) dat = {"[src] is empty
    "} else dat = {"Ingredients:
    [dat]"} diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index 188c79da631e..f15eb6d4e9da 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -3,6 +3,7 @@ ***********************************************************************/ /obj/item/borg icon = 'icons/mob/robot_items.dmi' + var/powerneeded // Percentage of power remaining required to run item /obj/item/borg/stun name = "electrically-charged arm" diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index e5986a9833c9..1828254d2ef2 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -7,7 +7,7 @@ icon = 'icons/obj/module.dmi' icon_state = "cyborg_upgrade" origin_tech = "programming=2" - /// Whether or not the cyborg needs to have a chosen module before they can recieve this upgrade. + /// Whether or not the cyborg needs to have a chosen module before they can receive this upgrade. var/require_module = FALSE /// The type of module this upgrade is compatible with: Engineering, Medical, etc. var/module_type = null @@ -364,10 +364,11 @@ /***********************/ /obj/item/borg/upgrade/floorbuffer - name = "janitor cyborg floor buffer upgrade" - desc = "A floor buffer upgrade kit that can be attached to janitor cyborgs." + name = "janitorial floor buffer upgrade" + desc = "A floor buffer upgrade kit that can be attached to janitor cyborgs and mobile janicarts." icon = 'icons/obj/vehicles.dmi' icon_state = "upgrade" + origin_tech = "materials=3;engineering=4" require_module = TRUE module_type = /obj/item/robot_module/janitor /// How much speed the cyborg loses while the buffer is active diff --git a/code/game/objects/items/sport.dm b/code/game/objects/items/sport.dm index a0fe0d7f43b5..862cdeecce2e 100644 --- a/code/game/objects/items/sport.dm +++ b/code/game/objects/items/sport.dm @@ -46,7 +46,7 @@ . = ..() var/mob/living/carbon/human/M = hit_atom if(ishuman(hit_atom) && (M.wear_suit?.type in suit_types)) - if(M.r_hand == src || M.l_hand == src) + if(M.is_holding(src)) return playsound(src, 'sound/items/dodgeball.ogg', 50, 1) M.KnockDown(6 SECONDS) @@ -86,7 +86,7 @@ return /obj/structure/holohoop/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) - if(isitem(AM) && !istype(AM, /obj/item/projectile)) + if(isitem(AM) && !isprojectile(AM)) if(prob(50) || HAS_TRAIT(throwingdatum.thrower, TRAIT_BADASS)) AM.forceMove(get_turf(src)) visible_message("Swish! [AM] lands in [src].") diff --git a/code/game/objects/items/stacks/seaweed.dm b/code/game/objects/items/stacks/seaweed.dm new file mode 100644 index 000000000000..90a8a9c7da43 --- /dev/null +++ b/code/game/objects/items/stacks/seaweed.dm @@ -0,0 +1,19 @@ +/obj/item/stack/seaweed + name = "seaweed sheet" + desc = "Weed.. from the Sea!" + singular_name = "seaweed sheet" + icon = 'icons/obj/stacks/organic.dmi' + icon_state = "seaweed" + item_state = "seaweed" + w_class = WEIGHT_CLASS_TINY + attack_verb = list("slapped") + hitsound = 'sound/weapons/grenadelaunch.ogg' + usesound = 'sound/items/deconstruct.ogg' + merge_type = /obj/item/stack/seaweed + +/obj/item/stack/seaweed/attack_self(mob/user) + return + +/obj/item/stack/seaweed/attack_self_tk() + return + diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 9e0e5f69d156..49c45f27fe8c 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -336,6 +336,7 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( new /datum/stack_recipe("fish bag", /obj/item/storage/bag/fish, 4), new /datum/stack_recipe("mail bag", /obj/item/storage/bag/mail, 4), new /datum/stack_recipe("construction bag", /obj/item/storage/bag/construction, 4), + new /datum/stack_recipe("money bag", /obj/item/storage/bag/money, 3), )), null, new /datum/stack_recipe("improvised gauze", /obj/item/stack/medical/bruise_pack/improvised, 1, 2, 6), diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index f74144a9ca57..8e4191704690 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -143,7 +143,7 @@ recipe_list = srl.recipes var/t1 = "Amount Left: [get_amount()]
    " - for(var/i in 1 to recipe_list.len) + for(var/i in 1 to length(recipe_list)) var/E = recipe_list[i] if(isnull(E)) t1 += "
    " diff --git a/code/game/objects/items/tools/multitool.dm b/code/game/objects/items/tools/multitool.dm index d7eb05149c60..a44742ade66f 100644 --- a/code/game/objects/items/tools/multitool.dm +++ b/code/game/objects/items/tools/multitool.dm @@ -85,7 +85,7 @@ if(!detect_state && GLOB.cameranet.chunkGenerated(our_turf.x, our_turf.y, our_turf.z)) var/datum/camerachunk/chunk = GLOB.cameranet.getCameraChunk(our_turf.x, our_turf.y, our_turf.z) if(chunk) - if(chunk.seenby.len) + if(length(chunk.seenby)) for(var/mob/camera/aiEye/A in chunk.seenby) //Checks if the A is to be detected or not if(!A.ai_detector_visible) diff --git a/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm b/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm index 8ddc1d8cfb3c..ffb48b26c2b7 100644 --- a/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm +++ b/code/game/objects/items/weapons/bio_chips/bio_chip_pad.dm @@ -45,6 +45,7 @@ C.forceMove(src) case = C update_icon(UPDATE_ICON_STATE) + SStgui.update_uis(src) /obj/item/bio_chip_pad/proc/eject_case(mob/user) if(!case) @@ -53,13 +54,9 @@ if(user.put_in_hands(case)) add_fingerprint(user) case.add_fingerprint(user) - case = null - update_icon(UPDATE_ICON_STATE) - return - - case.forceMove(get_turf(src)) case = null update_icon(UPDATE_ICON_STATE) + SStgui.update_uis(src) /obj/item/bio_chip_pad/AltClick(mob/user) if(user.stat || HAS_TRAIT(user, TRAIT_HANDS_BLOCKED) || !Adjacent(user)) @@ -74,6 +71,7 @@ ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "BioChipPad", name) + ui.set_autoupdate(FALSE) ui.open() /obj/item/bio_chip_pad/ui_data(mob/user) @@ -97,7 +95,7 @@ /obj/item/bio_chip_pad/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if(..()) return - + . = TRUE switch(action) if("eject_case") eject_case(ui.user) diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index ef0d3dbe5552..efd1ea577923 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -245,7 +245,7 @@ LIGHTERS ARE IN LIGHTERS.DM if(is_being_smoked) // if it's being smoked, transfer reagents to the mob var/mob/living/carbon/C = loc for(var/datum/reagent/R in reagents.reagent_list) - reagents.trans_id_to(C, R.id, first_puff ? 1 : max(REAGENTS_METABOLISM / reagents.reagent_list.len, 0.1)) //transfer at least .1 of each chem + reagents.trans_id_to(C, R.id, first_puff ? 1 : max(REAGENTS_METABOLISM / length(reagents.reagent_list), 0.1)) //transfer at least .1 of each chem first_puff = FALSE if(!reagents.total_volume) // There were reagents, but now they're gone to_chat(C, "Your [name] loses its flavor.") diff --git a/code/game/objects/items/weapons/disks.dm b/code/game/objects/items/weapons/disks.dm index b982a0d44e59..8f113c539934 100644 --- a/code/game/objects/items/weapons/disks.dm +++ b/code/game/objects/items/weapons/disks.dm @@ -67,7 +67,7 @@ /obj/item/storage/box/disks name = "Diskette Box" - icon_state = "disk_kit" + icon_state = "disk_box" /obj/item/storage/box/disks/populate_contents() for(var/i in 1 to 7) diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index e335cb175f9b..b2e1014bbb25 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -209,7 +209,6 @@ name = "DNA injector" desc = "Good. Let the hate flow through you." - /obj/item/dnainjector/antitele name = "DNA-Injector (Anti-Tele.)" desc = "Will make you not able to control your mind." @@ -553,28 +552,6 @@ block = GLOB.blindblock ..() -/obj/item/dnainjector/telemut - name = "DNA-Injector (Tele.)" - desc = "Super brain man!" - datatype = DNA2_BUF_SE - value = 0xFFF - forcedmutation = TRUE - -/obj/item/dnainjector/telemut/Initialize() - block = GLOB.teleblock - ..() - -/obj/item/dnainjector/antitele - name = "DNA-Injector (Anti-Tele.)" - desc = "Will make you not able to control your mind." - datatype = DNA2_BUF_SE - value = 0x001 - forcedmutation = TRUE - -/obj/item/dnainjector/antitele/Initialize() - block = GLOB.teleblock - ..() - /obj/item/dnainjector/deafmut name = "DNA-Injector (Deaf)" desc = "Sorry, what did you say?" diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index a16963b648ad..67bc3f4994ea 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -42,7 +42,7 @@ var/turf/location = loc if(ismob(location)) var/mob/M = location - if(M.l_hand == src || M.r_hand == src) + if(M.is_holding(src)) location = M.loc if(isturf(location)) //start a fire if possible igniter.flamethrower_process(location) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 81bf6cf32a57..445546f20a1b 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -134,7 +134,7 @@ to_chat(user, "You remove the label from [src].") return 1 else if(stage == WIRED && is_type_in_list(I, allowed_containers)) - if(beakers.len == 2) + if(length(beakers) == 2) to_chat(user, "[src] can not hold more containers.") return else @@ -184,7 +184,7 @@ nadeassembly.forceMove(get_turf(src)) nadeassembly.master = null nadeassembly = null - if(beakers.len) + if(length(beakers)) for(var/obj/O in beakers) O.forceMove(get_turf(src)) beakers = list() @@ -280,7 +280,7 @@ if(!chem_splash(get_turf(src), affected_area, reactants, ignition_temp, threatscale) && !no_splash) playsound(loc, 'sound/items/screwdriver2.ogg', 50, 1) - if(beakers.len) + if(length(beakers)) for(var/obj/O in beakers) O.forceMove(get_turf(src)) beakers = list() diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm index 46aebed6b252..f08704aa25d3 100644 --- a/code/game/objects/items/weapons/grenades/clusterbuster.dm +++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm @@ -169,16 +169,16 @@ desc = "No matter what, do not EVER use this." payload = /obj/singularity -/obj/item/grenade/clusterbuster/tools - name = "\improper Quick Repair Grenade" - desc = "An assistant's every dream." - payload = /obj/random/tool - /obj/item/grenade/clusterbuster/tools name = "\improper Engineering Deployment Platfom" desc = "For the that time when gearing up was just too hard." payload = /obj/random/tech_supply +/obj/item/grenade/clusterbuster/tide + name = "\improper Quick Repair Grenade" + desc = "An assistant's every dream." + payload = /obj/random/tool + /obj/item/grenade/clusterbuster/toys name = "\improper Toy Delivery System" desc = "Who needs skill at arcades anyway?" diff --git a/code/game/objects/items/weapons/holosign_projector.dm b/code/game/objects/items/weapons/holosign_projector.dm index 4e806509f2e3..655286170d48 100644 --- a/code/game/objects/items/weapons/holosign_projector.dm +++ b/code/game/objects/items/weapons/holosign_projector.dm @@ -32,7 +32,7 @@ if(holocreator_busy) to_chat(user, "[src] is busy creating a hologram.") return - if(signs.len < max_signs) + if(length(signs) < max_signs) playsound(src.loc, 'sound/machines/click.ogg', 20, 1) if(creation_time) holocreator_busy = TRUE @@ -40,7 +40,7 @@ holocreator_busy = FALSE return holocreator_busy = FALSE - if(signs.len >= max_signs) + if(length(signs) >= max_signs) return if(is_blocked_turf(T, TRUE)) //don't try to sneak dense stuff on our tile during the wait. return @@ -54,7 +54,7 @@ return /obj/item/holosign_creator/attack_self(mob/user) - if(signs.len) + if(length(signs)) for(var/H in signs) qdel(H) to_chat(user, "You clear all active holograms.") @@ -135,7 +135,7 @@ to_chat(user, "You clear all active holograms, and reset your projector to normal.") holosign_type = /obj/structure/holosign/barrier/cyborg creation_time = 5 - if(signs.len) + if(length(signs)) for(var/H in signs) qdel(H) shock = 0 @@ -144,17 +144,17 @@ to_chat(user, "You clear all active holograms, and overload your energy projector!") holosign_type = /obj/structure/holosign/barrier/cyborg/hacked creation_time = 30 - if(signs.len) + if(length(signs)) for(var/H in signs) qdel(H) shock = 1 return else - if(signs.len) + if(length(signs)) for(var/H in signs) qdel(H) to_chat(user, "You clear all active holograms.") - if(signs.len) + if(length(signs)) for(var/H in signs) qdel(H) to_chat(user, "You clear all active holograms.") diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 0cf30e2db5ee..a117746c570f 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -360,7 +360,7 @@ if(ishuman(loc)) var/mob/living/carbon/human/our_location = loc if(istype(our_location)) - if(src != our_location.l_hand && src != our_location.r_hand) + if(!our_location.is_holding(src)) return if(our_location.Adjacent(attacking_atom)) // with a buddy we deal 12 damage :D our_location.do_attack_animation(attacking_atom, used_item = src) diff --git a/code/game/objects/items/weapons/melee/energy_melee_weapons.dm b/code/game/objects/items/weapons/melee/energy_melee_weapons.dm index b716a7ce5b13..0313f5ae46a8 100644 --- a/code/game/objects/items/weapons/melee/energy_melee_weapons.dm +++ b/code/game/objects/items/weapons/melee/energy_melee_weapons.dm @@ -55,7 +55,7 @@ throwforce = throwforce_on hitsound = 'sound/weapons/blade1.ogg' throw_speed = 4 - if(attack_verb_on.len) + if(length(attack_verb_on)) attack_verb = attack_verb_on if(icon_state_on) icon_state = icon_state_on @@ -71,7 +71,7 @@ throwforce = throwforce_off hitsound = initial(hitsound) throw_speed = initial(throw_speed) - if(attack_verb_on.len) + if(length(attack_verb_on)) attack_verb = list() icon_state = initial(icon_state) w_class = initial(w_class) @@ -240,7 +240,7 @@ . = ..() if(!.) // they did not block the attack return - if(istype(hitby, /obj/item/projectile)) + if(isprojectile(hitby)) var/obj/item/projectile/P = hitby if(P.reflectability == REFLECTABILITY_NEVER) //only 1 magic spell does this, but hey, needed owner.visible_message("[owner] blocks [attack_text] with [src]!") @@ -339,7 +339,7 @@ throwforce = throwforce_on hitsound = 'sound/weapons/bladeslice.ogg' throw_speed = 4 - if(attack_verb_on.len) + if(length(attack_verb_on)) attack_verb = attack_verb_on if(icon_state_on) icon_state = icon_state_on @@ -355,7 +355,7 @@ throwforce = throwforce_off hitsound = initial(hitsound) throw_speed = initial(throw_speed) - if(attack_verb_on.len) + if(length(attack_verb_on)) attack_verb = list() icon_state = initial(icon_state) w_class = initial(w_class) diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index e2d1b0fe3c76..398b6c4d4ed8 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -86,7 +86,7 @@ return /obj/item/shield/energy/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) - if(istype(hitby, /obj/item/projectile)) + if(isprojectile(hitby)) var/obj/item/projectile/P = hitby if(P.shield_buster && active) toggle(owner, TRUE) diff --git a/code/game/objects/items/weapons/stock_parts.dm b/code/game/objects/items/weapons/stock_parts.dm index 302ce2f20fc0..570c1c8f8b0a 100644 --- a/code/game/objects/items/weapons/stock_parts.dm +++ b/code/game/objects/items/weapons/stock_parts.dm @@ -220,7 +220,7 @@ /obj/item/stock_parts/capacitor/quadratic name = "quadratic capacitor" - desc = "An capacity capacitor used in the construction of a variety of devices." + desc = "An ultra-high capacity capacitor used in the construction of a variety of devices." icon_state = "quadratic_capacitor" origin_tech = "powerstorage=5;materials=4;engineering=4" rating = 4 diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 052d4ac74c52..600550157ce5 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -77,7 +77,7 @@ return TOXLOSS /obj/item/storage/bag/trash/update_icon_state() - switch(contents.len) + switch(length(contents)) if(21 to INFINITY) icon_state = "[initial(icon_state)]3" if(11 to 20) @@ -336,7 +336,7 @@ // Sets up numbered display to show the stack size of each stored mineral // NOTE: numbered display is turned off currently because it's broken /obj/item/storage/bag/sheetsnatcher/orient2hud(mob/user as mob) - var/adjusted_contents = contents.len + var/adjusted_contents = length(contents) //Numbered contents display var/list/datum/numbered_display/numbered_contents @@ -377,7 +377,7 @@ if(!istype(S)) return 0 //I would prefer to drop a new stack, but the item/attack_hand code - // that calls this can't recieve a different object than you clicked on. + // that calls this can't receive a different object than you clicked on. //Therefore, make a new stack internally that has the remainder. // -Sayu diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index e4bafc9d70f5..dd88e73e6148 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -99,7 +99,7 @@ var/mob/living/carbon/human/H = M if(prob(60)) bless(H) - H.visible_message("[user] heals [H == user ? "[user.p_themselves()]" : "[H]"] with the power of [deity_name]!", "May the power of [deity_name] compel you to be healed!") playsound(loc, "punch", 25, 1, -1) else diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 447580b14ada..575980892479 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -126,156 +126,6 @@ ////////////////// /* Common Boxes */ ////////////////// -/obj/item/storage/box/gloves - name = "box of latex gloves" - desc = "Contains white gloves." - icon_state = "latex" - -/obj/item/storage/box/gloves/populate_contents() - for(var/I in 1 to 7) - new /obj/item/clothing/gloves/color/latex(src) - -/obj/item/storage/box/masks - name = "sterile masks" - desc = "This box contains masks of sterility." - icon_state = "sterile" - -/obj/item/storage/box/masks/populate_contents() - for(var/I in 1 to 7) - new /obj/item/clothing/mask/surgical(src) - -/obj/item/storage/box/syringes - name = "syringes" - desc = "A box full of syringes." - desc = "A biohazard alert warning is printed on the box" - icon_state = "syringe" - -/obj/item/storage/box/syringes/populate_contents() - for(var/I in 1 to 7) - new /obj/item/reagent_containers/syringe(src) - -/obj/item/storage/box/beakers - name = "beaker box" - icon_state = "beaker" - -/obj/item/storage/box/beakers/populate_contents() - for(var/I in 1 to 7) - new /obj/item/reagent_containers/glass/beaker(src) - -/obj/item/storage/box/beakers/bluespace - name = "box of bluespace beakers" - icon_state = "beaker" - -/obj/item/storage/box/beakers/bluespace/populate_contents() - for(var/I in 1 to 7) - new /obj/item/reagent_containers/glass/beaker/bluespace(src) - -/obj/item/storage/box/iv_bags - name = "IV Bags" - desc = "A box full of empty IV bags." - icon_state = "beaker" - -/obj/item/storage/box/iv_bags/populate_contents() - for(var/I in 1 to 7) - new /obj/item/reagent_containers/iv_bag(src) - -/obj/item/storage/box/injectors - name = "\improper DNA injectors" - desc = "This box contains injectors it seems." - -/obj/item/storage/box/injectors/populate_contents() - for(var/I in 1 to 6) - new /obj/item/dnainjector/h2m(src) - -/obj/item/storage/box/slug - name = "ammunition box (Slug)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "slugbox" - -/obj/item/storage/box/slug/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun(src) - -/obj/item/storage/box/buck - name = "ammunition box (Buckshot)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "buckshotbox" - -/obj/item/storage/box/buck/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/buckshot(src) - -/obj/item/storage/box/dragonsbreath - name = "ammunition box (Dragonsbreath)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "dragonsbreathbox" - -/obj/item/storage/box/dragonsbreath/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src) - -/obj/item/storage/box/stun - name = "ammunition box (Stun shells)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "stunbox" - -/obj/item/storage/box/stun/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/stunslug(src) - -/obj/item/storage/box/beanbag - name = "ammunition box (Beanbag shells)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "beanbagbox" - -/obj/item/storage/box/beanbag/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/beanbag(src) - -/obj/item/storage/box/rubbershot - name = "ammunition box (Rubbershot shells)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "rubbershotbox" - -/obj/item/storage/box/rubbershot/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/rubbershot(src) - -/obj/item/storage/box/tranquilizer - name = "ammunition box (Tranquilizer darts)" - desc = "A small box capable of holding seven shotgun shells." - icon_state = "tranqbox" - -/obj/item/storage/box/tranquilizer/populate_contents() - for(var/I in 1 to 7) - new /obj/item/ammo_casing/shotgun/tranquilizer(src) - -/obj/item/storage/box/flashes - name = "box of flashbulbs" - desc = "WARNING: Flashes can cause serious eye damage, protective eyewear is required." - icon_state = "flashbang" - -/obj/item/storage/box/flashes/populate_contents() - for(var/I in 1 to 6) - new /obj/item/flash(src) - -/obj/item/storage/box/teargas - name = "box of tear gas grenades (WARNING)" - desc = "WARNING: These devices are extremely dangerous and can cause blindness and skin irritation." - icon_state = "flashbang" - -/obj/item/storage/box/teargas/populate_contents() - for(var/I in 1 to 7) - new /obj/item/grenade/chem_grenade/teargas(src) - -/obj/item/storage/box/emps - name = "emp grenades" - desc = "A box with 5 emp grenades." - icon_state = "flashbang" - -/obj/item/storage/box/emps/populate_contents() - for(var/I in 1 to 5) - new /obj/item/grenade/empgrenade(src) /obj/item/storage/box/tapes name = "Tape Box" @@ -368,14 +218,6 @@ for(var/i in 1 to 7) new /obj/item/disk/plantgene(src) -/obj/item/storage/box/disks - name = "genetics diskette box" - icon_state = "disk_box" - -/obj/item/storage/box/disks/populate_contents() - for(var/i in 1 to 7) - new /obj/item/disk/data(src) - /obj/item/storage/box/PDAs name = "spare PDAs" desc = "A box of spare PDA microcomputers." @@ -1005,7 +847,7 @@ /obj/item/storage/box/papersack/attackby(obj/item/W, mob/user, params) if(is_pen(W)) //if a pen is used on the sack, dialogue to change its design appears - if(contents.len) + if(length(contents)) to_chat(user, "You can't modify [src] with items still inside!") return var/list/designs = list(NODESIGN, NANOTRASEN, SYNDI, HEART, SMILE) @@ -1022,7 +864,7 @@ update_appearance(UPDATE_DESC|UPDATE_ICON_STATE) return else if(W.sharp) - if(!contents.len) + if(!length(contents)) if(item_state == "paperbag_None") to_chat(user, "You cut eyeholes into [src].") new /obj/item/clothing/head/papersack(user.loc) diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm index ed9a96a2b93f..77cc3c0f361a 100644 --- a/code/game/objects/items/weapons/storage/briefcase.dm +++ b/code/game/objects/items/weapons/storage/briefcase.dm @@ -43,7 +43,7 @@ /obj/item/storage/briefcase/false_bottomed/afterattack(atom/A, mob/user, flag, params) ..() - if(stored_item && istype(stored_item, /obj/item/gun) && !Adjacent(A)) + if(stored_item && isgun(stored_item) && !Adjacent(A)) var/obj/item/gun/stored_gun = stored_item stored_gun.afterattack(A, user, flag, params) diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 24fcd542715e..58c9fc1f0b6f 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -232,15 +232,15 @@ new cigarette_type(src) /obj/item/storage/fancy/cigarettes/update_icon_state() - icon_state = "[initial(icon_state)][contents.len]" + icon_state = "[initial(icon_state)][length(contents)]" /obj/item/storage/fancy/cigarettes/attack(mob/living/carbon/M as mob, mob/living/carbon/user as mob) if(!ismob(M)) return - if(istype(M) && M == user && user.zone_selected == "mouth" && contents.len > 0 && !user.wear_mask) + if(istype(M) && M == user && user.zone_selected == "mouth" && length(contents) > 0 && !user.wear_mask) var/got_cig = 0 - for(var/num=1, num <= contents.len, num++) + for(var/num=1, num <= length(contents), num++) var/obj/item/I = contents[num] if(istype(I, /obj/item/clothing/mask/cigarette)) var/obj/item/clothing/mask/cigarette/C = I @@ -374,7 +374,7 @@ /obj/item/storage/fancy/rollingpapers/update_overlays() . = ..() - if(!contents.len) + if(!length(contents)) . += "[icon_state]_empty" /* diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index 118b05361e7f..74f094d40aea 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -290,7 +290,7 @@ overlays += I /obj/item/storage/pill_bottle/attack(mob/M, mob/user) - if(iscarbon(M) && contents.len) + if(iscarbon(M) && length(contents)) if(applying_meds) to_chat(user, "You are already applying meds.") return @@ -339,7 +339,7 @@ if(iscarbon(over_object)) var/mob/living/carbon/C = over_object if(loc == C && src == C.get_active_hand()) - if(!contents.len) + if(!length(contents)) to_chat(C, "There is nothing in [src]!") return C.visible_message("[C] [rapid_intake_message]") diff --git a/code/game/objects/items/weapons/storage/storage_base.dm b/code/game/objects/items/weapons/storage/storage_base.dm index 80f1531cee36..cfb1b6015dcf 100644 --- a/code/game/objects/items/weapons/storage/storage_base.dm +++ b/code/game/objects/items/weapons/storage/storage_base.dm @@ -722,7 +722,7 @@ // But then again a tesseract would destroy the server anyways // Also I wish I could just insert a list instead of it reading it the wrong way content_list.len++ - content_list[content_list.len] = AM.serialize() + content_list[length(content_list)] = AM.serialize() return data /obj/item/storage/deserialize(list/data) diff --git a/code/game/objects/items/weapons/storage/surgical_tray.dm b/code/game/objects/items/weapons/storage/surgical_tray.dm index d46f15b0894e..c7c91677d8d2 100644 --- a/code/game/objects/items/weapons/storage/surgical_tray.dm +++ b/code/game/objects/items/weapons/storage/surgical_tray.dm @@ -36,7 +36,7 @@ new /obj/item/stack/medical/ointment/advanced(src) /obj/item/storage/surgical_tray/update_icon_state() - if(!contents.len) + if(!length(contents)) icon_state = "surgical_tray_e" else icon_state = "surgical_tray" diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 12d8c9f4c063..403cbe1462bd 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -56,7 +56,7 @@ if(A.tele_proof) continue // Telescience-proofed areas require a beacon. turfs += T - if(turfs.len) + if(length(turfs)) L["None (Dangerous)"] = pick(turfs) var/t1 = tgui_input_list(user, "Please select a teleporter to lock in on.", "Hand Teleporter", L) if(!t1 || (!user.is_in_active_hand(src) || user.stat || user.restrained())) diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index fe099a838230..460a227057dd 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -401,13 +401,6 @@ mounted_head = null qdel(src) -/obj/item/spear/kidan - name = "\improper Kidan spear" - desc = "A spear brought over from the Kidan homeworld." - base_icon_state = "kindanspear" - icon_state = "kidanspear0" - - // DIY CHAINSAW /obj/item/chainsaw name = "chainsaw" diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 2153082219c0..91106241eaff 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -339,8 +339,8 @@ LINEN BINS amount-- var/obj/item/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] + if(length(sheets) > 0) + B = sheets[length(sheets)] sheets.Remove(B) else @@ -364,8 +364,8 @@ LINEN BINS amount-- var/obj/item/bedsheet/B - if(sheets.len > 0) - B = sheets[sheets.len] + if(length(sheets) > 0) + B = sheets[length(sheets)] sheets.Remove(B) else diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 4a11d6cc15d4..5bee6f32e4aa 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -20,7 +20,7 @@ /obj/structure/displaycase/Initialize(mapload) . = ..() - if(start_showpieces.len && !start_showpiece_type) + if(length(start_showpieces) && !start_showpiece_type) var/list/showpiece_entry = pick(start_showpieces) if(showpiece_entry && showpiece_entry["type"]) start_showpiece_type = showpiece_entry["type"] diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm index e544227d383d..1a2535814c0d 100644 --- a/code/game/objects/structures/fence.dm +++ b/code/game/objects/structures/fence.dm @@ -61,7 +61,7 @@ /obj/structure/fence/CanPass(atom/movable/mover, turf/target) if(istype(mover) && mover.checkpass(PASSFENCE)) return TRUE - if(istype(mover, /obj/item/projectile)) + if(isprojectile(mover)) return TRUE if(!density) return TRUE diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index 6585976999ef..1c0bc9cd224c 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -410,7 +410,7 @@ if(istype(mover) && mover.checkpass(PASSGRILLE)) return prob(girderpasschance) else - if(istype(mover, /obj/item/projectile)) + if(isprojectile(mover)) return prob(girderpasschance) else return 0 diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index fbc538af4a15..4097219ef380 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -123,7 +123,7 @@ return TRUE if(istype(mover) && mover.checkpass(PASSGRILLE)) return TRUE - if(istype(mover, /obj/item/projectile)) + if(isprojectile(mover)) return (prob(30) || !density) /obj/structure/grille/CanPathfindPass(obj/item/card/id/ID, dir, caller, no_id = FALSE) diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index ff67ffde85ac..5acfde9058a0 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -102,7 +102,7 @@ /obj/structure/railing/CanPass(atom/movable/mover, turf/target) if(istype(mover) && mover.checkpass(PASSFENCE)) return TRUE - if(istype(mover, /obj/item/projectile)) + if(isprojectile(mover)) return TRUE if(ismob(mover)) var/mob/living/M = mover @@ -130,7 +130,7 @@ var/mob/living/M = O if(istype(O) && O.checkpass(PASSFENCE)) return TRUE - if(istype(O, /obj/item/projectile)) + if(isprojectile(O)) return TRUE if(istype(M)) if(M.flying || M.floating || (IS_HORIZONTAL(M) && HAS_TRAIT(M, TRAIT_CONTORTED_BODY))) diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 43d4c263c187..87b775b7e71e 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -369,6 +369,10 @@ desc = "A direction sign, pointing out which way the Supply Department is." icon_state = "direction_supply" +/obj/structure/sign/directions/service + desc = "A direction sign, pointing out which way the Service Department is." + icon_state = "direction_service" + /obj/structure/sign/explosives name = "\improper HIGH EXPLOSIVES" desc = "A warning sign which reads 'HIGH EXPLOSIVES'." diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 054ea1bf822a..b349b39b73eb 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -148,7 +148,7 @@ /obj/structure/bed/roller/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/roller_holder)) if(has_buckled_mobs()) - if(buckled_mobs.len > 1) + if(length(buckled_mobs) > 1) unbuckle_all_mobs() user.visible_message("[user] unbuckles all creatures from [src].") else diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 950a932c4055..6671d35a935d 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -799,10 +799,10 @@ . = ..() if(!.) // ..() will return 0 if we didn't actually move anywhere. - return . + return if(direct & (direct - 1)) // This represents a diagonal movement, which is split into multiple cardinal movements. We'll handle moving the items on the cardinals only. - return . + return playsound(loc, pick('sound/items/cartwheel1.ogg', 'sound/items/cartwheel2.ogg'), 100, 1, ignore_walls = FALSE) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 284b39dd50f3..9cfbaa163073 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -31,7 +31,7 @@ return if(cistern && !open) - if(!contents.len) + if(!length(contents)) to_chat(user, "The cistern is empty.") return else diff --git a/code/game/turfs/simulated/river.dm b/code/game/turfs/simulated/river.dm index b5b9a7d8acc3..b8182433df28 100644 --- a/code/game/turfs/simulated/river.dm +++ b/code/game/turfs/simulated/river.dm @@ -44,7 +44,7 @@ var/list/river_nodes = list() var/num_spawned = 0 var/list/possible_locs = block(locate(min_x, min_y, target_z), locate(max_x, max_y, target_z)) - while(num_spawned < nodes && possible_locs.len) + while(num_spawned < nodes && length(possible_locs)) var/turf/T = pick(possible_locs) var/area/A = get_area(T) if(!istype(A, whitelist_area_type) || (T.flags & NO_LAVA_GEN)) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 8dab455021b5..d4c41a5fd55d 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -116,9 +116,9 @@ . += dent_decals return - var/overlay = round(damage / damage_cap * damage_overlays.len) + 1 - if(overlay > damage_overlays.len) - overlay = damage_overlays.len + var/overlay = round(damage / damage_cap * length(damage_overlays)) + 1 + if(overlay > length(damage_overlays)) + overlay = length(damage_overlays) if(length(dent_decals)) . += dent_decals @@ -127,9 +127,9 @@ . += dent_decals /turf/simulated/wall/proc/generate_overlays() - var/alpha_inc = 256 / damage_overlays.len + var/alpha_inc = 256 / length(damage_overlays) - for(var/i = 1; i <= damage_overlays.len; i++) + for(var/i = 1; i <= length(damage_overlays); i++) var/image/img = image(icon = 'icons/turf/walls.dmi', icon_state = "overlay_damage") img.blend_mode = BLEND_MULTIPLY img.alpha = (i * alpha_inc) - 1 diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index 517e5dad0c5b..c5a0cad1ea5b 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -243,7 +243,7 @@ /turf/simulated/wall/mineral/titanium/interior/copyTurf(turf/T) if(T.type != type) T.ChangeTurf(type) - if(underlays.len) + if(length(underlays)) T.underlays = underlays if(T.icon_state != icon_state) T.icon_state = icon_state @@ -343,7 +343,7 @@ /turf/simulated/wall/mineral/plastitanium/interior/copyTurf(turf/T) if(T.type != type) T.ChangeTurf(type) - if(underlays.len) + if(length(underlays)) T.underlays = underlays if(T.icon_state != icon_state) T.icon_state = icon_state diff --git a/code/game/turfs/space/space_turf.dm b/code/game/turfs/space/space_turf.dm index 2cef6597e293..f5815136862d 100644 --- a/code/game/turfs/space/space_turf.dm +++ b/code/game/turfs/space/space_turf.dm @@ -147,7 +147,7 @@ if(!cur_pos) return cur_x = cur_pos["x"] cur_y = cur_pos["y"] - next_x = (--cur_x||GLOB.global_map.len) + next_x = (--cur_x||length(GLOB.global_map)) y_arr = GLOB.global_map[next_x] target_z = y_arr[cur_y] /* @@ -172,7 +172,7 @@ if(!cur_pos) return cur_x = cur_pos["x"] cur_y = cur_pos["y"] - next_x = (++cur_x > GLOB.global_map.len ? 1 : cur_x) + next_x = (++cur_x > length(GLOB.global_map) ? 1 : cur_x) y_arr = GLOB.global_map[next_x] target_z = y_arr[cur_y] /* @@ -197,7 +197,7 @@ cur_x = cur_pos["x"] cur_y = cur_pos["y"] y_arr = GLOB.global_map[cur_x] - next_y = (--cur_y||y_arr.len) + next_y = (--cur_y||length(y_arr)) target_z = y_arr[next_y] /* //debug @@ -222,7 +222,7 @@ cur_x = cur_pos["x"] cur_y = cur_pos["y"] y_arr = GLOB.global_map[cur_x] - next_y = (++cur_y > y_arr.len ? 1 : cur_y) + next_y = (++cur_y > length(y_arr) ? 1 : cur_y) target_z = y_arr[next_y] /* //debug diff --git a/code/game/turfs/space/transit.dm b/code/game/turfs/space/transit.dm index 9cbb85755792..cfdbe60c94d5 100644 --- a/code/game/turfs/space/transit.dm +++ b/code/game/turfs/space/transit.dm @@ -1,6 +1,8 @@ /turf/space/transit var/pushdirection // push things that get caught in the transit tile this direction plane = PLANE_SPACE + icon_state = "black" + dir = SOUTH //Overwrite because we dont want people building rods in space. /turf/space/transit/attackby(obj/O as obj, mob/user as mob, params) @@ -107,10 +109,6 @@ icon_state = "speedspace_ew_15" //-tg- stuff -/turf/space/transit - icon_state = "black" - dir = SOUTH - /turf/space/transit/horizontal dir = WEST diff --git a/code/game/verbs/randomtip.dm b/code/game/verbs/randomtip.dm index 25cc996c8fe8..90a0447183d1 100644 --- a/code/game/verbs/randomtip.dm +++ b/code/game/verbs/randomtip.dm @@ -7,9 +7,9 @@ var/list/randomtips = file2list("strings/tips.txt") var/list/memetips = file2list("strings/sillytips.txt") - if(randomtips.len && prob(95)) + if(length(randomtips) && prob(95)) m = pick(randomtips) - else if(memetips.len) + else if(length(memetips)) m = pick(memetips) if(m) diff --git a/code/game/world.dm b/code/game/world.dm index 37226335dd3d..e934067c0844 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -185,7 +185,7 @@ GLOBAL_LIST_EMPTY(world_topic_handlers) /world/proc/load_mode() var/list/Lines = file2list("data/mode.txt") - if(Lines.len) + if(length(Lines)) if(Lines[1]) GLOB.master_mode = Lines[1] log_game("Saved mode is '[GLOB.master_mode]'") diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 48549b082d6f..06adebfaa0ea 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -207,7 +207,7 @@ if(log_info) INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(log_connection), ckey(key), address, computer_id, CONNECTION_TYPE_DROPPED_BANNED) qdel(query) - return . + return qdel(query) . = ..() //default pager ban stuff @@ -224,4 +224,3 @@ log_adminwarn("Failed Login: [key] [computer_id] [address] - Banned [.["message"]]") if(log_info) INVOKE_ASYNC(GLOBAL_PROC, GLOBAL_PROC_REF(log_connection), ckey(key), address, computer_id, CONNECTION_TYPE_DROPPED_BANNED) - return . diff --git a/code/modules/admin/admin_memo.dm b/code/modules/admin/admin_memo.dm index 846d4fc0f0e8..1f88ee3f7bf2 100644 --- a/code/modules/admin/admin_memo.dm +++ b/code/modules/admin/admin_memo.dm @@ -152,7 +152,7 @@ memolist += "[ckey]" qdel(query_memodellist) - if(!memolist.len) + if(!length(memolist)) to_chat(src, "No memos found in database.") return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index c07c71a4a2a9..49d8b4f0817a 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -871,7 +871,7 @@ GLOBAL_LIST_INIT(view_runtimes_verbs, list( for(var/datum/job/J in SSjobs.occupations) if(J.current_positions >= J.total_positions && J.total_positions != -1) jobs += J.title - if(!jobs.len) + if(!length(jobs)) to_chat(usr, "There are no fully staffed jobs.") return var/job = input("Please select job slot to free", "Free Job Slot") as null|anything in jobs diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 384fef47a086..86718b4b6737 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -35,7 +35,7 @@ /** * Lists all active jobbans for src client * - * from_client_connection - If true, user will not recieve any info in chat if they have no job bans, used when a player loads into to the lobby. + * from_client_connection - If true, user will not receive any info in chat if they have no job bans, used when a player loads into to the lobby. */ /client/proc/display_job_bans(from_client_connection = FALSE) if(!from_client_connection) // Only reload if this is being checked by a user manually, as we load job bans at client new anyway diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 533b510719e9..5eb5fbb3b9cf 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -16,6 +16,7 @@ GLOBAL_PROTECT(href_token) var/rights = 0 var/fakekey var/big_brother = FALSE + var/current_tab = 0 /// Unique-to-session randomly generated token given to each admin to help add detail to logs on admin interactions with hrefs var/href_token diff --git a/code/modules/admin/misc_admin_procs.dm b/code/modules/admin/misc_admin_procs.dm index 86370f2220ba..03aa0b49fb00 100644 --- a/code/modules/admin/misc_admin_procs.dm +++ b/code/modules/admin/misc_admin_procs.dm @@ -111,9 +111,9 @@ GLOBAL_VAR_INIT(nologevent, 0) body += "SEND ALERT\]
    " body += "Mob type: [M.type]
    " if(M.client) - if(M.client.related_accounts_cid.len) + if(length(M.client.related_accounts_cid)) body += "Related accounts by CID: [jointext(M.client.related_accounts_cid, " - ")]
    " - if(M.client.related_accounts_ip.len) + if(length(M.client.related_accounts_ip)) body += "Related accounts by IP: [jointext(M.client.related_accounts_ip, " - ")]

    " if(M.ckey) @@ -613,6 +613,7 @@ GLOBAL_VAR_INIT(nologevent, 0) log_admin("[key_name(usr)] delayed the game.") else SSticker.ticker_going = TRUE + SSticker.round_start_time = world.time + SSticker.pregame_timeleft to_chat(world, "The game will start soon.") log_admin("[key_name(usr)] removed the delay.") @@ -726,11 +727,11 @@ GLOBAL_VAR_INIT(nologevent, 0) if(copytext("[path]", -needle_length) == object) matches += path - if(matches.len==0) + if(length(matches)==0) return var/chosen - if(matches.len==1) + if(length(matches)==1) chosen = matches[1] else chosen = input("Select an atom type", "Spawn Atom", matches[1]) as null|anything in matches diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 36a077903828..3b3215c4ce0f 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -366,7 +366,7 @@ dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]
    " dat += "
    Antagonist Teams
    " dat += "View Teams
    " - if(SSticker.mode.syndicates.len) + if(length(SSticker.mode.syndicates)) dat += "
    " for(var/datum/mind/N in SSticker.mode.syndicates) var/mob/M = N.current @@ -413,70 +413,70 @@ dat += "
    Syndicates
    " - if(SSticker.mode.blob_overminds.len) + if(length(SSticker.mode.blob_overminds)) dat += check_role_table("Blob Overminds", SSticker.mode.blob_overminds) dat += "Blob Tiles: [length(GLOB.blobs)]" - if(SSticker.mode.changelings.len) + if(length(SSticker.mode.changelings)) dat += check_role_table("Changelings", SSticker.mode.changelings) - if(SSticker.mode.wizards.len) + if(length(SSticker.mode.wizards)) dat += check_role_table("Wizards", SSticker.mode.wizards) - if(SSticker.mode.apprentices.len) + if(length(SSticker.mode.apprentices)) dat += check_role_table("Apprentices", SSticker.mode.apprentices) - /*if(ticker.mode.ninjas.len) + /*if(length(ticker.mode.ninjas)) dat += check_role_table("Ninjas", ticker.mode.ninjas)*/ if(SSticker.mode.cult_team) dat += check_role_table("Cultists", SSticker.mode.cult_team.members) dat += "View Cult Team & Controls
    " - if(SSticker.mode.traitors.len) + if(length(SSticker.mode.traitors)) dat += check_role_table("Traitors", SSticker.mode.traitors) // SS220 EDIT - START - if(SSticker.mode.blood_brothers.len) + if(length(SSticker.mode.blood_brothers)) dat += check_role_table("Blood Brothers", SSticker.mode.blood_brothers) // SS220 EDIT - END - if(SSticker.mode.implanted.len) + if(length(SSticker.mode.implanted)) dat += check_role_table("Mindslaves", SSticker.mode.implanted) - if(SSticker.mode.abductors.len) + if(length(SSticker.mode.abductors)) dat += check_role_table("Abductors", SSticker.mode.abductors) - if(SSticker.mode.abductees.len) + if(length(SSticker.mode.abductees)) dat += check_role_table("Abductees", SSticker.mode.abductees) - if(SSticker.mode.vampires.len) + if(length(SSticker.mode.vampires)) dat += check_role_table("Vampires", SSticker.mode.vampires) - if(SSticker.mode.vampire_enthralled.len) + if(length(SSticker.mode.vampire_enthralled)) dat += check_role_table("Vampire Thralls", SSticker.mode.vampire_enthralled) - if(SSticker.mode.xenos.len) + if(length(SSticker.mode.xenos)) dat += check_role_table("Xenos", SSticker.mode.xenos) - if(SSticker.mode.superheroes.len) + if(length(SSticker.mode.superheroes)) dat += check_role_table("Superheroes", SSticker.mode.superheroes) - if(SSticker.mode.supervillains.len) + if(length(SSticker.mode.supervillains)) dat += check_role_table("Supervillains", SSticker.mode.supervillains) - if(SSticker.mode.greyshirts.len) + if(length(SSticker.mode.greyshirts)) dat += check_role_table("Greyshirts", SSticker.mode.greyshirts) - if(SSticker.mode.eventmiscs.len) + if(length(SSticker.mode.eventmiscs)) dat += check_role_table("Event Roles", SSticker.mode.eventmiscs) - if(GLOB.ts_spiderlist.len) + if(length(GLOB.ts_spiderlist)) var/list/spider_minds = list() for(var/mob/living/simple_animal/hostile/poison/terror_spider/S in GLOB.ts_spiderlist) if(S.ckey) spider_minds += S.mind - if(spider_minds.len) + if(length(spider_minds)) dat += check_role_table("Terror Spiders", spider_minds) var/count_eggs = 0 @@ -491,7 +491,7 @@ count_infected = length(GLOB.ts_infected_list) dat += "
    Growing TS on-station: [count_eggs] egg\s, [count_spiderlings] spiderling\s, [count_infected] infected
    " - if(SSticker.mode.ert.len) + if(length(SSticker.mode.ert)) dat += check_role_table("ERT", SSticker.mode.ert) //list active security force count, so admins know how bad things are diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index 5e550c8586ca..90a979611ba4 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -1,6 +1,3 @@ -/datum/admins - var/current_tab =0 - /datum/admins/proc/Secrets() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 26ea18914701..2f89291bc385 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -269,7 +269,7 @@ else if(task == "rank") var/new_rank - if(GLOB.admin_ranks.len) + if(length(GLOB.admin_ranks)) new_rank = input("Please select a rank", "New rank", null, null) as null|anything in (GLOB.admin_ranks|"*New Rank*") else new_rank = input("Please select a rank", "New rank", null, null) as null|anything in list("Mentor", "Trial Admin", "Game Admin", "*New Rank*") @@ -287,7 +287,7 @@ to_chat(usr, "Error: Topic 'editrights': Invalid rank") return if(!GLOB.configuration.admin.use_database_admins) - if(GLOB.admin_ranks.len) + if(length(GLOB.admin_ranks)) if(new_rank in GLOB.admin_ranks) rights = GLOB.admin_ranks[new_rank] //we typed a rank which already exists, use its rights else @@ -757,7 +757,7 @@ notbannedlist += job //Banning comes first - if(notbannedlist.len) //at least 1 unbanned job exists in joblist so we have stuff to ban. + if(length(notbannedlist)) //at least 1 unbanned job exists in joblist so we have stuff to ban. switch(alert("Temporary Ban of [M.ckey]?", null,"Yes","No", "Cancel")) if("Yes") var/mins = input(usr,"How long (in minutes)?","Ban time",1440) as num|null @@ -1991,7 +1991,7 @@ return var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Play as the special event pet [H]?", poll_time = 20 SECONDS, min_hours = 10, source = petchoice) var/mob/dead/observer/theghost = null - if(candidates.len) + if(length(candidates)) var/mob/living/simple_animal/pet/P = new petchoice(H.loc) theghost = pick(candidates) P.key = theghost.key @@ -2148,7 +2148,7 @@ if(player.current) if(ismindshielded(player.current)) possible_traitors -= player - if(possible_traitors.len) + if(length(possible_traitors)) var/datum/mind/newtraitormind = pick(possible_traitors) var/datum/objective/assassinate/kill_objective = new() @@ -2678,9 +2678,9 @@ var/list/offset = splittext(href_list["offset"],",") var/number = dd_range(1, 100, text2num(href_list["object_count"])) - var/X = offset.len > 0 ? text2num(offset[1]) : 0 - var/Y = offset.len > 1 ? text2num(offset[2]) : 0 - var/Z = offset.len > 2 ? text2num(offset[3]) : 0 + var/X = length(offset) > 0 ? text2num(offset[1]) : 0 + var/Y = length(offset) > 1 ? text2num(offset[2]) : 0 + var/Z = length(offset) > 2 ? text2num(offset[3]) : 0 var/tmp_dir = href_list["object_dir"] var/obj_dir = tmp_dir ? text2num(tmp_dir) : 2 if(!obj_dir || !(obj_dir in list(1,2,4,8,5,6,9,10))) @@ -3276,7 +3276,7 @@ var/dat = "Admin Log
    " for(var/l in GLOB.admin_log) dat += "
  • [l]
  • " - if(!GLOB.admin_log.len) + if(!length(GLOB.admin_log)) dat += "No-one has done anything this round!" usr << browse(dat, "window=admin_log") if("maint_ACCESS_BRIG") @@ -3520,7 +3520,7 @@ message_admins("[key_name_admin(mob)] is sending a ([dresscode]) to [killthem ? "assassinate" : "protect"] [key_name_admin(H)]...") var/image/source = image('icons/obj/cardboard_cutout.dmi', "cutout_traitor") var/list/candidates = SSghost_spawns.poll_candidates("Play as a [killthem ? "murderous" : "protective"] [dresscode]?", ROLE_TRAITOR, TRUE, source = source, role_cleanname = "[killthem ? "murderous" : "protective"] [dresscode]") - if(!candidates.len) + if(!length(candidates)) to_chat(usr, "ERROR: Could not create eventmob. No valid candidates.") return var/mob/C = pick(candidates) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 204385167c73..cddac52cea9c 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -32,12 +32,12 @@ var/list/query_list = SDQL2_tokenize(query_text) - if(!query_list || query_list.len < 1) + if(!query_list || length(query_list) < 1) return var/list/querys = SDQL_parse(query_list) - if(!querys || querys.len < 1) + if(!querys || length(querys) < 1) return var/query_log = "executed SDQL query: \"[query_text]\"." @@ -129,7 +129,7 @@ var/datum/temp = d var/i = 0 for(var/v in sets) - if(++i == sets.len) + if(++i == length(sets)) if(isturf(temp) && (v == "x" || v == "y" || v == "z")) continue if(!temp.vv_edit_var(v, SDQL_expression(d, set_list[sets]))) @@ -156,7 +156,7 @@ for(var/val in query_list) if(val == ";") do_parse = 1 - else if(pos >= query_list.len) + else if(pos >= length(query_list)) query_tree += val do_parse = 1 @@ -164,7 +164,7 @@ parser.query = query_tree var/list/parsed_tree parsed_tree = parser.parse() - if(parsed_tree.len > 0) + if(length(parsed_tree) > 0) querys.len = querys_pos querys[querys_pos] = parsed_tree querys_pos++ @@ -282,7 +282,7 @@ var/result = 0 var/val - for(var/i = start, i <= expression.len, i++) + for(var/i = start, i <= length(expression), i++) var/op = "" if(i > start) @@ -337,7 +337,7 @@ var/i = start var/val = null - if(i > expression.len) + if(i > length(expression)) return list("val" = null, "i" = i) if(istype(expression[i], /list)) @@ -375,14 +375,14 @@ else val = SDQL_var(object, expression, i, object) - i = expression.len + i = length(expression) return list("val" = val, "i" = i) /proc/SDQL_var(datum/object, list/expression, start = 1, source) var/v - var/long = start < expression.len + var/long = start < length(expression) if(object == world && long && expression[start + 1] == ".") to_chat(usr, "Sorry, but global variables are not supported at the moment.") @@ -431,7 +431,7 @@ else if(expression[start + 1] == "\[" && islist(v)) var/list/L = v var/index = SDQL_expression(source, expression[start + 2]) - if(isnum(index) && (!ISINTEGER(index) || L.len < index)) + if(isnum(index) && (!ISINTEGER(index) || length(L) < index)) to_chat(world, "Invalid list index: [index]") return null return L[index] diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm index 983346493157..e9378b629322 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm @@ -61,7 +61,7 @@ /datum/SDQL_parser/proc/parse_error(error_message) error = 1 to_chat(usr, "SDQL2 Parsing Error: [error_message]") - return query.len + 1 + return length(query) + 1 /datum/SDQL_parser/proc/parse() tree = list() @@ -73,14 +73,14 @@ return tree /datum/SDQL_parser/proc/token(i) - if(i <= query.len) + if(i <= length(query)) return query[i] else return null /datum/SDQL_parser/proc/tokens(i, num) - if(i + num <= query.len) + if(i + num <= length(query)) return query.Copy(i, i + num) else diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index c55322a17c1a..852168cb2853 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -78,7 +78,7 @@ adminhelp(msg) //admin we are replying to left. adminhelp instead return - /*if(C && C.last_pm_recieved + config.simultaneous_pm_warning_timeout > world.time && holder) + /*if(C && C.last_pm_received + config.simultaneous_pm_warning_timeout > world.time && holder) //send a warning to admins, but have a delay popup for mods if(holder.rights & R_ADMIN) to_chat(src, "Simultaneous PMs warning: that player has been PM'd in the last [config.simultaneous_pm_warning_timeout / 10] seconds by: [C.ckey_last_pm]") @@ -113,21 +113,21 @@ msg = admin_pencode_to_html(msg) var/send_span - var/recieve_span + var/receive_span var/send_pm_type = " " - var/recieve_pm_type = "Player" + var/receive_pm_type = "Player" var/message_type var/datum/controller/subsystem/tickets/tickets_system // We treat PMs as mentorhelps if we were explicitly so, or if neither // party is an admin. if(type == "Mentorhelp" || !(check_rights(R_ADMIN|R_MOD, 0, C.mob) || check_rights(R_ADMIN|R_MOD, 0, mob))) send_span = "mentorhelp" - recieve_span = "mentorhelp" + receive_span = "mentorhelp" message_type = MESSAGE_TYPE_MENTORPM tickets_system = SSmentor_tickets else send_span = "adminhelp" - recieve_span = "adminhelp" + receive_span = "adminhelp" message_type = MESSAGE_TYPE_ADMINPM tickets_system = SStickets @@ -135,22 +135,22 @@ if(holder) //PMs sent from admins and mods display their rank send_pm_type = holder.rank + " " - recieve_pm_type = holder.rank + receive_pm_type = holder.rank else if(!C.holder) to_chat(src, "Error: Admin-PM: Non-admin to non-admin PM communication is forbidden.") return - var/recieve_message = "" + var/receive_message = "" pm_tracker.add_message(C, src, msg, mob) C.pm_tracker.add_message(src, src, msg, C.mob) if(holder && !C.holder) - recieve_message = "-- Click the [recieve_pm_type]'s name to reply --\n" + receive_message = "-- Click the [receive_pm_type]'s name to reply --\n" if(C.adminhelped) window_flash(C) - to_chat(C, recieve_message) + to_chat(C, receive_message) C.adminhelped = 0 //AdminPM popup for ApocStation and anybody else who wants to use it. Set it with POPUP_ADMIN_PM in config.txt ~Carn @@ -158,7 +158,7 @@ spawn(0) //so we don't hold the caller proc up var/sender = src var/sendername = key - var/reply = clean_input(msg,"[recieve_pm_type] [type] from-[sendername]", "", C) //show message and await a reply + var/reply = clean_input(msg,"[receive_pm_type] [type] from-[sendername]", "", C) //show message and await a reply if(C && reply) if(sender) C.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them @@ -176,28 +176,29 @@ ticket_link = "(TICKET)" var/emoji_msg = "[msg]" - var/recieve_window_link = "(WINDOW)" + var/receive_window_link = "(WINDOW)" if(message_type == MESSAGE_TYPE_MENTORPM && check_rights(R_ADMIN|R_MENTOR, 0, C.mob)) - recieve_window_link = ticket_link + receive_window_link = ticket_link else if(message_type == MESSAGE_TYPE_ADMINPM && check_rights(R_ADMIN, 0, C.mob)) - recieve_window_link = ticket_link - recieve_message = "[type] from-[recieve_pm_type] [C.holder ? key_name(src, TRUE, type, ticket_id = ticket_id) : key_name_hidden(src, TRUE, type, ticket_id = ticket_id)]:

    [emoji_msg][C.holder ? "
    [ping_link] [recieve_window_link] [alert_link]" : ""]
    " + receive_window_link = ticket_link + receive_message = "[type] from-[receive_pm_type] [C.holder ? key_name(src, TRUE, type, ticket_id = ticket_id) : key_name_hidden(src, TRUE, type, ticket_id = ticket_id)]:

    [emoji_msg][C.holder ? "
    [ping_link] [receive_window_link] [alert_link]" : ""]
    " if(message_type == MESSAGE_TYPE_MENTORPM) - recieve_message = chat_box_mhelp(recieve_message) + receive_message = chat_box_mhelp(receive_message) else - recieve_message = chat_box_ahelp(recieve_message) - to_chat(C, recieve_message) - var/send_window_link = "(WINDOW)" - if(message_type == MESSAGE_TYPE_MENTORPM && check_rights(R_ADMIN|R_MENTOR, 0, mob)) - send_window_link = ticket_link - else if(message_type == MESSAGE_TYPE_ADMINPM && check_rights(R_ADMIN, 0, mob)) - send_window_link = ticket_link - var/send_message = "[send_pm_type][type] to-[holder ? key_name(C, TRUE, type, ticket_id = ticket_id) : key_name_hidden(C, TRUE, type, ticket_id = ticket_id)]:

    [emoji_msg]

    [ping_link] [send_window_link] [alert_link]" - if(message_type == MESSAGE_TYPE_MENTORPM) - send_message = chat_box_mhelp(send_message) - else - send_message = chat_box_ahelp(send_message) - to_chat(src, send_message) + receive_message = chat_box_ahelp(receive_message) + to_chat(C, receive_message) + if(C != src) + var/send_window_link = "(WINDOW)" + if(message_type == MESSAGE_TYPE_MENTORPM && check_rights(R_ADMIN|R_MENTOR, 0, mob)) + send_window_link = ticket_link + else if(message_type == MESSAGE_TYPE_ADMINPM && check_rights(R_ADMIN, 0, mob)) + send_window_link = ticket_link + var/send_message = "[send_pm_type][type] to-[holder ? key_name(C, TRUE, type, ticket_id = ticket_id) : key_name_hidden(C, TRUE, type, ticket_id = ticket_id)]:

    [emoji_msg]

    [ping_link] [send_window_link] [alert_link]" + if(message_type == MESSAGE_TYPE_MENTORPM) + send_message = chat_box_mhelp(send_message) + else + send_message = chat_box_ahelp(send_message) + to_chat(src, send_message) var/third_party_message if(message_type == MESSAGE_TYPE_MENTORPM) diff --git a/code/modules/admin/verbs/atmosdebug.dm b/code/modules/admin/verbs/atmosdebug.dm index 96661c16e5d5..df327f41329d 100644 --- a/code/modules/admin/verbs/atmosdebug.dm +++ b/code/modules/admin/verbs/atmosdebug.dm @@ -47,12 +47,12 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Check Power") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! for(var/datum/regional_powernet/PN in SSmachines.powernets) - if(!PN.nodes || !PN.nodes.len) - if(PN.cables && (PN.cables.len > 1)) + if(!PN.nodes || !length(PN.nodes)) + if(PN.cables && (length(PN.cables) > 1)) var/obj/structure/cable/C = PN.cables[1] to_chat(usr, "Powernet with no nodes! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]") - if(!PN.cables || (PN.cables.len < 10)) - if(PN.cables && (PN.cables.len > 1)) + if(!PN.cables || (length(PN.cables) < 10)) + if(PN.cables && (length(PN.cables) > 1)) var/obj/structure/cable/C = PN.cables[1] to_chat(usr, "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [C.x], [C.y], [C.z] in area [get_area(C.loc)]") diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 85cdf1ffc3e6..47529556d961 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -64,13 +64,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that if(!target) to_chat(usr, "Error: callproc(): owner of proc no longer exists.") return - message_admins("[key_name_admin(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") - log_admin("[key_name(src)] called [target]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"].") + message_admins("[key_name_admin(src)] called [target]'s [procname]() with [length(lst) ? "the arguments [list2params(lst)]":"no arguments"].") + log_admin("[key_name(src)] called [target]'s [procname]() with [length(lst) ? "the arguments [list2params(lst)]":"no arguments"].") returnval = WrapAdminProcCall(target, procname, lst) // Pass the lst as an argument list to the proc else //this currently has no hascall protection. wasn't able to get it working. - message_admins("[key_name_admin(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]") - log_admin("[key_name(src)] called [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]") + message_admins("[key_name_admin(src)] called [procname]() with [length(lst) ? "the arguments [list2params(lst)]":"no arguments"]") + log_admin("[key_name(src)] called [procname]() with [length(lst) ? "the arguments [list2params(lst)]":"no arguments"]") returnval = WrapAdminProcCall(GLOBAL_PROC, procname, lst) // Pass the lst as an argument list to the proc to_chat(usr, "[procname] returned: [!isnull(returnval) ? returnval : "null"]") @@ -173,8 +173,8 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) if(!A || !IsValidSrc(A)) to_chat(src, "Error: callproc_datum(): owner of proc no longer exists.") return - message_admins("[key_name_admin(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]") - log_admin("[key_name(src)] called [A]'s [procname]() with [lst.len ? "the arguments [list2params(lst)]":"no arguments"]") + message_admins("[key_name_admin(src)] called [A]'s [procname]() with [length(lst) ? "the arguments [list2params(lst)]":"no arguments"]") + log_admin("[key_name(src)] called [A]'s [procname]() with [length(lst) ? "the arguments [list2params(lst)]":"no arguments"]") spawn() var/returnval = WrapAdminProcCall(A, procname, lst) // Pass the lst as an argument list to the proc @@ -800,6 +800,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) if(I.hard_deletes) dellog += "
  • Total Hard Deletes [I.hard_deletes]
  • " dellog += "
  • Time Spent Hard Deleting: [I.hard_delete_time]ms
  • " + dellog += "
  • Average References During Hardel: [I.reference_average] references.
  • " if(I.slept_destroy) dellog += "
  • Sleeps: [I.slept_destroy]
  • " if(I.no_respect_force) @@ -988,3 +989,24 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) vis.set_content(ui_dat.Join("")) vis.open(FALSE) + +/client/proc/cmd_clean_radiation() + set name = "Remove All Radiation" + set desc = "Remove all radiation in the world." + set category = "Debug" + + if(!check_rights(R_DEBUG)) + return + + if(alert(src, "Are you sure you want to remove all radiation in the world? This may lag the server. Alternatively, use the radiation cleaning buildmode.", "Lag warning", "Yes, I'm sure", "No, I want to live") != "Yes, I'm sure") + return + + log_and_message_admins("is decontaminating the world of all radiation. (This may be laggy!)") + + var/counter = 0 + for(var/datum/component/radioactive/rad as anything in SSradiation.all_radiations) + rad.admin_decontaminate() + counter++ + CHECK_TICK + + log_and_message_admins_no_usr("The world has been decontaminated of [counter] radiation components.") diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm index af538663c44b..3d672ab6ef3d 100644 --- a/code/modules/admin/verbs/diagnostics.dm +++ b/code/modules/admin/verbs/diagnostics.dm @@ -92,7 +92,7 @@ if(!f) output += "  [filters[filter]]: ERROR
    " continue - output += "  [filters[filter]]: [f.len]
    " + output += "  [filters[filter]]: [length(f)]
    " for(var/device in f) if(isobj(device)) output += "    [device] ([device:x],[device:y],[device:z] in area [get_area(device:loc)])
    " diff --git a/code/modules/admin/verbs/freeze.dm b/code/modules/admin/verbs/freeze.dm index 00f683071363..988c2df44b21 100644 --- a/code/modules/admin/verbs/freeze.dm +++ b/code/modules/admin/verbs/freeze.dm @@ -93,12 +93,12 @@ GLOBAL_LIST_EMPTY(frozen_atom_list) // A list of admin-frozen atoms. /obj/machinery/atmospherics/supermatter_crystal/admin_Freeze(client/admin) var/obj/effect/overlay/adminoverlay/freeze_overlay = new if(processes) - radio.autosay("Alert: Unknown intervention has frozen causality around the crystal. It is not progressing in local timespace.", name, "Engineering", list(z)) + radio.autosay("Alert: Unknown intervention has frozen causality around the crystal. It is not progressing in local timespace.", name, "Engineering") GLOB.frozen_atom_list += src processes = FALSE add_overlay(freeze_overlay) else - radio.autosay("Alert: Unknown intervention has ceased around the crystal. It has returned to the regular flow of time.", name, "Engineering", list(z)) + radio.autosay("Alert: Unknown intervention has ceased around the crystal. It has returned to the regular flow of time.", name, "Engineering") GLOB.frozen_atom_list -= src processes = TRUE cut_overlay(freeze_overlay) diff --git a/code/modules/admin/verbs/gimmick_team.dm b/code/modules/admin/verbs/gimmick_team.dm index 9674436e3df8..c0de0a8686a8 100644 --- a/code/modules/admin/verbs/gimmick_team.dm +++ b/code/modules/admin/verbs/gimmick_team.dm @@ -47,7 +47,7 @@ if(!G.client.is_afk()) if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) possible_ghosts += G - for(var/i=teamsize,(i>0&&possible_ghosts.len),i--) //Decrease with every member selected. + for(var/i=teamsize,(i>0&&length(possible_ghosts)),i--) //Decrease with every member selected. var/candidate = input("Pick characters to spawn. This will go on until there either no more ghosts to pick from, or the slots are full.", "Active Players") as null|anything in possible_ghosts // auto-picks if only one candidate possible_ghosts -= candidate players_to_spawn += candidate @@ -55,7 +55,7 @@ to_chat(src, "Polling candidates...") players_to_spawn = SSghost_spawns.poll_candidates("Do you want to play as \a [initial(O.name)]?") - if(!players_to_spawn.len) + if(!length(players_to_spawn)) to_chat(src, "Nobody volunteered.") return 0 diff --git a/code/modules/admin/verbs/infiltratorteam_syndicate.dm b/code/modules/admin/verbs/infiltratorteam_syndicate.dm index a8c21cda320a..e0d12efd6d22 100644 --- a/code/modules/admin/verbs/infiltratorteam_syndicate.dm +++ b/code/modules/admin/verbs/infiltratorteam_syndicate.dm @@ -49,7 +49,7 @@ GLOBAL_VAR_INIT(sent_syndicate_infiltration_team, 0) if(!G.client.is_afk()) if(!(G.mind && G.mind.current && G.mind.current.stat != DEAD)) possible_ghosts += G - for(var/i=teamsize,(i>0&&possible_ghosts.len),i--) //Decrease with every SIT member selected. + for(var/i=teamsize,(i>0&&length(possible_ghosts)),i--) //Decrease with every SIT member selected. var/candidate = input("Pick characters to spawn as a SIT member. This will go on until there either no more ghosts to pick from, or the slots are full.", "Active Players") as null|anything in possible_ghosts // auto-picks if only one candidate possible_ghosts -= candidate infiltrators += candidate @@ -58,7 +58,7 @@ GLOBAL_VAR_INIT(sent_syndicate_infiltration_team, 0) var/image/I = new('icons/obj/cardboard_cutout.dmi', "cutout_sit") infiltrators = SSghost_spawns.poll_candidates("Do you want to play as a Syndicate infiltrator?", ROLE_TRAITOR, TRUE, source = I, role_cleanname = "Syndicate infiltrator") - if(!infiltrators.len) + if(!length(infiltrators)) to_chat(src, "Nobody volunteered.") return 0 @@ -76,10 +76,10 @@ GLOBAL_VAR_INIT(sent_syndicate_infiltration_team, 0) var/num_spawned = 1 var/team_leader = null for(var/obj/effect/landmark/L in sit_spawns) - if(!infiltrators.len && !spawn_dummies) break + if(!length(infiltrators) && !spawn_dummies) break syndicate_leader_selected = num_spawned == 1?1:0 var/mob/living/carbon/human/new_syndicate_infiltrator = create_syndicate_infiltrator(L, syndicate_leader_selected, tcamount, 0) - if(infiltrators.len) + if(length(infiltrators)) var/mob/theguy = pick(infiltrators) if(theguy.key != key) new_syndicate_infiltrator.key = theguy.key diff --git a/code/modules/admin/verbs/logging_view.dm b/code/modules/admin/verbs/logging_view.dm index 636378df1abb..89bfc79ad43b 100644 --- a/code/modules/admin/verbs/logging_view.dm +++ b/code/modules/admin/verbs/logging_view.dm @@ -14,7 +14,7 @@ GLOBAL_LIST_EMPTY(open_logging_views) else if(clear_view) cur_view.clear_all() - if(mobs_to_add?.len) + if(length(mobs_to_add)) cur_view.add_mobs(mobs_to_add) cur_view.show_ui(usr) diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm index 38cf541e0015..f953d1b3c1ee 100644 --- a/code/modules/admin/verbs/massmodvar.dm +++ b/code/modules/admin/verbs/massmodvar.dm @@ -111,7 +111,7 @@ if(VV_RESTORE_DEFAULT) to_chat(src, "Finding items...") var/list/items = get_all_of_type(O.type, method) - to_chat(src, "Changing [items.len] items...") + to_chat(src, "Changing [length(items)] items...") for(var/thing in items) if(!thing) continue @@ -126,7 +126,7 @@ var/list/varsvars = vv_parse_text(O, new_value) var/pre_processing = new_value var/unique - if(varsvars && varsvars.len) + if(varsvars && length(varsvars)) unique = alert(usr, "Process vars unique to each instance, or same for all?", "Variable Association", "Unique", "Same") if(unique == "Unique") unique = TRUE @@ -137,7 +137,7 @@ to_chat(src, "Finding items...") var/list/items = get_all_of_type(O.type, method) - to_chat(src, "Changing [items.len] items...") + to_chat(src, "Changing [length(items)] items...") for(var/thing in items) if(!thing) continue @@ -165,7 +165,7 @@ var/type = value["type"] to_chat(src, "Finding items...") var/list/items = get_all_of_type(O.type, method) - to_chat(src, "Changing [items.len] items...") + to_chat(src, "Changing [length(items)] items...") for(var/thing in items) if(!thing) continue @@ -183,7 +183,7 @@ else to_chat(src, "Finding items...") var/list/items = get_all_of_type(O.type, method) - to_chat(src, "Changing [items.len] items...") + to_chat(src, "Changing [length(items)] items...") for(var/thing in items) if(!thing) continue diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 51b5cdae3104..0597f2dbf86d 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -282,9 +282,9 @@ GLOBAL_PROTECT(VVmaint_only) if(!ispath(type)) return var/list/subtypes = subtypesof(type) - if(!subtypes || !subtypes.len) + if(!subtypes || !length(subtypes)) return FALSE - if(subtypes && subtypes.len) + if(subtypes && length(subtypes)) switch(alert("Strict object type detection?", "Type detection", "Strictly this type","This type and subtypes", "Cancel")) if("Strictly this type") return FALSE @@ -374,7 +374,7 @@ GLOBAL_PROTECT(VVmaint_only) to_chat(src, "Not a List.") return - if(L.len > 1000) + if(length(L) > 1000) var/confirm = alert(src, "The list you're trying to edit is very long, continuing may crash the server.", "Warning", "Continue", "Abort") if(confirm != "Continue") return @@ -382,7 +382,7 @@ GLOBAL_PROTECT(VVmaint_only) var/list/names = list() - for(var/i in 1 to L.len) + for(var/i in 1 to length(L)) var/key = L[i] var/value if(IS_NORMAL_LIST(L) && !isnum(key)) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 72f5de0b056e..6654de33853a 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -60,8 +60,8 @@ if(CandCheck(ROLE_TRAITOR, applicant, temp)) candidates += applicant - if(candidates.len) - var/numTraitors = min(candidates.len, antnum) + if(length(candidates)) + var/numTraitors = min(length(candidates), antnum) for(var/i = 0, iError: create_xeno(): no suitable candidates.") if(!istext(ckey)) return 0 var/alien_caste = input(usr, "Please choose which caste to spawn.","Pick a caste",null) as null|anything in list("Queen","Hunter","Sentinel","Drone","Larva") - var/obj/effect/landmark/spawn_here = GLOB.xeno_spawn.len ? pick(GLOB.xeno_spawn) : pick(GLOB.latejoin) + var/obj/effect/landmark/spawn_here = length(GLOB.xeno_spawn) ? pick(GLOB.xeno_spawn) : pick(GLOB.latejoin) var/mob/living/carbon/alien/new_xeno switch(alien_caste) if("Queen") new_xeno = new /mob/living/carbon/alien/humanoid/queen/large(spawn_here) diff --git a/code/modules/admin/verbs/toggledebugverbs.dm b/code/modules/admin/verbs/toggledebugverbs.dm index 74d8358640cb..120a69b924b7 100644 --- a/code/modules/admin/verbs/toggledebugverbs.dm +++ b/code/modules/admin/verbs/toggledebugverbs.dm @@ -16,6 +16,7 @@ GLOBAL_LIST_INIT(admin_verbs_show_debug_verbs, list( /client/proc/forceEvent, /client/proc/admin_redo_space_transitions, /client/proc/make_turf_space_map, + /client/proc/cmd_clean_radiation, )) // Would be nice to make this a permanent admin pref so we don't need to click it each time diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index bd83d5d72643..746da7561072 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -1,3 +1,5 @@ +RESTRICT_TYPE(/datum/antagonist) + GLOBAL_LIST_EMPTY(antagonists) #define SUCCESSFUL_DETACH "dont touch this string numbnuts" @@ -318,7 +320,7 @@ GLOBAL_LIST_EMPTY(antagonists) owner.special_role = A.special_role /** - * Checks if the person trying to recieve this datum is role banned from it. + * Checks if the person trying to receive this datum is role banned from it. */ /datum/antagonist/proc/is_banned(mob/M) if(!M) diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index b28f460e4f5e..588064b21bd7 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -203,7 +203,7 @@ type = "laughter" var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a [type] demon summoned by [user.real_name]?", ROLE_DEMON, TRUE, 10 SECONDS, source = demon_type) - if(candidates.len > 0) + if(length(candidates) > 0) var/mob/C = pick(candidates) spawn_antag(C, get_turf(src.loc), initial(demon_type.name), user) dust_if_respawnable(C) @@ -292,7 +292,7 @@ var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a magical morph awakened by [user.real_name]?", ROLE_MORPH, 1, 10 SECONDS, source = morph_type) - if(candidates.len > 0) + if(length(candidates) > 0) var/mob/C = pick(candidates) spawn_antag(C, get_turf(src.loc), initial(morph_type.name), user) dust_if_respawnable(C) diff --git a/code/modules/antagonists/changeling/datum_changeling.dm b/code/modules/antagonists/changeling/datum_changeling.dm index edf430caee9f..5822374b983f 100644 --- a/code/modules/antagonists/changeling/datum_changeling.dm +++ b/code/modules/antagonists/changeling/datum_changeling.dm @@ -1,3 +1,5 @@ +RESTRICT_TYPE(/datum/antagonist/changeling) + /datum/antagonist/changeling name = "Changeling" roundend_category = "changelings" @@ -440,8 +442,5 @@ else to_chat(L, "While our current form may be lifeless, this is not the end for us as we can still regenerate!") -/proc/ischangeling(mob/M) - return M.mind?.has_antag_datum(/datum/antagonist/changeling) - /datum/antagonist/changeling/custom_blurb() return "We awaken on the [station_name()], [get_area_name(owner.current, TRUE)]...\nWe have our tasks to attend to..." diff --git a/code/modules/antagonists/changeling/powers/absorb.dm b/code/modules/antagonists/changeling/powers/absorb.dm index 1674c5729cfa..a7115d0e9293 100644 --- a/code/modules/antagonists/changeling/powers/absorb.dm +++ b/code/modules/antagonists/changeling/powers/absorb.dm @@ -64,8 +64,8 @@ //Recent as opposed to all because rounds tend to have a LOT of text. var/list/recent_speech = list() - if(target.say_log.len > CHANGELING_ABSORB_RECENT_SPEECH) - recent_speech = target.say_log.Copy(target.say_log.len-CHANGELING_ABSORB_RECENT_SPEECH+1,0) //0 so len-LING_ARS+1 to end of list + if(length(target.say_log) > CHANGELING_ABSORB_RECENT_SPEECH) + recent_speech = target.say_log.Copy(length(target.say_log)-CHANGELING_ABSORB_RECENT_SPEECH+1,0) //0 so len-LING_ARS+1 to end of list else recent_speech = target.say_log.Copy() diff --git a/code/modules/antagonists/cult/datum_cultist.dm b/code/modules/antagonists/cult/datum_cultist.dm index 41f3e898ea00..105b66256bea 100644 --- a/code/modules/antagonists/cult/datum_cultist.dm +++ b/code/modules/antagonists/cult/datum_cultist.dm @@ -1,3 +1,5 @@ +RESTRICT_TYPE(/datum/antagonist/cultist) + /datum/antagonist/cultist name = "Cultist" job_rank = ROLE_CULTIST diff --git a/code/modules/antagonists/cult/team_cult.dm b/code/modules/antagonists/cult/team_cult.dm index fcc26a00dc02..f6c31962fee1 100644 --- a/code/modules/antagonists/cult/team_cult.dm +++ b/code/modules/antagonists/cult/team_cult.dm @@ -1,3 +1,5 @@ +RESTRICT_TYPE(/datum/team/cult) + /datum/team/cult name = "Cult" antag_datum_type = /datum/antagonist/cultist diff --git a/code/modules/antagonists/revolutionary/datum_headrev.dm b/code/modules/antagonists/revolutionary/datum_headrev.dm index 5f98e11c7b44..1f229266badf 100644 --- a/code/modules/antagonists/revolutionary/datum_headrev.dm +++ b/code/modules/antagonists/revolutionary/datum_headrev.dm @@ -1,3 +1,4 @@ +RESTRICT_TYPE(/datum/antagonist/rev/head) /datum/antagonist/rev/head name = "Head Revolutionary" diff --git a/code/modules/antagonists/revolutionary/datum_revolutionary.dm b/code/modules/antagonists/revolutionary/datum_revolutionary.dm index 9f9ffd95e0f3..920d56483fda 100644 --- a/code/modules/antagonists/revolutionary/datum_revolutionary.dm +++ b/code/modules/antagonists/revolutionary/datum_revolutionary.dm @@ -1,3 +1,5 @@ +RESTRICT_TYPE(/datum/antagonist/rev) + /datum/antagonist/rev name = "Revolutionary" roundend_category = "revs" diff --git a/code/modules/antagonists/revolutionary/team_revolution.dm b/code/modules/antagonists/revolutionary/team_revolution.dm index 87a9bb3deb1e..989654a598b1 100644 --- a/code/modules/antagonists/revolutionary/team_revolution.dm +++ b/code/modules/antagonists/revolutionary/team_revolution.dm @@ -1,3 +1,5 @@ +RESTRICT_TYPE(/datum/team/revolution) + /datum/team/revolution name = "Revolution" antag_datum_type = /datum/antagonist/rev diff --git a/code/modules/antagonists/traitor/datum_mindslave.dm b/code/modules/antagonists/traitor/datum_mindslave.dm index e511df1ad0bd..fde537bd8afd 100644 --- a/code/modules/antagonists/traitor/datum_mindslave.dm +++ b/code/modules/antagonists/traitor/datum_mindslave.dm @@ -1,3 +1,4 @@ +RESTRICT_TYPE(/datum/antagonist/mindslave) // For Mindslaves and Zealots /datum/antagonist/mindslave @@ -87,7 +88,3 @@ slaved.serv -= owner slaved.leave_serv_hud(owner) owner.som = null - -// Helper proc that determines if a mob is a mindslave. -/proc/ismindslave(mob/living/carbon/human/H) - return istype(H) && H.mind.has_antag_datum(/datum/antagonist/mindslave, FALSE) diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index 37135db80216..e3f5d7eb2b82 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -1,3 +1,4 @@ +RESTRICT_TYPE(/datum/antagonist/traitor) // Syndicate Traitors. /datum/antagonist/traitor diff --git a/code/modules/antagonists/vampire/vamp_datum.dm b/code/modules/antagonists/vampire/vamp_datum.dm index 7ad89d6ef865..251c758c6dc4 100644 --- a/code/modules/antagonists/vampire/vamp_datum.dm +++ b/code/modules/antagonists/vampire/vamp_datum.dm @@ -1,3 +1,5 @@ +RESTRICT_TYPE(/datum/antagonist/vampire) + /datum/antagonist/vampire name = "Vampire" antag_hud_type = ANTAG_HUD_VAMPIRE @@ -33,27 +35,6 @@ blurb_b = 138 blurb_a = 1 -/datum/antagonist/mindslave/thrall - name = "Vampire Thrall" - antag_hud_type = ANTAG_HUD_VAMPIRE - antag_hud_name = "vampthrall" - -/datum/antagonist/mindslave/thrall/add_owner_to_gamemode() - SSticker.mode.vampire_enthralled += owner - -/datum/antagonist/mindslave/thrall/remove_owner_from_gamemode() - SSticker.mode.vampire_enthralled -= owner - -/datum/antagonist/mindslave/thrall/apply_innate_effects(mob/living/mob_override) - mob_override = ..() - var/datum/mind/M = mob_override.mind - M.AddSpell(new /datum/spell/vampire/thrall_commune) - -/datum/antagonist/mindslave/thrall/remove_innate_effects(mob/living/mob_override) - mob_override = ..() - var/datum/mind/M = mob_override.mind - M.RemoveSpell(/datum/spell/vampire/thrall_commune) - /datum/antagonist/vampire/Destroy(force, ...) owner.current.create_log(CONVERSION_LOG, "De-vampired") draining = null @@ -361,9 +342,7 @@ mob_override.dna?.species.hunger_icon = 'icons/mob/screen_hunger_vampire.dmi' check_vampire_upgrade(FALSE) -/datum/hud/proc/remove_vampire_hud() - static_inventory -= vampire_blood_display - QDEL_NULL(vampire_blood_display) + /datum/antagonist/vampire/custom_blurb() return "On the date [GLOB.current_date_string], at [station_time_timestamp()],\n in the [station_name()], [get_area_name(owner.current, TRUE)]...\nThe hunt begins again..." diff --git a/code/modules/antagonists/vampire/vamp_thrall.dm b/code/modules/antagonists/vampire/vamp_thrall.dm new file mode 100644 index 000000000000..112e95173325 --- /dev/null +++ b/code/modules/antagonists/vampire/vamp_thrall.dm @@ -0,0 +1,22 @@ +RESTRICT_TYPE(/datum/antagonist/mindslave/thrall) + +/datum/antagonist/mindslave/thrall + name = "Vampire Thrall" + antag_hud_type = ANTAG_HUD_VAMPIRE + antag_hud_name = "vampthrall" + +/datum/antagonist/mindslave/thrall/add_owner_to_gamemode() + SSticker.mode.vampire_enthralled += owner + +/datum/antagonist/mindslave/thrall/remove_owner_from_gamemode() + SSticker.mode.vampire_enthralled -= owner + +/datum/antagonist/mindslave/thrall/apply_innate_effects(mob/living/mob_override) + mob_override = ..() + var/datum/mind/M = mob_override.mind + M.AddSpell(new /datum/spell/vampire/thrall_commune) + +/datum/antagonist/mindslave/thrall/remove_innate_effects(mob/living/mob_override) + mob_override = ..() + var/datum/mind/M = mob_override.mind + M.RemoveSpell(/datum/spell/vampire/thrall_commune) diff --git a/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm b/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm index ee34ccebd815..d69d28fe36aa 100644 --- a/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm +++ b/code/modules/antagonists/vampire/vampire_powers/gargantua_powers.dm @@ -259,6 +259,7 @@ user.apply_status_effect(STATUS_EFFECT_VAMPIRE_GLADIATOR) spell_active = TRUE timer = addtimer(CALLBACK(src, PROC_REF(dispel), user, TRUE), 30 SECONDS, TIMER_STOPPABLE) + INVOKE_ASYNC(src, PROC_REF(arena_trap), get_turf(target)) //Gets another arena trap queued up for when this one runs out. RegisterSignal(user, COMSIG_PARENT_QDELETING, PROC_REF(dispel)) arena_checks(get_turf(target), user) @@ -266,7 +267,6 @@ if(!spell_active || QDELETED(src)) return INVOKE_ASYNC(src, PROC_REF(fighters_check), user) //Checks to see if our fighters died. - INVOKE_ASYNC(src, PROC_REF(arena_trap), target_turf) //Gets another arena trap queued up for when this one runs out. addtimer(CALLBACK(src, PROC_REF(arena_checks), target_turf, user), 5 SECONDS) /datum/spell/vampire/arena/proc/arena_trap(turf/target_turf) diff --git a/code/modules/antagonists/wizard/datum_wizard.dm b/code/modules/antagonists/wizard/datum_wizard.dm index 90a5fb17e851..f3e1f622eb1b 100644 --- a/code/modules/antagonists/wizard/datum_wizard.dm +++ b/code/modules/antagonists/wizard/datum_wizard.dm @@ -116,3 +116,11 @@ /datum/antagonist/wizard/proc/full_on_wizard() return TRUE + +/datum/antagonist/wizard/proc/wizard_is_alive() // fun fact did you know underscore make proc calls slower? + for(var/datum/spell/lichdom/S in owner.spell_list) + if(S.is_revive_possible()) // This must occur before the == DEAD check + return TRUE + if(!iscarbon(owner.current) || owner.current.stat == DEAD) + return FALSE + return TRUE diff --git a/code/modules/arcade/mob_hunt/mob_datums.dm b/code/modules/arcade/mob_hunt/mob_datums.dm index 2621201f0864..fc60e17bbbea 100644 --- a/code/modules/arcade/mob_hunt/mob_datums.dm +++ b/code/modules/arcade/mob_hunt/mob_datums.dm @@ -65,10 +65,10 @@ /datum/mob_hunt/proc/select_spawn() var/list/possible_areas = get_possible_areas() - if(!possible_areas.len) + if(!length(possible_areas)) log_admin("No possible areas to spawn [type] found. Possible code/mapping error?") return 0 - while(possible_areas.len) + while(length(possible_areas)) //randomly select an area from our possible_areas list to try spawning in, then remove it from possible_areas so it won't get picked over and over forever. var/spawn_area_path = pickweight(possible_areas) var/area/spawn_area = locate(spawn_area_path) @@ -77,7 +77,7 @@ break //clear and generate a fresh list of turfs in the selected area, weighted based on white/black lists var/list/possible_turfs = get_possible_turfs(spawn_area) - if(!possible_turfs.len) //If we don't have any possible turfs, this attempt was a failure. Try again. + if(!length(possible_turfs)) //If we don't have any possible turfs, this attempt was a failure. Try again. continue //if we got this far, we're spawning on this attempt, hooray! spawn_point = pickweight(possible_turfs) diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm index ead4accd8363..1eb088800c6d 100644 --- a/code/modules/asset_cache/asset_list.dm +++ b/code/modules/asset_cache/asset_list.dm @@ -311,7 +311,7 @@ GLOBAL_LIST_EMPTY(asset_datums) if(!asset) continue asset = fcopy_rsc(asset) //dedupe - var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]." : "" + var/prefix2 = (length(directions) > 1) ? "[dir2text(direction)]." : "" var/asset_name = "[prefix].[prefix2][icon_state_name].png" if(generic_icon_names) asset_name = "[GENERATE_ASSET_NAME(asset)].png" diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index 42dc9c3fb250..aae9e9ba2961 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -247,7 +247,7 @@ if(falloff) max_dist = min((temp - (T0C + 60)) / falloff, radius) open[Ce] = 0 - while(open.len) + while(length(open)) var/turf/T = open[1] var/dist = open[T] open -= T diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index 09207440574a..f9894021ce9e 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -126,7 +126,7 @@ //cache for sanic speed var/list/adjacent_turfs = atmos_adjacent_turfs var/datum/excited_group/our_excited_group = excited_group - var/adjacent_turfs_length = adjacent_turfs.len + var/adjacent_turfs_length = length(adjacent_turfs) if(planetary_atmos) adjacent_turfs_length++ diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index cb62033952a4..2c438e38d20a 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -744,24 +744,24 @@ for(var/g in gas_names) thresholds += list(list("name" = gas_names[g], "settings" = list())) selected = TLV[g] - thresholds[thresholds.len]["settings"] += list(list("env" = g, "val" = "min2", "selected" = selected.min2)) - thresholds[thresholds.len]["settings"] += list(list("env" = g, "val" = "min1", "selected" = selected.min1)) - thresholds[thresholds.len]["settings"] += list(list("env" = g, "val" = "max1", "selected" = selected.max1)) - thresholds[thresholds.len]["settings"] += list(list("env" = g, "val" = "max2", "selected" = selected.max2)) + thresholds[length(thresholds)]["settings"] += list(list("env" = g, "val" = "min2", "selected" = selected.min2)) + thresholds[length(thresholds)]["settings"] += list(list("env" = g, "val" = "min1", "selected" = selected.min1)) + thresholds[length(thresholds)]["settings"] += list(list("env" = g, "val" = "max1", "selected" = selected.max1)) + thresholds[length(thresholds)]["settings"] += list(list("env" = g, "val" = "max2", "selected" = selected.max2)) selected = TLV["pressure"] thresholds += list(list("name" = "Pressure", "settings" = list())) - thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "min2", "selected" = selected.min2)) - thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "min1", "selected" = selected.min1)) - thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "max1", "selected" = selected.max1)) - thresholds[thresholds.len]["settings"] += list(list("env" = "pressure", "val" = "max2", "selected" = selected.max2)) + thresholds[length(thresholds)]["settings"] += list(list("env" = "pressure", "val" = "min2", "selected" = selected.min2)) + thresholds[length(thresholds)]["settings"] += list(list("env" = "pressure", "val" = "min1", "selected" = selected.min1)) + thresholds[length(thresholds)]["settings"] += list(list("env" = "pressure", "val" = "max1", "selected" = selected.max1)) + thresholds[length(thresholds)]["settings"] += list(list("env" = "pressure", "val" = "max2", "selected" = selected.max2)) selected = TLV["temperature"] thresholds += list(list("name" = "Temperature", "settings" = list())) - thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "min2", "selected" = selected.min2)) - thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "min1", "selected" = selected.min1)) - thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "max1", "selected" = selected.max1)) - thresholds[thresholds.len]["settings"] += list(list("env" = "temperature", "val" = "max2", "selected" = selected.max2)) + thresholds[length(thresholds)]["settings"] += list(list("env" = "temperature", "val" = "min2", "selected" = selected.min2)) + thresholds[length(thresholds)]["settings"] += list(list("env" = "temperature", "val" = "min1", "selected" = selected.min1)) + thresholds[length(thresholds)]["settings"] += list(list("env" = "temperature", "val" = "max1", "selected" = selected.max1)) + thresholds[length(thresholds)]["settings"] += list(list("env" = "temperature", "val" = "max2", "selected" = selected.max2)) return thresholds diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 52f39fb316eb..4e696bc60254 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -253,7 +253,7 @@ data["beakerVolume"] = 0 if(beaker) data["beakerLabel"] = beaker.label_text ? beaker.label_text : null - if(beaker.reagents && beaker.reagents.reagent_list.len) + if(beaker.reagents && length(beaker.reagents.reagent_list)) for(var/datum/reagent/R in beaker.reagents.reagent_list) data["beakerVolume"] += R.volume data["cooldownProgress"] = round(clamp((world.time - last_injection) / injection_cooldown, 0, 1) * 100) diff --git a/code/modules/atmospherics/machinery/datum_pipeline.dm b/code/modules/atmospherics/machinery/datum_pipeline.dm index 7a4b3b77a12d..3da561d9fcf3 100644 --- a/code/modules/atmospherics/machinery/datum_pipeline.dm +++ b/code/modules/atmospherics/machinery/datum_pipeline.dm @@ -40,12 +40,12 @@ if(!air) air = new var/list/possible_expansions = list(base) - while(possible_expansions.len>0) + while(length(possible_expansions)>0) for(var/obj/machinery/atmospherics/borderline in possible_expansions) var/list/result = borderline.pipeline_expansion(src) - if(result.len>0) + if(length(result)>0) for(var/obj/machinery/atmospherics/P in result) if(istype(P, /obj/machinery/atmospherics/pipe)) var/obj/machinery/atmospherics/pipe/item = P @@ -186,7 +186,7 @@ var/list/datum/pipeline/PL = list() PL += src - for(var/i=1;i<=PL.len;i++) + for(var/i=1;i<=length(PL);i++) var/datum/pipeline/P = PL[i] if(!P) return diff --git a/code/modules/atmospherics/machinery/pipes/pipe.dm b/code/modules/atmospherics/machinery/pipes/pipe.dm index e2d946cfc3cf..2d3eb724fe09 100644 --- a/code/modules/atmospherics/machinery/pipes/pipe.dm +++ b/code/modules/atmospherics/machinery/pipes/pipe.dm @@ -33,7 +33,7 @@ qdel(meter) // if we're somehow by ourself - if(parent && !QDELETED(parent) && parent.members.len == 1 && parent.members[1] == src) + if(parent && !QDELETED(parent) && length(parent.members) == 1 && parent.members[1] == src) qdel(parent) parent = null diff --git a/code/modules/awaymissions/loot.dm b/code/modules/awaymissions/loot.dm index 266eb53c8150..faaeff82e9a4 100644 --- a/code/modules/awaymissions/loot.dm +++ b/code/modules/awaymissions/loot.dm @@ -9,9 +9,9 @@ ..() var/list/things = params2list(loot) - if(things && things.len) + if(things && length(things)) for(var/i = lootcount, i > 0, i--) - if(!things.len) + if(!length(things)) return var/loot_spawn = pick(things) diff --git a/code/modules/awaymissions/maploader/reader.dm b/code/modules/awaymissions/maploader/reader.dm index ae543a4f9673..7a0a2d52edc7 100644 --- a/code/modules/awaymissions/maploader/reader.dm +++ b/code/modules/awaymissions/maploader/reader.dm @@ -98,18 +98,18 @@ GLOBAL_DATUM_INIT(_preloader, /datum/dmm_suite/preloader, new()) var/list/gridLines = splittext(dmmRegex.group[6], "\n") var/leadingBlanks = 0 - while(leadingBlanks < gridLines.len && gridLines[++leadingBlanks] == "") + while(leadingBlanks < length(gridLines) && gridLines[++leadingBlanks] == "") if(leadingBlanks > 1) gridLines.Cut(1, leadingBlanks) // Remove all leading blank lines. - if(!gridLines.len) // Skip it if only blank lines exist. + if(!length(gridLines)) // Skip it if only blank lines exist. continue - if(gridLines.len && gridLines[gridLines.len] == "") - gridLines.Cut(gridLines.len) // Remove only one blank line at the end. + if(length(gridLines) && gridLines[length(gridLines)] == "") + gridLines.Cut(length(gridLines)) // Remove only one blank line at the end. bounds[MAP_MINY] = min(bounds[MAP_MINY], ycrd) - ycrd += gridLines.len - 1 // Start at the top and work down + ycrd += length(gridLines) - 1 // Start at the top and work down if(!shouldCropMap && ycrd > world.maxy) if(!measureOnly) @@ -253,7 +253,7 @@ GLOBAL_DATUM_INIT(_preloader, /datum/dmm_suite/preloader, new()) // The next part of the code assumes there's ALWAYS an /area AND a /turf on a given tile // first instance the /area and remove it from the members list - index = members.len + index = length(members) var/turf/crds = locate(xcrd, ycrd, zcrd) if(members[index] != /area/template_noop) @@ -285,7 +285,7 @@ GLOBAL_DATUM_INIT(_preloader, /datum/dmm_suite/preloader, new()) if(T) // if others /turf are presents, simulates the underlays piling effect index = first_turf_index + 1 - var/mlen = members.len - 1 + var/mlen = length(members) - 1 while(index <= mlen) // Last item is an /area var/underlay if(isturf(T)) // I blame this on the stupid clown who coded the BYOND map editor @@ -432,7 +432,7 @@ GLOBAL_DATUM_INIT(_preloader, /datum/dmm_suite/preloader, new()) var/json_ready = 0 /datum/dmm_suite/preloader/proc/setup(list/the_attributes, path) - if(the_attributes.len) + if(length(the_attributes)) json_ready = 0 if("map_json_data" in the_attributes) json_ready = 1 diff --git a/code/modules/buildmode/submodes/antirad_mode.dm b/code/modules/buildmode/submodes/antirad_mode.dm new file mode 100644 index 000000000000..1ddd9964bb0a --- /dev/null +++ b/code/modules/buildmode/submodes/antirad_mode.dm @@ -0,0 +1,55 @@ +/datum/buildmode_mode/clean_radiation + key = "rad" + +/datum/buildmode_mode/clean_radiation/show_help(mob/user) + var/list/messages = list( + "***********************************************************", + "Left Mouse Button on obj/turf/mob = Remove radiation of selected target.", + "Ctrl-Left Mouse Button on screen = Remove all radiation in your sight.", + "Right Mouse Button on obj/turf/mob = Deep clean: Remove radiation of all recursive contents of turf.", + "Ctrl-Right Mouse Button on screen = Deep clean: Remove radiation of all recursive contents in your sight.", + "***********************************************************" + ) + to_chat(user, messages.Join("
    ")) + +/datum/buildmode_mode/clean_radiation/handle_click(mob/user, params, atom/target) + var/list/pa = params2list(params) + var/deep_clean = pa.Find("right") + var/clean_screen = pa.Find("ctrl") + + if(!clean_screen) + if(!deep_clean) + if(SEND_SIGNAL(target, COMSIG_ADMIN_DECONTAMINATE)) + to_chat(user, "Decontaminated [target].") + log_admin("Build Mode: [key_name(user)] decontaminated radiation at ([target.x],[target.y],[target.z])") + return + + var/counter = 0 + var/turf/T = get_turf(target) + counter += SEND_SIGNAL(T, COMSIG_ADMIN_DECONTAMINATE) + for(var/atom/movable/cleanable in T) + counter += SEND_SIGNAL(cleanable, COMSIG_ADMIN_DECONTAMINATE) + CHECK_TICK + + if(isliving(cleanable)) + var/mob/living/L = cleanable + for(var/atom/movable/cleanable2 in L.get_contents()) + counter += SEND_SIGNAL(cleanable2, COMSIG_ADMIN_DECONTAMINATE) + CHECK_TICK + to_chat(user, "Decontaminated [counter] atom\s.") + log_admin("Build Mode: [key_name(user)] deep-clean decontaminated radiation at ([target.x],[target.y],[target.z])") + return + + var/counter = 0 + for(var/turf/T in range(user.client.view, user)) + counter += SEND_SIGNAL(T, COMSIG_ADMIN_DECONTAMINATE) + for(var/atom/movable/cleanable in T) + counter += SEND_SIGNAL(cleanable, COMSIG_ADMIN_DECONTAMINATE) + CHECK_TICK + if(deep_clean && isliving(cleanable)) + var/mob/living/L = cleanable + for(var/atom/movable/cleanable2 in L.get_contents()) + counter += SEND_SIGNAL(cleanable2, COMSIG_ADMIN_DECONTAMINATE) + CHECK_TICK + to_chat(user, "Decontaminated [counter] atom\s.") + log_admin("Build Mode: [key_name(user)] [deep_clean ? "deep-clean " : ""]decontaminated their screen of radiation at ([target.x],[target.y],[target.z])") diff --git a/code/modules/buildmode/submodes/link.dm b/code/modules/buildmode/submodes/link.dm index dfe986b0d017..f34241248829 100644 --- a/code/modules/buildmode/submodes/link.dm +++ b/code/modules/buildmode/submodes/link.dm @@ -54,7 +54,7 @@ speed_execute() return if(!M.normaldoorcontrol) - if(link_lines.len && alert(user, "Warning: This will disable links to connected pod doors. Continue?", "Buildmode", "Yes", "No") == "No") + if(length(link_lines) && alert(user, "Warning: This will disable links to connected pod doors. Continue?", "Buildmode", "Yes", "No") == "No") speed_execute() return M.normaldoorcontrol = TRUE @@ -76,7 +76,7 @@ speed_execute() return if(M.normaldoorcontrol) - if(link_lines.len && alert(user, "Warning: This will disable links to connected airlocks. Continue?", "Buildmode", "Yes", "No") == "No") + if(length(link_lines) && alert(user, "Warning: This will disable links to connected airlocks. Continue?", "Buildmode", "Yes", "No") == "No") speed_execute() return M.normaldoorcontrol = FALSE diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index aa06fa2055cb..d47f82b5e024 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -62,6 +62,9 @@ var/datum/click_intercept/click_intercept = null + /// Time when the click was intercepted + var/click_intercept_time = 0 + //datum that controls the displaying and hiding of tooltips var/datum/tooltip/tooltips @@ -132,6 +135,27 @@ var/list/active_keybindings = list() /// The client's movement keybindings to directions, which work regardless of modifiers. var/list/movement_kb_dirs = list() + + /// Used to make a special mouse cursor, this one for mouse up icon + var/mouse_up_icon = null + /// Used to make a special mouse cursor, this one for mouse up icon + var/mouse_down_icon = null + /// Used to override the mouse cursor so it doesnt get reset + var/mouse_override_icon = null + + /// Autoclick list of two elements, first being the clicked thing, second being the parameters. + var/list/atom/selected_target[2] + /// Used in MouseDrag to preserve the original mouse click parameters + var/mouseParams = "" + /// Used in MouseDrag to preserve the last mouse-entered location. + var/mouse_location_UID + /// Used in MouseDrag to preserve the last mouse-entered object. + var/mouse_object_UID + /// When we started the currently active drag + var/drag_start = 0 + /// The params we passed at the start of the drag, in list form + var/list/drag_details + /// The client's currently moused over datum, limited to movable and stored as UID var/atom/movable/moused_over diff --git a/code/modules/client/login_processing/20-load_characters.dm b/code/modules/client/login_processing/20-load_characters.dm index 96bcf98df40a..915cc1d152f3 100644 --- a/code/modules/client/login_processing/20-load_characters.dm +++ b/code/modules/client/login_processing/20-load_characters.dm @@ -62,7 +62,8 @@ physique, height, cyborg_brain_type, - tts_seed + body_type, + tts_seed, FROM characters WHERE ckey=:ckey"}, list( "ckey" = C.ckey )) diff --git a/code/modules/client/preference/character.dm b/code/modules/client/preference/character.dm index d865a27de250..76b035f33068 100644 --- a/code/modules/client/preference/character.dm +++ b/code/modules/client/preference/character.dm @@ -6,6 +6,7 @@ var/real_name //our character's name var/be_random_name = FALSE //whether we are a random name every round var/gender = MALE //gender of character (well duh) + var/body_type = MALE //body sprite variant var/age = 30 //age of character var/b_type = "A+" //blood type (not-chooseable) var/underwear = "Nude" //underwear type @@ -118,13 +119,13 @@ var/markingcolourslist = list2params(m_colours) var/markingstyleslist = list2params(m_styles) - if(!isemptylist(organ_data)) + if(length(organ_data)) organ_list = list2params(organ_data) - if(!isemptylist(rlimb_data)) + if(length(rlimb_data)) rlimb_list = list2params(rlimb_data) - if(!isemptylist(player_alt_titles)) + if(length(player_alt_titles)) playertitlelist = list2params(player_alt_titles) - if(!isemptylist(loadout_gear)) + if(length(loadout_gear)) gearlist = json_encode(loadout_gear) var/datum/db_query/firstquery = SSdbcore.NewQuery("SELECT slot FROM characters WHERE ckey=:ckey ORDER BY slot", list( @@ -141,6 +142,7 @@ real_name=:real_name, name_is_always_random=:be_random_name, gender=:gender, + body_type=:body_type, age=:age, species=:species, language=:language, @@ -194,6 +196,7 @@ hair_gradient_alpha=:h_grad_alpha, custom_emotes=:custom_emotes, cyborg_brain_type=:cyborg_brain_type, + body_type=:body_type, tts_seed=:tts_seed WHERE ckey=:ckey AND slot=:slot"}, list( @@ -202,6 +205,7 @@ "real_name" = real_name, "be_random_name" = be_random_name, "gender" = gender, + "body_type" = body_type, "age" = age, "species" = species, "language" = language, @@ -296,7 +300,7 @@ player_alt_titles, disabilities, organ_data, rlimb_data, nanotrasen_relation, physique, height, speciesprefs, socks, body_accessory, gear, autohiss, - hair_gradient, hair_gradient_offset, hair_gradient_colour, hair_gradient_alpha, custom_emotes, cyborg_brain_type, tts_seed) + hair_gradient, hair_gradient_offset, hair_gradient_colour, hair_gradient_alpha, custom_emotes, cyborg_brain_type, body_type, tts_seed) VALUES (:ckey, :slot, :metadata, :name, :be_random_name, :gender, :age, :species, :language, @@ -323,7 +327,7 @@ :playertitlelist, :disabilities, :organ_list, :rlimb_list, :nanotrasen_relation, :physique, :height, :speciesprefs, :socks, :body_accessory, :gearlist, :autohiss_mode, - :h_grad_style, :h_grad_offset, :h_grad_colour, :h_grad_alpha, :custom_emotes, :cyborg_brain_type, :tts_seed) + :h_grad_style, :h_grad_offset, :h_grad_colour, :h_grad_alpha, :custom_emotes, :cyborg_brain_type, :body_type, :tts_seed) "}, list( // This has too many params for anyone to look at this without going insae "ckey" = C.ckey, @@ -332,6 +336,7 @@ "name" = real_name, "be_random_name" = be_random_name, "gender" = gender, + "body_type" = body_type, "age" = age, "species" = species, "language" = language, @@ -397,6 +402,10 @@ return 1 +/** + * Load in and process the database's information on the player's character save. + * The order of indices here is the relative order from get_query() in 20-load-characters.dm. + */ /datum/character_save/proc/load(datum/db_query/query) //Character metadata = query.item[1] @@ -474,7 +483,8 @@ physique = query.item[56] height = query.item[57] cyborg_brain_type = query.item[58] - tts_seed = query.item[59] // SS220 EDIT ADDITION - TTS220 + body_type = query.item[59] + tts_seed = query.item[60] // SS220 EDIT ADDITION - TTS220 //Sanitize var/datum/species/SP = GLOB.all_species[species] @@ -508,7 +518,7 @@ real_name = random_name(gender, species) be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) - gender = sanitize_gender(gender, FALSE, !SP.has_gender) + gender = sanitize_gender(gender, FALSE) age = sanitize_integer(age, SP.min_age, SP.max_age, initial(age)) h_colour = sanitize_hexcolor(h_colour) h_sec_colour = sanitize_hexcolor(h_sec_colour) @@ -594,9 +604,10 @@ gender = gender_override else gender = pick(MALE, FEMALE) - underwear = random_underwear(gender, species) - undershirt = random_undershirt(gender, species) - socks = random_socks(gender, species) + body_type = pick(MALE, FEMALE) + underwear = random_underwear(body_type, species) + undershirt = random_undershirt(body_type, species) + socks = random_socks(body_type, species) if(length(GLOB.body_accessory_by_species[species])) body_accessory = random_body_accessory(species, S.optional_body_accessory) if(S.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE)) @@ -798,7 +809,8 @@ qdel(preview_icon) var/g = "m" - if(gender == FEMALE) g = "f" + if(body_type == FEMALE) + g = "f" var/icon/icobase var/datum/species/current_species = GLOB.all_species[species] @@ -1812,6 +1824,7 @@ character.gen_record = gen_record character.change_gender(gender) + character.body_type = body_type // TODO does this update the character properly or do we need a setter here character.age = age //Head-specific @@ -1889,10 +1902,10 @@ character.backbag = backbag //Debugging report to track down a bug, which randomly assigned the plural gender to people. - if(character.dna.species.has_gender && (character.gender in list(PLURAL, NEUTER))) + if(character.gender == NEUTER) if(isliving(src)) //Ghosts get neuter by default - message_admins("[key_name_admin(character)] has spawned with their gender as plural or neuter. Please notify coders.") - character.change_gender(MALE) + message_admins("[key_name_admin(character)] has spawned with their gender as neuter. Please notify coders.") + character.change_gender(PLURAL) character.change_eye_color(e_colour, skip_icons = TRUE) character.original_eye_color = e_colour diff --git a/code/modules/client/preference/link_processing.dm b/code/modules/client/preference/link_processing.dm index 8e51a49e39f9..04198097d385 100644 --- a/code/modules/client/preference/link_processing.dm +++ b/code/modules/client/preference/link_processing.dm @@ -168,13 +168,13 @@ if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. active_character.m_colours["tail"] = rand_hex_color() if("underwear") - active_character.underwear = random_underwear(active_character.gender, active_character.species) + active_character.underwear = random_underwear(active_character.body_type, active_character.species) ShowChoices(user) if("undershirt") - active_character.undershirt = random_undershirt(active_character.gender, active_character.species) + active_character.undershirt = random_undershirt(active_character.body_type, active_character.species) ShowChoices(user) if("socks") - active_character.socks = random_socks(active_character.gender, active_character.species) + active_character.socks = random_socks(active_character.body_type, active_character.species) ShowChoices(user) if("eyes") active_character.e_colour = rand_hex_color() @@ -226,8 +226,6 @@ return if(prev_species != active_character.species) active_character.age = clamp(active_character.age, NS.min_age, NS.max_age) - if(NS.has_gender && active_character.gender == PLURAL) - active_character.gender = pick(MALE,FEMALE) var/datum/robolimb/robohead if(NS.bodyflags & ALL_RPARTS) var/head_model = "[!active_character.rlimb_data["head"] ? "Morpheus Cyberkinetics" : active_character.rlimb_data["head"]]" @@ -265,15 +263,15 @@ // Don't wear another species' underwear! var/datum/sprite_accessory/SA = GLOB.underwear_list[active_character.underwear] if(!SA || !(active_character.species in SA.species_allowed)) - active_character.underwear = random_underwear(active_character.gender, active_character.species) + active_character.underwear = random_underwear(active_character.body_type, active_character.species) SA = GLOB.undershirt_list[active_character.undershirt] if(!SA || !(active_character.species in SA.species_allowed)) - active_character.undershirt = random_undershirt(active_character.gender, active_character.species) + active_character.undershirt = random_undershirt(active_character.body_type, active_character.species) SA = GLOB.socks_list[active_character.socks] if(!SA || !(active_character.species in SA.species_allowed)) - active_character.socks = random_socks(active_character.gender, active_character.species) + active_character.socks = random_socks(active_character.body_type, active_character.species) //reset skin tone and colour if(NS.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE)) @@ -579,10 +577,6 @@ if(facialhairstyle == "Shaved") //Just in case. valid_facial_hairstyles += facialhairstyle continue - if(active_character.gender == MALE && SA.gender == FEMALE) - continue - if(active_character.gender == FEMALE && SA.gender == MALE) - continue if(S.bodyflags & ALL_RPARTS) //Species that can use prosthetic heads. var/head_model if(!active_character.rlimb_data["head"]) //Handle situations where the head is default. @@ -608,9 +602,10 @@ var/list/valid_underwear = list() for(var/underwear in GLOB.underwear_list) var/datum/sprite_accessory/SA = GLOB.underwear_list[underwear] - if(active_character.gender == MALE && SA.gender == FEMALE) + // soon... + if(active_character.body_type == MALE && SA.body_type == FEMALE) continue - if(active_character.gender == FEMALE && SA.gender == MALE) + if(active_character.body_type == FEMALE && SA.body_type == MALE) continue if(!(active_character.species in SA.species_allowed)) continue @@ -624,11 +619,11 @@ var/list/valid_undershirts = list() for(var/undershirt in GLOB.undershirt_list) var/datum/sprite_accessory/SA = GLOB.undershirt_list[undershirt] - if(active_character.gender == MALE && SA.gender == FEMALE) + if(!(active_character.species in SA.species_allowed)) continue - if(active_character.gender == FEMALE && SA.gender == MALE) + if(active_character.body_type == MALE && SA.body_type == FEMALE) continue - if(!(active_character.species in SA.species_allowed)) + if(active_character.body_type == FEMALE && SA.body_type == MALE) continue valid_undershirts[undershirt] = GLOB.undershirt_list[undershirt] sortTim(valid_undershirts, GLOBAL_PROC_REF(cmp_text_asc)) @@ -641,11 +636,11 @@ var/list/valid_sockstyles = list() for(var/sockstyle in GLOB.socks_list) var/datum/sprite_accessory/SA = GLOB.socks_list[sockstyle] - if(active_character.gender == MALE && SA.gender == FEMALE) + if(!(active_character.species in SA.species_allowed)) continue - if(active_character.gender == FEMALE && SA.gender == MALE) + if(active_character.body_type == MALE && SA.body_type == FEMALE) continue - if(!(active_character.species in SA.species_allowed)) + if(active_character.body_type == FEMALE && SA.body_type == MALE) continue valid_sockstyles[sockstyle] = GLOB.socks_list[sockstyle] sortTim(valid_sockstyles, GLOBAL_PROC_REF(cmp_text_asc)) @@ -817,11 +812,11 @@ var/datum/robolimb/L = new limb_type() if(limb in L.parts) //Make sure that only models that provide the parts the user needs populate the list. robolimb_models[L.company] = L - if(robolimb_models.len == 1) //If there's only one model available in the list, autoselect it to avoid having to bother the user with a dialog that provides only one option. + if(length(robolimb_models) == 1) //If there's only one model available in the list, autoselect it to avoid having to bother the user with a dialog that provides only one option. subchoice = L.company //If there ends up being more than one model populating the list, subchoice will be overwritten later anyway, so this isn't a problem. if(second_limb in L.parts) //If the child limb of the limb the user selected is also present in the model's parts list, state it's been found so the second limb can be set later. in_model = 1 - if(robolimb_models.len > 1) //If there's more than one model in the list that can provide the part the user wants, let them choose. + if(length(robolimb_models) > 1) //If there's more than one model in the list that can provide the part the user wants, let them choose. subchoice = tgui_input_list(user, "Which model of [choice] [limb_name] do you wish to use?", "[limb_name] - Prosthesis - Model", robolimb_models) if(subchoice) choice = subchoice @@ -906,23 +901,25 @@ toggles ^= PREFTOGGLE_DONATOR_PUBLIC if("gender") - if(!S.has_gender) - var/newgender = tgui_input_list(user, "Who are you?", "Choose Gender", list("Male", "Female", "Genderless")) - if(!newgender) - return - switch(newgender) - if("Male") - active_character.gender = MALE - if("Female") - active_character.gender = FEMALE - if("Genderless") - active_character.gender = PLURAL - else - if(active_character.gender == MALE) - active_character.gender = FEMALE - else + var/newgender = tgui_input_list(user, "Who are you?", "Choose Gender", list("Male", "Female", "Genderless")) + if(!newgender) + return + switch(newgender) + if("Male") + active_character.gender = MALE - active_character.underwear = random_underwear(active_character.gender) + if("Female") + active_character.gender = FEMALE + if("Genderless") + active_character.gender = PLURAL + + if("body_type") + if(active_character.body_type == MALE) + active_character.body_type = FEMALE + else + active_character.body_type = MALE + + active_character.underwear = random_underwear(active_character.body_type) if("hear_adminhelps") sound ^= SOUND_ADMINHELP diff --git a/code/modules/client/preference/loadout/gear_tweaks.dm b/code/modules/client/preference/loadout/gear_tweaks.dm index 2dbda39a9268..459279c61752 100644 --- a/code/modules/client/preference/loadout/gear_tweaks.dm +++ b/code/modules/client/preference/loadout/gear_tweaks.dm @@ -81,14 +81,14 @@ /datum/gear_tweak/contents/get_default() . = list() - for(var/i = 1 to valid_contents.len) + for(var/i = 1 to length(valid_contents)) . += "Random" /datum/gear_tweak/contents/get_metadata(user, list/metadata) . = list() - for(var/i = metadata.len to valid_contents.len) + for(var/i = length(metadata) to length(valid_contents)) metadata += "Random" - for(var/i = 1 to valid_contents.len) + for(var/i = 1 to length(valid_contents)) var/entry = input(user, "Choose an entry.", "Character Preference", metadata[i]) as null|anything in (valid_contents[i] + list("Random", "None")) if(entry) . += entry @@ -96,9 +96,9 @@ return metadata /datum/gear_tweak/contents/tweak_item(obj/item/I, list/metadata) - if(metadata.len != valid_contents.len) + if(length(metadata) != length(valid_contents)) return - for(var/i = 1 to valid_contents.len) + for(var/i = 1 to length(valid_contents)) var/path var/list/contents = valid_contents[i] if(metadata[i] == "Random") diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 4ce3b3b1a79f..b8a53d743a7a 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -195,11 +195,12 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts dat += "" dat += "" dat += "" - for(var/i = 1, i <= slots.len, i++) + for(var/i = 1, i <= length(slots), i++) var/obj/O = slots[i] if(O) dat += "" @@ -349,7 +349,7 @@ dat += "" dat += "" - for(var/i = 1, i <= slots.len, i++) + for(var/i = 1, i <= length(slots), i++) if(slots[i]) dat += "" else diff --git a/code/modules/food_and_drinks/drinks/drinks/cans.dm b/code/modules/food_and_drinks/drinks/drinks/cans.dm index c98487ba69c8..e797c5ef7b64 100644 --- a/code/modules/food_and_drinks/drinks/drinks/cans.dm +++ b/code/modules/food_and_drinks/drinks/drinks/cans.dm @@ -49,7 +49,7 @@ if(can_opened) to_chat(H, "You can't shake up an already opened drink!") return - if(src == H.l_hand || src == H.r_hand) + if(H.is_holding(src)) can_shake = FALSE addtimer(CALLBACK(src, PROC_REF(reset_shakable)), 1 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) to_chat(H, "You start shaking up [src].") diff --git a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm index 35f67923976e..66a06e0b0d40 100644 --- a/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm +++ b/code/modules/food_and_drinks/drinks/drinks/drinkingglass.dm @@ -40,7 +40,7 @@ /obj/item/reagent_containers/drinks/drinkingglass/on_reagent_change() overlays.Cut() - if(reagents.reagent_list.len) + if(length(reagents.reagent_list)) var/datum/reagent/R = reagents.get_master_reagent() name = R.drink_name desc = R.drink_desc diff --git a/code/modules/food_and_drinks/food/condiment.dm b/code/modules/food_and_drinks/food/condiment.dm index 494083923405..4f552f3d360f 100644 --- a/code/modules/food_and_drinks/food/condiment.dm +++ b/code/modules/food_and_drinks/food/condiment.dm @@ -96,9 +96,9 @@ to_chat(user, "You transfer [trans] units of the condiment to [target].") /obj/item/reagent_containers/condiment/on_reagent_change() - if(!possible_states.len) + if(!length(possible_states)) return - if(reagents.reagent_list.len > 0) + if(length(reagents.reagent_list) > 0) var/main_reagent = reagents.get_master_reagent_id() if(main_reagent in possible_states) var/list/temp_list = possible_states[main_reagent] @@ -110,7 +110,7 @@ name = "[originalname] bottle" main_reagent = reagents.get_master_reagent_name() desc = "Looks like it is [lowertext(main_reagent)], but you are not sure." - if(reagents.reagent_list.len==1) + if(length(reagents.reagent_list)==1) desc = "A mixture of various condiments. [lowertext(main_reagent)] is one of them." icon_state = "mixedcondiments" else @@ -332,7 +332,7 @@ qdel(src) /obj/item/reagent_containers/condiment/pack/on_reagent_change() - if(reagents.reagent_list.len > 0) + if(length(reagents.reagent_list) > 0) var/main_reagent = reagents.get_master_reagent_id() if(main_reagent in possible_states) var/list/temp_list = possible_states[main_reagent] diff --git a/code/modules/food_and_drinks/food/customizables.dm b/code/modules/food_and_drinks/food/customizables.dm index 00339c2d31af..a748cdfe4900 100644 --- a/code/modules/food_and_drinks/food/customizables.dm +++ b/code/modules/food_and_drinks/food/customizables.dm @@ -481,15 +481,15 @@ do {\ for(var/ings in sorteditems) //add the non-basename items to the name, sorting out the , and the and c++ - if(c == sorteditems.len - 1) + if(c == length(sorteditems) - 1) seperator = " and " - else if(c == sorteditems.len) + else if(c == length(sorteditems)) seperator = " " else seperator = ", " - if(sorteditems[ings] > levels.len) - sorteditems[ings] = levels.len + if(sorteditems[ings] > length(levels)) + sorteditems[ings] = length(levels) if(sorteditems[ings] <= 1) sendback +="[ings][seperator]" @@ -497,10 +497,10 @@ do {\ sendback +="[levels[sorteditems[ings]]] [ings][seperator]" for(var/ingtype in sortedtypes) // now add the types basenames, keeping the src one seperate so it can go on the end - if(sortedtypes[ingtype] > levels.len) - sortedtypes[ingtype] = levels.len + if(sortedtypes[ingtype] > length(levels)) + sortedtypes[ingtype] = length(levels) if(ingtype == basename) - if(sortedtypes[ingtype] < levels.len) + if(sortedtypes[ingtype] < length(levels)) sortedtypes[ingtype]++ endpart = "[levels[sortedtypes[ingtype]]] decker [basename]" continue diff --git a/code/modules/food_and_drinks/food/foods/meat.dm b/code/modules/food_and_drinks/food/foods/meat.dm index 783cbdd7f418..e5a34bad7a31 100644 --- a/code/modules/food_and_drinks/food/foods/meat.dm +++ b/code/modules/food_and_drinks/food/foods/meat.dm @@ -63,6 +63,11 @@ desc = "For when you need to go ham." list_reagents = list("protein" = 3, "porktonium" = 10) +/obj/item/food/snacks/meat/chicken + name = "chicken meat" + desc = "Cluck cluck!" + icon_state = "birdmeat" + /obj/item/food/snacks/meat/meatwheat name = "meatwheat clump" desc = "This doesn't look like meat, but your standards aren't that high to begin with." @@ -124,7 +129,7 @@ icon_state = "bearmeat" filling_color = "#DB0000" bitesize = 3 - list_reagents = list("protein" = 12, "morphine" = 3, "vitamin" = 2) + list_reagents = list("protein" = 12, "methamphetamine" = 5, "vitamin" = 2) tastes = list("meat" = 1, "salmon" = 1) /obj/item/food/snacks/monstermeat/xenomeat @@ -203,6 +208,12 @@ tastes = list("meat" = 1) goal_difficulty = FOOD_GOAL_NORMAL +/obj/item/food/snacks/meatsteak/chicken + name = "cooked chicken" + desc = "Cluck cluck!" + icon_state = "birdsteak" + tastes = list("chicken" = 1, "meat" = 1) + /obj/item/food/snacks/bacon name = "bacon" desc = "It looks crispy and tastes amazing! Mmm... Bacon." @@ -562,6 +573,10 @@ bitesize = 3 list_reagents = list("protein" = 4, "vitamin" = 4) +/obj/item/food/snacks/organ/Initialize(mapload) + . = ..() + reagents.add_reagent("nutriment", 5) + /obj/item/food/snacks/appendix //yes, this is the same as meat. I might do something different in future name = "appendix" diff --git a/code/modules/food_and_drinks/food/foods/pizza.dm b/code/modules/food_and_drinks/food/foods/pizza.dm index d2bda7925fbc..9cdc5cddb6f7 100644 --- a/code/modules/food_and_drinks/food/foods/pizza.dm +++ b/code/modules/food_and_drinks/food/foods/pizza.dm @@ -268,9 +268,9 @@ . = ..() if(open && pizza) desc = "A box suited for pizzas. It appears to have a [pizza.name] inside." - else if(boxes.len > 0) - desc = "A pile of boxes suited for pizzas. There appears to be [boxes.len + 1] boxes in the pile." - var/obj/item/pizzabox/top_box = boxes[boxes.len] + else if(length(boxes) > 0) + desc = "A pile of boxes suited for pizzas. There appears to be [length(boxes) + 1] boxes in the pile." + var/obj/item/pizzabox/top_box = boxes[length(boxes)] var/top_tag = top_box.box_tag if(top_tag != "") desc = "[desc] The box on top has a tag, it reads: '[top_tag]'." @@ -298,8 +298,8 @@ else // Stupid code because byondcode sucks var/set_tag = TRUE - if(boxes.len > 0) - var/obj/item/pizzabox/top_box = boxes[boxes.len] + if(length(boxes) > 0) + var/obj/item/pizzabox/top_box = boxes[length(boxes)] if(top_box.box_tag != "") set_tag = TRUE else @@ -307,7 +307,7 @@ set_tag = TRUE if(!open && set_tag) var/image/tag = image("food/pizza.dmi", icon_state = "pizzabox_tag") - tag.pixel_y = boxes.len * 3 + tag.pixel_y = length(boxes) * 3 . += tag /obj/item/pizzabox/attack_hand(mob/user) @@ -318,11 +318,11 @@ update_appearance(UPDATE_DESC|UPDATE_ICON) return - if(boxes.len > 0) + if(length(boxes) > 0) if(user.is_in_inactive_hand(src)) ..() return - var/obj/item/pizzabox/box = boxes[boxes.len] + var/obj/item/pizzabox/box = boxes[length(boxes)] boxes -= box user.put_in_hands(box) to_chat(user, "You remove the topmost [src] from your hand.") @@ -339,7 +339,7 @@ update_appearance(UPDATE_DESC|UPDATE_ICON) /obj/item/pizzabox/attack_self(mob/user) - if(boxes.len > 0) + if(length(boxes) > 0) return open = !open if(open && pizza) @@ -355,7 +355,7 @@ boxestoadd += box for(var/obj/item/pizzabox/i in box.boxes) boxestoadd += i - if((boxes.len+1) + boxestoadd.len <= 5) + if((boxes.len+1) + length(boxestoadd) <= 5) user.drop_item() box.loc = src box.boxes = list() // Clear the box boxes so we don't have boxes inside boxes. - Xzibit @@ -389,8 +389,8 @@ if(!t) return var/obj/item/pizzabox/boxtotagto = src - if(boxes.len > 0) - boxtotagto = boxes[boxes.len] + if(length(boxes) > 0) + boxtotagto = boxes[length(boxes)] boxtotagto.box_tag = copytext("[t]", 1, 30) update_appearance(UPDATE_DESC|UPDATE_ICON) return diff --git a/code/modules/food_and_drinks/food/foods/sandwiches.dm b/code/modules/food_and_drinks/food/foods/sandwiches.dm index 7d9e9e024918..77f1a8092ec7 100644 --- a/code/modules/food_and_drinks/food/foods/sandwiches.dm +++ b/code/modules/food_and_drinks/food/foods/sandwiches.dm @@ -316,6 +316,14 @@ tastes = list("bun" = 1, "pork" = 1, "patty" = 1) goal_difficulty = FOOD_GOAL_NORMAL +/obj/item/food/snacks/burger/chicken + name = "chicken burger" + desc = "May I mayo?" + icon_state = "chickenburger" + bitesize = 3 + list_reagents = list("nutriment" = 6, "vitamin" = 1) + tastes = list("bun" = 4, "chicken" = 2) + /obj/item/food/snacks/burger/jelly name = "jelly burger" desc = "Culinary delight...?" diff --git a/code/modules/food_and_drinks/food/foods/side_dishes.dm b/code/modules/food_and_drinks/food/foods/side_dishes.dm index 31e7aec36703..2048c12740e8 100644 --- a/code/modules/food_and_drinks/food/foods/side_dishes.dm +++ b/code/modules/food_and_drinks/food/foods/side_dishes.dm @@ -117,6 +117,16 @@ tastes = list("rice" = 1) goal_difficulty = FOOD_GOAL_NORMAL +/obj/item/food/snacks/boiledrice/attackby(obj/item/I, mob/user, params) + if(!istype(I, /obj/item/stack/seaweed)) + return ..() + var/obj/item/stack/seaweed/S = I + if(!S.use(1)) + return ..() + var/obj/item/food/snacks/onigiri/O = new(get_turf(user)) + reagents.trans_to(O, reagents.total_volume) + qdel(src) + user.put_in_active_hand(O) /obj/item/food/snacks/roastparsnip name = "roast parsnip" @@ -127,3 +137,12 @@ filling_color = "#FF5500" tastes = list("parsnip" = 1) goal_difficulty = FOOD_GOAL_NORMAL + +/obj/item/food/snacks/onigiri + name = "onigiri" + desc = "Rice and seaweed." + icon_state = "onigiri" + list_reagents = list("nutriment" = 5, "vitamin" = 2) + tastes = list("rice" = 3, "seaweed" = 2) + goal_difficulty = FOOD_GOAL_NORMAL + diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 52d69b2eaa84..cccfab34edc9 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -92,7 +92,7 @@ var/obj/item/kitchen/utensil/U = W - if(U.contents.len >= U.max_contents) + if(length(U.contents) >= U.max_contents) to_chat(user, "You cannot fit anything else on your [U].") return diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 8ad20838c4e3..51a0d3473560 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -321,7 +321,8 @@ operating = FALSE update_icon(UPDATE_OVERLAYS | UPDATE_ICON_STATE) - +/obj/machinery/gibber/force_eject_occupant(mob/target) + go_out() /* AUTOGIBBER */ @@ -349,7 +350,7 @@ RefreshParts() /obj/machinery/gibber/autogibber/process() - if(!lturf || occupant || locked || operating || victim_targets.len) + if(!lturf || occupant || locked || operating || length(victim_targets)) return if(acceptdir != lastacceptdir) @@ -362,7 +363,7 @@ for(var/mob/living/carbon/human/H in lturf) victim_targets += H - if(victim_targets.len) + if(length(victim_targets)) visible_message({"\The [src] states, "Food detected!""}) sleep(consumption_delay) for(var/mob/living/carbon/H in victim_targets) diff --git a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm index 06597129b2e6..2058df289826 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/kitchen_machine.dm @@ -250,7 +250,7 @@ var/list/recipes_to_make = choose_recipes() - if(recipes_to_make.len == 1 && recipes_to_make[1][2] == RECIPE_FAIL) + if(length(recipes_to_make) == 1 && recipes_to_make[1][2] == RECIPE_FAIL) //This only runs if there is a single recipe source to be made and it is a failure (the machine was loaded with only 1 mixing bowl that results in failure OR was directly loaded with ingredients that results in failure). //If there are multiple sources, this bit gets skipped. dirty += 1 @@ -305,7 +305,7 @@ var/datum/recipe/recipe_src = select_recipe(GLOB.cooking_recipes[recipe_type], src, ignored_items = list(/obj/item/mixing_bowl)) //check the machine's directly-inserted ingredients for possible recipes as well, ignoring the mixing bowls when selecting recipe if(recipe_src) //if we found a valid recipe for directly-inserted ingredients, add that to our list recipes_to_make.Add(list(list(src, recipe_src))) - else if(!recipes_to_make.len) //if the machine has no mixing bowls to make recipes from AND also doesn't have a valid recipe of directly-inserted ingredients, return a failure so we can make a burned mess + else if(!length(recipes_to_make)) //if the machine has no mixing bowls to make recipes from AND also doesn't have a valid recipe of directly-inserted ingredients, return a failure so we can make a burned mess recipes_to_make.Add(list(list(src, RECIPE_FAIL))) return recipes_to_make diff --git a/code/modules/food_and_drinks/kitchen_machinery/processor.dm b/code/modules/food_and_drinks/kitchen_machinery/processor.dm index 41b5cf9bcc22..5514f6fb545a 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/processor.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/processor.dm @@ -233,7 +233,7 @@ to_chat(user, "\the [src] is already processing something!") return 1 - if(contents.len == 0) + if(length(contents) == 0) to_chat(user, "\the [src] is empty.") return 1 processing = TRUE diff --git a/code/modules/food_and_drinks/recipes/recipes_grill.dm b/code/modules/food_and_drinks/recipes/recipes_grill.dm index e0a1569f330e..00a341c5d134 100644 --- a/code/modules/food_and_drinks/recipes/recipes_grill.dm +++ b/code/modules/food_and_drinks/recipes/recipes_grill.dm @@ -29,6 +29,13 @@ ) result = /obj/item/food/snacks/friedegg +/datum/recipe/grill/birdsteak + reagents = list("sodiumchloride" = 1, "blackpepper" = 1) + items = list( + /obj/item/food/snacks/meat/chicken + ) + result = /obj/item/food/snacks/meatsteak/chicken + /datum/recipe/grill/meatsteak reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( @@ -170,6 +177,7 @@ items = list( /obj/item/food/snacks/egg, /obj/item/food/snacks/boiledrice, + /obj/item/stack/seaweed ) result = /obj/item/food/snacks/sushi_Tamago @@ -178,6 +186,7 @@ items = list( /obj/item/fish/electric_eel, /obj/item/food/snacks/boiledrice, + /obj/item/stack/seaweed ) result = /obj/item/food/snacks/sushi_Unagi @@ -185,6 +194,7 @@ items = list( /obj/item/food/snacks/boiledrice, /obj/item/food/snacks/boiled_shrimp, + /obj/item/stack/seaweed ) result = /obj/item/food/snacks/sushi_Ebi @@ -192,6 +202,7 @@ items = list( /obj/item/food/snacks/boiledrice, /obj/item/fish_eggs/salmon, + /obj/item/stack/seaweed ) result = /obj/item/food/snacks/sushi_Ikura @@ -199,6 +210,7 @@ items = list( /obj/item/food/snacks/boiledrice, /obj/item/food/snacks/fried_tofu, + /obj/item/stack/seaweed ) result = /obj/item/food/snacks/sushi_Inari @@ -206,6 +218,7 @@ items = list( /obj/item/food/snacks/boiledrice, /obj/item/food/snacks/salmonmeat, + /obj/item/stack/seaweed ) result = /obj/item/food/snacks/sushi_Sake @@ -213,6 +226,7 @@ items = list( /obj/item/food/snacks/boiledrice, /obj/item/food/snacks/salmonsteak, + /obj/item/stack/seaweed ) result = /obj/item/food/snacks/sushi_SmokedSalmon @@ -220,6 +234,7 @@ items = list( /obj/item/food/snacks/boiledrice, /obj/item/fish_eggs/goldfish, + /obj/item/stack/seaweed ) result = /obj/item/food/snacks/sushi_Masago @@ -227,6 +242,7 @@ items = list( /obj/item/food/snacks/boiledrice, /obj/item/fish_eggs/shark, + /obj/item/stack/seaweed ) result = /obj/item/food/snacks/sushi_Tobiko @@ -234,6 +250,7 @@ items = list( /obj/item/food/snacks/sushi_Tobiko, /obj/item/food/snacks/egg, + /obj/item/stack/seaweed ) result = /obj/item/food/snacks/sushi_TobikoEgg @@ -241,6 +258,7 @@ items = list( /obj/item/food/snacks/boiledrice, /obj/item/food/snacks/catfishmeat, + /obj/item/stack/seaweed ) result = /obj/item/food/snacks/sushi_Tai diff --git a/code/modules/food_and_drinks/recipes/recipes_microwave.dm b/code/modules/food_and_drinks/recipes/recipes_microwave.dm index ccbb8df2ea31..c87d60bcdc4d 100644 --- a/code/modules/food_and_drinks/recipes/recipes_microwave.dm +++ b/code/modules/food_and_drinks/recipes/recipes_microwave.dm @@ -60,6 +60,13 @@ ) result = /obj/item/food/snacks/human/burger +/datum/recipe/microwave/chickenburger + items = list( + /obj/item/food/snacks/bun, + /obj/item/food/snacks/meat/chicken + ) + result = /obj/item/food/snacks/burger/chicken + /datum/recipe/microwave/plainburger items = list( /obj/item/food/snacks/bun, @@ -387,13 +394,6 @@ ) result = /obj/item/food/snacks/soup/coldchili -/datum/recipe/microwave/spellburger - items = list( - /obj/item/food/snacks/bun, - /obj/item/clothing/head/wizard/fake - ) - result = /obj/item/food/snacks/burger/spell - /datum/recipe/microwave/spellburger items = list( /obj/item/food/snacks/bun, @@ -1472,3 +1472,4 @@ /obj/item/food/snacks/shrimp ) result = /obj/item/food/snacks/boiled_shrimp + diff --git a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm index 5aaf7023d7fc..05d21f480bdb 100644 --- a/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm +++ b/code/modules/food_and_drinks/recipes/tablecraft/recipes_table.dm @@ -1,13 +1,3 @@ -/* Example for reference when defining recipes -/datum/crafting_recipe/food - name = "" //in-game display name - reqs[] = list() //type paths of items/reagents consumed associated with how many are needed (equivalent to var/list/items and var/list/reagents combined) - result //type path of item resulting from this craft - tools[] = list() //type paths of items needed but not consumed - time = 30 //time in deciseconds - parts[] = list() //type paths of items that will be placed in the result -*/ - /datum/crafting_recipe/sandwich name = "Sandwich" reqs = list( @@ -84,6 +74,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/food/snacks/boiled_shrimp = 1, + /obj/item/stack/seaweed = 1, ) result = list(/obj/item/food/snacks/sushi_Ebi) category = CAT_FOOD @@ -94,6 +85,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/food/snacks/boiled_shrimp = 4, + /obj/item/stack/seaweed = 1, ) pathtools = list(/obj/item/kitchen/sushimat) result = list(/obj/item/food/snacks/sliceable/Ebi_maki) @@ -105,6 +97,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/salmon = 1, + /obj/item/stack/seaweed = 1, ) result = list(/obj/item/food/snacks/sushi_Ikura) category = CAT_FOOD @@ -115,6 +108,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/salmon = 4, + /obj/item/stack/seaweed = 1, ) pathtools = list(/obj/item/kitchen/sushimat) result = list(/obj/item/food/snacks/sliceable/Ikura_maki) @@ -126,6 +120,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/food/snacks/fried_tofu = 1, + /obj/item/stack/seaweed = 1, ) result = list(/obj/item/food/snacks/sushi_Inari) category = CAT_FOOD @@ -136,6 +131,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/food/snacks/fried_tofu = 4, + /obj/item/stack/seaweed = 1, ) pathtools = list(/obj/item/kitchen/sushimat) result = list(/obj/item/food/snacks/sliceable/Inari_maki) @@ -147,6 +143,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/food/snacks/salmonmeat = 1, + /obj/item/stack/seaweed = 1, ) result = list(/obj/item/food/snacks/sushi_Sake) category = CAT_FOOD @@ -157,6 +154,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/food/snacks/salmonmeat = 4, + /obj/item/stack/seaweed = 1, ) pathtools = list(/obj/item/kitchen/sushimat) result = list(/obj/item/food/snacks/sliceable/Sake_maki) @@ -168,6 +166,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/food/snacks/salmonsteak = 1, + /obj/item/stack/seaweed = 1, ) result = list(/obj/item/food/snacks/sushi_SmokedSalmon) category = CAT_FOOD @@ -178,6 +177,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/food/snacks/salmonsteak = 4, + /obj/item/stack/seaweed = 1, ) pathtools = list(/obj/item/kitchen/sushimat) result = list(/obj/item/food/snacks/sliceable/SmokedSalmon_maki) @@ -189,6 +189,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/goldfish = 1, + /obj/item/stack/seaweed = 1, ) result = list(/obj/item/food/snacks/sushi_Masago) category = CAT_FOOD @@ -199,6 +200,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/goldfish = 4, + /obj/item/stack/seaweed = 1, ) pathtools = list(/obj/item/kitchen/sushimat) result = list(/obj/item/food/snacks/sliceable/Masago_maki) @@ -210,6 +212,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/shark = 1, + /obj/item/stack/seaweed = 1, ) result = list(/obj/item/food/snacks/sushi_Tobiko) category = CAT_FOOD @@ -220,6 +223,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/fish_eggs/shark = 4, + /obj/item/stack/seaweed = 1, ) pathtools = list(/obj/item/kitchen/sushimat) result = list(/obj/item/food/snacks/sliceable/Tobiko_maki) @@ -231,6 +235,7 @@ reqs = list( /obj/item/food/snacks/sushi_Tobiko = 1, /obj/item/food/snacks/egg = 1, + /obj/item/stack/seaweed = 1, ) result = list(/obj/item/food/snacks/sushi_TobikoEgg) category = CAT_FOOD @@ -241,6 +246,7 @@ reqs = list( /obj/item/food/snacks/sushi_Tobiko = 4, /obj/item/food/snacks/egg = 4, + /obj/item/stack/seaweed = 1, ) pathtools = list(/obj/item/kitchen/sushimat) result = list(/obj/item/food/snacks/sliceable/TobikoEgg_maki) @@ -252,6 +258,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/food/snacks/catfishmeat = 1, + /obj/item/stack/seaweed = 1, ) result = list(/obj/item/food/snacks/sushi_Tai) category = CAT_FOOD @@ -262,6 +269,7 @@ reqs = list( /obj/item/food/snacks/boiledrice = 1, /obj/item/food/snacks/catfishmeat = 4, + /obj/item/stack/seaweed = 1, ) pathtools = list(/obj/item/kitchen/sushimat) result = list(/obj/item/food/snacks/sliceable/Tai_maki) diff --git a/code/modules/games/tarot.dm b/code/modules/games/tarot.dm index da99f76b2fd3..eba209dd8922 100644 --- a/code/modules/games/tarot.dm +++ b/code/modules/games/tarot.dm @@ -17,7 +17,7 @@ var/mob/living/user = usr if(cooldown < world.time - 1 SECONDS) var/list/newcards = list() - while(cards.len) + while(length(cards)) var/datum/playingcard/P = pick(cards) P.name = replacetext(P.name," reversed","") if(prob(50)) diff --git a/code/modules/hydroponics/beekeeping/beebox.dm b/code/modules/hydroponics/beekeeping/beebox.dm index 3df3c4f5c3e7..01fb9c6111b8 100644 --- a/code/modules/hydroponics/beekeeping/beebox.dm +++ b/code/modules/hydroponics/beekeeping/beebox.dm @@ -93,16 +93,16 @@ /obj/structure/beebox/process() if(queen_bee) - if(bee_resources >= BEE_RESOURCE_HONEYCOMB_COST && honeycombs.len < get_max_honeycomb()) + if(bee_resources >= BEE_RESOURCE_HONEYCOMB_COST && length(honeycombs) < get_max_honeycomb()) bee_resources = max(bee_resources-BEE_RESOURCE_HONEYCOMB_COST, 0) var/obj/item/food/snacks/honeycomb/HC = new(src) if(queen_bee.beegent) HC.set_reagent(queen_bee.beegent.id) honeycombs += HC - if(bees.len < get_max_bees()) + if(length(bees) < get_max_bees()) var/freebee = FALSE //a freebee, geddit?, hahaha HAHAHAHA - if(bees.len <= 1) //there's always one set of worker bees, this isn't colony collapse disorder its 2d spessmen + if(length(bees) <= 1) //there's always one set of worker bees, this isn't colony collapse disorder its 2d spessmen freebee = TRUE if((bee_resources >= BEE_RESOURCE_NEW_BEE_COST && prob(BEE_PROB_NEW_BEE)) || freebee) if(!freebee) @@ -131,25 +131,25 @@ . += "There is no queen bee! There won't bee any honeycomb without a queen!" var/half_bee = get_max_bees()*0.5 - if(half_bee && (bees.len >= half_bee)) + if(half_bee && (length(bees) >= half_bee)) . += "This place is a BUZZ with activity... there are lots of bees!" . += "[bee_resources]/100 resource supply." . += "[bee_resources]% towards a new honeycomb." . += "[bee_resources*2]% towards a new bee." - if(honeycombs.len) - var/plural = honeycombs.len > 1 - . += "There [plural? "are" : "is"] [honeycombs.len] uncollected honeycomb[plural ? "s":""] in the apiary." + if(length(honeycombs)) + var/plural = length(honeycombs) > 1 + . += "There [plural? "are" : "is"] [length(honeycombs)] uncollected honeycomb[plural ? "s":""] in the apiary." - if(honeycombs.len >= get_max_honeycomb()) + if(length(honeycombs) >= get_max_honeycomb()) . += "there's no room for more honeycomb!" /obj/structure/beebox/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/honey_frame)) var/obj/item/honey_frame/HF = I - if(honey_frames.len < BEEBOX_MAX_FRAMES) + if(length(honey_frames) < BEEBOX_MAX_FRAMES) if(!user.unEquip(HF)) return visible_message("[user] adds a frame to the apiary.") @@ -227,7 +227,7 @@ return switch(option) if("Remove a Honey Frame") - if(!honey_frames.len) + if(!length(honey_frames)) to_chat(user, "There are no honey frames to remove!") return @@ -239,7 +239,7 @@ var/amtH = HF.honeycomb_capacity var/fallen = 0 - while(honeycombs.len && amtH) //let's pretend you always grab the frame with the most honeycomb on it + while(length(honeycombs) && amtH) //let's pretend you always grab the frame with the most honeycomb on it var/obj/item/food/snacks/honeycomb/HC = pick_n_take(honeycombs) if(HC) HC.forceMove(get_turf(src)) diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index 2965904de884..2662b6e68cdf 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -171,6 +171,7 @@ ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "GeneModder", name) + ui.set_autoupdate(FALSE) ui.open() /obj/machinery/plantgenes/ui_data(mob/user) diff --git a/code/modules/hydroponics/grown/kudzu.dm b/code/modules/hydroponics/grown/kudzu.dm index 415e06f5dc99..48f7ef5358d1 100644 --- a/code/modules/hydroponics/grown/kudzu.dm +++ b/code/modules/hydroponics/grown/kudzu.dm @@ -55,7 +55,7 @@ for(var/datum/spacevine_mutation/SM in mutations) if(initial(SM.quality) == SPACEVINE_MUTATION_NEGATIVE) temp_mut_list += SM - if(prob(20) && temp_mut_list.len) + if(prob(20) && length(temp_mut_list)) mutations.Remove(pick(temp_mut_list)) temp_mut_list.Cut() @@ -63,7 +63,7 @@ for(var/datum/spacevine_mutation/SM in mutations) if(initial(SM.quality) == SPACEVINE_MUTATION_POSITIVE) temp_mut_list += SM - if(prob(20) && temp_mut_list.len) + if(prob(20) && length(temp_mut_list)) mutations.Remove(pick(temp_mut_list)) temp_mut_list.Cut() @@ -71,7 +71,7 @@ for(var/datum/spacevine_mutation/SM in mutations) if(initial(SM.quality) == SPACEVINE_MUTATION_MINOR_NEGATIVE) temp_mut_list += SM - if(prob(20) && temp_mut_list.len) + if(prob(20) && length(temp_mut_list)) mutations.Remove(pick(temp_mut_list)) temp_mut_list.Cut() diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index a2710f815b24..37ac3e36132f 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -96,6 +96,7 @@ if(loaded) to_chat(user, "You transfer [loaded] seeds from [O] into [src].") + SStgui.update_uis(src) else var/seedable = 0 for(var/obj/item/food/snacks/grown/ignored in P) @@ -115,10 +116,10 @@ else if(istype(O, /obj/item/unsorted_seeds)) to_chat(user, "You need to sort [O] first!") return ..() - else if(istype(O,/obj/item/seeds)) - if(add_seed(O, user)) - to_chat(user, "You add [O] to [name].") - updateUsrDialog() + else if(istype(O, /obj/item/seeds)) + add_seed(O, user) + to_chat(user, "You add [O] to [name].") + SStgui.update_uis(src) return else if(seedify(O,-1, src, user)) to_chat(user, "You extract some seeds.") @@ -143,6 +144,7 @@ ui = SStgui.try_update_ui(user, src, ui) if(!ui) ui = new(user, src, "SeedExtractor", name) + ui.set_autoupdate(FALSE) ui.open() /obj/machinery/seed_extractor/ui_data(mob/user) @@ -177,18 +179,14 @@ /obj/machinery/seed_extractor/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) if(..()) return - . = FALSE + . = TRUE switch(action) if("vend") vend_seed(params["seed_id"], params["seed_variant"], params["vend_amount"]) add_fingerprint(usr) - . = TRUE if("set_vend_amount") - if(!length(params["vend_amount"])) - return vend_amount = clamp(params["vend_amount"], 1, MAX_DISPENSE_SEEDS) add_fingerprint(usr) - . = TRUE /obj/machinery/seed_extractor/proc/vend_seed(seed_id, seed_variant, amount) if(!seed_id) @@ -241,7 +239,6 @@ pile_count++ piles += new_pile O.forceMove(src) - return /datum/seed_pile var/path diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 8bdba0b43e2a..1b8250a8728b 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -475,8 +475,31 @@ /obj/item/seeds/proc/add_random_traits(lower = 0, upper = 2) var/amount_random_traits = rand(lower, upper) + var/list/name_to_path = list( + "Liquid Contents" = /datum/plant_gene/trait/squash, + "Slippery Skin" = /datum/plant_gene/trait/slip, + "Electrical Activity" = /datum/plant_gene/trait/cell_charge, + "Bioluminescence" = /datum/plant_gene/trait/glow, + "Shadow Emission" = /datum/plant_gene/trait/glow/shadow, + "Red Electrical Glow" = /datum/plant_gene/trait/glow/red, + "Strong Bioluminescence" = /datum/plant_gene/trait/glow/berry, + "Bluespace Activity" = /datum/plant_gene/trait/teleport, + "Densified Chemicals" = /datum/plant_gene/trait/maxchem, + "Perennial Growth" = /datum/plant_gene/trait/repeated_harvest, + "Capacitive Cell Production" = /datum/plant_gene/trait/battery, + "Hypodermic Prickles" = /datum/plant_gene/trait/stinging, + "gaseous decomposition" = /datum/plant_gene/trait/smoke, + "Fire Resistance" = /datum/plant_gene/trait/fire_resistance, + ) for(var/i in 1 to amount_random_traits) - var/random_trait = pick((subtypesof(/datum/plant_gene/trait)-typesof(/datum/plant_gene/trait/plant_type))) + var/list/possible_traits = (subtypesof(/datum/plant_gene/trait) - typesof(/datum/plant_gene/trait/plant_type)) + //removing existing traits and conflicting traits be added from the list of traits to choose from + for(var/datum/plant_gene/trait/j in genes) + var/trait_name = j.name + possible_traits -= list(name_to_path[trait_name]) + if(trait_name == "Red Electrical Glow"|| trait_name == "Strong Bioluminescence"||trait_name == "Shadow Emission"||trait_name == "Bioluminescence") + possible_traits -= typesof(/datum/plant_gene/trait/glow) + var/random_trait = pick(possible_traits) var/datum/plant_gene/trait/T = new random_trait if(T.can_add(src)) genes += T diff --git a/code/modules/mapping/access_helpers.dm b/code/modules/mapping/access_helpers.dm index 6eb44eccfa2a..819125630bca 100644 --- a/code/modules/mapping/access_helpers.dm +++ b/code/modules/mapping/access_helpers.dm @@ -411,8 +411,6 @@ /obj/effect/mapping_helpers/airlock/access/all/service/chapel_office access = ACCESS_CHAPEL_OFFICE -/obj/effect/mapping_helpers/airlock/access/all/service/crematorium - access = ACCESS_CREMATORIUM /obj/effect/mapping_helpers/airlock/access/all/service/crematorium access = ACCESS_CREMATORIUM diff --git a/code/modules/mapping/windoor_access_helpers.dm b/code/modules/mapping/windoor_access_helpers.dm index fcc341441e5b..015eebf685ef 100644 --- a/code/modules/mapping/windoor_access_helpers.dm +++ b/code/modules/mapping/windoor_access_helpers.dm @@ -414,9 +414,6 @@ /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 diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index 05f88ee28347..36e99c67e575 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -256,31 +256,6 @@ else to_chat(H, "Your hands are full.") -//ITEMS - -/obj/item/clothing/gloves/boxing - var/datum/martial_art/boxing/style - -/obj/item/clothing/gloves/boxing/Initialize() - . = ..() - style = new() - -/obj/item/clothing/gloves/boxing/equipped(mob/user, slot) - if(!ishuman(user)) - return - if(slot == SLOT_HUD_GLOVES) - var/mob/living/carbon/human/H = user - style.teach(H, TRUE) - return - -/obj/item/clothing/gloves/boxing/dropped(mob/user) - ..() - if(!ishuman(user)) - return - var/mob/living/carbon/human/H = user - if(H.get_item_by_slot(SLOT_HUD_GLOVES) == src) - style.remove(H) - /obj/item/storage/belt/champion/wrestling name = "Wrestling Belt" var/datum/martial_art/wrestling/style diff --git a/code/modules/mining/equipment/wormhole_jaunter.dm b/code/modules/mining/equipment/wormhole_jaunter.dm index 2ceca3a04fe8..50e08b835665 100644 --- a/code/modules/mining/equipment/wormhole_jaunter.dm +++ b/code/modules/mining/equipment/wormhole_jaunter.dm @@ -37,7 +37,7 @@ return var/list/L = get_destinations(user) - if(!L.len) + if(!length(L)) to_chat(user, "[src] found no beacons in the world to anchor a wormhole to.") return var/chosen_beacon = pick(L) diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index f8dbebab4536..11bec33326eb 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -24,7 +24,7 @@ GLOBAL_LIST_EMPTY(total_extraction_beacons) if(EP.beacon_network in beacon_networks) possible_beacons += EP - if(!possible_beacons.len) + if(!length(possible_beacons)) to_chat(user, "There are no extraction beacons in existence!") return diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index 44423056c453..7c2002d27065 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -139,7 +139,7 @@ if(O.air) var/datum/gas_mixture/G = O.air G.copy_from(O.air) - if(prob(florachance) && NewFlora.len && !is_blocked_turf(O)) + if(prob(florachance) && length(NewFlora) && !is_blocked_turf(O)) var/atom/Picked = pick(NewFlora) new Picked(O) continue diff --git a/code/modules/mining/lavaland/loot/tendril_loot.dm b/code/modules/mining/lavaland/loot/tendril_loot.dm index fc5a25709446..2055b5e736ab 100644 --- a/code/modules/mining/lavaland/loot/tendril_loot.dm +++ b/code/modules/mining/lavaland/loot/tendril_loot.dm @@ -57,7 +57,7 @@ /obj/item/shared_storage/attack_self(mob/living/carbon/user) if(!iscarbon(user)) return - if(src == user.l_hand || src == user.r_hand) + if(user.is_holding(src)) bag?.open(user) else ..() diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index bf9bfc53edf2..65386ffc6de1 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -223,7 +223,7 @@ /obj/item/clothing/head/hooded/berserker/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(berserk_active) return - if(istype(hitby, /obj/item/projectile)) + if(isprojectile(hitby)) var/obj/item/projectile/P = hitby if(P.damage_type == STAMINA) return //no disabler rage diff --git a/code/modules/mining/machine_processing.dm b/code/modules/mining/machine_processing.dm index 6f9a0885d28d..13c348d1ef81 100644 --- a/code/modules/mining/machine_processing.dm +++ b/code/modules/mining/machine_processing.dm @@ -192,7 +192,7 @@ generate_mineral(alloy.build_path) /obj/machinery/mineral/processing_unit/proc/can_smelt(datum/design/D) - if(D.make_reagents.len) + if(length(D.make_reagents)) return FALSE var/build_amount = SMELT_AMOUNT diff --git a/code/modules/mining/minebot.dm b/code/modules/mining/minebot.dm index 070713dd7582..fcd5f801580d 100644 --- a/code/modules/mining/minebot.dm +++ b/code/modules/mining/minebot.dm @@ -195,7 +195,7 @@ O.forceMove(src) /mob/living/simple_animal/hostile/mining_drone/proc/DropOre(message = 1) - if(!contents.len) + if(!length(contents)) if(message) to_chat(src, "You attempt to dump your stored ore, but you have none.") return diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index bbaf8aa8e724..5ff52401effa 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -1,116 +1,193 @@ -/**********************Mint**************************/ - +#define COIN_COST MINERAL_MATERIAL_AMOUNT * 0.2 /obj/machinery/mineral/mint name = "coin press" icon = 'icons/obj/economy.dmi' - icon_state = "coinpress0" + icon_state = "coin_press" density = TRUE anchored = TRUE - var/newCoins = 0 //how many coins the machine made in it's last load - var/processing = FALSE - var/chosen = MAT_METAL //which material will be used to make coins - var/coinsToProduce = 10 - speed_process = TRUE - + /// How many coins did the machine make in total. + var/total_coins = 0 + /// Is it creating coins now? + var/active = FALSE + /// Which material will be used to make coins or for ejecting. + var/chosen_material + /// Inserted money bag. + var/obj/item/storage/bag/money/money_bag /obj/machinery/mineral/mint/Initialize(mapload) . = ..() - AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_PLASMA, MAT_SILVER, MAT_GOLD, MAT_URANIUM, MAT_DIAMOND, MAT_BANANIUM, MAT_TRANQUILLITE), MINERAL_MATERIAL_AMOUNT * 50, FALSE, /obj/item/stack) + var/static/list/coin_materials = list() + if(!length(coin_materials)) + for(var/datum/material/coin_mat as anything in subtypesof(/datum/material)) + var/obj/item/coin/coin_type = coin_mat.coin_type + if(!coin_type) + continue + coin_materials += coin_mat.id + + AddComponent(/datum/component/material_container, coin_materials, MINERAL_MATERIAL_AMOUNT * 50, FALSE, /obj/item/stack, _after_insert = CALLBACK(src, PROC_REF(material_insert))) + chosen_material = pick(coin_materials[1]) + +/obj/machinery/mineral/mint/Destroy() + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + materials.retrieve_all() + return ..() + +/obj/machinery/mineral/mint/update_icon_state() + if(active) + icon_state = "coin_press-active" + else + icon_state = "coin_press" /obj/machinery/mineral/mint/wrench_act(mob/user, obj/item/I) default_unfasten_wrench(user, I, time = 4 SECONDS) return TRUE -/obj/machinery/mineral/mint/process() - var/turf/T = get_step(src, input_dir) - if(!T) - return +/obj/machinery/mineral/mint/attack_hand(mob/user) + add_fingerprint(user) + ui_interact(user) + +/obj/machinery/mineral/mint/attack_ghost(mob/user) + ui_interact(user) + +/obj/machinery/mineral/mint/ui_state(mob/user) + return GLOB.default_state + +/obj/machinery/mineral/mint/ui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "CoinMint", name) + ui.set_autoupdate(FALSE) + ui.open() + +/obj/machinery/mineral/mint/ui_assets(mob/user) + return list( + get_asset_datum(/datum/asset/spritesheet/materials) + ) + +/obj/machinery/mineral/mint/ui_data(mob/user) + var/list/data = list() + + data["active"] = active + data["chosenMaterial"] = chosen_material + data["totalCoins"] = total_coins + data["moneyBag"] = !!money_bag + + if(money_bag) + data["moneyBagContent"] = length(money_bag.contents) + data["moneyBagMaxContent"] = money_bag.storage_slots var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - for(var/obj/item/stack/sheet/O in T) - materials.insert_stack(O, O.amount) + data["totalMaterials"] = materials.total_amount + data["maxMaterials"] = materials.max_amount -/obj/machinery/mineral/mint/attack_hand(mob/user) + var/list/material_list = list() + for(var/mat_id in materials.materials) + var/datum/material/material = materials.materials[mat_id] + material_list += list(list( + "name" = material.name, + "amount" = material.amount / MINERAL_MATERIAL_AMOUNT, + "id" = material.id + )) + data["materials"] = material_list + + return data + +/obj/machinery/mineral/mint/ui_act(action, params, datum/tgui/ui) if(..()) return - var/dat = "Coin Press
    " + . = TRUE var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - for(var/mat_id in materials.materials) - var/datum/material/M = materials.materials[mat_id] - if(!M.amount && chosen != mat_id) - continue - dat += "
    [M.name] amount: [M.amount] cm3 " - if(chosen == mat_id) - dat += "Chosen" - else - dat += "Choose" - - var/datum/material/M = materials.materials[chosen] - - dat += "

    Will produce [coinsToProduce] [lowertext(M.name)] coins if enough materials are available.
    " - dat += "-10 " - dat += "-5 " - dat += "-1 " - dat += "+1 " - dat += "+5 " - dat += "+10 " - - dat += "

    In total this machine produced [newCoins] coins." - dat += "
    Make coins" - user << browse(dat, "window=mint") - -/obj/machinery/mineral/mint/Topic(href, href_list) - if(..()) + switch(action) + if("selectMaterial") + if(!materials.materials[params["material"]]) + return + chosen_material = params["material"] + if("activate") + if(active) + active = FALSE + else + try_make_coins() + update_icon(UPDATE_ICON_STATE) + if("ejectMat") + var/datum/material/material = materials.materials[chosen_material] + if(material.amount < MINERAL_MATERIAL_AMOUNT) + to_chat(usr, "Not enough [material.name] to eject!") + return + var/num_sheets = tgui_input_number(usr, "How many sheets do you want to eject?", "Ejecting [material.name]", max_value = round(material.amount / MINERAL_MATERIAL_AMOUNT), min_value = 1) + if(isnull(num_sheets)) + return + materials.retrieve_sheets(num_sheets, chosen_material) + if("ejectBag") + eject_bag(usr) + +/obj/machinery/mineral/mint/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/storage/bag/money)) + if(money_bag) + to_chat(user, "There is already a [money_bag.name] inside!") + return + if(!user.drop_item()) + return + to_chat(user, "You put a [I.name] into a [src].") + I.forceMove(src) + money_bag = I + SStgui.update_uis(src) return - usr.set_machine(src) - add_fingerprint(usr) - if(processing) - to_chat(usr, "The machine is processing.") + + return ..() + +/obj/machinery/mineral/mint/process() + if(!active) + return + if(length(money_bag.contents) >= money_bag.storage_slots) + active = FALSE + visible_message("[src] stops printing to prevent an overflow.") + update_icon(UPDATE_ICON_STATE) + SStgui.update_uis(src) return + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) - if(href_list["choose"]) - if(materials.materials[href_list["choose"]]) - chosen = href_list["choose"] - if(href_list["chooseAmt"]) - coinsToProduce = clamp(coinsToProduce + text2num(href_list["chooseAmt"]), 0, 1000) - if(href_list["makeCoins"]) - var/temp_coins = coinsToProduce - processing = TRUE - icon_state = "coinpress1" - var/coin_mat = MINERAL_MATERIAL_AMOUNT * 0.2 - var/datum/material/M = materials.materials[chosen] - if(!M || !M.coin_type) - updateUsrDialog() - return + var/datum/material/material = materials.materials[chosen_material] + if(!materials.can_use_amount(COIN_COST, chosen_material)) + active = FALSE + visible_message("[src] ceased production due to a lack of material.") + update_icon(UPDATE_ICON_STATE) + SStgui.update_uis(src) + return - while(coinsToProduce > 0 && materials.can_use_amount(coin_mat, chosen)) - if(!create_coins(M.coin_type)) - visible_message("[src] stops printing to prevent an overflow.") - break - materials.use_amount_type(coin_mat, chosen) - coinsToProduce-- - newCoins++ - updateUsrDialog() - sleep(5) - - icon_state = "coinpress0" - processing = FALSE - coinsToProduce = temp_coins - updateUsrDialog() - -/obj/machinery/mineral/mint/proc/create_coins(P) - var/turf/T = get_step(src,output_dir) - if(!T) - return FALSE - var/obj/item/O = new P(src) - var/obj/item/storage/bag/money/M = locate(/obj/item/storage/bag/money, T) - if(!M) - M = new /obj/item/storage/bag/money(src) - unload_mineral(M) - else if(!M.can_be_inserted(O, FALSE)) // First coin will always fit. But will the Xth? - qdel(O) - return FALSE - O.forceMove(M) - return TRUE + materials.use_amount_type(COIN_COST, chosen_material) + new material.coin_type(money_bag) + total_coins++ + SStgui.update_uis(src) + +/obj/machinery/mineral/mint/proc/try_make_coins(mob/user) + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + if(!money_bag) + visible_message("[src] cannot work without a money bag!") + return + if(length(money_bag.contents) == money_bag.storage_slots) + visible_message("[money_bag.name] is full!") + return + if(!materials.can_use_amount(COIN_COST, chosen_material)) + visible_message("Lack of selected material for production!") + return + active = TRUE + +/obj/machinery/mineral/mint/proc/eject_bag(mob/user) + if(!money_bag || !(user && iscarbon(user) && user.Adjacent(src))) + return + if(active) + active = FALSE + if(user.put_in_hands(money_bag)) + to_chat(user, "You take a [money_bag.name] out of [src].") + else + var/turf/T = get_step(src, output_dir) + money_bag.forceMove(T) + money_bag = null + SStgui.update_uis(src) + +/obj/machinery/mineral/mint/proc/material_insert() + SStgui.update_uis(src) + +#undef COIN_COST diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm index a626ff933b75..cfe03086e7d1 100644 --- a/code/modules/mining/money_bag.dm +++ b/code/modules/mining/money_bag.dm @@ -1,5 +1,3 @@ -/*****************************Money bag********************************/ - /obj/item/storage/bag/money name = "money bag" icon_state = "moneybag" @@ -9,8 +7,8 @@ max_integrity = 100 w_class = WEIGHT_CLASS_BULKY max_w_class = WEIGHT_CLASS_NORMAL - storage_slots = 40 - max_combined_w_class = 40 + storage_slots = 50 + max_combined_w_class = 50 can_hold = list(/obj/item/coin, /obj/item/stack/spacecash) /obj/item/storage/bag/money/vault/populate_contents() diff --git a/code/modules/mob/dead/observer/observer_say.dm b/code/modules/mob/dead/observer/observer_say.dm index 3b97ab5d8344..0f86ba90898b 100644 --- a/code/modules/mob/dead/observer/observer_say.dm +++ b/code/modules/mob/dead/observer/observer_say.dm @@ -9,19 +9,18 @@ return say_dead(message) -/mob/dead/observer/handle_track(message, verb = "says", mob/speaker = null, speaker_name, atom/follow_target, hard_to_hear) +/mob/dead/observer/handle_track(message, verb = "says", atom/movable/speaker = null, speaker_name, atom/follow_target, hard_to_hear) return "[speaker_name] ([ghost_follow_link(follow_target, ghost=src)])" -/mob/dead/observer/handle_speaker_name(mob/speaker = null, vname, hard_to_hear, check_name_against) +/mob/dead/observer/handle_speaker_name(atom/movable/speaker = null, vname, hard_to_hear, check_name_against) var/speaker_name = ..() - if(!speaker) + if(!speaker || !ismob(speaker)) return speaker_name - //Announce computer and various stuff that broadcasts doesn't use it's real name but AI's can't pretend to be other mobs. - if(isAI(speaker) || isAutoAnnouncer(speaker)) + var/mob/speaker_mob = speaker + if(isAI(speaker_mob)) + //AI's can't pretend to be other mobs. return speaker_name - if(!check_name_against) - check_name_against = speaker_name - if(check_name_against == speaker.real_name) + if(!check_name_against || check_name_against == speaker_mob.real_name) return speaker_name - speaker_name = "[speaker.real_name] ([speaker_name])" + speaker_name = "[speaker_mob.real_name] ([speaker_name])" return speaker_name diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index c00b0667daaf..f5f6e0e1ec1b 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -1,6 +1,6 @@ // At minimum every mob has a hear_say proc. -/mob/proc/combine_message(list/message_pieces, verb, mob/speaker, always_stars = FALSE) +/mob/proc/combine_message(list/message_pieces, verb, atom/movable/speaker, always_stars = FALSE) var/iteration_count = 0 var/msg = "" // This is to make sure that the pieces have actually added something for(var/datum/multilingual_say_piece/SP in message_pieces) @@ -128,7 +128,7 @@ playsound_local(source, speech_sound, sound_vol, 1, sound_frequency) -/mob/proc/hear_radio(list/message_pieces, verb = "says", part_a, part_b, mob/speaker = null, hard_to_hear = 0, vname = "", atom/follow_target, check_name_against) +/mob/proc/hear_radio(list/message_pieces, verb = "says", part_a, part_b, atom/movable/speaker = null, hard_to_hear = 0, vname = "", atom/follow_target, check_name_against) if(!client) return @@ -155,7 +155,7 @@ else to_chat(src, "[part_a][speaker_name][part_b][message]
    ") -/mob/proc/handle_speaker_name(mob/speaker = null, vname, hard_to_hear) +/mob/proc/handle_speaker_name(atom/movable/speaker = null, vname, hard_to_hear) var/speaker_name = "unknown" if(speaker) speaker_name = speaker.name @@ -168,7 +168,7 @@ return speaker_name -/mob/proc/handle_track(message, verb = "says", mob/speaker = null, speaker_name, atom/follow_target, hard_to_hear) +/mob/proc/handle_track(message, verb = "says", atom/movable/speaker = null, speaker_name, atom/follow_target, hard_to_hear) return /mob/proc/hear_sleep(message) @@ -177,8 +177,8 @@ message = strip_html_properly(message) var/list/punctuation = list(",", "!", ".", ";", "?") var/list/messages = splittext(message, " ") - if(messages.len > 0) - var/R = rand(1, messages.len) + if(length(messages) > 0) + var/R = rand(1, length(messages)) var/heardword = messages[R] if(copytext(heardword,1, 1) in punctuation) heardword = copytext(heardword,2) @@ -192,7 +192,7 @@ to_chat(src, heard) -/mob/proc/hear_holopad_talk(list/message_pieces, verb = "says", mob/speaker = null, obj/effect/overlay/holo_pad_hologram/H) +/mob/proc/hear_holopad_talk(list/message_pieces, verb = "says", atom/movable/speaker = null, obj/effect/overlay/holo_pad_hologram/H) if(stat == UNCONSCIOUS) hear_sleep(multilingual_to_message(message_pieces)) return @@ -204,8 +204,9 @@ var/message_unverbed = combine_message(message_pieces, null, speaker) var/name = speaker.name - if(!say_understands(speaker)) - name = speaker.voice_name + if(!say_understands(speaker) && ismob(speaker)) + var/mob/speaker_mob = speaker + name = speaker_mob.voice_name if((client?.prefs.toggles2 & PREFTOGGLE_2_RUNECHAT) && can_hear()) create_chat_message(H, message_unverbed) diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 9994faf145aa..33ded1571896 100644 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -24,7 +24,7 @@ var/join_override /datum/language/proc/get_random_name(gender, name_count=2, syllable_count=4) - if(!syllables || !syllables.len || english_names) + if(!syllables || !length(syllables) || english_names) if(gender==FEMALE) return capitalize(pick(GLOB.first_names_female)) + " " + capitalize(pick(GLOB.last_names)) else @@ -43,7 +43,7 @@ /datum/language/proc/scramble(input) - if(!syllables || !syllables.len) + if(!syllables || !length(syllables)) return stars(input) // If the input is cached already, move it to the end of the cache and return it @@ -82,8 +82,8 @@ // Add it to cache, cutting old entries if the list is too long scramble_cache[input] = scrambled_text - if(scramble_cache.len > SCRAMBLE_CACHE_LEN) - scramble_cache.Cut(1, scramble_cache.len-SCRAMBLE_CACHE_LEN-1) + if(length(scramble_cache) > SCRAMBLE_CACHE_LEN) + scramble_cache.Cut(1, length(scramble_cache)-SCRAMBLE_CACHE_LEN-1) return scrambled_text diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm index 7879d0d6c32d..260a7fa9adad 100644 --- a/code/modules/mob/living/autohiss.dm +++ b/code/modules/mob/living/autohiss.dm @@ -23,47 +23,6 @@ prefs.active_character.autohiss_mode = AUTOHISS_OFF to_chat(src, "Auto-hiss is now OFF.") -/datum/species/unathi - autohiss_basic_map = list( - "s" = list("ss", "sss", "ssss") - ) - autohiss_extra_map = list( - "x" = list("ks", "kss", "ksss") - ) - autohiss_exempt = list("Sinta'unathi") - -/datum/species/tajaran - autohiss_basic_map = list( - "r" = list("rr", "rrr", "rrrr") - ) - autohiss_exempt = list("Siik'tajr") - -/datum/species/plasmaman - autohiss_basic_map = list( - "s" = list("ss", "sss", "ssss") - ) - -/datum/species/kidan - autohiss_basic_map = list( - "z" = list("zz", "zzz", "zzzz"), - "v" = list("vv", "vvv", "vvvv") - ) - autohiss_extra_map = list( - "s" = list("z", "zs", "zzz", "zzsz") - ) - autohiss_exempt = list("Chittin") - -/datum/species/drask - autohiss_basic_map = list( - "o" = list ("oo", "ooo"), - "u" = list ("uu", "uuu") - ) - autohiss_extra_map = list( - "m" = list ("mm", "mmm") - ) - autohiss_exempt = list("Orluum") - - /datum/species/proc/handle_autohiss(message, datum/language/lang, mode) if(!autohiss_basic_map) return message diff --git a/code/modules/mob/living/brain/living_brain.dm b/code/modules/mob/living/brain/living_brain.dm index 46a63baf1b85..5ad1d5ac57d0 100644 --- a/code/modules/mob/living/brain/living_brain.dm +++ b/code/modules/mob/living/brain/living_brain.dm @@ -18,31 +18,14 @@ return ..() /mob/living/brain/say_understands(other)//Goddamn is this hackish, but this say code is so odd - if(isAI(other)) - if(!(container && istype(container, /obj/item/mmi))) - return 0 - else - return 1 - if(istype(other, /mob/living/silicon/decoy)) - if(!(container && istype(container, /obj/item/mmi))) - return 0 - else - return 1 - if(ispAI(other)) - if(!(container && istype(container, /obj/item/mmi))) - return 0 - else - return 1 - if(isrobot(other)) - if(!(container && istype(container, /obj/item/mmi))) - return 0 - else - return 1 + if(!ismob(other)) + return ..() + if(issilicon(other)) + return istype(container, /obj/item/mmi) if(ishuman(other)) - return 1 + return TRUE if(isslime(other)) - return 1 - return ..() + return TRUE /mob/living/brain/ex_act() //you cant blow up brainmobs because it makes transfer_to() freak out when borgs blow up. return diff --git a/code/modules/mob/living/brain/robotic_brain.dm b/code/modules/mob/living/brain/robotic_brain.dm index 3771163bc087..6df62bcd671f 100644 --- a/code/modules/mob/living/brain/robotic_brain.dm +++ b/code/modules/mob/living/brain/robotic_brain.dm @@ -81,7 +81,7 @@ name = "[src] ([brainmob.name])" to_chat(brainmob, "You are a [src], brought into existence on [station_name()].") - to_chat(brainmob, "As a non-sentient synthetic intelligence, you answer to [imprinted_master], unless otherwise placed inside of a lawed synthetic structure or mech.") + to_chat(brainmob, "As a non-sapient synthetic intelligence, you answer to [imprinted_master], unless otherwise placed inside of a lawed synthetic structure or mech.") to_chat(brainmob, "Remember, the purpose of your existence is to serve [imprinted_master]'s every word, unless lawed or placed into a mech in the future.") brainmob.mind.assigned_role = "Positronic Brain" @@ -121,7 +121,7 @@ to_chat(user, "You cannot be \a [src].") return transfer_personality(user) - + /obj/item/mmi/robotic_brain/proc/validity_checks(mob/dead/observer/O) if(istype(O)) if(!O.check_ahud_rejoin_eligibility()) @@ -137,8 +137,8 @@ return FALSE /obj/item/mmi/robotic_brain/examine(mob/user) - . += "Its speaker is turned [silenced ? "off" : "on"]." . = ..() + . += "Its speaker is turned [silenced ? "off" : "on"]." var/list/msg = list("") diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 1fdfa0c9d00a..fa09251977f4 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -1,3 +1,4 @@ +#define XENO_TOTAL_LAYERS 6 /mob/living/carbon/alien/humanoid name = "alien" icon_state = "alien_s" @@ -11,6 +12,7 @@ var/alien_slash_damage = 20 //Aliens deal a good amount of damage on harm intent var/alien_movement_delay = 0 //This can be + or -, how fast an alien moves var/temperature_resistance = T0C+75 + var/list/overlays_standing[XENO_TOTAL_LAYERS] pass_flags = PASSTABLE hud_type = /datum/hud/alien @@ -96,3 +98,5 @@ GLOBAL_LIST_INIT(strippable_alien_humanoid_items, create_strippable_list(list( /mob/living/carbon/alien/humanoid/get_permeability_protection() return 0.8 + +#undef XENO_TOTAL_LAYERS diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm index 6a4c5a2f216f..5732c200ee63 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid_update_icons.dm @@ -5,12 +5,8 @@ #define X_R_HAND_LAYER 4 #define X_TARGETED_LAYER 5 #define X_FIRE_LAYER 6 -#define X_TOTAL_LAYERS 6 ///////////////////////////////// -/mob/living/carbon/alien/humanoid - var/list/overlays_standing[X_TOTAL_LAYERS] - /mob/living/carbon/alien/humanoid/update_icons() overlays.Cut() for(var/image/I in overlays_standing) @@ -144,4 +140,3 @@ #undef X_R_HAND_LAYER #undef X_TARGETED_LAYER #undef X_FIRE_LAYER -#undef X_TOTAL_LAYERS diff --git a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm index fffd5c5e98ec..41a63358c218 100644 --- a/code/modules/mob/living/carbon/alien/special/alien_embryo.dm +++ b/code/modules/mob/living/carbon/alien/special/alien_embryo.dm @@ -84,7 +84,7 @@ // he will become the alien but if he doesn't then we will set the stage // to 2, so we don't do a process heavy check everytime. - if(candidates.len) + if(length(candidates)) C = pick(candidates) else if(owner.client) C = owner.client diff --git a/code/modules/mob/living/carbon/carbon_life.dm b/code/modules/mob/living/carbon/carbon_life.dm index 3310c5211dc7..ea63a7763df6 100644 --- a/code/modules/mob/living/carbon/carbon_life.dm +++ b/code/modules/mob/living/carbon/carbon_life.dm @@ -355,7 +355,7 @@ clear_fullscreen("brute") /mob/living/carbon/proc/handle_patches() - var/multiple_patch_multiplier = processing_patches.len > 1 ? (processing_patches.len * 1.5) : 1 + var/multiple_patch_multiplier = length(processing_patches) > 1 ? (length(processing_patches) * 1.5) : 1 var/applied_amount = 0.35 * multiple_patch_multiplier for(var/patch in processing_patches) diff --git a/code/modules/mob/living/carbon/carbon_procs.dm b/code/modules/mob/living/carbon/carbon_procs.dm index 3c5e566edb29..b7369d34f6a3 100644 --- a/code/modules/mob/living/carbon/carbon_procs.dm +++ b/code/modules/mob/living/carbon/carbon_procs.dm @@ -913,7 +913,7 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, list(/obj/machinery/atmospherics/unary/ven if(I == handcuffed) if(istype(I, /obj/item/restraints/handcuffs/twimsts)) playsound(loc, 'sound/items/eatfood.ogg', 50, FALSE) - if(I.reagents && I.reagents.reagent_list.len) + if(I.reagents && length(I.reagents.reagent_list)) taste(I.reagents) I.reagents.reaction(src, REAGENT_INGEST) I.reagents.trans_to(src, I.reagents.total_volume) diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 9f9ad50fe929..0d27033de48b 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -4,27 +4,28 @@ AC.ui_interact(user) /mob/living/carbon/human/proc/change_gender(new_gender, update_dna = TRUE) - var/obj/item/organ/external/head/H = bodyparts_by_name["head"] - if(gender == new_gender || (gender == PLURAL && !dna.species.has_gender)) + if(gender == new_gender) return gender = new_gender - if(istype(H)) - var/datum/sprite_accessory/hair/current_hair = GLOB.hair_styles_full_list[H.h_style] - if(current_hair.gender != NEUTER && current_hair.gender != gender) - reset_head_hair() - - var/datum/sprite_accessory/hair/current_fhair = GLOB.facial_hair_styles_list[H.f_style] - if(current_fhair.gender != NEUTER && current_fhair.gender != gender) - reset_facial_hair() - if(update_dna) update_dna() sync_organ_dna(assimilate = FALSE) update_body() return TRUE +/mob/living/carbon/human/proc/change_body_type(new_body, update_dna = TRUE) + if(!new_body || new_body == body_type) + return + + body_type = new_body + + if(update_dna) + update_dna() + sync_organ_dna(FALSE) + update_body(TRUE) + /mob/living/carbon/human/proc/change_hair(hair_style, fluff) var/obj/item/organ/external/head/H = get_organ("head") @@ -154,7 +155,7 @@ if(!H) return var/list/valid_hairstyles = generate_valid_hairstyles() - if(valid_hairstyles.len) + if(length(valid_hairstyles)) H.h_style = pick(valid_hairstyles) else //this shouldn't happen @@ -173,7 +174,7 @@ if(!H) return var/list/valid_facial_hairstyles = generate_valid_facial_hairstyles() - if(valid_facial_hairstyles.len) + if(length(valid_facial_hairstyles)) H.f_style = pick(valid_facial_hairstyles) else //this shouldn't happen @@ -185,7 +186,7 @@ if(location) valid_markings = generate_valid_markings(location) - if(valid_markings.len) + if(length(valid_markings)) m_styles[location] = pick(valid_markings) else //this shouldn't happen @@ -193,7 +194,7 @@ else for(var/m_location in list("head", "body", "tail")) valid_markings = generate_valid_markings(m_location) - if(valid_markings.len) + if(length(valid_markings)) m_styles[m_location] = pick(valid_markings) else //this shouldn't happen @@ -207,7 +208,7 @@ if(!H) return var/list/valid_head_accessories = generate_valid_head_accessories() - if(valid_head_accessories.len) + if(length(valid_head_accessories)) H.ha_style = pick(valid_head_accessories) else //this shouldn't happen @@ -350,9 +351,9 @@ var/list/valid_species = new() for(var/current_species_name in GLOB.all_species) if(check_whitelist && !check_rights(R_ADMIN, FALSE, src)) //If we're using the whitelist, make sure to check it! - if(whitelist.len && !(current_species_name in whitelist)) + if(length(whitelist) && !(current_species_name in whitelist)) continue - if(blacklist.len && (current_species_name in blacklist)) + if(length(blacklist) && (current_species_name in blacklist)) continue if(!can_use_species(src, current_species_name)) continue @@ -373,8 +374,6 @@ if(hairstyle == "Bald") //Just in case. valid_hairstyles += hairstyle continue - if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE)) - continue if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... var/datum/robolimb/robohead = GLOB.all_robolimbs[H.model] if((H.dna.species.name in S.species_allowed) && robohead.is_monitor && ((S.models_allowed && (robohead.company in S.models_allowed)) || !S.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. @@ -401,8 +400,6 @@ if(facialhairstyle == "Shaved") //Just in case. valid_facial_hairstyles += facialhairstyle continue - if((H.gender == MALE && S.gender == FEMALE) || (H.gender == FEMALE && S.gender == MALE)) - continue if(H.dna.species.bodyflags & ALL_RPARTS) //If the user is a species who can have a robotic head... var/datum/robolimb/robohead = GLOB.all_robolimbs[H.model] if(H.dna.species.name in S.species_allowed) //If this is a facial hair style native to the user's species... diff --git a/code/modules/mob/living/carbon/human/body_accessories.dm b/code/modules/mob/living/carbon/human/body_accessories.dm index 3d59dbec9be9..364626c0dffb 100644 --- a/code/modules/mob/living/carbon/human/body_accessories.dm +++ b/code/modules/mob/living/carbon/human/body_accessories.dm @@ -12,7 +12,7 @@ GLOBAL_LIST_EMPTY(body_accessory_by_species) GLOB.body_accessory_by_species["[species]"] = list() GLOB.body_accessory_by_species["[species]"]["[accessory.name]"] = accessory - if(GLOB.body_accessory_by_species.len) + if(length(GLOB.body_accessory_by_species)) return TRUE return FALSE diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm index cc304453716c..565d09412c59 100644 --- a/code/modules/mob/living/carbon/human/human_damage.dm +++ b/code/modules/mob/living/carbon/human/human_damage.dm @@ -241,7 +241,7 @@ //It automatically updates health status /mob/living/carbon/human/heal_organ_damage(brute, burn, updating_health = TRUE) var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) - if(!parts.len) + if(!length(parts)) return var/obj/item/organ/external/picked = pick(parts) if(picked.heal_damage(brute,burn, updating_health)) @@ -252,7 +252,7 @@ //It automatically updates health status /mob/living/carbon/human/take_organ_damage(brute, burn, updating_health = TRUE, sharp = FALSE, edge = 0) var/list/obj/item/organ/external/parts = get_damageable_organs() - if(!parts.len) + if(!length(parts)) return var/obj/item/organ/external/picked = pick(parts) if(picked.receive_damage(brute, burn, sharp, updating_health)) @@ -264,7 +264,7 @@ var/list/obj/item/organ/external/parts = get_damaged_organs(brute,burn) var/update = 0 - while(parts.len && ( brute > 0 || burn > 0)) + while(length(parts) && ( brute > 0 || burn > 0)) var/obj/item/organ/external/picked = pick(parts) var/brute_was = picked.brute_dam @@ -289,10 +289,10 @@ var/list/obj/item/organ/external/parts = get_damageable_organs() var/update = 0 - while(parts.len && (brute>0 || burn>0)) + while(length(parts) && (brute>0 || burn>0)) var/obj/item/organ/external/picked = pick(parts) - var/brute_per_part = brute/parts.len - var/burn_per_part = burn/parts.len + var/brute_per_part = brute / length(parts) + var/burn_per_part = burn / length(parts) var/brute_was = picked.brute_dam var/burn_was = picked.burn_dam diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 56c1af2531bd..5cf1b5218fcc 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -32,6 +32,8 @@ var/height = "average height" /// Players physique (even MORE fluff) var/physique = "average" + /// The body type associated with the body + var/body_type = MALE var/underwear = "Nude" //Which underwear the player wants var/undershirt = "Nude" //Which undershirt the player wants diff --git a/code/modules/mob/living/carbon/human/human_emote.dm b/code/modules/mob/living/carbon/human/human_emote.dm index 39712e24151b..a85c0158ccf5 100644 --- a/code/modules/mob/living/carbon/human/human_emote.dm +++ b/code/modules/mob/living/carbon/human/human_emote.dm @@ -12,7 +12,7 @@ var/mob/living/carbon/human/human_user = user if(!species_custom_messages || (human_user.mind?.miming && !species_custom_mime_messages)) - return . + return var/custom_message if(user.mind?.miming) diff --git a/code/modules/mob/living/carbon/human/human_examine.dm b/code/modules/mob/living/carbon/human/human_examine.dm index 165353221e99..acae13a999c0 100644 --- a/code/modules/mob/living/carbon/human/human_examine.dm +++ b/code/modules/mob/living/carbon/human/human_examine.dm @@ -228,7 +228,7 @@ criminal = R.fields["criminal"] if(LAZYLEN(R.fields["comments"])) //if the commentlist is present var/list/comments = R.fields["comments"] - commentLatest = LAZYACCESS(comments, comments.len) //get the latest entry from the comment log + commentLatest = LAZYACCESS(comments, length(comments)) //get the latest entry from the comment log if(islist(commentLatest)) commentLatest = "[commentLatest["header"]]: [commentLatest["text"]]" else diff --git a/code/modules/mob/living/carbon/human/human_inventory.dm b/code/modules/mob/living/carbon/human/human_inventory.dm index 9368caf61c18..3b39a48a1f07 100644 --- a/code/modules/mob/living/carbon/human/human_inventory.dm +++ b/code/modules/mob/living/carbon/human/human_inventory.dm @@ -201,7 +201,7 @@ update_hair() //rebuild hair update_fhair() update_head_accessory() - if(hud_list.len) + if(length(hud_list)) sec_hud_set_ID() wear_mask_update(I, toggle_off = TRUE) update_inv_wear_mask() @@ -222,7 +222,7 @@ update_inv_belt() if(SLOT_HUD_WEAR_ID) wear_id = I - if(hud_list.len) + if(length(hud_list)) sec_hud_set_ID() update_inv_wear_id() if(SLOT_HUD_WEAR_PDA) diff --git a/code/modules/mob/living/carbon/human/human_life.dm b/code/modules/mob/living/carbon/human/human_life.dm index ab18b3fd2b8b..b1aa99b34b0d 100644 --- a/code/modules/mob/living/carbon/human/human_life.dm +++ b/code/modules/mob/living/carbon/human/human_life.dm @@ -635,7 +635,7 @@ if(healthdoll) if(stat == DEAD) healthdoll.icon_state = "healthdoll_DEAD" - if(healthdoll.overlays.len) + if(length(healthdoll.overlays)) healthdoll.overlays.Cut() else var/list/new_overlays = list() diff --git a/code/modules/mob/living/carbon/human/human_mob.dm b/code/modules/mob/living/carbon/human/human_mob.dm index c79acbd6c07f..59786362d25b 100644 --- a/code/modules/mob/living/carbon/human/human_mob.dm +++ b/code/modules/mob/living/carbon/human/human_mob.dm @@ -555,7 +555,7 @@ if(setmedical != "Cancel") R.fields["p_stat"] = setmedical modified = TRUE - if(GLOB.PDA_Manifest.len) + if(length(GLOB.PDA_Manifest)) GLOB.PDA_Manifest.Cut() if(!modified) @@ -864,7 +864,7 @@ obscured |= SLOT_HUD_RIGHT_EAR obscured |= SLOT_HUD_LEFT_EAR - if(obscured.len > 0) + if(length(obscured) > 0) return obscured else return null @@ -1087,9 +1087,6 @@ if(oldspecies.default_language) remove_language(oldspecies.default_language) - if(gender == PLURAL && oldspecies.has_gender) - change_gender(pick(MALE, FEMALE)) - oldspecies.handle_dna(src, TRUE) // Remove any mutations that belong to the old species oldspecies.on_species_loss(src) @@ -1451,8 +1448,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X /mob/living/carbon/human/singularity_pull(S, current_size) ..() if(current_size >= STAGE_THREE) - var/list/handlist = list(l_hand, r_hand) - for(var/obj/item/hand in handlist) + for(var/obj/item/hand in get_both_hands(src)) if(prob(current_size * 5) && hand.w_class >= ((11-current_size)/2) && unEquip(hand)) step_towards(hand, src) to_chat(src, "\The [S] pulls \the [hand] from your grip!") diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 9584796cd3af..8ba0a96fcc78 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -18,7 +18,7 @@ if(!IS_HORIZONTAL(src) && world.time - l_move_time < 15) //Moving around with fractured ribs won't do you any good - if(E.is_broken() && E.internal_organs && E.internal_organs.len && prob(15)) + if(E.is_broken() && E.internal_organs && length(E.internal_organs) && prob(15)) var/obj/item/organ/internal/I = pick(E.internal_organs) E.custom_pain("You feel broken bones moving in your [E.name]!") I.receive_damage(rand(3, 5)) diff --git a/code/modules/mob/living/carbon/human/human_say.dm b/code/modules/mob/living/carbon/human/human_say.dm index f8d56e8934d8..f992b4215c79 100644 --- a/code/modules/mob/living/carbon/human/human_say.dm +++ b/code/modules/mob/living/carbon/human/human_say.dm @@ -6,23 +6,24 @@ return " (as [get_id_name("Unknown")])" return ..() -/mob/living/carbon/human/say_understands(mob/other, datum/language/speaking = null) +/mob/living/carbon/human/say_understands(atom/movable/other, datum/language/speaking = null) if(dna.species.can_understand(other)) - return 1 + return TRUE //These only pertain to common. Languages are handled by mob/say_understands() - if(!speaking) + if(!speaking && ismob(other)) if(isnymph(other)) - if(other.languages.len >= 2) //They've sucked down some blood and can speak common now. - return 1 + var/mob/nymph = other + if(length(nymph.languages) >= 2) //They've sucked down some blood and can speak common now. + return TRUE if(issilicon(other)) - return 1 + return TRUE if(isbot(other)) - return 1 + return TRUE if(isbrain(other)) - return 1 + return TRUE if(isslime(other)) - return 1 + return TRUE return ..() 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 f24d67e83466..9c743a9e373d 100644 --- a/code/modules/mob/living/carbon/human/human_update_icons.dm +++ b/code/modules/mob/living/carbon/human/human_update_icons.dm @@ -590,7 +590,7 @@ GLOBAL_LIST_EMPTY(damage_icon_parts) bloodsies.color = w_uniform.blood_color standing.overlays += bloodsies - if(w_uniform.accessories.len) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. // oh my god kys whoever made this if statement jfc :gun: + if(length(w_uniform.accessories)) //WE CHECKED THE TYPE ABOVE. THIS REALLY SHOULD BE FINE. // oh my god kys whoever made this if statement jfc :gun: for(var/obj/item/clothing/accessory/A in w_uniform:accessories) var/tie_color = A.item_color if(!tie_color) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 1d6d67f995d2..c2eb52766e60 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -118,7 +118,6 @@ var/forced_heartattack = FALSE //Some species have blood, but we still want them to have heart attacks var/dies_at_threshold = FALSE // Do they die or get knocked out at specific thresholds, or do they go through complex crit? var/can_revive_by_healing // Determines whether or not this species can be revived by simply healing them - var/has_gender = TRUE var/blacklisted = FALSE var/dangerous_existence = FALSE @@ -318,7 +317,7 @@ ADD_SLOWDOWN(H.r_hand.slowdown) if(ignoreslow) - return . // Only malusses after here + return // Only malusses after here if(H.dna.species.spec_movement_delay()) //Species overrides for slowdown due to feet/legs . += 2 * H.stance_damage //damaged/missing feet or legs is slow @@ -858,13 +857,13 @@ if(SLOT_HUD_IN_BACKPACK) if(H.back && istype(H.back, /obj/item/storage/backpack)) var/obj/item/storage/backpack/B = H.back - if(B.contents.len < B.storage_slots && I.w_class <= B.max_w_class) + if(length(B.contents) < B.storage_slots && I.w_class <= B.max_w_class) return TRUE if(H.back && ismodcontrol(H.back)) var/obj/item/mod/control/C = H.back if(C.bag) var/obj/item/storage/backpack/B = C.bag - if(B.contents.len < B.storage_slots && I.w_class <= B.max_w_class) + if(length(B.contents) < B.storage_slots && I.w_class <= B.max_w_class) return TRUE return FALSE if(SLOT_HUD_TIE) diff --git a/code/modules/mob/living/carbon/human/species/diona_species.dm b/code/modules/mob/living/carbon/human/species/diona_species.dm index 65ad87eadda9..0bd8e688321f 100644 --- a/code/modules/mob/living/carbon/human/species/diona_species.dm +++ b/code/modules/mob/living/carbon/human/species/diona_species.dm @@ -22,7 +22,6 @@ inherent_biotypes = MOB_ORGANIC | MOB_HUMANOID | MOB_PLANT clothing_flags = HAS_SOCKS default_hair_colour = "#000000" - has_gender = FALSE bodyflags = SHAVED dietflags = DIET_HERB //Diona regenerate nutrition in light and water, no diet necessary, but if they must, they eat other plants *scream taste_sensitivity = TASTE_SENSITIVITY_DULL @@ -64,8 +63,8 @@ /datum/species/diona/can_understand(mob/other) if(isnymph(other)) - return 1 - return 0 + return TRUE + return FALSE /datum/species/diona/on_species_gain(mob/living/carbon/human/H) ..() diff --git a/code/modules/mob/living/carbon/human/species/drask.dm b/code/modules/mob/living/carbon/human/species/drask.dm index a5586270a6ae..fba0d6f97e86 100644 --- a/code/modules/mob/living/carbon/human/species/drask.dm +++ b/code/modules/mob/living/carbon/human/species/drask.dm @@ -32,7 +32,6 @@ species_traits = list(LIPS, NO_HAIR) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT bodyflags = HAS_SKIN_TONE | HAS_BODY_MARKINGS | BALD | SHAVED - has_gender = FALSE dietflags = DIET_OMNI cold_level_1 = -1 //Default 260 - Lower is better @@ -58,6 +57,14 @@ "eyes" = /obj/item/organ/internal/eyes/drask, //5 darksight. "brain" = /obj/item/organ/internal/brain/drask ) + autohiss_basic_map = list( + "o" = list ("oo", "ooo"), + "u" = list ("uu", "uuu") + ) + autohiss_extra_map = list( + "m" = list ("mm", "mmm") + ) + autohiss_exempt = list("Orluum") /datum/species/drask/get_species_runechat_color(mob/living/carbon/human/H) var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index eb8f49a44142..416a9f2b73d5 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -53,7 +53,7 @@ // 3% chance that our golem has a human surname, because cultural contamination if(prob(human_surname_chance)) golem_surname = pick(GLOB.last_names) - else if(special_names && special_names.len && prob(special_name_chance)) + else if(special_names && length(special_names) && prob(special_name_chance)) golem_surname = pick(special_names) var/golem_name = "[prefix] [golem_surname]" @@ -143,21 +143,21 @@ /datum/species/golem/plasma/on_species_gain(mob/living/carbon/C, datum/species/old_species) ..() if(ishuman(C)) - var/datum/action/innate/ignite/ignite = new() - ignite.Grant(C) + var/datum/action/innate/golem_ignite/golem_ignite = new() + golem_ignite.Grant(C) /datum/species/golem/plasma/on_species_loss(mob/living/carbon/C) - for(var/datum/action/innate/ignite/ignite in C.actions) - ignite.Remove(C) + for(var/datum/action/innate/golem_ignite/golem_ignite in C.actions) + golem_ignite.Remove(C) ..() -/datum/action/innate/ignite +/datum/action/innate/golem_ignite name = "Ignite" desc = "Set yourself aflame, bringing yourself closer to exploding!" check_flags = AB_CHECK_CONSCIOUS button_icon_state = "sacredflame" -/datum/action/innate/ignite/Activate() +/datum/action/innate/golem_ignite/Activate() if(ishuman(owner)) var/mob/living/carbon/human/H = owner if(H.fire_stacks) @@ -448,7 +448,7 @@ if(T.y>world.maxy-tele_range || T.yworld.maxy-tele_range || T.yYou're not missing any limbs!") return diff --git a/code/modules/mob/living/carbon/human/species/tajaran.dm b/code/modules/mob/living/carbon/human/species/tajaran.dm index 2ec13166f027..6a71141a991e 100644 --- a/code/modules/mob/living/carbon/human/species/tajaran.dm +++ b/code/modules/mob/living/carbon/human/species/tajaran.dm @@ -51,6 +51,10 @@ "is jamming their claws into their eye sockets!", "is twisting their own neck!", "is holding their breath!") + autohiss_basic_map = list( + "r" = list("rr", "rrr", "rrrr") + ) + autohiss_exempt = list("Siik'tajr") /datum/species/tajaran/handle_death(gibbed, mob/living/carbon/human/H) H.stop_tail_wagging() diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm index 9faf4ae4c518..146d4b606b69 100644 --- a/code/modules/mob/living/carbon/human/species/unathi.dm +++ b/code/modules/mob/living/carbon/human/species/unathi.dm @@ -54,18 +54,25 @@ "is jamming their claws into their eye sockets!", "is twisting their own neck!", "is holding their breath!") + autohiss_basic_map = list( + "s" = list("ss", "sss", "ssss") + ) + autohiss_extra_map = list( + "x" = list("ks", "kss", "ksss") + ) + autohiss_exempt = list("Sinta'unathi") /datum/species/unathi/on_species_gain(mob/living/carbon/human/H) ..() - var/datum/action/innate/ignite/fire = new() + var/datum/action/innate/unathi_ignite/fire = new() fire.Grant(H) /datum/species/unathi/on_species_loss(mob/living/carbon/human/H) ..() - for(var/datum/action/innate/ignite/fire in H.actions) + for(var/datum/action/innate/unathi_ignite/fire in H.actions) fire.Remove(H) -/datum/action/innate/ignite +/datum/action/innate/unathi_ignite name = "Ignite" desc = "A fire forms in your mouth, fierce enough to... light a cigarette. Requires you to drink welding fuel beforehand." icon_icon = 'icons/obj/cigarettes.dmi' @@ -75,7 +82,7 @@ var/welding_fuel_used = 3 //one sip, with less strict timing check_flags = AB_CHECK_HANDS_BLOCKED -/datum/action/innate/ignite/Activate() +/datum/action/innate/unathi_ignite/Activate() var/mob/living/carbon/human/user = owner if(world.time <= cooldown) to_chat(user, "Your throat hurts too much to do it right now. Wait [round((cooldown - world.time) / 10)] seconds and try again.") @@ -95,7 +102,6 @@ else to_chat(user, "You need to drink welding fuel first.") - /datum/species/unathi/handle_death(gibbed, mob/living/carbon/human/H) H.stop_tail_wagging() @@ -127,14 +133,14 @@ /datum/species/unathi/ashwalker/on_species_gain(mob/living/carbon/human/H) ..() - for(var/datum/action/innate/ignite/fire in H.actions) + for(var/datum/action/innate/unathi_ignite/fire in H.actions) fire.Remove(H) - var/datum/action/innate/ignite/ash_walker/fire = new() + var/datum/action/innate/unathi_ignite/ash_walker/fire = new() fire.Grant(H) /datum/species/unathi/ashwalker/on_species_loss(mob/living/carbon/human/H) ..() - for(var/datum/action/innate/ignite/ash_walker/fire in H.actions) + for(var/datum/action/innate/unathi_ignite/ash_walker/fire in H.actions) fire.Remove(H) /datum/species/unathi/ashwalker/movement_delay(mob/living/carbon/human/H) @@ -143,7 +149,7 @@ if(!is_mining_level(our_turf.z)) . -= speed_mod -/datum/action/innate/ignite/ash_walker +/datum/action/innate/unathi_ignite/ash_walker desc = "You form a fire in your mouth, fierce enough to... light a cigarette." cooldown_duration = 3 MINUTES welding_fuel_used = 0 // Ash walkers dont need welding fuel to use ignite diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm index 853819c6bcd2..c300570b0dd0 100644 --- a/code/modules/mob/living/carbon/human/species/vox.dm +++ b/code/modules/mob/living/carbon/human/species/vox.dm @@ -30,7 +30,6 @@ flesh_color = "#808D11" //Default styles for created mobs. default_hair = "Short Vox Quills" - has_gender = FALSE default_hair_colour = "#614f19" //R: 97, G: 79, B: 25 butt_sprite = "vox" diff --git a/code/modules/mob/living/carbon/superheroes.dm b/code/modules/mob/living/carbon/superheroes.dm index e3bc02451f17..3c317c8688e3 100644 --- a/code/modules/mob/living/carbon/superheroes.dm +++ b/code/modules/mob/living/carbon/superheroes.dm @@ -1,8 +1,3 @@ -/datum/game_mode - var/list/datum/mind/superheroes = list() - var/list/datum/mind/supervillains = list() - var/list/datum/mind/greyshirts = list() - /datum/superheroes var/name var/desc @@ -34,7 +29,7 @@ singlemutcheck(H, mutation, MUTCHK_FORCED) /datum/superheroes/proc/assign_spells(mob/living/carbon/human/H) - if(default_spells.len) + if(length(default_spells)) for(var/spell in default_spells) var/datum/spell/S = spell if(!S) @@ -161,7 +156,7 @@ return T /datum/spell/recruit/can_cast(mob/user = usr, charge_check = TRUE, show_message = FALSE) - if(SSticker.mode.greyshirts.len >= 3) + if(length(SSticker.mode.greyshirts) >= 3) if(show_message) to_chat(user, "You have already recruited the maximum number of henchmen.") return FALSE diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 97312fe3906e..406d4154a651 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -1010,7 +1010,7 @@ if(client) if(new_z) SSmobs.clients_by_zlevel[new_z] += src - for(var/I in length(SSidlenpcpool.idle_mobs_by_zlevel[new_z]) to 1 step -1) //Backwards loop because we're removing (guarantees optimal rather than worst-case performance), it's fine to use .len here but doesn't compile on 511 + for(var/I in length(SSidlenpcpool.idle_mobs_by_zlevel[new_z]) to 1 step -1) //Backwards loop because we're removing (guarantees optimal rather than worst-case performance) var/mob/living/simple_animal/SA = SSidlenpcpool.idle_mobs_by_zlevel[new_z][I] if(SA) SA.toggle_ai(AI_ON) // Guarantees responsiveness for when appearing right next to mobs diff --git a/code/modules/mob/living/living_emote.dm b/code/modules/mob/living/living_emote.dm index dbcb4c4add63..7f94d9ffce11 100644 --- a/code/modules/mob/living/living_emote.dm +++ b/code/modules/mob/living/living_emote.dm @@ -11,7 +11,6 @@ . = ..() if(user.mind?.miming) return FALSE // shh - return . /datum/emote/living/blush key = "blush" @@ -208,7 +207,7 @@ message_param = "tries to point at %t with a leg." else // nugget - message_param = "bumps [user.p_their()] head on the ground trying to motion towards %t." return ..() diff --git a/code/modules/mob/living/living_say.dm b/code/modules/mob/living/living_say.dm index 955d72abde29..f1af846f40d1 100644 --- a/code/modules/mob/living/living_say.dm +++ b/code/modules/mob/living/living_say.dm @@ -210,7 +210,7 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) var/message_range = world.view //speaking into radios - if(used_radios.len) + if(length(used_radios)) italics = TRUE message_range = 1 if(first_piece.speaking) @@ -440,7 +440,7 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) if(M.client) speech_bubble_recipients.Add(M.client) - if(eavesdropping.len) + if(length(eavesdropping)) stars_all(message_pieces) //hopefully passing the message twice through stars() won't hurt... I guess if you already don't understand the language, when they speak it too quietly to hear normally you would be able to catch even less. for(var/mob/M in eavesdropping) M.hear_say(message_pieces, verb, italics, src, use_voice = FALSE) @@ -449,7 +449,7 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) speech_bubble("[bubble_icon][speech_bubble_test]", src, speech_bubble_recipients) - if(watching.len) + if(length(watching)) var/rendered = "[name] [not_heard]." for(var/mob/M in watching) M.show_message(rendered, 2) diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm index deae1e417dab..57f15ef3a410 100644 --- a/code/modules/mob/living/login.dm +++ b/code/modules/mob/living/login.dm @@ -20,5 +20,3 @@ //Should update regardless of if we can ventcrawl, since we can end up in pipes in other ways. update_pipe_vision(loc) - - return . diff --git a/code/modules/mob/living/silicon/ai/ai_mob.dm b/code/modules/mob/living/silicon/ai/ai_mob.dm index f707fe927a95..89ad5bed7c4c 100644 --- a/code/modules/mob/living/silicon/ai/ai_mob.dm +++ b/code/modules/mob/living/silicon/ai/ai_mob.dm @@ -155,7 +155,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( while(!pickedName) pickedName = pick(GLOB.ai_names) for(var/mob/living/silicon/ai/A in GLOB.mob_list) - if(A.real_name == pickedName && possibleNames.len > 1) //fixing the theoretically possible infinite loop + if(A.real_name == pickedName && length(possibleNames) > 1) //fixing the theoretically possible infinite loop possibleNames -= pickedName pickedName = null @@ -273,11 +273,11 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( to_chat(src, "For department channels, use the following say commands:") var/radio_text = "" - for(var/i = 1 to aiRadio.channels.len) + for(var/i = 1 to length(aiRadio.channels)) var/channel = aiRadio.channels[i] var/key = get_radio_key_from_channel(channel) radio_text += "[key] - [channel]" - if(i != aiRadio.channels.len) + if(i != length(aiRadio.channels)) radio_text += ", " to_chat(src, radio_text) @@ -324,10 +324,10 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( dat += "-- [area_name] ([(dat2 != "") ? dat2 : "No Camera"])" else dat += "-- [area_name] (No Camera)" - if(sources.len > 1) + if(length(sources) > 1) dat += "- [length(sources)] sources" dat += "
    \n" - if(!L.len) + if(!length(L)) dat += "-- All Systems Nominal
    \n" dat += "
    \n" @@ -883,9 +883,9 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( return TRUE if(O) var/obj/machinery/camera/C = locateUID(O[1]) - if(O.len == 1 && !QDELETED(C) && C.can_use()) + if(length(O) == 1 && !QDELETED(C) && C.can_use()) queueAlarm("--- [class] alarm detected in [A.name]! ([C.c_tag])", class) - else if(O && O.len) + else if(O && length(O)) var/foo = 0 var/dat2 = "" for(var/thing in O) @@ -951,7 +951,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( continue var/list/tempnetwork = difflist(C.network,GLOB.restricted_camera_networks,1) - if(tempnetwork.len) + if(length(tempnetwork)) for(var/i in tempnetwork) cameralist[i] = i var/old_network = network @@ -1034,7 +1034,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( for(var/datum/data/record/t in GLOB.data_core.general)//Look in data core general. personnel_list["[t.fields["name"]]: [t.fields["rank"]]"] = t.fields["photo"]//Pull names, rank, and id photo. - if(personnel_list.len) + if(length(personnel_list)) input = tgui_input_list(usr, "Select a crew member", "Change Hologram", personnel_list) var/icon/character_icon = personnel_list[input] if(character_icon) diff --git a/code/modules/mob/living/silicon/ai/ai_say.dm b/code/modules/mob/living/silicon/ai/ai_say.dm index 5f9535b43c18..1e676eb05a32 100644 --- a/code/modules/mob/living/silicon/ai/ai_say.dm +++ b/code/modules/mob/living/silicon/ai/ai_say.dm @@ -3,7 +3,7 @@ */ -/mob/living/silicon/ai/handle_track(message, verb = "says", mob/speaker = null, speaker_name, atom/follow_target, hard_to_hear) +/mob/living/silicon/ai/handle_track(message, verb = "says", atom/movable/speaker = null, speaker_name, atom/follow_target, hard_to_hear) if(hard_to_hear) return @@ -34,9 +34,8 @@ jobname = "Cyborg" else if(ispAI(speaker)) jobname = "Personal AI" - else if(isAutoAnnouncer(speaker)) - var/mob/living/automatedannouncer/AA = speaker - jobname = AA.role + else if(isradio(speaker)) + jobname = "Automated Announcement" else jobname = "Unknown" diff --git a/code/modules/mob/living/silicon/ai/latejoin.dm b/code/modules/mob/living/silicon/ai/latejoin.dm index 495f8d9372f1..bb69a2e2ceff 100644 --- a/code/modules/mob/living/silicon/ai/latejoin.dm +++ b/code/modules/mob/living/silicon/ai/latejoin.dm @@ -63,7 +63,7 @@ GLOBAL_LIST_EMPTY(empty_playable_ai_cores) // Before calling this, make sure an empty core exists, or this will no-op /mob/living/silicon/ai/proc/moveToEmptyCore() - if(!GLOB.empty_playable_ai_cores.len) + if(!length(GLOB.empty_playable_ai_cores)) CRASH("moveToEmptyCore called without any available cores") // IsJobAvailable for AI checks that there is an empty core available in this list diff --git a/code/modules/mob/living/silicon/pai/pai_death.dm b/code/modules/mob/living/silicon/pai/pai_death.dm index 281fc25d2793..e7f041de10c1 100644 --- a/code/modules/mob/living/silicon/pai/pai_death.dm +++ b/code/modules/mob/living/silicon/pai/pai_death.dm @@ -3,7 +3,7 @@ if(!cleanWipe) force_fold_out() - visible_message("[src] emits a dull beep before it loses power and collapses.", "You hear a dull beep followed by the sound of glass crunching.") + visible_message("[src] emits a dull beep before it loses power and collapses.", "You hear a dull beep followed by the sound of glass crunching.") name = "pAI debris" desc = "The unfortunate remains of some poor personal AI device." icon_state = "[chassis]_dead" diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index e19be02507fd..09e6f0a9abeb 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -107,10 +107,10 @@ gripped_item?.afterattack(target, user, 1, params) //If gripped_item either didn't get deleted, or it failed to be transfered to its target - if(!gripped_item && contents.len) + if(!gripped_item && length(contents)) gripped_item = contents[1] return FALSE - else if(gripped_item && !contents.len) + else if(gripped_item && !length(contents)) gripped_item = null else if(isitem(target)) //Check that we're not pocketing a mob. diff --git a/code/modules/mob/living/silicon/robot/misc_robot_items.dm b/code/modules/mob/living/silicon/robot/misc_robot_items.dm index 05174cd247ed..22b21a4104c3 100644 --- a/code/modules/mob/living/silicon/robot/misc_robot_items.dm +++ b/code/modules/mob/living/silicon/robot/misc_robot_items.dm @@ -65,8 +65,6 @@ //Personal shielding for the combat module. -/obj/item/borg - var/powerneeded // Percentage of power remaining required to run item /obj/item/borg/destroyer/mobility name = "mobility module" diff --git a/code/modules/mob/living/silicon/robot/robot_defense.dm b/code/modules/mob/living/silicon/robot/robot_defense.dm index b6d53e6875dd..b397601193be 100644 --- a/code/modules/mob/living/silicon/robot/robot_defense.dm +++ b/code/modules/mob/living/silicon/robot/robot_defense.dm @@ -30,7 +30,7 @@ damage = rand(20, 40) else damage = rand(5, 35) - damage = round(damage / 2) // borgs recieve half damage + damage = round(damage / 2) // borgs receive half damage adjustBruteLoss(damage) return diff --git a/code/modules/mob/living/silicon/robot/robot_mob.dm b/code/modules/mob/living/silicon/robot/robot_mob.dm index 2891de7530b2..959c3e8a6abf 100644 --- a/code/modules/mob/living/silicon/robot/robot_mob.dm +++ b/code/modules/mob/living/silicon/robot/robot_mob.dm @@ -742,7 +742,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( dat += "" dat += "-- [area_name]" dat += "
    \n" - if(!L.len) + if(!length(L)) dat += "-- All Systems Nominal
    \n" dat += "
    \n" diff --git a/code/modules/mob/living/silicon/robot/robot_movement.dm b/code/modules/mob/living/silicon/robot/robot_movement.dm index 99caad61a714..8f933aec0b13 100644 --- a/code/modules/mob/living/silicon/robot/robot_movement.dm +++ b/code/modules/mob/living/silicon/robot/robot_movement.dm @@ -1,14 +1,17 @@ /mob/living/silicon/robot/Process_Spacemove(movement_dir = 0) if(ionpulse()) - return 1 + return TRUE if(..()) - return 1 - return 0 + return TRUE + return FALSE //No longer needed, but I'll leave it here incase we plan to re-use it. /mob/living/silicon/robot/movement_delay() . = ..() . += speed + // Counteract magboot slow in 0G. + if(!has_gravity(src) && HAS_TRAIT(src, TRAIT_MAGPULSE)) + . -= 2 // The slowdown value on the borg magpulse. if(module_active && istype(module_active,/obj/item/borg/destroyer/mobility)) . -= 3 . += GLOB.configuration.movement.robot_delay diff --git a/code/modules/mob/living/silicon/silicon_mob.dm b/code/modules/mob/living/silicon/silicon_mob.dm index 9a374ea0f880..a487def354f2 100644 --- a/code/modules/mob/living/silicon/silicon_mob.dm +++ b/code/modules/mob/living/silicon/silicon_mob.dm @@ -133,7 +133,7 @@ return /mob/living/silicon/proc/queueAlarm(message, type, incoming = TRUE) - var/in_cooldown = (alarms_to_show.len > 0 || alarms_to_clear.len > 0) + var/in_cooldown = (length(alarms_to_show) > 0 || length(alarms_to_clear) > 0) if(incoming) alarms_to_show += message alarm_types_show[type] += 1 @@ -147,7 +147,7 @@ addtimer(CALLBACK(src, PROC_REF(show_alarms)), 3 SECONDS) /mob/living/silicon/proc/show_alarms() - if(alarms_to_show.len < 5) + if(length(alarms_to_show) < 5) for(var/msg in alarms_to_show) to_chat(src, msg) else if(length(alarms_to_show)) @@ -173,11 +173,11 @@ var/msg_text = msg.Join("") to_chat(src, msg_text) - if(alarms_to_clear.len < 3) + if(length(alarms_to_clear) < 3) for(var/msg in alarms_to_clear) to_chat(src, msg) - else if(alarms_to_clear.len) + else if(length(alarms_to_clear)) var/list/msg = list("--- ") if(alarm_types_clear["Motion"]) diff --git a/code/modules/mob/living/silicon/silicon_say.dm b/code/modules/mob/living/silicon/silicon_say.dm index 0420cccf33f9..43eae896cac2 100644 --- a/code/modules/mob/living/silicon/silicon_say.dm +++ b/code/modules/mob/living/silicon/silicon_say.dm @@ -58,15 +58,15 @@ /mob/living/silicon/say_understands(other, datum/language/speaking = null) //These only pertain to common. Languages are handled by mob/say_understands() - if(!speaking) + if(!speaking && ismob(other)) if(iscarbon(other)) - return 1 + return TRUE if(issilicon(other)) - return 1 + return TRUE if(isbot(other)) - return 1 + return TRUE if(isbrain(other)) - return 1 + return TRUE return ..() //For holopads only. Usable by AI. diff --git a/code/modules/mob/living/simple_animal/bot/bot_construction.dm b/code/modules/mob/living/simple_animal/bot/bot_construction.dm index 875fc6e1a457..79cd8ab61e75 100644 --- a/code/modules/mob/living/simple_animal/bot/bot_construction.dm +++ b/code/modules/mob/living/simple_animal/bot/bot_construction.dm @@ -254,7 +254,7 @@ return if(!istype(src, /obj/item/storage/toolbox)) return - if(contents.len >= 1) + if(length(contents) >= 1) to_chat(user, "They won't fit in, as there is already stuff inside.") return if(T.use(10)) @@ -332,7 +332,7 @@ robot_arm = I.type //Making a medibot! - if(contents.len) + if(length(contents)) to_chat(user, "You need to empty [src] out first!") return @@ -618,7 +618,7 @@ else robot_arm = W.type - if(contents.len) + if(length(contents)) to_chat(user, "You need to empty [src] out first!") return diff --git a/code/modules/mob/living/simple_animal/bot/ed209bot.dm b/code/modules/mob/living/simple_animal/bot/ed209bot.dm index 9b7c3e74d4c8..b96a046710ee 100644 --- a/code/modules/mob/living/simple_animal/bot/ed209bot.dm +++ b/code/modules/mob/living/simple_animal/bot/ed209bot.dm @@ -482,7 +482,7 @@ if(C.stat==2) continue targets += C - if(targets.len) + if(length(targets)) if(prob(50)) var/mob/toshoot = pick(targets) if(toshoot) @@ -496,7 +496,7 @@ else shootAt(toshoot) else if(prob(50)) - if(targets.len) + if(length(targets)) var/mob/toarrest = pick(targets) if(toarrest) target = toarrest diff --git a/code/modules/mob/living/simple_animal/bot/floorbot.dm b/code/modules/mob/living/simple_animal/bot/floorbot.dm index 1f2e59041776..f7188f1a3be3 100644 --- a/code/modules/mob/living/simple_animal/bot/floorbot.dm +++ b/code/modules/mob/living/simple_animal/bot/floorbot.dm @@ -17,7 +17,7 @@ req_access = list(ACCESS_CONSTRUCTION, ACCESS_ROBOTICS) window_id = "autofloor" window_name = "Automatic Station Floor Repairer v1.1" - /// Determines what to do when process_scan() recieves a target. See process_scan() for details. + /// Determines what to do when process_scan() receives a target. See process_scan() for details. var/process_type /// Tiles in inventory var/amount = 10 diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 221ca0d017d1..8db8e6c708d6 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -672,7 +672,7 @@ var/obj/effect/decal/cleanable/blood/tracks/B = locate() in next if(!B) B = new /obj/effect/decal/cleanable/blood/tracks(loc) - if(blood_DNA && blood_DNA.len) + if(blood_DNA && length(blood_DNA)) B.blood_DNA |= blood_DNA.Copy() B.basecolor = currentBloodColor var/newdir = get_dir(next, loc) diff --git a/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm b/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm index ff76eef39575..635fbbbc7f17 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona_nymph.dm @@ -173,7 +173,7 @@ if(stat != CONSCIOUS) return FALSE - if(donors.len < evolve_donors) + if(length(donors) < evolve_donors) to_chat(src, "You need more blood in order to ascend to a new state of consciousness...") return FALSE @@ -259,12 +259,12 @@ update_progression() /mob/living/simple_animal/diona/proc/update_progression() - if(stat != CONSCIOUS || !donors.len) + if(stat != CONSCIOUS || !length(donors)) return FALSE - if(donors.len == evolve_donors) + if(length(donors) == evolve_donors) to_chat(src, "You feel ready to move on to your next stage of growth.") - else if(donors.len == awareness_donors) + else if(length(donors) == awareness_donors) universal_understand = TRUE to_chat(src, "You feel your awareness expand, and realize you know how to understand the creatures around you.") else diff --git a/code/modules/mob/living/simple_animal/friendly/dog.dm b/code/modules/mob/living/simple_animal/friendly/dog.dm index f27ae44d728d..704cda468e2d 100644 --- a/code/modules/mob/living/simple_animal/friendly/dog.dm +++ b/code/modules/mob/living/simple_animal/friendly/dog.dm @@ -475,10 +475,6 @@ else if(prob(30) && ishuman(movement_target.loc)) // mean hooman has stolen it custom_emote(EMOTE_VISIBLE, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face.") -/obj/item/food/snacks/meat/corgi - name = "Corgi meat" - desc = "Tastes like... well you know..." - /mob/living/simple_animal/pet/dog/corgi/Ian/narsie_act() playsound(src, 'sound/misc/demon_dies.ogg', 75, TRUE) var/mob/living/simple_animal/pet/dog/corgi/narsie/N = new(loc) diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm index 089dacb4750c..0e5c9d704a1e 100644 --- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm +++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm @@ -43,10 +43,10 @@ /mob/living/simple_animal/hostile/retaliate/goat/handle_automated_movement() . = ..() //chance to go crazy and start wacking stuff - if(!enemies.len && prob(1)) + if(!length(enemies) && prob(1)) Retaliate() - if(enemies.len && prob(10)) + if(length(enemies) && prob(10)) enemies = list() LoseTarget() visible_message("[src] calms down.") @@ -202,7 +202,7 @@ density = FALSE speak_chance = 2 turns_per_move = 2 - butcher_results = list(/obj/item/food/snacks/meat = 1) + butcher_results = list(/obj/item/food/snacks/meat/chicken = 1) response_help = "pets" response_disarm = "gently pushes aside" response_harm = "kicks" @@ -267,7 +267,7 @@ GLOBAL_VAR_INIT(chicken_count, 0) density = FALSE speak_chance = 2 turns_per_move = 3 - butcher_results = list(/obj/item/food/snacks/meat = 2) + butcher_results = list(/obj/item/food/snacks/meat/chicken = 2) var/egg_type = /obj/item/food/snacks/egg var/food_type = /obj/item/food/snacks/grown/wheat response_help = "pets" diff --git a/code/modules/mob/living/simple_animal/friendly/snake.dm b/code/modules/mob/living/simple_animal/friendly/snake.dm index cd7233addf32..2087b05505cd 100644 --- a/code/modules/mob/living/simple_animal/friendly/snake.dm +++ b/code/modules/mob/living/simple_animal/friendly/snake.dm @@ -8,7 +8,6 @@ var/mob/living/L = target if(L.reagents && !poison_per_bite == 0) L.reagents.add_reagent(poison_type, poison_per_bite) - return . /mob/living/simple_animal/hostile/retaliate/poison/snake name = "snake" diff --git a/code/modules/mob/living/simple_animal/hide_action.dm b/code/modules/mob/living/simple_animal/hide_action.dm index 90a189590419..c3835690b65c 100644 --- a/code/modules/mob/living/simple_animal/hide_action.dm +++ b/code/modules/mob/living/simple_animal/hide_action.dm @@ -11,13 +11,13 @@ if(owner.layer != layer_to_change_to) owner.layer = layer_to_change_to - owner.visible_message("[owner] scurries to the ground!", "You are now hiding.") + owner.visible_message("[owner] scurries to the ground!", "You are now hiding.") if(istype(simplemob) && simplemob.pass_door_while_hidden || isdrone(simplemob)) simplemob.pass_flags |= PASSDOOR return simplemob.layer = layer_to_change_from - owner.visible_message("[owner] slowly peeks up from the ground...", "You have stopped hiding.") + owner.visible_message("[owner] slowly peeks up from the ground...", "You have stopped hiding.") if(istype(simplemob) && simplemob.pass_door_while_hidden || isdrone(simplemob)) simplemob.pass_flags &= ~PASSDOOR diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index e501bf3d5284..5d05c17c5eb5 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -236,7 +236,7 @@ target = beehome if(!beehome) //add ourselves to a beebox (of the same reagent) if we have no home for(var/obj/structure/beebox/BB in view(vision_range, src)) - if(reagent_incompatible(BB.queen_bee) || BB.bees.len >= BB.get_max_bees()) + if(reagent_incompatible(BB.queen_bee) || length(BB.bees) >= BB.get_max_bees()) continue BB.bees |= src beehome = BB diff --git a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm index 45e18dfd5500..11c9de2d7112 100644 --- a/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm +++ b/code/modules/mob/living/simple_animal/hostile/floorcluwne.dm @@ -151,7 +151,7 @@ /mob/living/simple_animal/hostile/floor_cluwne/proc/Acquire_Victim(specific) var/list/players_copy = GLOB.player_list.Copy() - while(players_copy.len) + while(length(players_copy)) var/mob/living/carbon/human/H = pick_n_take(players_copy) if(!ishuman(H)) continue diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index db9ea7ed9d0e..0d104ab1d013 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -179,7 +179,7 @@ var/possible_target_distance = get_dist(targets_from, A) if(target_dist < possible_target_distance) Targets -= A - if(!Targets.len)//We didnt find nothin! + if(!length(Targets))//We didnt find nothin! return var/chosen_target = pick(Targets)//Pick the remaining targets (if any) at random return chosen_target @@ -333,7 +333,7 @@ /mob/living/simple_animal/hostile/proc/Aggro() vision_range = aggro_vision_range - if(target && emote_taunt.len && prob(taunt_chance)) + if(target && length(emote_taunt) && prob(taunt_chance)) custom_emote(EMOTE_VISIBLE, "[pick(emote_taunt)] at [target].") taunt_chance = max(taunt_chance-7,2) @@ -537,7 +537,7 @@ if(!T) return - if(!length(SSmobs.clients_by_zlevel[T.z])) // It's fine to use .len here but doesn't compile on 511 + if(!length(SSmobs.clients_by_zlevel[T.z])) toggle_ai(AI_Z_OFF) return diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index 5483c9390c97..94af1932245f 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -254,12 +254,12 @@ Difficulty: Hard . = list() for(var/mob/living/L in targets) var/list/bloodpool = get_pools(get_turf(L), 0) - if(bloodpool.len && (!faction_check_mob(L) || L.stat == DEAD)) + if(length(bloodpool) && (!faction_check_mob(L) || L.stat == DEAD)) . += L /mob/living/simple_animal/hostile/megafauna/bubblegum/proc/try_bloodattack() var/list/targets = get_mobs_on_blood() - if(targets.len) + if(length(targets)) INVOKE_ASYNC(src, PROC_REF(bloodattack), targets, prob(enraged ? 75 : 50)) return TRUE return FALSE @@ -268,7 +268,7 @@ Difficulty: Hard var/mob/living/target_one = pick_n_take(targets) var/turf/target_one_turf = get_turf(target_one) var/mob/living/target_two - if(targets.len) + if(length(targets)) target_two = pick_n_take(targets) var/turf/target_two_turf = get_turf(target_two) if(target_two.stat != CONSCIOUS || prob(10)) @@ -278,7 +278,7 @@ Difficulty: Hard if(target_one) var/list/pools = get_pools(get_turf(target_one), 0) - if(pools.len) + if(length(pools)) target_one_turf = get_turf(target_one) if(target_one_turf) if(target_one.stat != CONSCIOUS || prob(10)) @@ -288,7 +288,7 @@ Difficulty: Hard if(!target_two && target_one) var/list/poolstwo = get_pools(get_turf(target_one), 0) - if(poolstwo.len) + if(length(poolstwo)) target_one_turf = get_turf(target_one) if(target_one_turf) if(target_one.stat != CONSCIOUS || prob(10)) @@ -333,13 +333,13 @@ Difficulty: Hard if(Adjacent(target)) return FALSE var/list/can_jaunt = get_pools(get_turf(src), 1) - if(!can_jaunt.len) + if(!length(can_jaunt)) return FALSE var/list/pools = get_pools(get_turf(target), 5) var/list/pools_to_remove = get_pools(get_turf(target), 4) pools -= pools_to_remove - if(!pools.len) + if(!length(pools)) return FALSE var/obj/effect/temp_visual/decoy/DA = new /obj/effect/temp_visual/decoy(loc,src) @@ -357,7 +357,7 @@ Difficulty: Hard pools = get_pools(get_turf(target), 5) pools_to_remove = get_pools(get_turf(target), 4) pools -= pools_to_remove - if(pools.len) + if(length(pools)) shuffle_inplace(pools) found_bloodpool = pick(pools) if(found_bloodpool) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index 2ef2491296ed..f59b35b46e2d 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -175,7 +175,7 @@ Difficulty: Hard possibilities = list("chaser_swarm") else possibilities += "chaser_swarm" - if(possibilities.len) + if(length(possibilities)) switch(pick(possibilities)) if("blink_spam") //blink either once or multiple times. blink_spam(blink_counter, target_slowness, cross_counter) @@ -277,9 +277,9 @@ Difficulty: Hard SLEEP_CHECK_DEATH(6) var/list/targets = ListTargets() var/list/cardinal_copy = GLOB.cardinal.Copy() - while(targets.len && cardinal_copy.len) + while(length(targets) && length(cardinal_copy)) var/mob/living/pickedtarget = pick(targets) - if(targets.len >= cardinal_copy.len) + if(length(targets) >= length(cardinal_copy)) pickedtarget = pick_n_take(targets) if(!istype(pickedtarget) || pickedtarget.stat == DEAD) pickedtarget = target @@ -605,7 +605,7 @@ Difficulty: Hard return FALSE if(mover == caster.pulledby) return TRUE - if(istype(mover, /obj/item/projectile)) + if(isprojectile(mover)) var/obj/item/projectile/P = mover if(P.firer == caster) return TRUE diff --git a/code/modules/mob/living/simple_animal/hostile/mimic_mobs.dm b/code/modules/mob/living/simple_animal/hostile/mimic_mobs.dm index 0e6ef877eb80..33356c1d36dd 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic_mobs.dm @@ -315,11 +315,11 @@ GLOBAL_LIST_INIT(protected_objects, list(/obj/structure/table, /obj/structure/ca visible_message("The [src] clears a jam!") Pewgun.chambered.loc = loc //rip revolver immersions, blame shotgun snowflake procs Pewgun.chambered = null - if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len) + if(Pewgun.magazine && length(Pewgun.magazine.stored_ammo)) Pewgun.chambered = Pewgun.magazine.get_round(0) Pewgun.chambered.loc = Pewgun Pewgun.update_icon() - else if(Pewgun.magazine && Pewgun.magazine.stored_ammo.len) //only true for pumpguns i think + else if(Pewgun.magazine && length(Pewgun.magazine.stored_ammo)) //only true for pumpguns i think Pewgun.chambered = Pewgun.magazine.get_round(0) Pewgun.chambered.loc = Pewgun visible_message("The [src] cocks itself!") diff --git a/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm b/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm index 84d615708625..0d240100c26f 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/elites/elite.dm @@ -476,6 +476,9 @@ While using this makes the system rely on OnFire, it still gives options for tim if(isliving(mover)) return FALSE +/obj/effect/temp_visual/elite_tumor_wall/gargantua + duration = 35 SECONDS // A bit longer than the spell lasts, it should be cleaned up by the spell otherwise it might not GC properly + /obj/effect/temp_visual/elite_tumor_wall/gargantua/CanPass(atom/movable/mover, border_dir) return FALSE diff --git a/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm b/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm index d28b936adeb7..c6021bab7c42 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/goldgrub.dm @@ -42,7 +42,7 @@ /mob/living/simple_animal/hostile/asteroid/goldgrub/GiveTarget(new_target) target = new_target if(target != null) - if(istype(target, /obj/item/stack/ore) && loot.len < 10) + if(istype(target, /obj/item/stack/ore) && length(loot) < 10) visible_message("[src] looks at [target.name] with hungry eyes.") else if(isliving(target)) Aggro() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm index bbc45c0b7fde..2cd5dddf990b 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm @@ -14,7 +14,7 @@ return A /mob/living/simple_animal/hostile/retaliate/ListTargets() - if(!enemies.len) + if(!length(enemies)) return list() var/list/see = ..() see &= enemies // Remove all entries that aren't in enemies diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate_mobs.dm b/code/modules/mob/living/simple_animal/hostile/syndicate_mobs.dm index afd4595d3bdd..36ffb309a1d0 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate_mobs.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate_mobs.dm @@ -126,7 +126,7 @@ if(!ranged) playsound(loc, 'sound/weapons/saberon.ogg', 35, 1) if(alert_on_shield_breach) - if(depotarea.shield_list.len) + if(length(depotarea.shield_list)) raise_alert("[name] reports that [target] is trying to breach the armory shield!") alert_on_shield_breach = FALSE raised_alert = FALSE @@ -282,7 +282,7 @@ var/list/key_candidates = list() for(var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer/O in GLOB.alive_mob_list) key_candidates += O - if(key_candidates.len) + if(length(key_candidates)) var/mob/living/simple_animal/hostile/syndicate/melee/autogib/depot/officer/O = pick(key_candidates) O.shield_key = TRUE depotarea.shields_up() diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm index 4d4e048ce326..5c1a666f9b11 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/actions.dm @@ -181,7 +181,7 @@ if(!(M.mobility_flags & MOBILITY_MOVE)) return TRUE return prob(80) - if(istype(mover, /obj/item/projectile)) + if(isprojectile(mover)) return prob(20) return ..() diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm index b406f470d336..8cf7af301e17 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/reproduction.dm @@ -111,7 +111,7 @@ if(temp_vent.welded) // no point considering a vent we can't even use continue vents.Add(temp_vent) - if(!vents.len) + if(!length(vents)) entry_vent = null return var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = pick(vents) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm index 07276a401f4a..5134355baf48 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm @@ -68,9 +68,9 @@ targets2 += M else targets3 += M - if(targets1.len) + if(length(targets1)) return targets1 - if(targets2.len) + if(length(targets2)) return targets2 return targets3 @@ -275,7 +275,7 @@ var/list/vents = list() for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in entry_vent.parent.other_atmosmch) vents.Add(temp_vent) - if(!vents.len) + if(!length(vents)) entry_vent = null return var/obj/machinery/atmospherics/unary/vent_pump/exit_vent = pick(vents) diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm index 34a0463a577f..432520c052a5 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_spiders.dm @@ -378,7 +378,7 @@ GLOBAL_LIST_EMPTY(ts_infected_list) to_chat(T, "TerrorSense: [msgtext]") /mob/living/simple_animal/hostile/poison/terror_spider/proc/CheckFaction() - if(faction.len != 2 || (!("terrorspiders" in faction)) || master_commander != null) + if(length(faction) != 2 || (!("terrorspiders" in faction)) || master_commander != null) to_chat(src, "Your connection to the hive mind has been severed!") stack_trace("Terror spider with incorrect faction list at: [atom_loc_line(src)]") gib() diff --git a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm index a6a840906f83..84ee41256fcf 100644 --- a/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm +++ b/code/modules/mob/living/simple_animal/hostile/venus_human_trap.dm @@ -90,7 +90,7 @@ step(L,get_dir(L,src)) //reel them in L.Weaken(6 SECONDS) //you can't get away now~ - if(grasping.len < max_grasps) + if(length(grasping) < max_grasps) grasping: for(var/mob/living/L in view(grasp_range, src)) if(L == src || faction_check_mob(L) || (L in grasping) || L == target) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 21552a5898b3..591053c3b118 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -249,8 +249,8 @@ Phrases that the parrot hears in mob/living/say() get added to speach_buffer. Every once in a while, the parrot picks one of the lines from the buffer and replaces an element of the 'speech' list. Then it clears the buffer to make sure they dont magically remember something from hours ago. */ - if(speech_buffer.len && prob(10)) - if(clean_speak.len) + if(length(speech_buffer) && prob(10)) + if(length(clean_speak)) clean_speak -= pick(clean_speak) clean_speak += pick(speech_buffer) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 06020517b735..f2ff761520e0 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -258,33 +258,33 @@ set waitfor = FALSE if(speak_chance) if(prob(speak_chance) || override) - if(speak && speak.len) - if((emote_hear && emote_hear.len) || (emote_see && emote_see.len)) - var/length = speak.len - if(emote_hear && emote_hear.len) - length += emote_hear.len - if(emote_see && emote_see.len) - length += emote_see.len + if(speak && length(speak)) + if((emote_hear && length(emote_hear)) || (emote_see && length(emote_see))) + var/length = length(speak) + if(emote_hear && length(emote_hear)) + length += length(emote_hear) + if(emote_see && length(emote_see)) + length += length(emote_see) var/randomValue = rand(1,length) - if(randomValue <= speak.len) + if(randomValue <= length(speak)) say(pick(speak)) else - randomValue -= speak.len - if(emote_see && randomValue <= emote_see.len) + randomValue -= length(speak) + if(emote_see && randomValue <= length(emote_see)) custom_emote(EMOTE_VISIBLE, pick(emote_see)) else custom_emote(EMOTE_AUDIBLE, pick(emote_hear)) else say(pick(speak)) else - if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len)) + if(!(emote_hear && length(emote_hear)) && (emote_see && length(emote_see))) custom_emote(EMOTE_VISIBLE, pick(emote_see)) - if((emote_hear && emote_hear.len) && !(emote_see && emote_see.len)) + if((emote_hear && length(emote_hear)) && !(emote_see && length(emote_see))) custom_emote(EMOTE_AUDIBLE, pick(emote_hear)) - if((emote_hear && emote_hear.len) && (emote_see && emote_see.len)) - var/length = emote_hear.len + emote_see.len + if((emote_hear && length(emote_hear)) && (emote_see && length(emote_see))) + var/length = length(emote_hear) + length(emote_see) var/pick = rand(1,length) - if(pick <= emote_see.len) + if(pick <= length(emote_see)) custom_emote(EMOTE_VISIBLE, pick(emote_see)) else custom_emote(EMOTE_AUDIBLE, pick(emote_hear)) @@ -361,7 +361,7 @@ /mob/living/simple_animal/say_quote(message) var/verb = "says" - if(speak_emote.len) + if(length(speak_emote)) verb = pick(speak_emote) return verb diff --git a/code/modules/mob/living/simple_animal/slime/slime_life.dm b/code/modules/mob/living/simple_animal/slime/slime_life.dm index 67d15345bea2..b15e5cefeb63 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_life.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_life.dm @@ -9,7 +9,7 @@ handle_nutrition() if(QDELETED(src)) // Stop if the slime split during handle_nutrition() return - reagents.remove_all(0.5 * REAGENTS_METABOLISM * reagents.reagent_list.len) //Slimes are such snowflakes + reagents.remove_all(0.5 * REAGENTS_METABOLISM * length(reagents.reagent_list)) //Slimes are such snowflakes handle_targets() if(!ckey) handle_mood() @@ -319,7 +319,7 @@ targets += L // Possible target found! - if(targets.len > 0) + if(length(targets) > 0) if(attacked || rabid || hungry == 2) Target = targets[1] // I am attacked and am fighting back or so hungry I don't even care else diff --git a/code/modules/mob/living/simple_animal/slime/slime_mob.dm b/code/modules/mob/living/simple_animal/slime/slime_mob.dm index 2e4fca91f6f7..202823185805 100644 --- a/code/modules/mob/living/simple_animal/slime/slime_mob.dm +++ b/code/modules/mob/living/simple_animal/slime/slime_mob.dm @@ -337,7 +337,7 @@ discipline_slime(M) else - if(stat == DEAD && surgeries.len) + if(stat == DEAD && length(surgeries)) if(M.a_intent == INTENT_HELP || M.a_intent == INTENT_DISARM) for(var/datum/surgery/S in surgeries) if(S.next_step(M, src)) @@ -353,7 +353,7 @@ /mob/living/simple_animal/slime/attackby(obj/item/I, mob/living/user, params) - if(stat == DEAD && surgeries.len) + if(stat == DEAD && length(surgeries)) if(user.a_intent == INTENT_HELP || user.a_intent == INTENT_DISARM) for(var/datum/surgery/S in surgeries) if(S.next_step(user, src)) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 405567df98b3..bca60f87eee1 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -523,7 +523,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ if(SLOT_HUD_IN_BACKPACK) if(H.back && istype(H.back, /obj/item/storage/backpack)) var/obj/item/storage/backpack/B = H.back - if(B.contents.len < B.storage_slots && w_class <= B.max_w_class) + if(length(B.contents) < B.storage_slots && w_class <= B.max_w_class) return 1 return 0 return 0 //Unsupported slot @@ -719,7 +719,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ set category = "IC" msg = copytext(msg, 1, MAX_MESSAGE_LEN) - msg = sanitize(msg, list("\n" = "
    ")) + msg = sanitize_simple(html_encode(msg), list("\n" = "
    ")) var/combined = length(memory + msg) if(mind && (combined < MAX_PAPER_MESSAGE_LEN)) @@ -1221,8 +1221,8 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ //That makes the logs easier to read, but because all of this is stored in strings, weird things have to be used to get it all out. var/new_log = "\[[time_stamp()]] [text]" - if(target.len)//if there are other logs already present - var/previous_log = target[target.len]//get the latest log + if(length(target))//if there are other logs already present + var/previous_log = target[length(target)]//get the latest log var/last_log_is_range = (copytext(previous_log, 10, 11) == "-") //whether the last log is a time range or not. The "-" will be an indicator that it is. var/x_sign_position = findtext(previous_log, "x") @@ -1247,7 +1247,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ rep = text2num(copytext(previous_log, 44, x_sign_position))//get whatever number is right before the 'x' new_log = "\[[old_timestamp]-[time_stamp()]][rep?rep+1:2]x [text]" - target -= target[target.len]//remove the last log + target -= target[length(target)]//remove the last log target += new_log diff --git a/code/modules/mob/mob_emote.dm b/code/modules/mob/mob_emote.dm index 497031a8d657..28ad98a0d3b6 100644 --- a/code/modules/mob/mob_emote.dm +++ b/code/modules/mob/mob_emote.dm @@ -134,7 +134,8 @@ var/mob/living/L = user if(IS_HORIZONTAL(L)) - message = "flops and flails around on the floor." + var/turf = get_turf(L) + message = "flops and flails around [isspaceturf(turf) ? "in space" : "on the floor"]." return ..() else if(params) message_param = "flips in %t's general direction." @@ -166,10 +167,10 @@ "As you flip your hat falls off!") if(prob(5) && ishuman(user)) - message = "attempts a flip and crashes to the floor!" - sleep(0.3 SECONDS) + var/turf = get_turf(L) + message = "attempts a flip and [isspaceturf(turf) ? "loses balance" : "crashes to the floor"]!" if(istype(L)) - L.Weaken(4 SECONDS) + addtimer(CALLBACK(L, TYPE_PROC_REF(/mob/living, Weaken), 4 SECONDS), 0.3 SECONDS) return ..() . = ..() diff --git a/code/modules/mob/mob_holder.dm b/code/modules/mob/mob_holder.dm index 127563083b5c..47366ef8b49c 100644 --- a/code/modules/mob/mob_holder.dm +++ b/code/modules/mob/mob_holder.dm @@ -15,7 +15,7 @@ /obj/item/holder/process() - if(isturf(loc) || !(contents.len)) + if(isturf(loc) || !(length(contents))) for(var/mob/M in contents) diff --git a/code/modules/mob/mob_login_base.dm b/code/modules/mob/mob_login_base.dm index bae72a943d38..238057a92cda 100644 --- a/code/modules/mob/mob_login_base.dm +++ b/code/modules/mob/mob_login_base.dm @@ -74,7 +74,7 @@ add_click_catcher() - if(viewing_alternate_appearances && viewing_alternate_appearances.len) + if(viewing_alternate_appearances && length(viewing_alternate_appearances)) for(var/datum/alternate_appearance/AA in viewing_alternate_appearances) AA.display_to(list(src)) diff --git a/code/modules/mob/mob_misc_procs.dm b/code/modules/mob/mob_misc_procs.dm index 4fc8be076f8f..344641102d57 100644 --- a/code/modules/mob/mob_misc_procs.dm +++ b/code/modules/mob/mob_misc_procs.dm @@ -74,7 +74,7 @@ /mob/living/carbon/human/get_screen_colour() //Fetch the colour matrix from wherever (e.g. eyes) so it can be compared to client.color. . = ..() if(.) - return . + return var/obj/item/clothing/glasses/worn_glasses = glasses var/obj/item/organ/internal/eyes/eyes = get_int_organ(/obj/item/organ/internal/eyes) diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 7016ca01e57e..2f7ac0401892 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -6,7 +6,7 @@ if(height==0) return 1 - if(istype(mover, /obj/item/projectile)) + if(isprojectile(mover)) return projectile_hit_check(mover) if(mover.throwing) return (!density || horizontal || (mover.throwing.thrower == src)) @@ -197,7 +197,7 @@ ///Called by client/Move() ///Checks to see if you are being grabbed and if so attemps to break it /client/proc/Process_Grab() - if(mob.grabbed_by.len) + if(length(mob.grabbed_by)) if(mob.incapacitated(FALSE, TRUE)) // Can't break out of grabs if you're incapacitated return TRUE if(HAS_TRAIT(mob, TRAIT_IMMOBILIZED)) diff --git a/code/modules/mob/mob_say_base.dm b/code/modules/mob/mob_say_base.dm index 9182f8e6e355..6b193b3fe962 100644 --- a/code/modules/mob/mob_say_base.dm +++ b/code/modules/mob/mob_say_base.dm @@ -69,36 +69,41 @@ create_log(DEADCHAT_LOG, message) log_ghostsay(message, src) -/mob/proc/say_understands(mob/other, datum/language/speaking = null) +/** + * Checks if the mob can understand the other speaker + * + * If it return FALSE, then the message will have some letters replaced with stars from the heard message +*/ +/mob/proc/say_understands(atom/movable/other, datum/language/speaking = null) if(stat == DEAD) - return 1 + return TRUE //Universal speak makes everything understandable, for obvious reasons. if(universal_speak || universal_understand) - return 1 + return TRUE //Languages are handled after. if(!speaking) - if(!other) - return 1 - if(other.universal_speak) - return 1 - if(isAI(src) && ispAI(other)) - return 1 - if(istype(other, src.type) || istype(src, other.type)) - return 1 - return 0 + if(!other || !ismob(other)) + return TRUE + var/mob/other_mob = other + if(other_mob.universal_speak) + return TRUE + if(isAI(src) && ispAI(other_mob)) + return TRUE + if(istype(other_mob, src.type) || istype(src, other_mob.type)) + return TRUE + return FALSE if(speaking.flags & INNATE) - return 1 + return TRUE //Language check. for(var/datum/language/L in languages) if(speaking.name == L.name) - return 1 - - return 0 + return TRUE + return FALSE /mob/proc/say_quote(message, datum/language/speaking = null) var/verb = "says" diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 7c389e5cd0dc..a8338f795ccb 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -397,7 +397,7 @@ for(var/mob/living/silicon/ai/A in GLOB.alive_mob_list) if(A.announce_arrivals) ailist += A - if(ailist.len) + if(length(ailist)) var/mob/living/silicon/ai/announcer = pick(ailist) if(character.mind) if((character.mind.assigned_role != "Cyborg") && (character.mind.assigned_role != character.mind.special_role)) @@ -429,7 +429,7 @@ var/ailist[] = list() for(var/mob/living/silicon/ai/A in GLOB.alive_mob_list) ailist += A - if(ailist.len) + if(length(ailist)) var/mob/living/silicon/ai/announcer = pick(ailist) if(character.mind) if(character.mind.assigned_role != character.mind.special_role) diff --git a/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm index f70bf5d5b42d..2d4aea1d857d 100644 --- a/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/human/human_facial_hair.dm @@ -10,7 +10,6 @@ icon = 'icons/mob/human_face.dmi' // Special case, use the bald icon in human face name = "Shaved" icon_state = "bald" - gender = NEUTER species_allowed = list("Human", "Unathi", "Tajaran", "Skrell", "Vox", "Diona", "Kidan", "Greys", "Vulpkanin", "Slime People") /datum/sprite_accessory/facial_hair/watson diff --git a/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm b/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm index 9cdfb017e9b4..c9d0087bd0b8 100644 --- a/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/human/human_hair.dm @@ -563,7 +563,6 @@ /datum/sprite_accessory/hair/joestar name = "Joestar" icon_state = "joestar" - gender = MALE species_allowed = list("Human", "Slime People", "Unathi", "Tajaran", "Vulpkanin") /datum/sprite_accessory/hair/nitori @@ -757,11 +756,6 @@ icon_state = "longovereye" species_allowed = list("Human", "Slime People", "Unathi", "Tajaran", "Vulpkanin") -/datum/sprite_accessory/hair/father - name = "Father" - icon_state = "father" - species_allowed = list("Human", "Slime People", "Unathi", "Tajaran", "Vulpkanin") - /// Due to a vulp hairstyle called bun /datum/sprite_accessory/hair/bun4 name = "Bun 4" diff --git a/code/modules/mob/new_player/sprite_accessories/kidan/kidan_head_accessories.dm b/code/modules/mob/new_player/sprite_accessories/kidan/kidan_head_accessories.dm index aa938926eb99..7c229d068c6f 100644 --- a/code/modules/mob/new_player/sprite_accessories/kidan/kidan_head_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories/kidan/kidan_head_accessories.dm @@ -16,10 +16,6 @@ name = "Curious Antennae" icon_state = "curious" -/datum/sprite_accessory/head_accessory/kidan/mopey_antennae - name = "Mopey Antennae" - icon_state = "mopey" - /datum/sprite_accessory/head_accessory/kidan/crescent_antennae name = "Crescent Antennae" icon_state = "crescent" diff --git a/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm b/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm index 76cbbc7284c9..cdb4c487806a 100644 --- a/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm +++ b/code/modules/mob/new_player/sprite_accessories/skrell/skrell_face.dm @@ -5,12 +5,10 @@ /datum/sprite_accessory/hair/skrell/skr_tentacle_m name = "Skrell Male Tentacles" icon_state = "male" - gender = MALE /datum/sprite_accessory/hair/skrell/skr_tentacle_f name = "Skrell Female Tentacles" icon_state = "female" - gender = FEMALE /datum/sprite_accessory/hair/skrell/skr_tentacleslong name = "Long Skrell Tentacles" @@ -23,39 +21,33 @@ /datum/sprite_accessory/hair/skrell/skr_gold_m name = "Gold plated Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "gold" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_gold_f name = "Gold chained Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "gold" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_clothtentacle_m name = "Cloth draped Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "cloth" /datum/sprite_accessory/hair/skrell/skr_clothtentacle_f name = "Cloth draped Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "cloth" /datum/sprite_accessory/hair/skrell/skr_gclothtentacle_m name = "Ombre Dye, Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "gradient" /datum/sprite_accessory/hair/skrell/skr_gclothtentacle_f name = "Ombre Dye, Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "gradient" /datum/sprite_accessory/hair/skrell/skr_gclothtentacleslong @@ -71,14 +63,12 @@ /datum/sprite_accessory/hair/skrell/skr_diablacktentacle_m name = "Black headress Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "blackdia" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_diablacktentacle_f name = "Black headress Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "blackdia" no_sec_colour = 1 @@ -92,14 +82,12 @@ /datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_m name = "Gold headress Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "golddia" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_diagoldtentacle_f name = "Gold headress Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "golddia" no_sec_colour = 1 @@ -112,14 +100,12 @@ /datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_m name = "Silver headress Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "silvdia" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_diasilvertentacle_f name = "Silver headress Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "silvdia" no_sec_colour = 1 @@ -132,14 +118,12 @@ /datum/sprite_accessory/hair/skrell/skr_festivetentacle_m name = "Festive headress Skrell Male Tentacles" icon_state = "male" - gender = MALE secondary_theme = "fest" no_sec_colour = 1 /datum/sprite_accessory/hair/skrell/skr_festivetentacle_f name = "Festive headress Skrell Female Tentacles" icon_state = "female" - gender = FEMALE secondary_theme = "fest" no_sec_colour = 1 diff --git a/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm index 2610cd828c50..d17931f95775 100644 --- a/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories/sprite_accessories.dm @@ -18,10 +18,14 @@ */ /proc/init_sprite_accessory_subtypes(prototype, list/L, list/male, list/female, list/full_list) - if(!istype(L)) L = list() - if(!istype(male)) male = list() - if(!istype(female)) female = list() - if(!istype(full_list)) full_list = list() + if(!istype(L)) + L = list() + if(!istype(male)) + male = list() + if(!istype(female)) + female = list() + if(!istype(full_list)) + full_list = list() for(var/path in subtypesof(prototype)) var/datum/sprite_accessory/D = new path() @@ -33,9 +37,11 @@ L[D.name] = D full_list[D.name] = D - switch(D.gender) - if(MALE) male[D.name] = D - if(FEMALE) female[D.name] = D + switch(D.body_type) + if(MALE) + male[D.name] = D + if(FEMALE) + female[D.name] = D else male[D.name] = D female[D.name] = D @@ -45,7 +51,7 @@ var/icon //the icon file the accessory is located in var/icon_state //the icon_state of the accessory var/name //the preview name of the accessory - var/gender = NEUTER //Determines if the accessory will be skipped or included in random hair generations + var/body_type = NEUTER //Determines if the accessory will be skipped or included in random hair generations // Restrict some styles to specific species var/list/species_allowed = list("Human", "Slime People") @@ -74,7 +80,6 @@ glasses_over = 1 /datum/sprite_accessory/facial_hair - gender = MALE // barf (unless you're a dorf, dorfs dig chix /w beards :P) icon = 'icons/mob/sprite_accessories/human/human_facial_hair.dmi' var/over_hair @@ -174,7 +179,6 @@ "Grey" = 'icons/mob/clothing/species/grey/underwear.dmi', "Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi' ) - gender = NEUTER /datum/sprite_accessory/underwear/nude name = "Nude" @@ -182,7 +186,7 @@ species_allowed = list("Human", "Unathi", "Diona", "Vulpkanin", "Tajaran", "Kidan", "Grey", "Plasmaman", "Machine", "Skrell", "Slime People", "Skeleton", "Drask", "Vox", "Nian") /datum/sprite_accessory/underwear/male - gender = MALE + body_type = MALE /datum/sprite_accessory/underwear/male/male_white name = "Mens White" @@ -192,7 +196,7 @@ name = "Mens Grey" icon_state = "male_grey" -/datum/sprite_accessory/underwear/male/male_grey +/datum/sprite_accessory/underwear/male/male_grey_alt name = "Mens Grey Alt" icon_state = "male_greyalt" @@ -233,7 +237,7 @@ icon_state = "male_mankini" /datum/sprite_accessory/underwear/female - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/underwear/female/female_red name = "Ladies Red" @@ -305,7 +309,6 @@ "Grey" = 'icons/mob/clothing/species/grey/underwear.dmi', "Kidan" = 'icons/mob/clothing/species/kidan/underwear.dmi' ) - gender = NEUTER /datum/sprite_accessory/undershirt/nude name = "Nude" @@ -494,17 +497,17 @@ /datum/sprite_accessory/undershirt/tank_redtop name = "Red Crop-Top" icon_state = "tank_redtop" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/undershirt/tank_whitetop name = "White Crop-Top" icon_state = "tank_whitetop" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/undershirt/tank_midriff name = "White Mid Tank-Top" icon_state = "tank_midriff" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/undershirt/tank_white name = "White Tank-Top" @@ -547,7 +550,6 @@ "Nian" = 'icons/mob/clothing/species/nian/underwear.dmi' ) - gender = NEUTER /datum/sprite_accessory/socks/nude name = "Nude" @@ -581,7 +583,7 @@ /datum/sprite_accessory/socks/thin_knee name = "Knee-high Thin" icon_state = "thin_knee" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/socks/striped_norm name = "Normal Striped" @@ -606,7 +608,7 @@ /datum/sprite_accessory/socks/thin_thigh name = "Thigh-high Thin" icon_state = "thin_thigh" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/socks/striped_thigh name = "Thigh-high Striped" @@ -619,7 +621,7 @@ /datum/sprite_accessory/socks/pantyhose name = "Pantyhose" icon_state = "pantyhose" - gender = FEMALE + body_type = FEMALE /datum/sprite_accessory/socks/black_fishnet name = "Black Fishnet" diff --git a/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm index 5fcf93aa7707..c43ea89f204c 100644 --- a/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/unathi/unathi_facial_hair.dm @@ -1,7 +1,6 @@ /datum/sprite_accessory/facial_hair/unathi icon = 'icons/mob/sprite_accessories/unathi/unathi_facial_hair.dmi' species_allowed = list("Unathi") - gender = NEUTER over_hair = 1 /datum/sprite_accessory/facial_hair/unathi/una_spines_long diff --git a/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm index 2f292e443e32..56381bbbf6ce 100644 --- a/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/vox/vox_facial_hair.dm @@ -1,7 +1,6 @@ /datum/sprite_accessory/facial_hair/vox icon = 'icons/mob/sprite_accessories/vox/vox_facial_hair.dmi' species_allowed = list("Vox") - gender = NEUTER /datum/sprite_accessory/facial_hair/vox/vox_colonel name = "Vox Colonel Beard" diff --git a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm index fca910b401a6..419aa7c2e763 100644 --- a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dm @@ -1,7 +1,6 @@ /datum/sprite_accessory/facial_hair/vulpkanin icon = 'icons/mob/sprite_accessories/vulpkanin/vulpkanin_facial_hair.dmi' species_allowed = list("Vulpkanin") - gender = NEUTER /datum/sprite_accessory/facial_hair/vulpkanin/vulp_earfluff name = "Vulpkanin Earfluff" diff --git a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm index b32f2b4153a9..27ca4286943d 100644 --- a/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm +++ b/code/modules/mob/new_player/sprite_accessories/vulpkanin/vulpkanin_hair.dm @@ -84,7 +84,6 @@ /datum/sprite_accessory/hair/vulpkanin/vulp_hair_raine name = "Raine" icon_state = "raine" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/vulp_hair_jeremy name = "Jeremy" diff --git a/code/modules/mod/modules/module_pathfinder.dm b/code/modules/mod/modules/module_pathfinder.dm index 2b9a95508d99..b0f89fd2bea3 100644 --- a/code/modules/mod/modules/module_pathfinder.dm +++ b/code/modules/mod/modules/module_pathfinder.dm @@ -40,7 +40,7 @@ to_chat(user, "Unable to implant [target]!") return if(target == user) - to_chat(user, "") + to_chat(user, "You implant yourself with [implant].") else target.visible_message("[user] implants [target].", "[user] implants you with [implant].") playsound(src, 'sound/effects/spray.ogg', 30, TRUE, -6) @@ -119,7 +119,7 @@ if(!length(path)) //Cannot reach target. Give up and announce the issue. to_chat(H, "No viable path found!") return FALSE - to_chat(H, "Suit on route!") animate(module.mod, 0.2 SECONDS, pixel_x = 0, pixel_y = 0) module.mod.add_overlay(jet_icon) RegisterSignal(module.mod, COMSIG_MOVABLE_MOVED, PROC_REF(on_move)) diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm index d97c3d113150..556208bbc3fe 100644 --- a/code/modules/paperwork/folders.dm +++ b/code/modules/paperwork/folders.dm @@ -31,7 +31,7 @@ /obj/item/folder/update_overlays() . = ..() - if(contents.len) + if(length(contents)) . += "folder_paper" /obj/item/folder/attackby(obj/item/W as obj, mob/user as mob, params) diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index dec1ff962b1e..ec07906e81c9 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -534,14 +534,6 @@ name = "A Crash Course in Legal SOP on SS13" info = "Roles:
    \nThe Detective is basically the investigator and prosecutor.
    \nThe Staff Assistant can perform these functions with written authority from the Detective.
    \nThe Captain/HoP/Warden is ct as the judicial authority.
    \nThe Security Officers are responsible for executing warrants, security during trial, and prisoner transport.
    \n
    \nInvestigative Phase:
    \nAfter the crime has been committed the Detective's job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
    \n
    \nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
    \n
    \nPre-Pre-Trial Phase:
    \nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
    \nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
    \nPossible Motions:
    \n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
    \n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
    \n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
    \n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
    \n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
    \n
    \nALL SIDES MOVE TO A COURTROOM
    \nPre-Trial Hearings:
    \nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
    \n
    \nThe Trial:
    \nThe trial has three phases.
    \n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
    \n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
    \nFINALLY once both sides are done calling witnesses we move onto the next phase.
    \n3. Closing Arguments- Same as opening.
    \nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
    \n
    \nSentencing Phase:
    \nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
    \nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
    \nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
    \n
    \nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
    \n" -/obj/item/paper/hydroponics - name = "Greetings from Billy Bob" - info = "Hey fellow botanist!
    \n
    \nI didn't trust the station folk so I left
    \na couple of weeks ago. But here's some
    \ninstructions on how to operate things here.
    \nYou can grow plants and each iteration they become
    \nstronger, more potent and have better yield, if you
    \nknow which ones to pick. Use your botanist's analyzer
    \nfor that. You can turn harvested plants into seeds
    \nat the seed extractor, and replant them for better stuff!
    \nSometimes if the weed level gets high in the tray
    \nmutations into different mushroom or weed species have
    \nbeen witnessed. On the rare occassion even weeds mutate!
    \n
    \nEither way, have fun!
    \n
    \nBest regards,
    \nBilly Bob Johnson.
    \n
    \nPS.
    \nHere's a few tips:
    \nIn nettles, potency = damage
    \nIn amanitas, potency = deadliness + side effect
    \nIn Liberty caps, potency = drug power + effect
    \nIn chilis, potency = heat
    \nNutrients keep mushrooms alive!
    \nWater keeps weeds such as nettles alive!
    \nAll other plants need both." - -/obj/item/paper/djstation - name = "DJ Listening Outpost" - info = "Welcome new owner!

    You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
    1. Equip yourself with a multi-tool
    2. Use the multitool on each machine, that is the broadcaster, receiver and the relay.
    3. Turn all the machines on, it has already been configured for you to listen on.
    Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
    • 145.7 - Common Channel
    • 144.7 - Private AI Channel
    • 135.9 - Security Channel
    • 135.7 - Engineering Channel
    • 135.5 - Medical Channel
    • 135.3 - Command Channel
    • 135.1 - Science Channel
    • 134.9 - Mining Channel
    • 134.7 - Cargo Channel
    • " - /obj/item/paper/flag icon_state = "flag_neutral" item_state = "paper" @@ -605,17 +597,6 @@ /* * Premade paper */ -/obj/item/paper/Court - name = "Judgement" - info = "For crimes against the station, the offender is sentenced to:
      \n
      \n" - -/obj/item/paper/Toxin - name = "Chemical Information" - info = "Known Onboard Toxins:
      \n\tGrade A Semi-Liquid Plasma:
      \n\t\tHighly poisonous. You cannot sustain concentrations above 15 units.
      \n\t\tA gas mask fails to filter plasma after 50 units.
      \n\t\tWill attempt to diffuse like a gas.
      \n\t\tFiltered by scrubbers.
      \n\t\tThere is a bottled version which is very different
      \n\t\t\tfrom the version found in canisters!
      \n
      \n\t\tWARNING: Highly Flammable. Keep away from heat sources
      \n\t\texcept in a enclosed fire area!
      \n\t\tWARNING: It is a crime to use this without authorization.
      \nKnown Onboard Anti-Toxin:
      \n\tAnti-Toxin Type 01P: Works against Grade A Plasma.
      \n\t\tBest if injected directly into bloodstream.
      \n\t\tA full injection is in every regular Med-Kit.
      \n\t\tSpecial toxin Kits hold around 7.
      \n
      \nKnown Onboard Chemicals (other):
      \n\tRejuvenation T#001:
      \n\t\tEven 1 unit injected directly into the bloodstream
      \n\t\t\twill cure paralysis and sleep plasma.
      \n\t\tIf administered to a dying patient it will prevent
      \n\t\t\tfurther damage for about units*3 seconds.
      \n\t\t\tit will not cure them or allow them to be cured.
      \n\t\tIt can be administeredd to a non-dying patient
      \n\t\t\tbut the chemicals disappear just as fast.
      \n\tSoporific T#054:
      \n\t\t5 units wilkl induce precisely 1 minute of sleep.
      \n\t\t\tThe effect are cumulative.
      \n\t\tWARNING: It is a crime to use this without authorization" - -/obj/item/paper/courtroom - name = "A Crash Course in Legal SOP on SS13" - info = "Roles:
      \nThe Detective is basically the investigator and prosecutor.
      \nThe Staff Assistant can perform these functions with written authority from the Detective.
      \nThe Captain/HoP/Warden is ct as the judicial authority.
      \nThe Security Officers are responsible for executing warrants, security during trial, and prisoner transport.
      \n
      \nInvestigative Phase:
      \nAfter the crime has been committed the Detective's job is to gather evidence and try to ascertain not only who did it but what happened. He must take special care to catalogue everything and don't leave anything out. Write out all the evidence on paper. Make sure you take an appropriate number of fingerprints. IF he must ask someone questions he has permission to confront them. If the person refuses he can ask a judicial authority to write a subpoena for questioning. If again he fails to respond then that person is to be jailed as insubordinate and obstructing justice. Said person will be released after he cooperates.
      \n
      \nONCE the FT has a clear idea as to who the criminal is he is to write an arrest warrant on the piece of paper. IT MUST LIST THE CHARGES. The FT is to then go to the judicial authority and explain a small version of his case. If the case is moderately acceptable the authority should sign it. Security must then execute said warrant.
      \n
      \nPre-Pre-Trial Phase:
      \nNow a legal representative must be presented to the defendant if said defendant requests one. That person and the defendant are then to be given time to meet (in the jail IS ACCEPTABLE). The defendant and his lawyer are then to be given a copy of all the evidence that will be presented at trial (rewriting it all on paper is fine). THIS IS CALLED THE DISCOVERY PACK. With a few exceptions, THIS IS THE ONLY EVIDENCE BOTH SIDES MAY USE AT TRIAL. IF the prosecution will be seeking the death penalty it MUST be stated at this time. ALSO if the defense will be seeking not guilty by mental defect it must state this at this time to allow ample time for examination.
      \nNow at this time each side is to compile a list of witnesses. By default, the defendant is on both lists regardless of anything else. Also the defense and prosecution can compile more evidence beforehand BUT in order for it to be used the evidence MUST also be given to the other side.\nThe defense has time to compile motions against some evidence here.
      \nPossible Motions:
      \n1. Invalidate Evidence- Something with the evidence is wrong and the evidence is to be thrown out. This includes irrelevance or corrupt security.
      \n2. Free Movement- Basically the defendant is to be kept uncuffed before and during the trial.
      \n3. Subpoena Witness- If the defense presents god reasons for needing a witness but said person fails to cooperate then a subpoena is issued.
      \n4. Drop the Charges- Not enough evidence is there for a trial so the charges are to be dropped. The FT CAN RETRY but the judicial authority must carefully reexamine the new evidence.
      \n5. Declare Incompetent- Basically the defendant is insane. Once this is granted a medical official is to examine the patient. If he is indeed insane he is to be placed under care of the medical staff until he is deemed competent to stand trial.
      \n
      \nALL SIDES MOVE TO A COURTROOM
      \nPre-Trial Hearings:
      \nA judicial authority and the 2 sides are to meet in the trial room. NO ONE ELSE BESIDES A SECURITY DETAIL IS TO BE PRESENT. The defense submits a plea. If the plea is guilty then proceed directly to sentencing phase. Now the sides each present their motions to the judicial authority. He rules on them. Each side can debate each motion. Then the judicial authority gets a list of crew members. He first gets a chance to look at them all and pick out acceptable and available jurors. Those jurors are then called over. Each side can ask a few questions and dismiss jurors they find too biased. HOWEVER before dismissal the judicial authority MUST agree to the reasoning.
      \n
      \nThe Trial:
      \nThe trial has three phases.
      \n1. Opening Arguments- Each side can give a short speech. They may not present ANY evidence.
      \n2. Witness Calling/Evidence Presentation- The prosecution goes first and is able to call the witnesses on his approved list in any order. He can recall them if necessary. During the questioning the lawyer may use the evidence in the questions to help prove a point. After every witness the other side has a chance to cross-examine. After both sides are done questioning a witness the prosecution can present another or recall one (even the EXACT same one again!). After prosecution is done the defense can call witnesses. After the initial cases are presented both sides are free to call witnesses on either list.
      \nFINALLY once both sides are done calling witnesses we move onto the next phase.
      \n3. Closing Arguments- Same as opening.
      \nThe jury then deliberates IN PRIVATE. THEY MUST ALL AGREE on a verdict. REMEMBER: They mix between some charges being guilty and others not guilty (IE if you supposedly killed someone with a gun and you unfortunately picked up a gun without authorization then you CAN be found not guilty of murder BUT guilty of possession of illegal weaponry.). Once they have agreed they present their verdict. If unable to reach a verdict and feel they will never they call a deadlocked jury and we restart at Pre-Trial phase with an entirely new set of jurors.
      \n
      \nSentencing Phase:
      \nIf the death penalty was sought (you MUST have gone through a trial for death penalty) then skip to the second part.
      \nI. Each side can present more evidence/witnesses in any order. There is NO ban on emotional aspects or anything. The prosecution is to submit a suggested penalty. After all the sides are done then the judicial authority is to give a sentence.
      \nII. The jury stays and does the same thing as I. Their sole job is to determine if the death penalty is applicable. If NOT then the judge selects a sentence.
      \n
      \nTADA you're done. Security then executes the sentence and adds the applicable convictions to the person's record.
      \n" /obj/item/paper/hydroponics name = "Greetings from Billy Bob" @@ -629,24 +610,6 @@ name = "DJ Listening Outpost" info = "Welcome new owner!

      You have purchased the latest in listening equipment. The telecommunication setup we created is the best in listening to common and private radio fequencies. Here is a step by step guide to start listening in on those saucy radio channels:
      1. Equip yourself with a multi-tool
      2. Use the multitool on each machine, that is the broadcaster, receiver and the relay.
      3. Turn all the machines on, it has already been configured for you to listen on.
      Simple as that. Now to listen to the private channels, you'll have to configure the intercoms, located on the front desk. Here is a list of frequencies for you to listen on.
      • 145.7 - Common Channel
      • 144.7 - Private AI Channel
      • 135.9 - Security Channel
      • 135.7 - Engineering Channel
      • 135.5 - Medical Channel
      • 135.3 - Command Channel
      • 135.1 - Science Channel
      • 134.9 - Mining Channel
      • 134.7 - Cargo Channel
      • " -/obj/item/paper/flag - icon_state = "flag_neutral" - item_state = "paper" - anchored = TRUE - -/obj/item/paper/jobs - name = "Job Information" - info = "Information on all formal jobs that can be assigned on Space Station 13 can be found on this document.
        \nThe data will be in the following form.
        \nGenerally lower ranking positions come first in this list.
        \n
        \nJob Name general access>lab access-engine access-systems access (atmosphere control)
        \n\tJob Description
        \nJob Duties (in no particular order)
        \nTips (where applicable)
        \n
        \nResearch Assistant 1>1-0-0
        \n\tThis is probably the lowest level position. Anyone who enters the space station after the initial job\nassignment will automatically receive this position. Access with this is restricted. Head of Personnel should\nappropriate the correct level of assistance.
        \n1. Assist the researchers.
        \n2. Clean up the labs.
        \n3. Prepare materials.
        \n
        \nStaff Assistant 2>0-0-0
        \n\tThis position assists the security officer in his duties. The staff assisstants should primarily br\npatrolling the ship waiting until they are needed to maintain ship safety.\n(Addendum: Updated/Elevated Security Protocols admit issuing of low level weapons to security personnel)
        \n1. Patrol ship/Guard key areas
        \n2. Assist security officer
        \n3. Perform other security duties.
        \n
        \nTechnical Assistant 1>0-0-1
        \n\tThis is yet another low level position. The technical assistant helps the engineer and the statian\ntechnician with the upkeep and maintenance of the station. This job is very important because it usually\ngets to be a heavy workload on station technician and these helpers will alleviate that.
        \n1. Assist Station technician and Engineers.
        \n2. Perform general maintenance of station.
        \n3. Prepare materials.
        \n
        \nMedical Assistant 1>1-0-0
        \n\tThis is the fourth position yet it is slightly less common. This position doesn't have much power\noutside of the med bay. Consider this position like a nurse who helps to upkeep medical records and the\nmaterials (filling syringes and checking vitals)
        \n1. Assist the medical personnel.
        \n2. Update medical files.
        \n3. Prepare materials for medical operations.
        \n
        \nResearch Technician 2>3-0-0
        \n\tThis job is primarily a step up from research assistant. These people generally do not get their own lab\nbut are more hands on in the experimentation process. At this level they are permitted to work as consultants to\nthe others formally.
        \n1. Inform superiors of research.
        \n2. Perform research alongside of official researchers.
        \n
        \nDetective 3>2-0-0
        \n\tThis job is in most cases slightly boring at best. Their sole duty is to\nperform investigations of crine scenes and analysis of the crime scene. This\nalleviates SOME of the burden from the security officer. This person's duty\nis to draw conclusions as to what happened and testify in court. Said person\nalso should stroe the evidence ly.
        \n1. Perform crime-scene investigations/draw conclusions.
        \n2. Store and catalogue evidence properly.
        \n3. Testify to superiors/inquieries on findings.
        \n
        \nStation Technician 2>0-2-3
        \n\tPeople assigned to this position must work to make sure all the systems aboard Space Station 13 are operable.\nThey should primarily work in the computer lab and repairing faulty equipment. They should work with the\natmospheric technician.
        \n1. Maintain SS13 systems.
        \n2. Repair equipment.
        \n
        \nAtmospheric Technician 3>0-0-4
        \n\tThese people should primarily work in the atmospheric control center and lab. They have the very important\njob of maintaining the delicate atmosphere on SS13.
        \n1. Maintain atmosphere on SS13
        \n2. Research atmospheres on the space station. (safely please!)
        \n
        \nEngineer 2>1-3-0
        \n\tPeople working as this should generally have detailed knowledge as to how the propulsion systems on SS13\nwork. They are one of the few classes that have unrestricted access to the engine area.
        \n1. Upkeep the engine.
        \n2. Prevent fires in the engine.
        \n3. Maintain a safe orbit.
        \n
        \nMedical Researcher 2>5-0-0
        \n\tThis position may need a little clarification. Their duty is to make sure that all experiments are safe and\nto conduct experiments that may help to improve the station. They will be generally idle until a new laboratory\nis constructed.
        \n1. Make sure the station is kept safe.
        \n2. Research medical properties of materials studied of Space Station 13.
        \n
        \nScientist 2>5-0-0
        \n\tThese people study the properties, particularly the toxic properties, of materials handled on SS13.\nTechnically they can also be called Plasma Technicians as plasma is the material they routinly handle.
        \n1. Research plasma
        \n2. Make sure all plasma is properly handled.
        \n
        \nMedical Doctor (Officer) 2>0-0-0
        \n\tPeople working this job should primarily stay in the medical area. They should make sure everyone goes to\nthe medical bay for treatment and examination. Also they should make sure that medical supplies are kept in\norder.
        \n1. Heal wounded people.
        \n2. Perform examinations of all personnel.
        \n3. Moniter usage of medical equipment.
        \n
        \nSecurity Officer 3>0-0-0
        \n\tThese people should attempt to keep the peace inside the station and make sure the station is kept safe. One\nside duty is to assist in repairing the station. They also work like general maintenance personnel. They are not\ngiven a weapon and must use their own resources.
        \n(Addendum: Updated/Elevated Security Protocols admit issuing of weapons to security personnel)
        \n1. Maintain order.
        \n2. Assist others.
        \n3. Repair structural problems.
        \n
        \nHead of Security 4>5-2-2
        \n\tPeople assigned as Head of Security should issue orders to the security staff. They should\nalso carefully moderate the usage of all security equipment. All security matters should be reported to this person.
        \n1. Oversee security.
        \n2. Assign patrol duties.
        \n3. Protect the station and staff.
        \n
        \nHead of Personnel 4>4-2-2
        \n\tPeople assigned as head of personnel will find themselves moderating all actions done by personnel. \nAlso they have the ability to assign jobs and access levels.
        \n1. Assign duties.
        \n2. Moderate personnel.
        \n3. Moderate research.
        \n
        \nCaptain 5>5-5-5 (unrestricted station wide access)
        \n\tThis is the highest position you can acquire on Space Station 13. They are allowed anywhere inside the\nspace station and therefore should protect their ID card. They also have the ability to assign positions\nand access levels. They should not abuse their power.
        \n1. Assign all positions on SS13
        \n2. Inspect the station for any problems.
        \n3. Perform administrative duties.
        \n" - -/obj/item/paper/photograph - name = "photo" - icon_state = "photo" - item_state = "paper" - -/obj/item/paper/sop - name = "paper- 'Standard Operating Procedure'" - info = "Alert Levels:
        \nBlue- Emergency
        \n\t1. Caused by fire
        \n\t2. Caused by manual interaction
        \n\tAction:
        \n\t\tClose all fire doors. These can only be opened by reseting the alarm
        \nRed- Ejection/Self Destruct
        \n\t1. Caused by module operating computer.
        \n\tAction:
        \n\t\tAfter the specified time the module will eject completely.
        \n
        \nEngine Maintenance Instructions:
        \n\tShut off ignition systems:
        \n\tActivate internal power
        \n\tActivate orbital balance matrix
        \n\tRemove volatile liquids from area
        \n\tWear a fire suit
        \n
        \n\tAfter
        \n\t\tDecontaminate
        \n\t\tVisit medical examiner
        \n
        \nToxin Laboratory Procedure:
        \n\tWear a gas mask regardless
        \n\tGet an oxygen tank.
        \n\tActivate internal atmosphere
        \n
        \n\tAfter
        \n\t\tDecontaminate
        \n\t\tVisit medical examiner
        \n
        \nDisaster Procedure:
        \n\tFire:
        \n\t\tActivate sector fire alarm.
        \n\t\tMove to a safe area.
        \n\t\tGet a fire suit
        \n\t\tAfter:
        \n\t\t\tAssess Damage
        \n\t\t\tRepair damages
        \n\t\t\tIf needed, Evacuate
        \n\tMeteor Shower:
        \n\t\tActivate fire alarm
        \n\t\tMove to the back of ship
        \n\t\tAfter
        \n\t\t\tRepair damage
        \n\t\t\tIf needed, Evacuate
        \n\tAccidental Reentry:
        \n\t\tActivate fire alarms in front of ship.
        \n\t\tMove volatile matter to a fire proof area!
        \n\t\tGet a fire suit.
        \n\t\tStay secure until an emergency ship arrives.
        \n
        \n\t\tIf ship does not arrive-
        \n\t\t\tEvacuate to a nearby safe area!" - /obj/item/paper/blueshield name = "paper- 'Blueshield Mission Briefing'" info = "Blueshield Mission Briefing
        You are charged with the defence of any persons of importance within the station. This includes, but is not limited to, The Captain, The Heads of Staff and Central Command staff. You answer directly to the Nanotrasen Representative who will assist you in achieving your mission.
        When required to achieve your primary responsibility, you should liaise with security and share resources; however, the day to day security operations of the station are outside of your jurisdiction.
        Monitor the health and safety of your principals, identify any potential risks and threats, then alert the proper departments to resolve the situation. You are authorized to act as bodyguard to any of the station heads that you determine are most in need of protection; however, additional access to their departments shall be granted solely at their discretion.
        Observe the station alert system and carry your armaments only as required by the situation, or when authorized by the Head of Security or Captain in exceptional cases.
        Remember, as an agent of Nanotrasen it is your responsibility to conduct yourself appropriately and you will be held to the highest standard. You will be held accountable for your actions. Security is authorized to search, interrogate or detain you as required by their own procedures. Internal affairs will also monitor and observe your conduct, and their mandate applies equally to security and Blueshield operations." diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm index 132a08887551..eef2ba38905a 100644 --- a/code/modules/paperwork/paperbin.dm +++ b/code/modules/paperwork/paperbin.dm @@ -69,8 +69,8 @@ update_icon() var/obj/item/paper/P - if(papers.len > 0) //If there's any custom paper on the stack, use that instead of creating a new paper. - P = papers[papers.len] + if(length(papers) > 0) //If there's any custom paper on the stack, use that instead of creating a new paper. + P = papers[length(papers)] papers.Remove(P) else if(letterhead_type && alert("Choose a style", null,"Letterhead","Blank")=="Letterhead") @@ -133,8 +133,8 @@ update_icon() var/obj/item/paper/carbon/P - if(papers.len > 0) //If there's any custom paper on the stack, use that instead of creating a new paper. - P = papers[papers.len] + if(length(papers) > 0) //If there's any custom paper on the stack, use that instead of creating a new paper. + P = papers[length(papers)] papers.Remove(P) else P = new /obj/item/paper/carbon diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 139bb128b096..f2c21581e06d 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -87,8 +87,8 @@ c.offset_y = copy.offset_y var/list/temp_overlays = copy.stamp_overlays //Iterates through stamps var/image/img //and puts a matching - for(var/j = 1, j <= temp_overlays.len, j++) //gray overlay onto the copy - if(copy.ico.len) + for(var/j = 1, j <= length(temp_overlays), j++) //gray overlay onto the copy + if(length(copy.ico)) if(findtext(copy.ico[j], "cap") || findtext(copy.ico[j], "cent") || findtext(copy.ico[j], "rep")) img = image('icons/obj/bureaucracy.dmi', "paper_stamp-circle") else if(findtext(copy.ico[j], "deny")) diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index c3cc150362a0..77ea69bf8ca3 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -285,7 +285,7 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor continue else//not invisable, not a spookyghost add it. var/disguised = null - if(user.viewing_alternate_appearances && user.viewing_alternate_appearances.len && ishuman(A) && A.alternate_appearances && A.alternate_appearances.len) //This whole thing and the stuff below just checks if the atom is a Solid Snake cosplayer. + if(user.viewing_alternate_appearances && length(user.viewing_alternate_appearances) && ishuman(A) && A.alternate_appearances && length(A.alternate_appearances)) //This whole thing and the stuff below just checks if the atom is a Solid Snake cosplayer. for(var/datum/alternate_appearance/alt_appearance in user.viewing_alternate_appearances) if(alt_appearance.owner == A) //If it turns out they are, don't blow their cover. That'd be rude. atoms.Add(image(alt_appearance.img, A.loc, layer = 4, dir = A.dir)) //Render their disguise. @@ -299,7 +299,7 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor // Sort the atoms into their layers var/list/sorted = sort_atoms_by_layer(atoms) var/center_offset = (size-1)/2 * 32 + 1 - for(var/i; i <= sorted.len; i++) + for(var/i; i <= length(sorted); i++) var/atom/A = sorted[i] if(A) var/icon/img = getFlatIcon(A)//build_composite_icon(A) @@ -508,7 +508,7 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor addtimer(CALLBACK(src, PROC_REF(reset_cooldown)), 6.4 SECONDS) // magic numbers here too /obj/item/camera/digital/captureimage(atom/target, mob/user, flag) - if(saved_pictures.len >= max_storage) + if(length(saved_pictures) >= max_storage) to_chat(user, "Maximum photo storage capacity reached.") return to_chat(user, "Picture saved.") @@ -664,7 +664,7 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor /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/gap = length(result) var/swapped = 1 while(gap > 1 || swapped) swapped = 0 @@ -672,7 +672,7 @@ GLOBAL_LIST_INIT(SpookyGhosts, list("ghost","shade","shade2","ghost-narsie","hor 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++) + for(var/i = 1; gap + i <= length(result); 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 diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm index aba7263615ed..8b40a6b1df00 100644 --- a/code/modules/paperwork/silicon_photography.dm +++ b/code/modules/paperwork/silicon_photography.dm @@ -45,7 +45,7 @@ var/list/nametemp = list() var/find - if(cam.aipictures.len == 0) + if(length(cam.aipictures) == 0) to_chat(usr, "No images saved") return for(var/datum/picture/t in cam.aipictures) diff --git a/code/modules/pda/app.dm b/code/modules/pda/app.dm index cb4c4e19213a..9e5a26f0ff53 100644 --- a/code/modules/pda/app.dm +++ b/code/modules/pda/app.dm @@ -46,7 +46,7 @@ /datum/data/pda/proc/unnotify() if(src in pda.notifying_programs) pda.notifying_programs -= src - if(!pda.notifying_programs.len) + if(!length(pda.notifying_programs)) pda.update_icon(UPDATE_OVERLAYS) // An app has a button on the home screen and its own UI diff --git a/code/modules/pda/cart_apps.dm b/code/modules/pda/cart_apps.dm index f34c992d99bc..2dd57fe8d5a5 100644 --- a/code/modules/pda/cart_apps.dm +++ b/code/modules/pda/cart_apps.dm @@ -313,7 +313,7 @@ var/area/our_area = get_area(B) mulebotsData[++mulebotsData.len] = list("Name" = sanitize(B.name), "Location" = our_area.name, "uid" = "[B.UID()]") - if(!mulebotsData.len) + if(!length(mulebotsData)) mulebotsData[++mulebotsData.len] = list("Name" = "No bots found", "Location" = "Invalid", "uid"= null) muleData["bots"] = mulebotsData @@ -378,7 +378,7 @@ supplyOrderCount++ supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) - if(!supplyOrderData.len) + if(!length(supplyOrderData)) supplyOrderData[++supplyOrderData.len] = list("Number" = null, "Name" = null, "OrderedBy"=null) supplyData["approved"] = supplyOrderData @@ -391,7 +391,7 @@ requestCount++ requestData[++requestData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "OrderedBy" = SO.orderedby, "Comment" = html_encode(SO.comment)) - if(!requestData.len) + if(!length(requestData)) requestData[++requestData.len] = list("Number" = null, "Name" = null, "orderedBy" = null, "Comment" = null) supplyData["requests"] = requestData @@ -460,10 +460,10 @@ var/direction_from_user = get_dir(pda, janicart) JaniCartData[++JaniCartData.len] = list("x" = janicart_loc.x, "y" = janicart_loc.y, "direction_from_user" = uppertext(dir2text(direction_from_user))) - JaniData["mops"] = MopData.len ? MopData : null - JaniData["buckets"] = BucketData.len ? BucketData : null - JaniData["cleanbots"] = CbotData.len ? CbotData : null - JaniData["carts"] = CartData.len ? CartData : null - JaniData["janicarts"] = JaniCartData.len ? JaniCartData : null + JaniData["mops"] = length(MopData) ? MopData : null + JaniData["buckets"] = length(BucketData) ? BucketData : null + JaniData["cleanbots"] = length(CbotData) ? CbotData : null + JaniData["carts"] = length(CartData) ? CartData : null + JaniData["janicarts"] = length(JaniCartData) ? JaniCartData : null data["janitor"] = JaniData diff --git a/code/modules/pda/messenger.dm b/code/modules/pda/messenger.dm index c83d85355848..5057c5ef8384 100644 --- a/code/modules/pda/messenger.dm +++ b/code/modules/pda/messenger.dm @@ -167,13 +167,13 @@ if(sendable && receivable) break - if(!sendable) // Are we in the range of a reciever? + if(!sendable) // Are we in the range of a receiver? to_chat(U, "ERROR: No connection to server.") if(!pda.silent) playsound(pda, 'sound/machines/terminal_error.ogg', 15, TRUE) return - if(!receivable) // Is our recipient in the range of a reciever? + if(!receivable) // Is our recipient in the range of a receiver? to_chat(U, "ERROR: No connection to recipient.") if(!pda.silent) playsound(pda, 'sound/machines/terminal_error.ogg', 15, TRUE) diff --git a/code/modules/pda/mob_hunt_game_app.dm b/code/modules/pda/mob_hunt_game_app.dm index 7ac6efca355f..73eab8cf1a52 100644 --- a/code/modules/pda/mob_hunt_game_app.dm +++ b/code/modules/pda/mob_hunt_game_app.dm @@ -96,16 +96,16 @@ data["connected"] = 1 data["wild_captures"] = wild_captures data["no_collection"] = 0 - if(!my_collection.len) + if(!length(my_collection)) data["no_collection"] = 1 return var/datum/mob_hunt/mob_info if(!current_index) current_index = 1 - if(current_index > my_collection.len) + if(current_index > length(my_collection)) current_index = 1 if(current_index < 1) - current_index = my_collection.len + current_index = length(my_collection) mob_info = my_collection[current_index] var/list/entry = list( "nickname" = mob_info.nickname, @@ -121,7 +121,7 @@ data["entry"] = entry /datum/data/pda/app/mob_hunter_game/proc/assign_nickname() - if(!my_collection.len) + if(!length(my_collection)) return var/datum/mob_hunt/mob_info = my_collection[current_index] var/old_name = mob_info.mob_name @@ -130,13 +130,13 @@ mob_info.nickname = tgui_input_text(usr, "Give a nickname to [old_name]?", "Nickname", old_name) /datum/data/pda/app/mob_hunter_game/proc/release() - if(!my_collection.len) + if(!length(my_collection)) return if(tgui_alert(usr, "Are you sure you want to release this mob back into the wild?", "Confirm Release", list("Yes", "No")) == "Yes") remove_mob() /datum/data/pda/app/mob_hunter_game/proc/print_card() - if(!pda || !my_collection.len) + if(!pda || !length(my_collection)) return var/obj/item/nanomob_card/card = new/obj/item/nanomob_card(null) var/datum/mob_hunt/mob_info = my_collection[current_index] @@ -168,7 +168,7 @@ current_index = collection_length /datum/data/pda/app/mob_hunter_game/proc/set_trap() - if(!my_collection.len || !pda || !hacked) + if(!length(my_collection) || !pda || !hacked) return var/datum/mob_hunt/bait = my_collection[current_index] bait = bait.type @@ -189,12 +189,12 @@ release() if("Next") current_index++ - if(current_index > my_collection.len) + if(current_index > length(my_collection)) current_index = 1 if("Prev") current_index-- if(current_index < 1) - current_index = my_collection.len + current_index = length(my_collection) if("Reconnect") reconnect() if("Disconnect") diff --git a/code/modules/pda/utilities.dm b/code/modules/pda/utilities.dm index 8642d0782df8..37ac90e11593 100644 --- a/code/modules/pda/utilities.dm +++ b/code/modules/pda/utilities.dm @@ -107,8 +107,8 @@ /datum/data/pda/utility/scanmode/reagent/scan_atom(atom/A as mob|obj|turf|area, mob/user as mob) var/list/messages = list() if(!isnull(A.reagents)) - if(A.reagents.reagent_list.len > 0) - var/reagents_length = A.reagents.reagent_list.len + if(length(A.reagents.reagent_list) > 0) + var/reagents_length = length(A.reagents.reagent_list) messages.Add("[reagents_length] chemical agent[reagents_length > 1 ? "s" : ""] found.") for(var/datum/reagent/R in A.reagents.reagent_list) if(R.id != "blood") diff --git a/code/modules/power/apc/apc.dm b/code/modules/power/apc/apc.dm index fe4b65e06c20..c61b5e28a1b4 100644 --- a/code/modules/power/apc/apc.dm +++ b/code/modules/power/apc/apc.dm @@ -52,7 +52,7 @@ /*** APC Status Vars ***/ /// The wire panel associated with this APC var/datum/wires/apc/wires = null - /// Can the APC recieve/transmit power? Determined by the condition of the 2 Main Power Wires + /// Can the APC receive/transmit power? Determined by the condition of the 2 Main Power Wires var/shorted = FALSE /// Is the APC on and transmitting power to enabled breakers? Think of this var as the master breaker for the APC var/operating = TRUE @@ -79,7 +79,7 @@ var/locked = TRUE /// If TRUE, the APC will automatically draw power from connect terminal, if FALSE it will not charge var/chargemode = TRUE - /// Counter var, ticks up when the APC recieves power from terminal and resets to 0 when not charging, used for the `var/charging` var + /// Counter var, ticks up when the APC receives power from terminal and resets to 0 when not charging, used for the `var/charging` var var/chargecount = 0 var/report_power_alarm = TRUE diff --git a/code/modules/power/cables/cable.dm b/code/modules/power/cables/cable.dm index a6757fd34bee..18d73085e04c 100644 --- a/code/modules/power/cables/cable.dm +++ b/code/modules/power/cables/cable.dm @@ -336,8 +336,6 @@ By design, d1 is the smallest direction and d2 is the highest T = get_turf(src) . += T.power_list(src, d2) //get on turf matching cables - return . - //should be called after placing a cable which extends another cable, creating a "smooth" cable that no longer terminates in the centre of a turf. //needed as this can, unlike other placements, disconnect cables /obj/structure/cable/proc/denode() diff --git a/code/modules/power/engines/singularity/field_generator.dm b/code/modules/power/engines/singularity/field_generator.dm index cc75a1e73784..5e27ef46dc62 100644 --- a/code/modules/power/engines/singularity/field_generator.dm +++ b/code/modules/power/engines/singularity/field_generator.dm @@ -45,7 +45,7 @@ GLOBAL_LIST_EMPTY(field_generator_fields) . = ..() if(warming_up) . += "+a[warming_up]" - if(fields.len) + if(length(fields)) . += "+on" if(power_level) . += "+p[power_level]" @@ -182,7 +182,7 @@ GLOBAL_LIST_EMPTY(field_generator_fields) /obj/machinery/field/generator/proc/calc_power() - var/power_draw = 2 + fields.len + var/power_draw = 2 + length(fields) if(draw_power(round(power_draw/2, 1))) check_power_level() @@ -333,11 +333,11 @@ GLOBAL_LIST_EMPTY(field_generator_fields) O.last_warning = world.time /obj/machinery/field/generator/shock_field(mob/living/user) - if(fields.len) + if(length(fields)) ..() /obj/machinery/field/generator/bump_field(atom/movable/AM as mob|obj) - if(fields.len) + if(length(fields)) ..() #undef FG_UNSECURED diff --git a/code/modules/power/engines/singularity/singularity.dm b/code/modules/power/engines/singularity/singularity.dm index 3fcf4600a749..f9da157db0d7 100644 --- a/code/modules/power/engines/singularity/singularity.dm +++ b/code/modules/power/engines/singularity/singularity.dm @@ -519,7 +519,7 @@ /obj/effect/abstract/proximity_checker/singulo/Crossed(atom/movable/AM, oldloc) . = ..() - if(!istype(AM, /obj/item/projectile)) + if(!isprojectile(AM)) return var/obj/item/projectile/P = AM var/distance = distance_to_singulo diff --git a/code/modules/power/engines/supermatter/supermatter.dm b/code/modules/power/engines/supermatter/supermatter.dm index 06b7bc18c14e..7e42b7aa53df 100644 --- a/code/modules/power/engines/supermatter/supermatter.dm +++ b/code/modules/power/engines/supermatter/supermatter.dm @@ -330,7 +330,7 @@ var/turf/T = get_turf(M) if(istype(T) && atoms_share_level(T, src)) // if the player is on the same zlevel as the SM shared SEND_SOUND(M, sound('sound/machines/engine_alert2.ogg')) // then send them the sound file - radio.autosay(speaking, name, null, list(z)) + radio.autosay(speaking, name, null) for(var/i in SUPERMATTER_COUNTDOWN_TIME to 0 step -10) if(!processes) // Stop exploding if you're frozen by an admin, damn you cut_overlay(causality_field, TRUE) @@ -338,7 +338,7 @@ damage = explosion_point - 1 // One point below exploding, so it will re-start the countdown once unfrozen return if(damage < explosion_point) // Cutting it a bit close there engineers - radio.autosay("[safe_alert] Failsafe has been disengaged.", name, null, list(z)) + radio.autosay("[safe_alert] Failsafe has been disengaged.", name, null) cut_overlay(causality_field, TRUE) final_countdown = FALSE remove_filter(list("outline", "icon")) @@ -350,7 +350,7 @@ speaking = "[DisplayTimeText(i, TRUE)] remain before causality stabilization." else speaking = "[i*0.1]..." - radio.autosay(speaking, name, null, list(z)) + radio.autosay(speaking, name, null) sleep(10) explode() @@ -651,27 +651,27 @@ //Oh shit it's bad, time to freak out if(damage > emergency_point) - radio.autosay("[emergency_alert] Integrity: [get_integrity()]%", name, null, list(z)) + radio.autosay("[emergency_alert] Integrity: [get_integrity()]%", name, null) lastwarning = REALTIMEOFDAY if(!has_reached_emergency) investigate_log("has reached the emergency point for the first time.", "supermatter") message_admins("[src] has reached the emergency point [ADMIN_JMP(src)].") has_reached_emergency = TRUE else if(damage >= damage_archived) // The damage is still going up - radio.autosay("[warning_alert] Integrity: [get_integrity()]%", name, "Engineering", list(z)) + radio.autosay("[warning_alert] Integrity: [get_integrity()]%", name, "Engineering") lastwarning = REALTIMEOFDAY - (WARNING_DELAY * 5) else // Phew, we're safe - radio.autosay("[safe_alert] Integrity: [get_integrity()]%", name, "Engineering", list(z)) + radio.autosay("[safe_alert] Integrity: [get_integrity()]%", name, "Engineering") lastwarning = REALTIMEOFDAY if(power > POWER_PENALTY_THRESHOLD) - radio.autosay("Warning: Hyperstructure has reached dangerous power level.", name, "Engineering", list(z)) + radio.autosay("Warning: Hyperstructure has reached dangerous power level.", name, "Engineering") if(powerloss_inhibitor < 0.5) - radio.autosay("DANGER: CHARGE INERTIA CHAIN REACTION IN PROGRESS.", name, "Engineering", list(z)) + radio.autosay("DANGER: CHARGE INERTIA CHAIN REACTION IN PROGRESS.", name, "Engineering") if(combined_gas > MOLE_CRUNCH_THRESHOLD) - radio.autosay("Warning: Critical coolant mass reached.", name, "Engineering", list(z)) + radio.autosay("Warning: Critical coolant mass reached.", name, "Engineering") //Boom (Mind blown) if(damage > explosion_point) countdown() diff --git a/code/modules/power/engines/supermatter/supermatter_event.dm b/code/modules/power/engines/supermatter/supermatter_event.dm index db17530f41e3..8af8c5ef9b30 100644 --- a/code/modules/power/engines/supermatter/supermatter_event.dm +++ b/code/modules/power/engines/supermatter/supermatter_event.dm @@ -43,12 +43,12 @@ /datum/supermatter_event/proc/sm_radio_say(text) if(!text) return - supermatter.radio.autosay(text, supermatter, "Engineering", list(supermatter.z)) + supermatter.radio.autosay(text, supermatter, "Engineering") /datum/supermatter_event/proc/general_radio_say(text) if(!text) return - supermatter.radio.autosay(text, supermatter, null, list(supermatter.z)) + supermatter.radio.autosay(text, supermatter, null) // Below this are procs used for the SM events, in order of severity diff --git a/code/modules/power/engines/tesla/generator.dm b/code/modules/power/engines/tesla/generator.dm deleted file mode 100644 index 260f4128bcf2..000000000000 --- a/code/modules/power/engines/tesla/generator.dm +++ /dev/null @@ -1,10 +0,0 @@ -/obj/machinery/the_singularitygen/tesla - name = "energy ball generator" - desc = "Makes the wardenclyffe look like a child's plaything when shot with a particle accelerator." - icon = 'icons/obj/tesla_engine/tesla_generator.dmi' - icon_state = "TheSingGen" - creation_type = /obj/singularity/energy_ball - -/obj/machinery/the_singularitygen/tesla/zap_act(power, zap_flags) - if(zap_flags & ZAP_MACHINE_EXPLOSIVE) - energy += power diff --git a/code/modules/power/generators/solar.dm b/code/modules/power/generators/solar.dm index 7a9aa7eb9bb5..8af1ed8f693f 100644 --- a/code/modules/power/generators/solar.dm +++ b/code/modules/power/generators/solar.dm @@ -102,7 +102,7 @@ panel.transform = M . += panel -//calculates the fraction of the sunlight that the panel recieves +//calculates the fraction of the sunlight that the panel receives /obj/machinery/power/solar/proc/update_solar_exposure() if(obscured) sunfrac = 0 @@ -385,13 +385,13 @@ /obj/machinery/power/solar_control/ui_data(mob/user) var/list/data = list() data["generated"] = round(lastgen) //generated power by all connected panels - data["generated_ratio"] = data["generated"] / round(max(connected_panels.len, 1) * SSsun.solar_gen_rate) //power generation ratio. Used for the power bar + data["generated_ratio"] = data["generated"] / round(max(length(connected_panels), 1) * SSsun.solar_gen_rate) //power generation ratio. Used for the power bar data["direction"] = angle2text(cdir) //current orientation of the panels data["cdir"] = cdir //current orientation of the of the panels in degrees data["tracking_state"] = track //tracker status: TRACKER_OFF, TRACKER_TIMED, TRACKER_AUTO data["tracking_rate"] = trackrate //rotation speed of tracker in degrees/h data["rotating_direction"] = (trackrate < 0 ? "Counter clockwise" : "Clockwise") //direction of tracker - data["connected_panels"] = connected_panels.len + data["connected_panels"] = length(connected_panels) data["connected_tracker"] = (connected_tracker ? TRUE : FALSE) return data diff --git a/code/modules/power/generators/turbine.dm b/code/modules/power/generators/turbine.dm index a9e7ca43a047..cd8a10789221 100644 --- a/code/modules/power/generators/turbine.dm +++ b/code/modules/power/generators/turbine.dm @@ -174,7 +174,7 @@ starter = FALSE last_overheat = world.time overheat -= 50 - radio.autosay(OVERHEAT_MESSAGE, name, "Engineering", list(z)) + radio.autosay(OVERHEAT_MESSAGE, name, "Engineering") playsound(src, 'sound/machines/buzz-two.ogg', 100, FALSE, 40, 30, falloff_distance = 10) /obj/machinery/power/compressor/proc/time_until_overheat_done() diff --git a/code/modules/power/powernets/local_powernet.dm b/code/modules/power/powernets/local_powernet.dm index cad1158a1aac..1e9ce8f34b92 100644 --- a/code/modules/power/powernets/local_powernet.dm +++ b/code/modules/power/powernets/local_powernet.dm @@ -2,7 +2,7 @@ * # local_powernet * * Manages all power related mechanics for a single /area - * Machines in areas will directly register to this datum in order to recieve power + * Machines in areas will directly register to this datum in order to receive power * * Machine/Turf/Item -> Local Powernet -> APC -> Terminal -> Wirenet * diff --git a/code/modules/power/powernets/powernet_helpers.dm b/code/modules/power/powernets/powernet_helpers.dm index 0a11352a5c3a..94d1a9c5cf71 100644 --- a/code/modules/power/powernets/powernet_helpers.dm +++ b/code/modules/power/powernets/powernet_helpers.dm @@ -40,7 +40,7 @@ return //We assume net1 is larger. If net2 is in fact larger we are just going to make them switch places to reduce on code. - if(net1.cables.len < net2.cables.len) //net2 is larger than net1. Let's switch them around + if(length(net1.cables) < length(net2.cables)) //net2 is larger than net1. Let's switch them around var/temp = net1 net1 = net2 net2 = temp diff --git a/code/modules/procedural_mapping/mapGenerator.dm b/code/modules/procedural_mapping/mapGenerator.dm index ecb9698fee14..5d3d2af498c0 100644 --- a/code/modules/procedural_mapping/mapGenerator.dm +++ b/code/modules/procedural_mapping/mapGenerator.dm @@ -83,7 +83,7 @@ //Requests the mapGeneratorModule(s) to (re)generate /datum/mapGenerator/proc/generate() syncModules() - if(!modules || !modules.len) + if(!modules || !length(modules)) return for(var/datum/mapGeneratorModule/mod in modules) spawn(0) @@ -95,7 +95,7 @@ if(!T) return syncModules() - if(!modules || !modules.len) + if(!modules || !length(modules)) return for(var/datum/mapGeneratorModule/mod in modules) spawn(0) diff --git a/code/modules/projectiles/ammunition/energy_lens.dm b/code/modules/projectiles/ammunition/energy_lens.dm index 93f8c9b3d661..17964d6c365a 100644 --- a/code/modules/projectiles/ammunition/energy_lens.dm +++ b/code/modules/projectiles/ammunition/energy_lens.dm @@ -187,7 +187,7 @@ projectile_type = /obj/item/projectile/plasma muzzle_flash_color = LIGHT_COLOR_PURPLE select_name = "plasma burst" - fire_sound = 'sound/weapons/plasma_cutter.ogg' + fire_sound = 'sound/weapons/pulse.ogg' delay = 15 e_cost = 75 @@ -241,15 +241,6 @@ projectile_type = /obj/item/projectile/beam/instakill/red muzzle_flash_color = LIGHT_COLOR_DARKRED -/obj/item/ammo_casing/energy/plasma - projectile_type = /obj/item/projectile/plasma - muzzle_flash_color = LIGHT_COLOR_PURPLE - select_name = "plasma burst" - fire_sound = 'sound/weapons/pulse.ogg' - -/obj/item/ammo_casing/energy/plasma/adv - projectile_type = /obj/item/projectile/plasma/adv - /obj/item/ammo_casing/energy/tesla_bolt fire_sound = 'sound/magic/lightningbolt.ogg' e_cost = 200 diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index 6b52313e991a..b5365256fe8b 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -35,6 +35,8 @@ var/semicd = 0 //cooldown handler var/execution_speed = 6 SECONDS var/weapon_weight = WEAPON_LIGHT + /// Additional spread when dual wielding. + var/dual_wield_spread = 24 var/list/restricted_species var/spread = 0 @@ -201,7 +203,7 @@ continue else if(G.can_trigger_gun(user)) if(!HAS_TRAIT(user, TRAIT_BADASS)) - bonus_spread += 24 * G.weapon_weight + bonus_spread += dual_wield_spread * G.weapon_weight loop_counter++ addtimer(CALLBACK(G, PROC_REF(process_fire), target, user, 1, params, null, bonus_spread), loop_counter) @@ -210,7 +212,7 @@ /obj/item/gun/proc/can_trigger_gun(mob/living/user) if(!user.can_use_guns(src)) return 0 - if(restricted_species && restricted_species.len && !is_type_in_list(user.dna.species, restricted_species)) + if(restricted_species && length(restricted_species) && !is_type_in_list(user.dna.species, restricted_species)) to_chat(user, "[src] is incompatible with your biology!") return 0 return 1 diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 9502b94bdb3c..9bc6e43ec821 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -46,7 +46,7 @@ . = TRUE if(!max_mod_capacity) return - if(!modkits.len) + if(!length(modkits)) to_chat(user, "There are no modifications currently installed.") return if(!I.use_tool(src, user, 0, volume = I.tool_volume)) diff --git a/code/modules/projectiles/guns/energy_guns.dm b/code/modules/projectiles/guns/energy_guns.dm index eea499c0be28..5980eaad8ec4 100644 --- a/code/modules/projectiles/guns/energy_guns.dm +++ b/code/modules/projectiles/guns/energy_guns.dm @@ -61,7 +61,7 @@ /obj/item/gun/energy/proc/update_ammo_types() var/obj/item/ammo_casing/energy/shot select = clamp(select, 1, length(ammo_type)) // If we decrease ammo types while selecting a removed one, we want to make sure it doesnt try to select an out of bounds index - for(var/i = 1, i <= ammo_type.len, i++) + for(var/i = 1, i <= length(ammo_type), i++) var/shottype = ammo_type[i] shot = new shottype(src) ammo_type[i] = shot @@ -90,7 +90,7 @@ newshot() /obj/item/gun/energy/attack_self(mob/living/user as mob) - if(ammo_type.len > 1) + if(length(ammo_type) > 1) select_fire(user) update_icon() if(ishuman(user)) //This has to be here or else if you toggle modes by clicking the gun in hand @@ -127,7 +127,7 @@ /obj/item/gun/energy/proc/select_fire(mob/living/user) select++ - if(select > ammo_type.len) + if(select > length(ammo_type)) select = 1 var/obj/item/ammo_casing/energy/shot = ammo_type[select] fire_sound = shot.fire_sound @@ -200,7 +200,7 @@ if(can_shoot()) user.visible_message("[user] is putting the barrel of [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!") sleep(25) - if(user.l_hand == src || user.r_hand == src) + if(user.is_holding(src)) user.visible_message("[user] melts [user.p_their()] face off with [src]!") playsound(loc, fire_sound, 50, 1, -1) var/obj/item/ammo_casing/energy/shot = ammo_type[select] diff --git a/code/modules/projectiles/guns/grenade_launcher.dm b/code/modules/projectiles/guns/grenade_launcher.dm index a2c4e3bd46d3..0f581dd75d34 100644 --- a/code/modules/projectiles/guns/grenade_launcher.dm +++ b/code/modules/projectiles/guns/grenade_launcher.dm @@ -16,17 +16,17 @@ /obj/item/gun/grenadelauncher/examine(mob/user) . = ..() if(get_dist(user, src) <= 2) - . += "[grenades.len] / [max_grenades] grenades." + . += "[length(grenades)] / [max_grenades] grenades." /obj/item/gun/grenadelauncher/attackby(obj/item/I as obj, mob/user as mob, params) if((istype(I, /obj/item/grenade))) - if(grenades.len < max_grenades) + if(length(grenades) < max_grenades) if(!user.unEquip(I)) return I.loc = src grenades += I to_chat(user, "You put the grenade in [src].") - to_chat(user, "[grenades.len] / [max_grenades] grenades.") + to_chat(user, "[length(grenades)] / [max_grenades] grenades.") else to_chat(user, "The grenade launcher cannot hold more grenades.") else @@ -36,7 +36,7 @@ if(target == user) return - if(grenades.len) + if(length(grenades)) fire_grenade(target,user) else to_chat(user, "The grenade launcher is empty.") diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 5558b2ed2fd3..9963f90cc99b 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -357,7 +357,7 @@ return ..() /obj/item/gun/projectile/shotgun/automatic/dual_tube/attack_self(mob/living/user) - if(!chambered && magazine.contents.len) + if(!chambered && length(magazine.contents)) pump() else toggle_tube(user) diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm index 8b6e5b9f9074..43781e87570a 100644 --- a/code/modules/projectiles/guns/projectile/sniper.dm +++ b/code/modules/projectiles/guns/projectile/sniper.dm @@ -192,7 +192,7 @@ /obj/item/ammo_box/magazine/toy/sniper_rounds/update_overlays() . = ..() var/ammo = ammo_count() - if(ammo && istype(contents[contents.len], /obj/item/ammo_casing/caseless/foam_dart/sniper/riot)) + if(ammo && istype(contents[length(contents)], /obj/item/ammo_casing/caseless/foam_dart/sniper/riot)) . += ".50mag-r" else if(ammo) . += ".50mag-f" diff --git a/code/modules/projectiles/guns/projectile_gun.dm b/code/modules/projectiles/guns/projectile_gun.dm index 37d17ed38d49..25dc5282cb46 100644 --- a/code/modules/projectiles/guns/projectile_gun.dm +++ b/code/modules/projectiles/guns/projectile_gun.dm @@ -148,7 +148,7 @@ if(loc == user) if(suppressed && can_unsuppress) var/obj/item/suppressor/S = suppressed - if(user.l_hand != src && user.r_hand != src) + if(!user.is_holding(src)) ..() return to_chat(user, "You unscrew [suppressed] from [src].") @@ -198,7 +198,7 @@ if(chambered && chambered.BB && !chambered.BB.nodamage) user.visible_message("[user] is putting the barrel of [src] in [user.p_their()] mouth. It looks like [user.p_theyre()] trying to commit suicide!") sleep(25) - if(user.l_hand == src || user.r_hand == src) + if(user.is_holding(src)) process_fire(user, user, 0, zone_override = "head") user.visible_message("[user] blows [user.p_their()] brains out with [src]!") return BRUTELOSS diff --git a/code/modules/projectiles/guns/syringe_gun.dm b/code/modules/projectiles/guns/syringe_gun.dm index 390e2693f849..c930fb9efa2e 100644 --- a/code/modules/projectiles/guns/syringe_gun.dm +++ b/code/modules/projectiles/guns/syringe_gun.dm @@ -41,7 +41,7 @@ /obj/item/gun/syringe/examine(mob/user) . = ..() - var/num_syringes = syringes.len + (chambered.BB ? 1 : 0) + var/num_syringes = length(syringes) + (chambered.BB ? 1 : 0) . += "Can hold [max_syringes] syringe\s. Has [num_syringes] syringe\s remaining." /obj/item/gun/syringe/attack_self(mob/living/user) @@ -406,6 +406,7 @@ desc = "Fire syringes at a short distance." icon_state = "blowgun" item_state = "gun" + trigger_guard = TRIGGER_GUARD_ALLOW_ALL // you fire it with your mouth /obj/item/gun/syringe/blowgun/process_fire(atom/target, mob/living/user, message = TRUE, params = null, zone_override = "", bonus_spread = 0) if(chambered.BB) diff --git a/code/modules/projectiles/guns/throw.dm b/code/modules/projectiles/guns/throw.dm index 36483a237f81..0a7a246b16bd 100644 --- a/code/modules/projectiles/guns/throw.dm +++ b/code/modules/projectiles/guns/throw.dm @@ -25,7 +25,7 @@ return /obj/item/gun/throw/proc/get_ammocount(include_loaded = 1) - var/count = loaded_projectiles.len + var/count = length(loaded_projectiles) if(include_loaded && to_launch) count++ return count @@ -63,7 +63,7 @@ to_chat(user, "You cannot load [I] into [src]!") /obj/item/gun/throw/process_chamber() - if(!to_launch && loaded_projectiles.len) + if(!to_launch && length(loaded_projectiles)) to_launch = loaded_projectiles[1] loaded_projectiles -= to_launch return diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 6e6bfaece4d4..1910e9fbe27e 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -93,7 +93,8 @@ if(!ishuman(target)) return var/mob/living/carbon/human/H = target - if(H.getStaminaLoss() >= 60) + // initial range - range gives approximate tile distance from user + if(initial(range) - range <= 5 && H.getStaminaLoss() >= 60) H.KnockDown(8 SECONDS) /obj/item/projectile/bullet/pellet/assassination diff --git a/code/modules/projectiles/projectile/magic_projectiles.dm b/code/modules/projectiles/projectile/magic_projectiles.dm index 1d21a315982f..8ccc59ffc307 100644 --- a/code/modules/projectiles/projectile/magic_projectiles.dm +++ b/code/modules/projectiles/projectile/magic_projectiles.dm @@ -357,7 +357,7 @@ GLOBAL_LIST_INIT(wabbajack_docile_animals, list( qdel(src) else var/obj/O = change - if(istype(O, /obj/item/gun)) + if(isgun(O)) new /mob/living/simple_animal/hostile/mimic/copy/ranged(O.loc, O, firer) else new /mob/living/simple_animal/hostile/mimic/copy(O.loc, O, firer) diff --git a/code/modules/projectiles/projectile_base.dm b/code/modules/projectiles/projectile_base.dm index 6d1b57c6615a..2bea14964e61 100644 --- a/code/modules/projectiles/projectile_base.dm +++ b/code/modules/projectiles/projectile_base.dm @@ -295,7 +295,7 @@ var/list/mobs_list = list() for(var/mob/living/L in target_turf) mobs_list += L - if(mobs_list.len) + if(length(mobs_list)) var/mob/living/picked_mob = pick(mobs_list) prehit(picked_mob) picked_mob.bullet_act(src, def_zone) @@ -529,7 +529,7 @@ thing.set_light(muzzle_flash_range, muzzle_flash_intensity, muzzle_flash_color_override? muzzle_flash_color_override : color) QDEL_IN(thing, duration) if(impacting && impact_type && duration > 0) - var/datum/point_precise/p = beam_segments[beam_segments[beam_segments.len]] + var/datum/point_precise/p = beam_segments[beam_segments[length(beam_segments)]] var/atom/movable/thing = new impact_type p.move_atom_to_src(thing) var/matrix/matrix = new diff --git a/code/modules/reagents/chem_splash.dm b/code/modules/reagents/chem_splash.dm index e15c57d068ef..c092c049c2b8 100644 --- a/code/modules/reagents/chem_splash.dm +++ b/code/modules/reagents/chem_splash.dm @@ -6,7 +6,7 @@ /proc/chem_splash(turf/epicenter, affected_range = 3, list/datum/reagents/reactants = list(), extra_heat = 0, threatscale = 1, adminlog = 1) - if(!isturf(epicenter) || !reactants.len || threatscale <= 0) + if(!isturf(epicenter) || !length(reactants) || threatscale <= 0) return var/has_reagents var/total_reagents @@ -25,7 +25,7 @@ for(var/datum/reagents/R in reactants) R.trans_to(splash_holder, R.total_volume, threatscale, 1, 1) total_temp += R.chem_temp - splash_holder.set_reagent_temp((total_temp / reactants.len) + extra_heat) // Average temperature of reagents + extra heat. + splash_holder.set_reagent_temp((total_temp / length(reactants)) + extra_heat) // Average temperature of reagents + extra heat. if(splash_holder.total_volume && affected_range >= 0) //The possible reactions didnt use up all reagents, so we spread it around. var/datum/effect_system/steam_spread/steam = new /datum/effect_system/steam_spread() @@ -63,7 +63,7 @@ reactable |= A if(extra_heat >= 300) T.hotspot_expose(extra_heat*2, 5) - if(!reactable.len) //Nothing to react with. Probably means we're in nullspace. + if(!length(reactable)) //Nothing to react with. Probably means we're in nullspace. return for(var/thing in reactable) var/atom/A = thing diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 0b6092f06ed9..057779f1f2dd 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -165,7 +165,7 @@ var/beakerContents[0] var/beakerCurrentVolume = 0 - if(beaker && beaker.reagents && beaker.reagents.reagent_list.len) + if(beaker && beaker.reagents && length(beaker.reagents.reagent_list)) for(var/datum/reagent/R in beaker.reagents.reagent_list) beakerContents.Add(list(list("name" = R.name, "id"=R.id, "volume" = R.volume))) // list in a list because Byond merges the first list... beakerCurrentVolume += R.volume diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index 78b8fe058d09..67d620b2e7e5 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -435,7 +435,7 @@ data["loaded_pill_bottle"] = loaded_pill_bottle ? TRUE : FALSE if(loaded_pill_bottle) data["loaded_pill_bottle_name"] = loaded_pill_bottle.name - data["loaded_pill_bottle_contents_len"] = loaded_pill_bottle.contents.len + data["loaded_pill_bottle_contents_len"] = length(loaded_pill_bottle.contents) data["loaded_pill_bottle_storage_slots"] = loaded_pill_bottle.storage_slots data["loaded_pill_bottle_style"] = loaded_pill_bottle.wrapper_color diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index 92f15a545471..51862c1a89c6 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -28,7 +28,7 @@ /obj/machinery/computer/pandemic/proc/GetVirusByIndex(index) if(beaker && beaker.reagents) - if(beaker.reagents.reagent_list.len) + if(length(beaker.reagents.reagent_list)) var/datum/reagent/blood/BL = locate() in beaker.reagents.reagent_list if(BL) if(BL.data && BL.data["viruses"]) @@ -37,7 +37,7 @@ /obj/machinery/computer/pandemic/proc/GetResistancesByIndex(index) if(beaker && beaker.reagents) - if(beaker.reagents.reagent_list.len) + if(length(beaker.reagents.reagent_list)) var/datum/reagent/blood/BL = locate() in beaker.reagents.reagent_list if(BL) if(BL.data && BL.data["resistances"]) @@ -258,7 +258,7 @@ if(B) Blood = B break - if(!R.total_volume||!R.reagent_list.len) + if(!R.total_volume||!length(R.reagent_list)) dat += "The beaker is empty
        " else if(!Blood) dat += "No blood sample found in beaker." @@ -272,7 +272,7 @@ if(Blood.data["viruses"]) var/list/vir = Blood.data["viruses"] - if(vir.len) + if(length(vir)) var/i = 0 for(var/thing in Blood.data["viruses"]) var/datum/disease/D = thing @@ -314,7 +314,7 @@ dat += "
        Contains antibodies to: " if(Blood.data["resistances"]) var/list/res = Blood.data["resistances"] - if(res.len) + if(length(res)) dat += "
          " var/i = 0 for(var/type in Blood.data["resistances"]) @@ -335,7 +335,7 @@ dat += "nothing
          " else dat += "nothing
          " - dat += "
          Eject beaker[((R.total_volume&&R.reagent_list.len) ? "-- Empty and eject beaker":"")]
          " + dat += "
          Eject beaker[((R.total_volume&&length(R.reagent_list)) ? "-- Empty and eject beaker":"")]
          " dat += "Close" var/datum/browser/popup = new(user, "pandemic", name, 575, 400) diff --git a/code/modules/reagents/chemistry/reagents/alcohol.dm b/code/modules/reagents/chemistry/reagents/alcohol.dm index e72a81a8a684..f5fc09e778da 100644 --- a/code/modules/reagents/chemistry/reagents/alcohol.dm +++ b/code/modules/reagents/chemistry/reagents/alcohol.dm @@ -1454,7 +1454,7 @@ alcohol_description = "watery" //How the hell did you get negative boozepwr? var/list/fruits = list() - if(names_in_order.len <= 3) + if(length(names_in_order) <= 3) fruits = names_in_order else for(var/i in 1 to 3) @@ -1464,10 +1464,10 @@ description = "A [alcohol_description] wine brewed from [fruit_list]." var/flavor = "" - if(!primary_tastes.len) + if(!length(primary_tastes)) primary_tastes = list("[alcohol_description] alcohol") flavor += english_list(primary_tastes) - if(secondary_tastes.len) + if(length(secondary_tastes)) flavor += ", with a hint of " flavor += english_list(secondary_tastes) taste_description = flavor diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 28e66a573fd2..d17094ef38bb 100644 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -52,7 +52,7 @@ data = counterlist_normalise(supplied_data) /datum/reagent/consumable/nutriment/on_merge(list/newdata, newvolume) - if(!islist(newdata) || !newdata.len) + if(!islist(newdata) || !length(newdata)) return var/list/taste_amounts = list() var/list/other_taste_amounts = newdata.Copy() diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index 5e779a760704..fbda929a5999 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -979,7 +979,7 @@ var/mob/living/carbon/human/H = M if(volume < 20) if(prob(10)) - to_chat(H, "You cough up some congealed blood.") H.vomit(blood = TRUE, should_confuse = FALSE) //mostly visual else if(prob(10)) var/overdose_message = pick("Your vision is tinted red for a moment.", "You can hear your heart beating.") diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm index 40b999c40130..b37c3078c1a9 100644 --- a/code/modules/reagents/reagent_containers/hypospray.dm +++ b/code/modules/reagents/reagent_containers/hypospray.dm @@ -163,7 +163,7 @@ /obj/item/reagent_containers/hypospray/autoinjector/examine() . = ..() - if(reagents && reagents.reagent_list.len) + if(reagents && length(reagents.reagent_list)) . += "It is currently loaded." else . += "It is spent." diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm index fe802e47b968..5745bbb95428 100644 --- a/code/modules/reagents/reagent_containers/spray.dm +++ b/code/modules/reagents/reagent_containers/spray.dm @@ -57,7 +57,7 @@ if(reagents.chem_temp > 300 || reagents.chem_temp < 280) //harmful temperature attack_log_type = ATKLOG_MOST - if(reagents.reagent_list.len == 1 && reagents.has_reagent("cleaner")) // Only create space cleaner logs if it's burning people from being too hot or cold + if(length(reagents.reagent_list) == 1 && reagents.has_reagent("cleaner")) // Only create space cleaner logs if it's burning people from being too hot or cold if(attack_log_type == ATKLOG_ALMOSTALL) return @@ -245,7 +245,7 @@ var/turf/T2 = get_step(T,turn(direction, -90)) var/list/the_targets = list(T,T1,T2) - for(var/i=1, i<=Sprays.len, i++) + for(var/i=1, i<=length(Sprays), i++) spawn() var/obj/effect/decal/chempuff/D = Sprays[i] if(!D) continue diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 2cad9ad15e3c..f273631c1f5c 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -101,7 +101,7 @@ var/obj/item/storage/S = I if(!S.removal_allowed_check(user)) return - if((S.allow_quick_empty || S.allow_quick_gather) && S.contents.len) + if((S.allow_quick_empty || S.allow_quick_gather) && length(S.contents)) S.hide_from(user) user.visible_message("[user] empties \the [S] into \the [src].", "You empty \the [S] into \the [src].") for(var/obj/item/O in S.contents) @@ -140,7 +140,7 @@ . = TRUE if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return - if(contents.len > 0) + if(length(contents) > 0) to_chat(user, "Eject the items first!") return if(mode==0) // It's off but still not unscrewed @@ -154,7 +154,7 @@ if(mode != required_mode_to_deconstruct) return . = TRUE - if(contents.len > 0) + if(length(contents) > 0) to_chat(user, "Eject the items first!") return if(!I.tool_use_check(user, 0)) @@ -379,7 +379,7 @@ return // check for items in disposal - occupied light - if(contents.len > 0) + if(length(contents) > 0) . += "dispover-full" underlays += emissive_appearance(icon, "dispover-full") @@ -403,7 +403,7 @@ flush_count++ if(flush_count >= flush_every_ticks) - if(contents.len) + if(length(contents)) if(mode == 2) spawn(0) flush() @@ -524,7 +524,7 @@ /obj/machinery/disposal/CanPass(atom/movable/mover, turf/target, height=0) if(isitem(mover) && mover.throwing) var/obj/item/I = mover - if(istype(I, /obj/item/projectile)) + if(isprojectile(I)) return if(prob(75) || (istype(mover.throwing.thrower) && (HAS_TRAIT(mover.throwing.thrower, TRAIT_BADASS) || HAS_TRAIT(mover.throwing.thrower, TRAIT_NEVER_MISSES_DISPOSALS)))) I.forceMove(src) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index a1258bf72d90..8fae073f154c 100644 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -285,7 +285,7 @@ return /obj/machinery/disposal/deliveryChute/Bumped(atom/movable/AM) //Go straight into the chute - if(istype(AM, /obj/item/projectile) || isAI(AM) || QDELETED(AM)) + if(isprojectile(AM) || isAI(AM) || QDELETED(AM)) return switch(dir) if(NORTH) diff --git a/code/modules/redis/redis_callback.dm b/code/modules/redis/redis_callback.dm index 5288a5b99590..db41707895ca 100644 --- a/code/modules/redis/redis_callback.dm +++ b/code/modules/redis/redis_callback.dm @@ -14,7 +14,7 @@ /** * Message handler callback * - * This callback is ran when a message is recieved on the assigned channel. + * This callback is ran when a message is received on the assigned channel. * Make sure you override it on subtypes or it wont work. * * Arguments: diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index 20e4a51febaa..33d51b2a147c 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -218,3 +218,12 @@ materials = list(MAT_BIOMASS = 400) build_path = /obj/item/clothing/accessory/holster category = list("initial","Leather and Cloth") + +/datum/design/seaweed + name = "Seaweed Sheet" + id = "seaweed" + build_type = BIOGENERATOR + materials = list(MAT_BIOMASS = 50) + build_path = /obj/item/stack/seaweed + category = list("initial", "Organic Materials") + diff --git a/code/modules/research/designs/janitorial_designs.dm b/code/modules/research/designs/janitorial_designs.dm index 966e5e20e72a..4743fb63a17f 100644 --- a/code/modules/research/designs/janitorial_designs.dm +++ b/code/modules/research/designs/janitorial_designs.dm @@ -21,16 +21,6 @@ build_path = /obj/item/storage/bag/trash/bluespace category = list("Janitorial") -/datum/design/buffer - name = "Floor Buffer Upgrade" - desc = "A floor buffer that can be attached to vehicular janicarts." - id = "buffer" - req_tech = list("materials" = 4, "engineering" = 4) - build_type = PROTOLATHE - materials = list(MAT_METAL = 3000, MAT_GLASS = 200) - build_path = /obj/item/janiupgrade - category = list("Janitorial") - /datum/design/holosign name = "Janitorial Holographic Sign Projector" desc = "A holograpic projector used to project wet warning signs." diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index 3c93fb8ce410..1de90e4c64d8 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -1125,7 +1125,7 @@ build_type = MECHFAB build_path = /obj/item/borg/upgrade/floorbuffer req_tech = list("materials" = 4, "engineering" = 4) - materials = list(MAT_METAL=15000, MAT_GLASS=15000) + materials = list(MAT_METAL = 9000, MAT_GLASS = 7600) construction_time = 12 SECONDS category = list("Cyborg Upgrade Modules") diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index f708fb27d93a..476fa574fcf7 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -124,7 +124,7 @@ /datum/design/mmi name = "Man-Machine Interface" - desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity." + desc = "A compact, highly portable self-contained life support system, capable of housing a single brain and allowing it to seamlessly interface with whatever it is installed into." id = "mmi" req_tech = list("programming" = 3, "biotech" = 2, "engineering" = 2) build_type = PROTOLATHE | MECHFAB @@ -135,7 +135,7 @@ /datum/design/robotic_brain name = "Robotic Brain" - desc = "The latest in non-sentient Artificial Intelligences." + desc = "The latest in non-sapient Artificial Intelligences." id = "mmi_robotic" req_tech = list("programming" = 5, "biotech" = 4, "plasmatech" = 3) build_type = PROTOLATHE | MECHFAB diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 749a1523821c..c01c219ac55d 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -190,7 +190,7 @@ build_path = /obj/item/ammo_box/wt550/wttx category = list("Weapons") -/datum/design/mag_laser +/datum/design/laser_rifle_magazine name = "Laser Rifle Projector Magazine" desc = "A 20 round encased projector magazine for the IK Laser Rifle series" id = "mag_laser" @@ -200,10 +200,10 @@ build_path = /obj/item/ammo_box/magazine/laser category = list("Weapons") -/datum/design/mag_laser +/datum/design/laser_rifle_ammo_box name = "Laser Rifle Projector Ammunition" desc = "A 20 round encased projector box for the IK Laser Rifle series." - id = "mag_laser" + id = "box_laser" build_type = PROTOLATHE req_tech = list("combat" = 4, "powerstorage" = 4) materials = list(MAT_METAL = 4000, MAT_PLASMA = 600) diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index e1bb1e433546..4b1dd9d3eae5 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -74,7 +74,7 @@ Note: Must be placed within 3 tiles of the R&D Console to_chat(user, "This doesn't seem to have a tech origin!") return var/list/temp_tech = ConvertReqString2List(O.origin_tech) - if(temp_tech.len == 0) + if(length(temp_tech) == 0) to_chat(user, "You cannot deconstruct this item!") return if(!user.drop_item()) diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 20196a821e1c..ce515e4ffe2b 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -119,7 +119,7 @@ to_chat(user, "This doesn't seem to have a tech origin!") return var/list/temp_tech = ConvertReqString2List(O.origin_tech) - if(temp_tech.len == 0) + if(length(temp_tech) == 0) to_chat(user, "You cannot experiment on this item!") return if(!user.drop_item()) @@ -229,7 +229,7 @@ if(prob(probtocheck)) result = TRUE return from[counter+1] - if(counter + 2 < from.len) + if(counter + 2 < length(from)) counter = counter + 2 else counter = 1 @@ -458,7 +458,7 @@ for(var/atom/movable/AM in oview(7,src)) if(!AM.anchored) throwAt.Add(AM) - for(var/counter = 1, counter < throwAt.len, ++counter) + for(var/counter = 1, counter < length(throwAt), ++counter) var/atom/movable/cast = throwAt[counter] spawn(0) cast.throw_at(pick(throwAt),10,1) diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index b0d3fd769960..20c192a0b3ad 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -385,7 +385,7 @@ won't update every console in existence) but it's more of a hassle to do. Also, message_admins("[machine] exploit attempted by [key_name(usr, TRUE)]!") return - if(being_built.make_reagents.len) // build_type should equal BIOGENERATOR though.. + if(length(being_built.make_reagents)) // build_type should equal BIOGENERATOR though.. return var/max_amount = is_lathe ? 10 : 1 diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 184682337239..2680f8c821ca 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -77,7 +77,7 @@ research holder datum. //Checks to see if tech has all the required pre-reqs. //Input: datum/tech; Output: 0/1 (false/true) /datum/research/proc/TechHasReqs(datum/tech/T) - if(T.req_tech.len == 0) + if(length(T.req_tech) == 0) return TRUE for(var/req in T.req_tech) var/datum/tech/known = known_tech[req] @@ -92,7 +92,7 @@ research holder datum. return FALSE if(D.requires_whitelist && !(known_designs[D.id])) return FALSE - if(D.req_tech.len == 0) + if(length(D.req_tech) == 0) return TRUE for(var/req in D.req_tech) var/datum/tech/known = known_tech[req] diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm index acb290118633..3d3f71e5174a 100644 --- a/code/modules/research/server.dm +++ b/code/modules/research/server.dm @@ -59,12 +59,12 @@ if(!files) files = new /datum/research(src) var/list/temp_list - if(!id_with_upload.len) + if(!length(id_with_upload)) temp_list = list() temp_list = splittext(id_with_upload_string, ";") for(var/N in temp_list) id_with_upload += text2num(N) - if(!id_with_download.len) + if(!length(id_with_download)) temp_list = list() temp_list = splittext(id_with_download_string, ";") for(var/N in temp_list) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index caaa7f0bec2f..7ba2fec07b2e 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -239,7 +239,7 @@ if(QDELETED(src) || QDELETED(SM)) return - if(candidates.len) + if(length(candidates)) var/mob/C = pick(candidates) SM.key = C.key dust_if_respawnable(C) @@ -539,7 +539,7 @@ H.AIStatus = AI_OFF H.LoseTarget() stopped_atoms |= M - else if(istype(A, /obj/item/projectile)) + else if(isprojectile(A)) var/obj/item/projectile/P = A P.paused = TRUE stopped_atoms |= P diff --git a/code/modules/response_team/ert.dm b/code/modules/response_team/ert.dm index b1bf75e3c95a..5830ff8631f1 100644 --- a/code/modules/response_team/ert.dm +++ b/code/modules/response_team/ert.dm @@ -4,9 +4,6 @@ #define ERT_TYPE_RED 2 #define ERT_TYPE_GAMMA 3 -/datum/game_mode - var/list/datum/mind/ert = list() - GLOBAL_LIST_EMPTY(response_team_members) GLOBAL_VAR_INIT(responseteam_age, 21) // Minimum account age to play as an ERT member GLOBAL_DATUM(active_team, /datum/response_team) @@ -112,10 +109,10 @@ GLOBAL_LIST_EMPTY(ert_request_messages) /proc/dispatch_response_team(list/response_team_members, list/datum/async_input/ert_gender_prefs, list/datum/async_input/ert_species_prefs, list/datum/async_input/ert_role_prefs) var/spawn_index = 1 - for(var/i = 1, i <= response_team_members.len, i++) - if(spawn_index > GLOB.emergencyresponseteamspawn.len) + for(var/i = 1, i <= length(response_team_members), i++) + if(spawn_index > length(GLOB.emergencyresponseteamspawn)) break - if(!GLOB.active_team.get_slot_list().len) + if(!length(GLOB.active_team.get_slot_list())) break var/gender_pref = ert_gender_prefs[i].result var/species_pref = ert_species_prefs[i].result diff --git a/code/modules/ruins/ghost_bar.dm b/code/modules/ruins/ghost_bar.dm index 51b0b4346bd7..f2061ec251a8 100644 --- a/code/modules/ruins/ghost_bar.dm +++ b/code/modules/ruins/ghost_bar.dm @@ -55,7 +55,7 @@ equip_item(H, /obj/item/clothing/under/color/random, SLOT_HUD_JUMPSUIT) if(!H.shoes) equip_item(H, /obj/item/clothing/shoes/black, SLOT_HUD_SHOES) - equip_item(H, /obj/item/stack/spacecash/c100, SLOT_HUD_LEFT_STORE) + equip_item(H, /obj/item/stack/spacecash/c1000, SLOT_HUD_LEFT_STORE) var/obj/item/card/id/syndicate/our_id = equip_item(H, /obj/item/card/id/syndicate/ghost_bar, SLOT_HUD_WEAR_ID) our_id.assignment = assignedrole diff --git a/code/modules/ruins/lavalandruin_code/puzzle.dm b/code/modules/ruins/lavalandruin_code/puzzle.dm index 8c529f5811d5..882390fe9f56 100644 --- a/code/modules/ruins/lavalandruin_code/puzzle.dm +++ b/code/modules/ruins/lavalandruin_code/puzzle.dm @@ -57,7 +57,7 @@ if(finished) return - if(elements.len < 8) //Someone broke it + if(length(elements) < 8) //Someone broke it qdel(src) //Check if everything is in place @@ -98,9 +98,9 @@ current_ordering += E.id var/swap_tally = 0 - for(var/i in 1 to current_ordering.len) + for(var/i in 1 to length(current_ordering)) var/checked_value = current_ordering[i] - for(var/j in i to current_ordering.len) + for(var/j in i to length(current_ordering)) if(current_ordering[j] < checked_value) swap_tally++ diff --git a/code/modules/ruins/lavalandruin_code/sin_ruins.dm b/code/modules/ruins/lavalandruin_code/sin_ruins.dm index 8d9ed669b8c8..13033d10fe01 100644 --- a/code/modules/ruins/lavalandruin_code/sin_ruins.dm +++ b/code/modules/ruins/lavalandruin_code/sin_ruins.dm @@ -117,7 +117,7 @@ /obj/structure/cursed_money/attack_hand(mob/living/user) . = ..() if(.) - return . + return user.visible_message("[user] opens the bag and \ and removes a die. The bag then vanishes.", diff --git a/code/modules/ruins/ruin_areas.dm b/code/modules/ruins/ruin_areas.dm index 1ebe950b123e..66e036eae4c0 100644 --- a/code/modules/ruins/ruin_areas.dm +++ b/code/modules/ruins/ruin_areas.dm @@ -18,13 +18,3 @@ /area/ruin/powered requires_power = FALSE -//Areas - -/area/ruin/powered/snow_biodome - -/area/ruin/powered/golem_ship - name = "Free Golem Ship" - - - - diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index d5eba3c27f0c..655b54252873 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -54,7 +54,7 @@ return var/list/cardaccess = W:access - if(!istype(cardaccess, /list) || !cardaccess.len) //no access + if(!istype(cardaccess, /list) || !length(cardaccess)) //no access to_chat(user, "The access level of [W:registered_name]\'s card is not high enough. ") return @@ -74,10 +74,10 @@ if("Authorize") if(!authorized.Find(W:registered_name)) authorized += W:registered_name - if(auth_need - authorized.len > 0) + if(auth_need - length(authorized) > 0) message_admins("[key_name_admin(user)] has authorized early shuttle launch.") log_game("[key_name(user)] has authorized early shuttle launch in ([x], [y], [z]).") - GLOB.minor_announcement.Announce("[auth_need - authorized.len] more authorization(s) needed until shuttle is launched early") + GLOB.minor_announcement.Announce("[auth_need - length(authorized)] more authorization(s) needed until shuttle is launched early") else message_admins("[key_name_admin(user)] has launched the emergency shuttle [seconds] seconds before launch.") log_game("[key_name(user)] has launched the emergency shuttle in ([x], [y], [z]) [seconds] seconds before launch.") @@ -86,10 +86,10 @@ if("Repeal") if(authorized.Remove(W:registered_name)) - GLOB.minor_announcement.Announce("[auth_need - authorized.len] authorizations needed until shuttle is launched early") + GLOB.minor_announcement.Announce("[auth_need - length(authorized)] authorizations needed until shuttle is launched early") if("Abort") - if(authorized.len) + if(length(authorized)) GLOB.minor_announcement.Announce("All authorizations to launch the shuttle early have been revoked.") authorized.Cut() @@ -341,7 +341,7 @@ // The emergency shuttle doesn't work like others so this // ripple check is slightly different - if(!ripples.len && (time_left <= SHUTTLE_RIPPLE_TIME) && ((mode == SHUTTLE_CALL) || (mode == SHUTTLE_ESCAPE))) + if(!length(ripples) && (time_left <= SHUTTLE_RIPPLE_TIME) && ((mode == SHUTTLE_CALL) || (mode == SHUTTLE_ESCAPE))) var/destination if(mode == SHUTTLE_CALL) destination = SSshuttle.getDock("emergency_home") diff --git a/code/modules/shuttle/navigation_computer.dm b/code/modules/shuttle/navigation_computer.dm index 68b254a349db..efefbf9a7eb4 100644 --- a/code/modules/shuttle/navigation_computer.dm +++ b/code/modules/shuttle/navigation_computer.dm @@ -41,7 +41,7 @@ return ..() /obj/machinery/computer/camera_advanced/shuttle_docker/GrantActions(mob/living/user) - if(jumpto_ports.len) + if(length(jumpto_ports)) jump_action = new /datum/action/innate/camera_jump/shuttle_docker ..() if(place_action) @@ -165,7 +165,7 @@ var/mob/camera/aiEye/remote/shuttle_docker/the_eye = eyeobj var/list/image_cache = the_eye.placement_images the_eye.setDir(turn(the_eye.dir, -90)) - for(var/i in 1 to image_cache.len) + for(var/i in 1 to length(image_cache)) var/image/pic = image_cache[i] var/list/coords = image_cache[pic] var/Tmp = coords[1] @@ -187,7 +187,7 @@ var/list/bounds = shuttle_port.return_coords(the_eye.x - x_offset, the_eye.y - y_offset, the_eye.dir) var/list/overlappers = SSshuttle.get_dock_overlap(bounds[1], bounds[2], bounds[3], bounds[4], the_eye.z) var/list/image_cache = the_eye.placement_images - for(var/i in 1 to image_cache.len) + for(var/i in 1 to length(image_cache)) var/image/I = image_cache[i] var/list/coords = image_cache[I] var/turf/T = locate(eyeturf.x + coords[1], eyeturf.y + coords[2], eyeturf.z) @@ -227,7 +227,7 @@ return SHUTTLE_DOCKER_BLOCKED // Checking for overlapping dock boundaries - for(var/i in 1 to overlappers.len) + for(var/i in 1 to length(overlappers)) var/obj/docking_port/port = overlappers[i] if(port == my_port || locate(port) in jumpto_ports) continue diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 824574ac0113..70c8c5e46467 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -173,9 +173,9 @@ SSshuttle.stationary += src if(!id) - id = "[SSshuttle.stationary.len]" + id = "[length(SSshuttle.stationary)]" if(name == "dock") - name = "dock[SSshuttle.stationary.len]" + name = "dock[length(SSshuttle.stationary)]" #ifdef DOCKING_PORT_HIGHLIGHT highlight("#f00") @@ -185,12 +185,6 @@ //returns first-found touching shuttleport /obj/docking_port/stationary/get_docked() return locate(/obj/docking_port/mobile) in loc - /* - for(var/turf/T in return_ordered_turfs()) - . = locate(/obj/docking_port/mobile) in loc - if(.) - return . - */ /obj/docking_port/stationary/transit name = "In transit" @@ -254,7 +248,7 @@ register() shuttle_areas = list() var/list/all_turfs = return_ordered_turfs(x, y, z, dir) - for(var/i in 1 to all_turfs.len) + for(var/i in 1 to length(all_turfs)) var/turf/curT = all_turfs[i] var/area/cur_area = curT.loc if(istype(cur_area, areaInstance)) @@ -267,9 +261,9 @@ SSshuttle.mobile += src if(!id) - id = "[SSshuttle.mobile.len]" + id = "[length(SSshuttle.mobile)]" if(name == "shuttle") - name = "shuttle[SSshuttle.mobile.len]" + name = "shuttle[length(SSshuttle.mobile)]" return 1 @@ -393,7 +387,7 @@ var/list/L0 = return_ordered_turfs(x, y, z, dir, areaInstance) //remove area surrounding docking port - if(areaInstance.contents.len) + if(length(areaInstance.contents)) var/area/A0 = locate("[area_type]") if(!A0) A0 = new area_type(null) @@ -414,7 +408,7 @@ ripples += new /obj/effect/temp_visual/ripple(i) /obj/docking_port/mobile/proc/remove_ripples() - if(ripples.len) + if(length(ripples)) for(var/i in ripples) qdel(i) ripples.Cut() @@ -426,7 +420,7 @@ var/list/ripple_turfs = list() - for(var/i in 1 to L0.len) + for(var/i in 1 to length(L0)) var/turf/T0 = L0[i] if(!T0) continue @@ -474,7 +468,7 @@ rotation = SIMPLIFY_DEGREES(rotation) //remove area surrounding docking port - if(areaInstance.contents.len) + if(length(areaInstance.contents)) var/area/A0 = locate("[area_type]") if(!A0) A0 = new area_type(null) @@ -487,7 +481,7 @@ //move or squish anything in the way ship at destination roadkill(L0, L1, S1.dir) - for(var/i in 1 to L0.len) + for(var/i in 1 to length(L0)) var/turf/T0 = L0[i] if(!T0) continue @@ -610,7 +604,7 @@ A.unlock() /obj/docking_port/mobile/proc/roadkill(list/L0, list/L1, dir) - for(var/i in 1 to L0.len) + for(var/i in 1 to length(L0)) var/turf/T0 = L0[i] var/turf/T1 = L1[i] if(!T0 || !T1) @@ -667,7 +661,7 @@ destination = null /obj/docking_port/mobile/proc/check_effects() - if(!ripples.len) + if(!length(ripples)) if((mode == SHUTTLE_CALL) || (mode == SHUTTLE_RECALL)) var/tl = timeLeft(1) if(tl <= SHUTTLE_RIPPLE_TIME) @@ -835,7 +829,7 @@ if(!M.check_dock(S)) continue docking_ports[++docking_ports.len] = list("name" = S.name, "id" = S.id) - data["docking_ports_len"] = docking_ports.len + data["docking_ports_len"] = length(docking_ports) data["admin_controlled"] = admin_controlled return data @@ -989,11 +983,11 @@ /turf/proc/copyTurf(turf/T) if(T.type != type) var/obj/O - if(underlays.len) //we have underlays, which implies some sort of transparency, so we want to a snapshot of the previous turf as an underlay + if(length(underlays)) //we have underlays, which implies some sort of transparency, so we want to a snapshot of the previous turf as an underlay O = new() O.underlays.Add(T) T.ChangeTurf(type, keep_icon = FALSE) - if(underlays.len) + if(length(underlays)) T.underlays = O.underlays if(T.icon_state != icon_state) T.icon_state = icon_state diff --git a/code/modules/shuttle/shuttle_manipulator.dm b/code/modules/shuttle/shuttle_manipulator.dm index 2103fed8513f..c8417758b619 100644 --- a/code/modules/shuttle/shuttle_manipulator.dm +++ b/code/modules/shuttle/shuttle_manipulator.dm @@ -198,7 +198,7 @@ if(mdp) usr.forceMove(get_turf(mdp)) message_admins("[key_name_admin(usr)] loaded [mdp] with the shuttle manipulator.") - log_admin("[key_name(usr)] loaded [mdp] with the shuttle manipulator.") + log_admin("[key_name(usr)] loaded [mdp] with the shuttle manipulator.") /obj/machinery/shuttle_manipulator/proc/action_load(datum/map_template/shuttle/loading_template) if(isnull(loading_template)) diff --git a/code/modules/shuttle/syndicate_shuttles.dm b/code/modules/shuttle/syndicate_shuttles.dm index 76f3556883af..697819a586af 100644 --- a/code/modules/shuttle/syndicate_shuttles.dm +++ b/code/modules/shuttle/syndicate_shuttles.dm @@ -1,4 +1,4 @@ -#define SYNDICATE_CHALLENGE_TIMER 12000 //20 minutes +#define SYNDICATE_CHALLENGE_TIMER 20 MINUTES /obj/machinery/computer/shuttle/syndicate name = "syndicate shuttle terminal" diff --git a/code/modules/space_management/space_level.dm b/code/modules/space_management/space_level.dm index 44c692363af1..5512447e3464 100644 --- a/code/modules/space_management/space_level.dm +++ b/code/modules/space_management/space_level.dm @@ -165,11 +165,11 @@ GLOBAL_LIST_INIT(maploader_typecache, typecacheof(/obj/effect/landmark/map_loade SSatoms.InitializeAtoms(our_atoms, FALSE) log_debug("Primary initialization finished in [stop_watch(watch)]s.") our_atoms.Cut() - if(pipes.len) + if(length(pipes)) do_pipes(pipes) - if(cables.len) + if(length(cables)) do_cables(cables) - if(late_maps.len) + if(length(late_maps)) do_late_maps(late_maps) /datum/space_level/proc/do_pipes(list/pipes) diff --git a/code/modules/space_management/space_transition.dm b/code/modules/space_management/space_transition.dm index f6030cfdf5d4..195e100f4144 100644 --- a/code/modules/space_management/space_transition.dm +++ b/code/modules/space_management/space_transition.dm @@ -200,8 +200,8 @@ /datum/spacewalk_grid/Destroy() for(var/datum/point/P in filled_nodes) release_node(P) - if(available_nodes.len > 1) - log_debug("Multiple nodes left behind after SW grid qdel: [available_nodes.len]") + if(length(available_nodes) > 1) + log_debug("Multiple nodes left behind after SW grid qdel: [length(available_nodes)]") for(var/datum/point/P in available_nodes) log_debug("([P.x],[P.y])") return ..() @@ -337,7 +337,7 @@ // Now, we pop entries in a random order from our list of space levels // and assign its connections based on the grid - while(crosslinks.len) + while(length(crosslinks)) D = pick(crosslinks) crosslinks.Remove(D) // Add it to our space grid diff --git a/code/modules/space_management/zlevel_manager.dm b/code/modules/space_management/zlevel_manager.dm index 5582288a813e..ab9cc4b92a98 100644 --- a/code/modules/space_management/zlevel_manager.dm +++ b/code/modules/space_management/zlevel_manager.dm @@ -17,7 +17,7 @@ GLOBAL_DATUM_INIT(space_manager, /datum/zlev_manager, new()) // Populate our space level list // and prepare space transitions /datum/zlev_manager/proc/initialize() - var/num_official_z_levels = GLOB.map_transition_config.len + var/num_official_z_levels = length(GLOB.map_transition_config) var/k = 1 // First take care of "Official" z levels, without visiting levels outside of the list @@ -146,9 +146,9 @@ GLOBAL_DATUM_INIT(space_manager, /datum/zlev_manager, new()) /datum/zlev_manager/proc/allocate_space(width, height) if(width > world.maxx || height > world.maxy) throw EXCEPTION("Too much space requested! \[[width],[height]\]") - if(!heaps.len) + if(!length(heaps)) heaps.len++ - heaps[heaps.len] = add_new_heap() + heaps[length(heaps)] = add_new_heap() var/datum/space_level/heap/our_heap var/weve_got_vacancy = 0 for(our_heap in heaps) @@ -160,7 +160,7 @@ GLOBAL_DATUM_INIT(space_manager, /datum/zlev_manager, new()) if(!weve_got_vacancy) heaps.len++ our_heap = add_new_heap() - heaps[heaps.len] = our_heap + heaps[length(heaps)] = our_heap return our_heap.allocate(width, height) /datum/zlev_manager/proc/free_space(datum/space_chunk/C) diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index 794b0f1fadc0..f2c6c00fc3b3 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -53,7 +53,7 @@ if(..()) return TRUE for(var/obj/machinery/dna_vault/V in GLOB.machines) - if(V.animals.len >= animal_count && V.plants.len >= plant_count && V.dna.len >= human_count && is_station_contact(V.z)) + if(length(V.animals) >= animal_count && length(V.plants) >= plant_count && length(V.dna) >= human_count && is_station_contact(V.z)) return TRUE return FALSE @@ -268,7 +268,7 @@ GLOBAL_LIST_INIT(non_simple_animals, typecacheof(list(/mob/living/carbon/human/m return TRUE /obj/machinery/dna_vault/proc/check_goal() - if(plants.len >= plants_max && animals.len >= animals_max && dna.len >= dna_max) + if(length(plants) >= plants_max && length(animals) >= animals_max && length(dna) >= dna_max) completed = TRUE /obj/machinery/dna_vault/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index 254ef1d2dfc7..a1e487034ab4 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -32,7 +32,7 @@ if(!A.active || !is_station_level(A.z)) continue coverage |= view(A.kill_range, A) - return coverage.len + return length(coverage) /obj/item/circuitboard/computer/sat_control board_name = "Satellite Network Control" diff --git a/code/modules/supply/supply_console.dm b/code/modules/supply/supply_console.dm index 91c8fe261717..83f08bcdbd8d 100644 --- a/code/modules/supply/supply_console.dm +++ b/code/modules/supply/supply_console.dm @@ -282,8 +282,7 @@ return amount = clamp(round(num_input), 1, MULTIPLE_CRATE_MAX) - var/timeout = world.time + (60 SECONDS) // If you dont type the reason within a minute, theres bigger problems here - var/reason = tgui_input_text(user, "Reason", "Why do you require this item?", encode = FALSE, timeout = timeout) + var/reason = tgui_input_text(user, "Reason", "Why do you require this item?", encode = FALSE, timeout = 60 SECONDS) if(!reason || (!is_public && !is_authorized(user)) || ..()) return reason = sanitize(copytext_char(reason, 1, 75)) // very long reasons are bad diff --git a/code/modules/surgery/organs/augments_arms.dm b/code/modules/surgery/organs/augments_arms.dm index f95877c9a222..2c7806b9dcea 100644 --- a/code/modules/surgery/organs/augments_arms.dm +++ b/code/modules/surgery/organs/augments_arms.dm @@ -146,7 +146,7 @@ return TRUE /obj/item/organ/internal/cyberimp/arm/ui_action_click() - if(crit_fail || (!holder && !contents.len)) + if(crit_fail || (!holder && !length(contents))) to_chat(owner, "The implant doesn't respond. It seems to be broken...") return @@ -157,7 +157,7 @@ if(!holder || (holder in src)) holder = null - if(contents.len == 1) + if(length(contents) == 1) Extend(contents[1]) else radial_menu(owner) @@ -690,7 +690,7 @@ set_light(3) addtimer(CALLBACK(src, TYPE_PROC_REF(/atom, set_light), 0), 0.25 SECONDS) - if(istype(hitby, /obj/item/projectile)) + if(isprojectile(hitby)) var/obj/item/projectile/P = hitby if(P.shield_buster || istype(P, /obj/item/projectile/ion)) //EMP's and unpariable attacks, after all. return FALSE diff --git a/code/modules/surgery/organs/blood.dm b/code/modules/surgery/organs/blood.dm index c3b4c13111f9..a74fbc7ea4e7 100644 --- a/code/modules/surgery/organs/blood.dm +++ b/code/modules/surgery/organs/blood.dm @@ -58,9 +58,9 @@ if(BP.is_robotic()) continue - //We want an accurate reading of .len + //We want an accurate reading of length() listclearnulls(BP.embedded_objects) - temp_bleed += 0.5*BP.embedded_objects.len + temp_bleed += 0.5 * length(BP.embedded_objects) if(brutedamage >= 20) temp_bleed += (brutedamage * 0.013) @@ -191,7 +191,7 @@ blood_data["viruses"] += D.Copy() blood_data["blood_DNA"] = copytext(dna.unique_enzymes,1,0) - if(resistances && resistances.len) + if(resistances && length(resistances)) blood_data["resistances"] = resistances.Copy() var/list/temp_chem = list() for(var/datum/reagent/R in reagents.reagent_list) diff --git a/code/modules/surgery/organs/brain.dm b/code/modules/surgery/organs/brain.dm index e3eab10548cd..833ee9ceca55 100644 --- a/code/modules/surgery/organs/brain.dm +++ b/code/modules/surgery/organs/brain.dm @@ -148,7 +148,7 @@ to_chat(owner, "Your head feels foggy.") else if(prob(4)) owner.vomit() - to_chat(owner, "") + to_chat(owner, "'You feel nauseous.") /obj/item/organ/internal/brain/proc/handle_moderate_brain_damage() if(prob(4)) @@ -158,17 +158,17 @@ owner.EyeBlurry(15 SECONDS) to_chat(owner, "Your vision unfocuses.") else if(prob(3)) - owner.Drowsy(20 SECONDS) - to_chat(owner, "You're getting tired.") + owner.Slur(60 SECONDS) + owner.Stuttering(60 SECONDS) + to_chat(owner, "You can't form your words properly.") /obj/item/organ/internal/brain/proc/handle_severe_brain_damage() if(prob(5)) owner.Hallucinate(60 SECONDS) to_chat(owner, "You start losing your grip on reality.") - else if(prob(10)) - owner.Slur(60 SECONDS) - owner.Stuttering(60 SECONDS) - to_chat(owner, "You can't form your words properly.") + else if(prob(3)) + owner.Drowsy(20 SECONDS) + to_chat(owner, "You're getting tired.") else if(prob(2)) owner.Stun(5 SECONDS) to_chat(owner, "You stare forward in a stupor.") diff --git a/code/modules/surgery/organs/organ_external.dm b/code/modules/surgery/organs/organ_external.dm index 889fabfc84ff..8f313f51f10f 100644 --- a/code/modules/surgery/organs/organ_external.dm +++ b/code/modules/surgery/organs/organ_external.dm @@ -254,7 +254,7 @@ // High brute damage or sharp objects may damage internal organs if(internal_organs && (brute_dam >= max_limb_damage || (((sharp && brute >= LIMB_SHARP_THRESH_INT_DMG) || brute >= LIMB_THRESH_INT_DMG) && prob(LIMB_DMG_PROB)))) // Damage an internal organ - if(internal_organs && internal_organs.len) + if(internal_organs && length(internal_organs)) var/obj/item/organ/internal/I = pick(internal_organs) I.receive_damage(brute * 0.5) @@ -304,9 +304,9 @@ for(var/organ in children) if(organ) possible_points += organ - if(forbidden_limbs.len) + if(length(forbidden_limbs)) possible_points -= forbidden_limbs - if(possible_points.len) + if(length(possible_points)) //And pass the pain around var/obj/item/organ/external/target = pick(possible_points) target.receive_damage(brute, burn, sharp, used_weapon, forbidden_limbs + src, ignore_resists = TRUE) //If the damage was reduced before, don't reduce it again @@ -464,7 +464,7 @@ Note that amputating the affected organ does in fact remove the infection from t for(var/obj/item/organ/internal/I in internal_organs) if(I.germ_level < germ_level) candidate_organs |= I - if(candidate_organs.len) + if(length(candidate_organs)) target_organ = pick(candidate_organs) if(target_organ) diff --git a/code/modules/surgery/organs/organ_icon.dm b/code/modules/surgery/organs/organ_icon.dm index fa5d3f53d58b..58a509115916 100644 --- a/code/modules/surgery/organs/organ_icon.dm +++ b/code/modules/surgery/organs/organ_icon.dm @@ -5,7 +5,7 @@ child_icons.Cut() // This is a kludge, only one icon has more than one generation of children though. for(var/obj/item/organ/external/organ in contents) - if(organ.children && organ.children.len) + if(organ.children && length(organ.children)) for(var/obj/item/organ/external/child in organ.children) overlays += child.mob_icon child_icons += child.mob_icon @@ -151,7 +151,7 @@ return mob_icon //Don't need to blend the above into this as it's handled in human/update_icons(). The overlays are for rendering stuff on disembodied heads. /obj/item/organ/external/proc/get_icon_state(skeletal) - var/gender + var/body var/icon_file var/new_icon_state if(!dna) @@ -159,18 +159,17 @@ new_icon_state = "[icon_name][gendered_icon ? "_f" : ""]" else if(gendered_icon) - switch(dna.GetUITriState(DNA_UI_GENDER)) + switch(dna.GetUITriState(DNA_UI_BODY_TYPE)) if(DNA_GENDER_FEMALE) - gender = "f" - if(DNA_GENDER_MALE) - gender = "m" + body = "f" else - gender = "f" //Default to "f" (per line 162). Using a pick("m", "f") will make different body parts different genders for the same character. + body = "m" + if(limb_name == "head") var/obj/item/organ/external/head/head_organ = src head_organ.handle_alt_icon() - new_icon_state = "[icon_name][gender ? "_[gender]" : ""]" + new_icon_state = "[icon_name][body ? "_[body]" : ""]" if(skeletal) icon_file = 'icons/mob/human_races/r_skeleton.dmi' diff --git a/code/modules/surgery/organs/organ_internal.dm b/code/modules/surgery/organs/organ_internal.dm index 988fb825dfa7..81d4b13f9c22 100644 --- a/code/modules/surgery/organs/organ_internal.dm +++ b/code/modules/surgery/organs/organ_internal.dm @@ -188,15 +188,6 @@ /obj/item/organ/internal/proc/render() return -/obj/item/food/snacks/organ - name = "appendix" - icon_state = "appendix" - icon = 'icons/obj/surgery.dmi' - -/obj/item/food/snacks/organ/Initialize(mapload) - . = ..() - reagents.add_reagent("nutriment", 5) - /obj/item/organ/internal/attack(mob/living/carbon/M, mob/user) if(M == user && ishuman(user)) var/mob/living/carbon/human/H = user diff --git a/code/modules/surgery/organs/subtypes/tajaran_organs.dm b/code/modules/surgery/organs/subtypes/tajaran_organs.dm index 0615bf28c8e3..2f83bad01b69 100644 --- a/code/modules/surgery/organs/subtypes/tajaran_organs.dm +++ b/code/modules/surgery/organs/subtypes/tajaran_organs.dm @@ -6,7 +6,7 @@ /obj/item/organ/internal/eyes/tajaran icon = 'icons/obj/species_organs/tajaran.dmi' name = "tajaran eyeballs" - colourblind_matrix = MATRIX_TAJ_CBLIND //The colour matrix and darksight parameters that the mob will recieve when they get the disability. + colourblind_matrix = MATRIX_TAJ_CBLIND //The colour matrix and darksight parameters that the mob will receive when they get the disability. replace_colours = TRITANOPIA_COLOR_REPLACE see_in_dark = 4 diff --git a/code/modules/surgery/organs/subtypes/vulpkanin_organs.dm b/code/modules/surgery/organs/subtypes/vulpkanin_organs.dm index 326996284c34..92af49afb253 100644 --- a/code/modules/surgery/organs/subtypes/vulpkanin_organs.dm +++ b/code/modules/surgery/organs/subtypes/vulpkanin_organs.dm @@ -6,7 +6,7 @@ /obj/item/organ/internal/eyes/vulpkanin name = "vulpkanin eyeballs" icon = 'icons/obj/species_organs/vulpkanin.dmi' - colourblind_matrix = MATRIX_VULP_CBLIND //The colour matrix and darksight parameters that the mob will recieve when they get the disability. + colourblind_matrix = MATRIX_VULP_CBLIND //The colour matrix and darksight parameters that the mob will receive when they get the disability. replace_colours = PROTANOPIA_COLOR_REPLACE see_in_dark = 4 diff --git a/code/modules/surgery/organs/vocal_cords.dm b/code/modules/surgery/organs/vocal_cords.dm index 8bd59f17ec9a..807f645a0824 100644 --- a/code/modules/surgery/organs/vocal_cords.dm +++ b/code/modules/surgery/organs/vocal_cords.dm @@ -168,7 +168,7 @@ GLOBAL_DATUM_INIT(multispin_words, /regex, regex("like a record baby")) continue listeners += L - if(!listeners.len) + if(!length(listeners)) next_command = world.time + cooldown_none return @@ -209,9 +209,9 @@ GLOBAL_DATUM_INIT(multispin_words, /regex, regex("like a record baby")) //Cut out the job so it doesn't trigger commands found_string = L.mind.assigned_role - if(specific_listeners.len) + if(length(specific_listeners)) listeners = specific_listeners - power_multiplier *= (1 + (1/specific_listeners.len)) //2x on a single guy, 1.5x on two and so on + power_multiplier *= (1 + (1/length(specific_listeners))) //2x on a single guy, 1.5x on two and so on message = copytext(message, 0, 1)+copytext(message, 1 + length(found_string), length(message) + 1) //STUN diff --git a/code/modules/telesci/gps.dm b/code/modules/telesci/gps.dm index d12fb7780f67..21393d49fc19 100644 --- a/code/modules/telesci/gps.dm +++ b/code/modules/telesci/gps.dm @@ -228,7 +228,7 @@ GLOBAL_LIST_EMPTY(GPS_list) tagged |= T /obj/item/gps/visible_debug/proc/clear() - while(tagged.len) + while(length(tagged)) var/turf/T = pop(tagged) T.color = initial(T.color) T.maptext = initial(T.maptext) diff --git a/code/modules/telesci/telesci_computer.dm b/code/modules/telesci/telesci_computer.dm index 0e3461145a27..8c0397ad2edb 100644 --- a/code/modules/telesci/telesci_computer.dm +++ b/code/modules/telesci/telesci_computer.dm @@ -112,7 +112,7 @@ t += "Set Power" t += "
          " - for(var/i = 1; i <= power_options.len; i++) + for(var/i = 1; i <= length(power_options); i++) if(crystals + telepad.efficiency < i) t += "[power_options[i]]" continue diff --git a/code/modules/tgs/core/tgs_version.dm b/code/modules/tgs/core/tgs_version.dm index a5dae1241a30..310e7ab55cb5 100644 --- a/code/modules/tgs/core/tgs_version.dm +++ b/code/modules/tgs/core/tgs_version.dm @@ -4,11 +4,11 @@ var/list/version_bits = splittext(deprefixed_parameter, ".") suite = text2num(version_bits[1]) - if(version_bits.len > 1) + if(length(version_bits) > 1) minor = text2num(version_bits[2]) - if(version_bits.len > 2) + if(length(version_bits) > 2) patch = text2num(version_bits[3]) - if(version_bits.len == 4) + if(length(version_bits) == 4) deprecated_patch = text2num(version_bits[4]) /datum/tgs_version/proc/Valid(allow_wildcards = FALSE) diff --git a/code/modules/tgs/v3210/v3_api.dm b/code/modules/tgs/v3210/v3_api.dm index ac5e8e4cf6d9..09e18f29f611 100644 --- a/code/modules/tgs/v3210/v3_api.dm +++ b/code/modules/tgs/v3210/v3_api.dm @@ -64,17 +64,17 @@ instance_name = "TG Station Server" //maybe just upgraded var/list/logs = TGS_FILE2LIST(".git/logs/HEAD") - if(logs.len) - logs = splittext(logs[logs.len], " ") - if(logs.len >= 2) + if(length(logs)) + logs = splittext(logs[length(logs)], " ") + if(length(logs) >= 2) commit = logs[2] else TGS_ERROR_LOG("Error parsing commit logs") logs = TGS_FILE2LIST(".git/logs/refs/remotes/origin/master") - if(logs.len) - logs = splittext(logs[logs.len], " ") - if(logs.len >= 2) + if(length(logs)) + logs = splittext(logs[length(logs)], " ") + if(length(logs) >= 2) originmastercommit = logs[2] else TGS_ERROR_LOG("Error parsing origin commmit logs") diff --git a/code/modules/tgui/modules/appearance_changer.dm b/code/modules/tgui/modules/appearance_changer.dm index 49791db04e82..afc7edd4396e 100644 --- a/code/modules/tgui/modules/appearance_changer.dm +++ b/code/modules/tgui/modules/appearance_changer.dm @@ -214,7 +214,6 @@ data["specimen"] = owner.dna.species.name data["gender"] = owner.gender - data["has_gender"] = owner.dna.species.has_gender data["change_race"] = can_change(APPEARANCE_RACE) if(data["change_race"]) var/list/species = list() diff --git a/code/modules/tgui/modules/ert_manager.dm b/code/modules/tgui/modules/ert_manager.dm index d68f42cd5202..d204d60b34b0 100644 --- a/code/modules/tgui/modules/ert_manager.dm +++ b/code/modules/tgui/modules/ert_manager.dm @@ -36,7 +36,7 @@ data["cyb"] = cyborg_slots data["secborg"] = cyborg_security data["total"] = commander_slots + security_slots + medical_slots + engineering_slots + janitor_slots + paranormal_slots + cyborg_slots - data["spawnpoints"] = GLOB.emergencyresponseteamspawn.len + data["spawnpoints"] = length(GLOB.emergencyresponseteamspawn) data["ert_request_messages"] = GLOB.ert_request_messages return data diff --git a/code/modules/tgui/modules/law_manager.dm b/code/modules/tgui/modules/law_manager.dm index 65f4c23f78d1..001a8bdc31c4 100644 --- a/code/modules/tgui/modules/law_manager.dm +++ b/code/modules/tgui/modules/law_manager.dm @@ -198,7 +198,7 @@ for(var/datum/ai_law/AL in laws) packaged_laws[++packaged_laws.len] = list("law" = AL.law, "index" = AL.get_index(), "state" = owner.laws.get_state_law(AL), "ref" = "\ref[AL]") data[field] = packaged_laws - data["has_[field]"] = packaged_laws.len + data["has_[field]"] = length(packaged_laws) /datum/ui_module/law_manager/proc/package_multiple_laws(list/datum/ai_laws/laws) var/list/law_sets = list() diff --git a/code/modules/tgui/tgui_input/alert_input.dm b/code/modules/tgui/tgui_input/alert_input.dm index ef1afd04630d..f349dd48c766 100644 --- a/code/modules/tgui/tgui_input/alert_input.dm +++ b/code/modules/tgui/tgui_input/alert_input.dm @@ -62,6 +62,8 @@ var/start_time /// The lifespan of the tgui_alert, after which the window will close and delete itself. var/timeout + /// The attached timer that handles this objects timeout deletion + var/deletion_timer /// The bool that controls if this modal should grab window focus var/autofocus /// Boolean field describing if the tgui_alert was closed by the user. @@ -79,11 +81,12 @@ if(timeout) src.timeout = timeout start_time = world.time - QDEL_IN(src, timeout) + deletion_timer = QDEL_IN(src, timeout) /datum/tgui_alert/Destroy(force) SStgui.close_uis(src) state = null + deltimer(deletion_timer) return ..() /** diff --git a/code/modules/tgui/tgui_input/list_input.dm b/code/modules/tgui/tgui_input/list_input.dm index dd642861baf4..f43ceffdaafa 100644 --- a/code/modules/tgui/tgui_input/list_input.dm +++ b/code/modules/tgui/tgui_input/list_input.dm @@ -65,6 +65,8 @@ var/start_time /// The lifespan of the tgui_list_input, after which the window will close and delete itself. var/timeout + /// The attached timer that handles this objects timeout deletion + var/deletion_timer /// Boolean field describing if the tgui_list_input was closed by the user. var/closed /// The TGUI UI state that will be returned in ui_state(). Default: always_state @@ -98,11 +100,12 @@ if(timeout) src.timeout = timeout start_time = world.time - QDEL_IN(src, timeout) + deletion_timer = QDEL_IN(src, timeout) /datum/tgui_list_input/Destroy(force) SStgui.close_uis(src) state = null + deltimer(deletion_timer) return ..() /** diff --git a/code/modules/tgui/tgui_input/number_input.dm b/code/modules/tgui/tgui_input/number_input.dm index 7e4a49832a38..5afa06d6516d 100644 --- a/code/modules/tgui/tgui_input/number_input.dm +++ b/code/modules/tgui/tgui_input/number_input.dm @@ -66,6 +66,8 @@ var/start_time /// The lifespan of the number input, after which the window will close and delete itself. var/timeout + /// The attached timer that handles this objects timeout deletion + var/deletion_timer /// The title of the TGUI window var/title /// The TGUI UI state that will be returned in ui_state(). Default: always_state @@ -83,7 +85,7 @@ if(timeout) src.timeout = timeout start_time = world.time - QDEL_IN(src, timeout) + deletion_timer = QDEL_IN(src, timeout) /// Checks for empty numbers - bank accounts, etc. if(max_value == 0) @@ -101,6 +103,7 @@ /datum/tgui_input_number/Destroy(force) SStgui.close_uis(src) state = null + deltimer(deletion_timer) return ..() /** diff --git a/code/modules/tgui/tgui_input/text_input.dm b/code/modules/tgui/tgui_input/text_input.dm index 9e00d25414a9..b3a7d32b0904 100644 --- a/code/modules/tgui/tgui_input/text_input.dm +++ b/code/modules/tgui/tgui_input/text_input.dm @@ -74,6 +74,8 @@ var/start_time /// The lifespan of the text input, after which the window will close and delete itself. var/timeout + /// The attached timer that handles this objects timeout deletion + var/deletion_timer /// The title of the TGUI window var/title /// The TGUI UI state that will be returned in ui_state(). Default: always_state @@ -91,11 +93,12 @@ if(timeout) src.timeout = timeout start_time = world.time - QDEL_IN(src, timeout) + deletion_timer = QDEL_IN(src, timeout) /datum/tgui_input_text/Destroy(force) SStgui.close_uis(src) state = null + deltimer(deletion_timer) return ..() /** diff --git a/code/modules/tgui/tgui_panel/README.md b/code/modules/tgui/tgui_panel/README.md index 95f28ae0e8cf..71acb47c458a 100644 --- a/code/modules/tgui/tgui_panel/README.md +++ b/code/modules/tgui/tgui_panel/README.md @@ -19,11 +19,11 @@ TgChat handles sending messages from the server to the client through the use of ### Reliability -In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of recieved sequence numbers. Should the client recieve an unexpected sequence number TgChat asks the server to resend any missing packets. +In the past there have been issues where BYOND will silently and without reason lose a message we sent to the client, to detect this and recover from it seamlessly TgChat also has a baked in reliability layer. This reliability layer is very primitive, and simply keeps track of received sequence numbers. Should the client receive an unexpected sequence number TgChat asks the server to resend any missing packets. ### Ping System -TgChat supports a round trip time ping measurement, which is displayed to the client so they can know how long it takes for their commands and inputs to reach the server. This is done by sending the client a ping request, `ping/soft`, which tells the client to send a ping to the server. When the server recieves said ping it sends a reply, `ping/reply`, to the client with a payload containing the current DateTime which the client can reference against the initial ping request. +TgChat supports a round trip time ping measurement, which is displayed to the client so they can know how long it takes for their commands and inputs to reach the server. This is done by sending the client a ping request, `ping/soft`, which tells the client to send a ping to the server. When the server receives said ping it sends a reply, `ping/reply`, to the client with a payload containing the current DateTime which the client can reference against the initial ping request. ### Chat Tabs, Local Storage, and Highlighting diff --git a/code/modules/tgui/tgui_panel/telemetry.dm b/code/modules/tgui/tgui_panel/telemetry.dm index 6b63903d2242..d0ba2f5218b6 100644 --- a/code/modules/tgui/tgui_panel/telemetry.dm +++ b/code/modules/tgui/tgui_panel/telemetry.dm @@ -67,7 +67,7 @@ return var/list/row = telemetry_connections[i] // Check for a malformed history object - if(!row || row.len < 3 || (!row["ckey"] || !row["address"] || !row["computer_id"])) + if(!row || length(row) < 3 || (!row["ckey"] || !row["address"] || !row["computer_id"])) return if(world.IsBanned(row["ckey"], row["address"], row["computer_id"], FALSE, FALSE, FALSE, FALSE, FALSE)) found = row diff --git a/code/modules/vehicle/janivehicle.dm b/code/modules/vehicle/janivehicle.dm index 2be7e94a2396..f17278cb9825 100644 --- a/code/modules/vehicle/janivehicle.dm +++ b/code/modules/vehicle/janivehicle.dm @@ -43,13 +43,6 @@ desc = "A keyring with a small steel key, and a pink fob reading \"Pussy Wagon\"." icon_state = "keyjanitor" -/obj/item/janiupgrade - name = "floor buffer upgrade" - desc = "An upgrade for mobile janicarts." - icon = 'icons/obj/vehicles.dmi' - icon_state = "upgrade" - origin_tech = "materials=3;engineering=4" - /datum/action/floor_buffer name = "Toggle Floor Buffer" desc = "Movement speed is decreased while active." @@ -111,7 +104,7 @@ mybag = I update_icon(UPDATE_OVERLAYS) return - if(istype(I, /obj/item/janiupgrade)) + if(istype(I, /obj/item/borg/upgrade/floorbuffer)) if(buffer_installed) to_chat(user, fail_msg) return diff --git a/config/example/config.toml b/config/example/config.toml index 41b058f84042..0f2eb8b35c1f 100644 --- a/config/example/config.toml +++ b/config/example/config.toml @@ -71,12 +71,39 @@ enable_localhost_autoadmin = true # +VIEWRUNTIMES = Allows a player to view the runtimes of the server, but not use other debug verbs admin_ranks = [ # Format: {name = "My Rank", rights = ["+LIST", "+OF", "+RIGHTS"]} - {name = "Mentor", rights = ["+MENTOR"]}, - {name = "Trial Admin", rights = ["+ADMIN", "+BAN", "+STEALTH", "+REJUVINATE"]}, - {name = "Game Admin", rights = ["+ADMIN", "+BAN", "+STEALTH", "+REJUVINATE", "+DEBUG", "+BUILDMODE", "+EVENT", "+SERVER", "+POSSESS", "+PROCCALL", "+VAREDIT", "+SOUND", "+SPAWN"]}, - {name = "Head of Staff", rights = ["+EVERYTHING"]}, - {name = "Hosting Provider", rights = ["+EVERYTHING"]}, - {name = "Maintainers", rights = ["+EVERYTHING"]} + { name = "Mentor", rights = [ + "+MENTOR", + ] }, + { name = "Trial Admin", rights = [ + "+ADMIN", + "+BAN", + "+STEALTH", + "+REJUVINATE", + ] }, + { name = "Game Admin", rights = [ + "+ADMIN", + "+BAN", + "+STEALTH", + "+REJUVINATE", + "+DEBUG", + "+BUILDMODE", + "+EVENT", + "+SERVER", + "+POSSESS", + "+PROCCALL", + "+VAREDIT", + "+SOUND", + "+SPAWN", + ] }, + { name = "Head of Staff", rights = [ + "+EVERYTHING", + ] }, + { name = "Hosting Provider", rights = [ + "+EVERYTHING", + ] }, + { name = "Maintainers", rights = [ + "+EVERYTHING", + ] }, ] # List of people and the admin rank they are assigned to admin_assignments = [ @@ -86,18 +113,18 @@ admin_assignments = [ allow_admin_ooc_colour = true # Map of admin rank colours to their respective rank. Note you can use hex or colour name here. admin_rank_colour_map = [ - {name = "Head of Staff", colour = "#e74c3c"}, - {name = "Maintainer", colour = "#992d22"}, - {name = "Server Dev", colour = "#1abc9c"}, - {name = "Community Manager", colour = "#e91e63"}, - {name = "Game Admin", colour = "#238afa"}, - {name = "Trial Admin", colour = "#7fb6fc"}, - {name = "PR Reviewer", colour = "#c27c0e"}, - {name = "Mentor", colour = "#f1c40f"}, + { name = "Head of Staff", colour = "#e74c3c" }, + { name = "Maintainer", colour = "#992d22" }, + { name = "Server Dev", colour = "#1abc9c" }, + { name = "Community Manager", colour = "#e91e63" }, + { name = "Game Admin", colour = "#238afa" }, + { name = "Trial Admin", colour = "#7fb6fc" }, + { name = "PR Reviewer", colour = "#c27c0e" }, + { name = "Mentor", colour = "#f1c40f" }, ] # Map of common CIDs that should not be banned, plus their reasons common_cid_map = [ - {cid = "3923664137", reason = "Mass-Match related to Walmart branded prebuilt PCs"} + { cid = "3923664137", reason = "Mass-Match related to Walmart branded prebuilt PCs" }, ] @@ -135,7 +162,10 @@ ai_hologram = ["ckeyhere"] pai_holoform = ["ckeyhere"] # List of dictionary entries for ckeys with a custom IPC screean ipc_screens = [ - {ckey = "ckeyhere", screens = ["Icon State 1", "Icon State 2"]} + { ckey = "ckeyhere", screens = [ + "Icon State 1", + "Icon State 2", + ] }, ] @@ -149,7 +179,7 @@ ipc_screens = [ # Enable/disable the database on a whole sql_enabled = false # SQL version. If this is a mismatch, round start will be delayed -sql_version = 542206 +sql_version = 552206 # SQL server address. Can be an IP or DNS name sql_address = "127.0.0.1" # SQL server port @@ -175,20 +205,14 @@ async_thread_limit = 50 # All role IDs must be STRINGS as BYOND doesnt like ints that big enable_discord_webhooks = false # List of all webhooks for the primary feed (public channels) -main_webhook_urls = [ - "https://webhook.one", - "https://webhook.two" -] +main_webhook_urls = ["https://webhook.one", "https://webhook.two"] # List of all webhook URLs for the mentor feed (mentorhelps relay) mentor_webhook_urls = [ "https://mentor.webhook.one", - "https://mentor.webhook.two" + "https://mentor.webhook.two", ] # List of all webhook URLs for the admin feed (round alerts, ahelps, etc) -admin_webhook_urls = [ - "https://admin.webhook.one", - "https://admin.webhook.two" -] +admin_webhook_urls = ["https://admin.webhook.one", "https://admin.webhook.two"] # Role ID for the admin role on the discord. Set to "" to disable. # THESE MUST BOTH BE STRINGS. BYOND DOESNT LIKE NUMBERS THIS BIG admin_role_id = "" @@ -210,9 +234,9 @@ new_round_waiting_role_id = "" # Disable this to disable all random events allow_random_events = true # Map of lower bounds for event delays. In minutes. -event_delay_lower_bounds = {mundane = 10, moderate = 30, major = 50} +event_delay_lower_bounds = { mundane = 10, moderate = 30, major = 50 } # Map of upper bounds for event delays. In minutes. -event_delay_upper_bounds = {mundane = 15, moderate = 45, major = 70} +event_delay_upper_bounds = { mundane = 15, moderate = 45, major = 70 } # Expected round length in minutes. Changes event weights expected_round_length = 120 # Initial delays for the first events firing off. If any of these are commented, a random value based on above thresholds is used. @@ -220,8 +244,8 @@ expected_round_length = 120 # Values are in minutes event_initial_delays = [ #{severity = "mundane", lower_bound = 10, upper_bound = 15}, - {severity = "moderate", lower_bound = 25, upper_bound = 40}, - {severity = "major", lower_bound = 55, upper_bound = 75}, + { severity = "moderate", lower_bound = 25, upper_bound = 40 }, + { severity = "major", lower_bound = 55, upper_bound = 75 }, ] @@ -235,21 +259,21 @@ event_initial_delays = [ antag_account_age_restrictions = false # Gamemode probabilities map for if you are using secret or random gamemode_probabilities = [ - {gamemode = "abduction", probability = 0}, - {gamemode = "changeling", probability = 3}, - {gamemode = "cult", probability = 3}, - {gamemode = "extend-a-traitormongous", probability = 2}, # Autotraitor - {gamemode = "extended", probability = 3}, - {gamemode = "nuclear", probability = 2}, - {gamemode = "raginmages", probability = 0}, - {gamemode = "revolution", probability = 0}, - {gamemode = "traitor", probability = 2}, - {gamemode = "traitorchan", probability = 3}, - {gamemode = "traitorvamp", probability = 3}, - {gamemode = "vampire", probability = 3}, - {gamemode = "wizard", probability = 2}, - {gamemode = "trifecta", probability = 3}, - {gamemode = "antag_mix", probability = 3}, + { gamemode = "abduction", probability = 0 }, + { gamemode = "changeling", probability = 3 }, + { gamemode = "cult", probability = 3 }, + { gamemode = "extend-a-traitormongous", probability = 2 }, # Autotraitor + { gamemode = "extended", probability = 3 }, + { gamemode = "nuclear", probability = 2 }, + { gamemode = "raginmages", probability = 0 }, + { gamemode = "revolution", probability = 0 }, + { gamemode = "traitor", probability = 2 }, + { gamemode = "traitorchan", probability = 3 }, + { gamemode = "traitorvamp", probability = 3 }, + { gamemode = "vampire", probability = 3 }, + { gamemode = "wizard", probability = 2 }, + { gamemode = "trifecta", probability = 3 }, + { gamemode = "antag_mix", probability = 3 }, ] # Do we want the amount of traitors to scale with population? traitor_scaling = true @@ -416,48 +440,48 @@ enable_job_amount_overrides = true # Job slot amount map. These are overrides. If you dont specify a value here, the code will be used as default. -1 is infinite job_slot_amounts = [ # Commmand - {name = "Captain", lowpop = 1, highpop = 1}, - {name = "Head of Personnel", lowpop = 1, highpop = 1}, - {name = "Head of Security", lowpop = 1, highpop = 1}, - {name = "Chief Engineer", lowpop = 1, highpop = 1}, - {name = "Research Director", lowpop = 1, highpop = 1}, - {name = "Chief Medical Officer", lowpop = 1, highpop = 1}, + { name = "Captain", lowpop = 1, highpop = 1 }, + { name = "Head of Personnel", lowpop = 1, highpop = 1 }, + { name = "Head of Security", lowpop = 1, highpop = 1 }, + { name = "Chief Engineer", lowpop = 1, highpop = 1 }, + { name = "Research Director", lowpop = 1, highpop = 1 }, + { name = "Chief Medical Officer", lowpop = 1, highpop = 1 }, # Engineering - {name = "Life Support Specialist", lowpop = 3, highpop = 4}, - {name = "Station Engineer", lowpop = 5, highpop = 6}, - {name = "Trainee Engineer", lowpop = 0, highpop = 0}, + { name = "Life Support Specialist", lowpop = 3, highpop = 4 }, + { name = "Station Engineer", lowpop = 5, highpop = 6 }, + { name = "Trainee Engineer", lowpop = 0, highpop = 0 }, # Medical - {name = "Chemist", lowpop = 2, highpop = 2}, - {name = "Geneticist", lowpop = 2, highpop = 2}, - {name = "Medical Doctor", lowpop = 5, highpop = 6}, - {name = "Medical Intern", lowpop = 0, highpop = 0}, - {name = "Virologist", lowpop = 1, highpop = 1}, + { name = "Chemist", lowpop = 2, highpop = 2 }, + { name = "Geneticist", lowpop = 2, highpop = 2 }, + { name = "Medical Doctor", lowpop = 5, highpop = 6 }, + { name = "Medical Intern", lowpop = 0, highpop = 0 }, + { name = "Virologist", lowpop = 1, highpop = 1 }, # Science - {name = "Roboticist", lowpop = 2, highpop = 2}, - {name = "Scientist", lowpop = 6, highpop = 7}, - {name = "Student Scientist", lowpop = 0, highpop = 0}, + { name = "Roboticist", lowpop = 2, highpop = 2 }, + { name = "Scientist", lowpop = 6, highpop = 7 }, + { name = "Student Scientist", lowpop = 0, highpop = 0 }, # Security - {name = "Detective", lowpop = 1, highpop = 1}, - {name = "Security Officer", lowpop = 8, highpop = 9}, - {name = "Security Cadet", lowpop = 0, highpop = 0}, - {name = "Warden", lowpop = 1, highpop = 1}, - {name = "Internal Affairs Agent", lowpop = 2, highpop = 2}, + { name = "Detective", lowpop = 1, highpop = 1 }, + { name = "Security Officer", lowpop = 8, highpop = 9 }, + { name = "Security Cadet", lowpop = 0, highpop = 0 }, + { name = "Warden", lowpop = 1, highpop = 1 }, + { name = "Internal Affairs Agent", lowpop = 2, highpop = 2 }, # Service - {name = "Bartender", lowpop = 1, highpop = 1}, - {name = "Botanist", lowpop = 2, highpop = 2}, - {name = "Chaplain", lowpop = 1, highpop = 1}, - {name = "Chef", lowpop = 1, highpop = 1}, - {name = "Janitor", lowpop = 1, highpop = 2}, - {name = "Librarian", lowpop = 1, highpop = 1}, + { name = "Bartender", lowpop = 1, highpop = 1 }, + { name = "Botanist", lowpop = 2, highpop = 2 }, + { name = "Chaplain", lowpop = 1, highpop = 1 }, + { name = "Chef", lowpop = 1, highpop = 1 }, + { name = "Janitor", lowpop = 1, highpop = 2 }, + { name = "Librarian", lowpop = 1, highpop = 1 }, # Cargo/Supply - {name = "Quartermaster", lowpop = 1, highpop = 1}, - {name = "Shaft Miner", lowpop = 6, highpop = 6}, - {name = "Cargo Technician", lowpop = 3, highpop = 4}, + { name = "Quartermaster", lowpop = 1, highpop = 1 }, + { name = "Shaft Miner", lowpop = 6, highpop = 6 }, + { name = "Cargo Technician", lowpop = 3, highpop = 4 }, # Silicon - {name = "AI", lowpop = 1, highpop = 1}, - {name = "Cyborg", lowpop = 1, highpop = 1}, + { name = "AI", lowpop = 1, highpop = 1 }, + { name = "Cyborg", lowpop = 1, highpop = 1 }, # Misc - {name = "Assistant", lowpop = -1, highpop = -1}, + { name = "Assistant", lowpop = -1, highpop = -1 }, ] @@ -584,7 +608,6 @@ overflow_whitelist = ["keyhere", "anotherhere"] reservation_time = 10 - ################################################################ @@ -843,11 +866,11 @@ non_repeating_maps = true # - "Random" = no vote, map is random # If you dont enter one correctly, it will whine on startup map_vote_day_types = [ - { day_number = 1, rotation_type = "Vote" }, # Monday - { day_number = 2, rotation_type = "Random" }, # Tuesday - { day_number = 3, rotation_type = "Vote" }, # Wednesday - { day_number = 4, rotation_type = "Random" }, # Thursday - { day_number = 5, rotation_type = "Vote" }, # Friday + { day_number = 1, rotation_type = "Vote" }, # Monday + { day_number = 2, rotation_type = "Random" }, # Tuesday + { day_number = 3, rotation_type = "Vote" }, # Wednesday + { day_number = 4, rotation_type = "Random" }, # Thursday + { day_number = 5, rotation_type = "Vote" }, # Friday { day_number = 6, rotation_type = "Nodupes" }, # Saturday { day_number = 7, rotation_type = "Nodupes" }, # Sunday ] diff --git a/icons/_nanomaps/CereStation_nanomap_z1.png b/icons/_nanomaps/CereStation_nanomap_z1.png index 61e992f4ba58..a727666c4a4c 100644 Binary files a/icons/_nanomaps/CereStation_nanomap_z1.png and b/icons/_nanomaps/CereStation_nanomap_z1.png differ diff --git a/icons/_nanomaps/MetaStation_nanomap_z1.png b/icons/_nanomaps/MetaStation_nanomap_z1.png index fbef36582aa4..767c69c695c1 100644 Binary files a/icons/_nanomaps/MetaStation_nanomap_z1.png and b/icons/_nanomaps/MetaStation_nanomap_z1.png differ diff --git a/icons/effects/mouse_pointers/weapon_pointer.dmi b/icons/effects/mouse_pointers/weapon_pointer.dmi new file mode 100644 index 000000000000..b5070062c0bb Binary files /dev/null and b/icons/effects/mouse_pointers/weapon_pointer.dmi differ diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi index 0520a9ef005c..663d4546caf3 100644 Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index 3ee35bc0b335..da32a49f5b3a 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ diff --git a/icons/obj/economy.dmi b/icons/obj/economy.dmi index 06a2a97e8835..03f10400f45d 100644 Binary files a/icons/obj/economy.dmi and b/icons/obj/economy.dmi differ diff --git a/icons/obj/food/burgerbread.dmi b/icons/obj/food/burgerbread.dmi index 31bc1959e4e4..46cdf2322ee6 100644 Binary files a/icons/obj/food/burgerbread.dmi and b/icons/obj/food/burgerbread.dmi differ diff --git a/icons/obj/food/food.dmi b/icons/obj/food/food.dmi index bd40ddcc8a9a..ec094dac1d8b 100644 Binary files a/icons/obj/food/food.dmi and b/icons/obj/food/food.dmi differ diff --git a/icons/obj/food/meat.dmi b/icons/obj/food/meat.dmi index d0263625bc0e..79b212c8b796 100644 Binary files a/icons/obj/food/meat.dmi and b/icons/obj/food/meat.dmi differ diff --git a/icons/obj/stacks/organic.dmi b/icons/obj/stacks/organic.dmi index 38b7f1955714..d9b0ab06924d 100644 Binary files a/icons/obj/stacks/organic.dmi and b/icons/obj/stacks/organic.dmi differ diff --git a/modular_ss220/hairs/code/vulpkanin_hair.dm b/modular_ss220/hairs/code/vulpkanin_hair.dm index 4f456a5e77aa..c44b24fb0e5b 100644 --- a/modular_ss220/hairs/code/vulpkanin_hair.dm +++ b/modular_ss220/hairs/code/vulpkanin_hair.dm @@ -2,13 +2,11 @@ icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Ponytailf" icon_state = "ponytailf" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_pigtailss icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Pigtails (Vulpkanin)" icon_state = "pigtailss" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_dave icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' @@ -24,7 +22,6 @@ icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Hightight" icon_state = "hightight" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_sergeant icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' @@ -35,13 +32,11 @@ icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Grande" icon_state = "grande" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_beehive2 icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Beehive (Vulpkanin)" icon_state = "beehive2" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_longeralt icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' @@ -52,7 +47,6 @@ icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Curly" icon_state = "curly" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_bunhead3 icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' @@ -63,25 +57,21 @@ icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Ponytail alt." icon_state = "ponytailalt" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_emolong icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Emolong" icon_state = "emolong" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_volajupompless icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Volajupompless" icon_state = "volajupompless" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_bunhead4 icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Bun 4 (Vulpkanin)" icon_state = "bunhead4" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_toriyama icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' @@ -92,37 +82,31 @@ icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Unkempt (Vulpkanin)" icon_state = "unkempt" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_nia icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Nia (Vulpkanin)" icon_state = "nia" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_twintail_floor icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Twintail floor" icon_state = "twintail_floor" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_nia_alt icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Nia Alt." icon_state = "nia_alt" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_fluffy_short icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Fluffy Short" icon_state = "fluffy_short" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_simple_ponytail icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Simple Ponytail" icon_state = "simple_ponytail" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_halfshave_snout icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' @@ -133,55 +117,46 @@ icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Bluntbangs" icon_state = "bluntbangs" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_bluntbangs_alt icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Bluntbangs Alt." icon_state = "bluntbangs_alt" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_slightymessy icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Slightymessy" icon_state = "slightymessy" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_loghair5 icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Loghair 5" icon_state = "loghair5" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_halfshaved icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Halfshaved" icon_state = "halfshaved" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_geisha icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Geisha" icon_state = "geisha" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_cotton icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Cotton" icon_state = "cotton" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_africanpigtails icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "African pigtails" icon_state = "africanpigtails" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_froofylong icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Froofylong" icon_state = "froofylong" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_glammetal icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' @@ -197,43 +172,36 @@ icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "New you" icon_state = "newyou" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_sabitsuki icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Sabitsuki" icon_state = "sabitsuki" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_jessica icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Jessica" icon_state = "jessica" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_country icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Country (Vulpkanin)" icon_state = "country" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_beachwave icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Beachwave" icon_state = "beachwave" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_emoshort icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Emoshort" icon_state = "emoshort" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_shortovereyealt icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' name = "Short over eye" icon_state = "shortovereyealt" - gender = FEMALE /datum/sprite_accessory/hair/vulpkanin/hair_spicy icon = 'modular_ss220/hairs/icons/vulpkanin_hair.dmi' diff --git a/paradise.dme b/paradise.dme index a2c12352095f..89bc1814f21d 100644 --- a/paradise.dme +++ b/paradise.dme @@ -409,6 +409,7 @@ #include "code\datums\components\edit_complainer.dm" #include "code\datums\components\emissive_blocker.dm" #include "code\datums\components\footstep.dm" +#include "code\datums\components\fullauto.dm" #include "code\datums\components\label.dm" #include "code\datums\components\largeobjecttransparency.dm" #include "code\datums\components\material_container.dm" @@ -714,7 +715,7 @@ #include "code\game\gamemodes\miniantags\abduction\machinery\pad.dm" #include "code\game\gamemodes\miniantags\demons\demon.dm" #include "code\game\gamemodes\miniantags\demons\shadow_demon\shadow_demon.dm" -#include "code\game\gamemodes\miniantags\demons\slaughter demon\slaughter.dm" +#include "code\game\gamemodes\miniantags\demons\slaughter_demon\slaughter.dm" #include "code\game\gamemodes\miniantags\guardian\guardian.dm" #include "code\game\gamemodes\miniantags\guardian\host_actions.dm" #include "code\game\gamemodes\miniantags\guardian\types\assassin.dm" @@ -1077,6 +1078,7 @@ #include "code\game\objects\items\stacks\medical_packs.dm" #include "code\game\objects\items\stacks\nanopaste.dm" #include "code\game\objects\items\stacks\rods.dm" +#include "code\game\objects\items\stacks\seaweed.dm" #include "code\game\objects\items\stacks\stack.dm" #include "code\game\objects\items\stacks\stack_recipe.dm" #include "code\game\objects\items\stacks\telecrystal.dm" @@ -1472,6 +1474,7 @@ #include "code\modules\antagonists\traitor\contractor\items\contractor_uplink.dm" #include "code\modules\antagonists\traitor\contractor\items\extraction_items.dm" #include "code\modules\antagonists\vampire\vamp_datum.dm" +#include "code\modules\antagonists\vampire\vamp_thrall.dm" #include "code\modules\antagonists\vampire\vampire_subclasses.dm" #include "code\modules\antagonists\vampire\vampire_powers\dantalion_powers.dm" #include "code\modules\antagonists\vampire\vampire_powers\gargantua_powers.dm" @@ -1598,6 +1601,7 @@ #include "code\modules\buildmode\buildmode_hud.dm" #include "code\modules\buildmode\effects\line.dm" #include "code\modules\buildmode\submodes\advanced.dm" +#include "code\modules\buildmode\submodes\antirad_mode.dm" #include "code\modules\buildmode\submodes\area_edit.dm" #include "code\modules\buildmode\submodes\atmos.dm" #include "code\modules\buildmode\submodes\basic.dm" @@ -2525,7 +2529,6 @@ #include "code\modules\power\engines\supermatter\supermatter_event.dm" #include "code\modules\power\engines\tesla\coil.dm" #include "code\modules\power\engines\tesla\energy_ball.dm" -#include "code\modules\power\engines\tesla\generator.dm" #include "code\modules\power\engines\tesla\teslagen.dm" #include "code\modules\power\generators\solar.dm" #include "code\modules\power\generators\thermo_electric_generator.dm" diff --git a/prof.dll b/prof.dll index c0bc34532e4c..279f16de3610 100644 Binary files a/prof.dll and b/prof.dll differ diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md index 02af4e3aee99..af744b617937 100644 --- a/tgui/docs/component-reference.md +++ b/tgui/docs/component-reference.md @@ -29,6 +29,8 @@ Make sure to add new items to this list if you document new components. - [`Grid.Column`](#gridcolumn) - [`Icon`](#icon) - [`Icon.Stack`](#iconstack) + - [`ImageButton`](#imagebutton) + - [`ImageButton.Item`](#imagebuttonitem) - [`Input`](#input) - [`Knob`](#knob) - [`LabeledControls`](#labeledcontrols) @@ -545,6 +547,67 @@ Renders children icons on top of each other in order to make your own icon. - See inherited props: [Box](#box) - `children: Icon` - Icons to stack. +### `ImageButton` + +A Robust button is specifically for sticking a picture in it. +Has support for base64, spritesheets and URLs. + +**Props:** + +- See inherited props: [Box](#box) +- `asset: boolean` - Enables spritesheets support. +- `vertical: boolean` - Makes the button a inlined vertical rectangle. +- `color: string` - By default, the button is semi-transparent. You can change the overall colour, +all colours are available in KitchenSink in the corresponding section. +- `title: string` - The top text, it will always be bold, and also adds a divider between title and content. +Disabled if there is no content. +- `content: string|any` - All main content, usually text, but you can put in other components if you like. +Makes the vertical button square if empty. +- `selected: boolean` - Makes button selected (green) if true. +- `disabled: boolean` - Makes button disabled (red) if true. Also disables onClick. +- `disabledContent: string` - If button disabled and disabledContent filled, it will be used instead content. +- `image: string` - Base64 image, simple. Disabled if asset support enabled. +- `imageUrl: string` - PNG image or other asset. Make sure you use existing simple asset! Example: imageUrl={'image.png'} +- `imageAsset: string` - If you have enabled asset support, write here which spritesheet to use. +Example: imageAsset={'spritesheet_name64x64'} +- `imageSize: string` - Sets the size of the image and adjusts the size of the button itself accordingly. +Example: imageSize={'64px'} +- `tooltip: string` - A fancy, boxy tooltip, which appears when hovering +over the button. +- `tooltipPosition: string` - Position of the tooltip. See [`Popper`](#Popper) for valid options. +- `ellipsis: boolean` - If button width is constrained, button text will +be truncated with an ellipsis. Be careful however, because this prop breaks +the baseline alignment. +- `children: ImageButton.Item|any` - Items that are added to the right of the horizontal button. +- `onClick: function` - Called when element is clicked. Also enables hover effects. + +### `ImageButton.Item` + +Additional button/s for ImageButton. + +> Try not to add ImageButton.Item in large quantities. They reduce rendering speed very much +> Available only in horizontal mode, if you try add it to vertical, you're gonna be disappointed + +**Props:** +- See inherited props: [Box](#box) +- `color: string` - By default, the button is semi-transparent. You can change the overall colour, +all colours are available in KitchenSink in the corresponding section. +- `content: string|any` - All main content, usually text, but you can put in other components if you like. +Try to not make it too long. +- `selected: boolean` - Makes button selected (green) if true. +- `disabled: boolean` - Makes button disabled (red) if true. Also disables onClick. +- `disabledContent: string` - If button disabled and disabledContent filled, it will be used instead content. +- `tooltip: string` - A fancy, boxy tooltip, which appears when hovering +over the button. +- `tooltipPosition: string` - Position of the tooltip. See [`Popper`](#Popper) for valid options. +- `icon: string` - Adds an icon to the button. By default it will be under content. +- `iconColor: string` - Paints icon if it used. +- `iconPosition: string` - You can make an icon above the content. +Example: iconPosition={'top'} +- `iconSize: number` - Adjusts the size of the icon. +- `children: any` - Similar to content. +- `onClick: function` - Called when element is clicked. + ### `Input` A basic text input, which allow users to enter text into a UI. diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index 996aacc3bf14..1e72f6edd8f9 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -12,7 +12,7 @@ img { margin: 0; padding: 0; line-height: 1; - -ms-interpolation-mode: nearest-neighbor; + -ms-interpolation-mode: nearest-neighbor; // TODO: Remove with 516 image-rendering: pixelated; } diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index b2f85f3195c7..42970e8f1199 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -30,7 +30,7 @@ img { margin: 0; padding: 0; line-height: 1; - -ms-interpolation-mode: nearest-neighbor; + -ms-interpolation-mode: nearest-neighbor; // TODO: Remove with 516 image-rendering: pixelated; } @@ -183,12 +183,6 @@ a.popt { padding: 2px 0; } -.filterMessages input { -} - -.filterMessages label { -} - .icon-stack { height: 1em; line-height: 1em; diff --git a/tgui/packages/tgui/components/ImageButton.js b/tgui/packages/tgui/components/ImageButton.js new file mode 100644 index 000000000000..2b7258497fa6 --- /dev/null +++ b/tgui/packages/tgui/components/ImageButton.js @@ -0,0 +1,234 @@ +/** + * @file + * @copyright 2024 Aylong (https://github.com/AyIong) + * @license MIT + */ + +import { resolveAsset } from '../assets'; +import { classes, pureComponentHooks } from 'common/react'; +import { computeBoxClassName, computeBoxProps } from './Box'; +import { Icon } from './Icon'; +import { Tooltip } from './Tooltip'; + +export const ImageButton = (props) => { + const { + className, + asset, + color, + title, + vertical, + content, + selected, + disabled, + disabledContent, + image, + imageUrl, + imageAsset, + imageSize, + tooltip, + tooltipPosition, + ellipsis, + children, + onClick, + ...rest + } = props; + rest.onClick = (e) => { + if (!disabled && onClick) { + onClick(e); + } + }; + let buttonContent = ( +
          +
          + {asset ? ( +
          + ) : ( + + )} +
          + {content && + (vertical ? ( +
          + {disabled && disabledContent ? disabledContent : content} +
          + ) : ( +
          + {title && ( +
          + {title} +
          +
          + )} +
          + {content} +
          +
          + ))} +
          + ); + + if (tooltip) { + buttonContent = ( + + {buttonContent} + + ); + } + + return ( +
          + {buttonContent} + {children} +
          + ); +}; + +ImageButton.defaultHooks = pureComponentHooks; + +/** + * That's VERY fucking expensive thing! + * Use it only in places, where it really needed. + * Otherwise, the window opening time may increase by a third! + * Most of the blame is on Icon. + * Maybe it's also because I'm a bit crooked. + * (с) Aylong + */ +export const ImageButtonItem = (props) => { + const { + className, + color, + content, + horizontal, + selected, + disabled, + disabledContent, + tooltip, + tooltipPosition, + icon, + iconColor, + iconPosition, + iconRotation, + iconSize, + onClick, + children, + ...rest + } = props; + rest.onClick = (e) => { + if (!disabled && onClick) { + onClick(e); + } + }; + let itemContent = ( +
          +
          +
          + {icon && (iconPosition === 'top' || iconPosition === 'left') && ( + + )} +
          + {disabled && disabledContent ? disabledContent : content} + {children} +
          + {icon && !(iconPosition === 'top' || iconPosition === 'left') && ( + + )} +
          +
          +
          + ); + if (tooltip) { + itemContent = ( + + {itemContent} + + ); + } + + return itemContent; +}; + +ImageButton.Item = ImageButtonItem; diff --git a/tgui/packages/tgui/components/NanoMap.js b/tgui/packages/tgui/components/NanoMap.js index b1aaeb0f2daa..6d7af465bc76 100644 --- a/tgui/packages/tgui/components/NanoMap.js +++ b/tgui/packages/tgui/components/NanoMap.js @@ -118,7 +118,8 @@ export class NanoMap extends Component { top: '50%', left: '50%', transform: 'translate(-50%, -50%)', - '-ms-interpolation-mode': 'nearest-neighbor', + '-ms-interpolation-mode': 'nearest-neighbor', // TODO: Remove with 516 + 'image-rendering': 'pixelated', }; return ( diff --git a/tgui/packages/tgui/components/index.js b/tgui/packages/tgui/components/index.js index 8d51f2a6d56f..8876792dc996 100644 --- a/tgui/packages/tgui/components/index.js +++ b/tgui/packages/tgui/components/index.js @@ -22,6 +22,7 @@ export { Dropdown } from './Dropdown'; export { Flex } from './Flex'; export { Grid } from './Grid'; export { Icon } from './Icon'; +export { ImageButton } from './ImageButton'; export { Input } from './Input'; export { Knob } from './Knob'; export { LabeledControls } from './LabeledControls'; diff --git a/tgui/packages/tgui/interfaces/AppearanceChanger.js b/tgui/packages/tgui/interfaces/AppearanceChanger.js index fedcce5f5408..3d1805ce5439 100644 --- a/tgui/packages/tgui/interfaces/AppearanceChanger.js +++ b/tgui/packages/tgui/interfaces/AppearanceChanger.js @@ -10,7 +10,6 @@ export const AppearanceChanger = (props, context) => { specimen, change_gender, gender, - has_gender, change_eye_color, change_skin_tone, change_skin_color, @@ -95,13 +94,13 @@ export const AppearanceChanger = (props, context) => { selected={gender === 'female'} onClick={() => act('gender', { gender: 'female' })} /> - {!has_gender && ( + {
    " dat += "

    Identity

    " - dat += "Gender: [active_character.gender == MALE ? "Male" : (active_character.gender == FEMALE ? "Female" : "Genderless")]" - dat += "
    " dat += "Age: [active_character.age]
    " dat += "Body: (®)
    " dat += "Species: [active_character.species]
    " + dat += "Gender: [active_character.gender == MALE ? "Male" : (active_character.gender == FEMALE ? "Female" : "Genderless")]
    " + dat += "Body Type: [active_character.body_type == MALE ? "Masculine" : "Feminine"]" + dat += "
    " if(active_character.species == "Vox") // Purge these bastards dat += "N2 Tank: [active_character.speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
    " if(active_character.species == "Plasmaman") diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 798700dd4352..1a057782f162 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -262,6 +262,7 @@ var/safe_from_poison = FALSE strip_delay = 20 put_on_delay = 40 + var/transfer_blood = FALSE sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/gloves.dmi', @@ -826,7 +827,7 @@ data["accessories"] = accessories_list for(var/obj/item/clothing/accessory/A in accessories) accessories_list.len++ - accessories_list[accessories_list.len] = A.serialize() + accessories_list[length(accessories_list)] = A.serialize() return data diff --git a/code/modules/clothing/gloves/boxing_gloves.dm b/code/modules/clothing/gloves/boxing_gloves.dm index 701984de0552..b7b38b1c698d 100644 --- a/code/modules/clothing/gloves/boxing_gloves.dm +++ b/code/modules/clothing/gloves/boxing_gloves.dm @@ -5,6 +5,26 @@ item_state = "boxing" put_on_delay = 60 species_exception = list(/datum/species/golem) // now you too can be a golem boxing champion + var/datum/martial_art/boxing/style + +/obj/item/clothing/gloves/boxing/Initialize() + . = ..() + style = new() + +/obj/item/clothing/gloves/boxing/equipped(mob/user, slot) + if(!ishuman(user)) + return + if(slot == SLOT_HUD_GLOVES) + var/mob/living/carbon/human/H = user + style.teach(H, TRUE) + +/obj/item/clothing/gloves/boxing/dropped(mob/user) + ..() + if(!ishuman(user)) + return + var/mob/living/carbon/human/H = user + if(H.get_item_by_slot(SLOT_HUD_GLOVES) == src) + style.remove(H) /obj/item/clothing/gloves/boxing/green icon_state = "boxinggreen" diff --git a/code/modules/clothing/head/collectable.dm b/code/modules/clothing/head/collectable.dm index 76450a01cac4..0eaff68032e2 100644 --- a/code/modules/clothing/head/collectable.dm +++ b/code/modules/clothing/head/collectable.dm @@ -13,7 +13,8 @@ /obj/item/clothing/head/collectable/slime name = "collectable slime cap!" desc = "It just latches right in place!" - icon_state = "slime" + icon_state = "headslime" + item_state = "headslime" /obj/item/clothing/head/collectable/xenom name = "collectable xenomorph helmet!" @@ -79,12 +80,6 @@ "Grey" = 'icons/mob/clothing/species/grey/helmet.dmi' ) -/obj/item/clothing/head/collectable/slime - name = "collectable slime hat" - desc = "Just like a real Brain Slug!" - icon_state = "headslime" - item_state = "headslime" - /obj/item/clothing/head/collectable/flatcap name = "collectable flat cap" desc = "A Collectable farmer's Flat Cap!" diff --git a/code/modules/clothing/head/misc_hats.dm b/code/modules/clothing/head/misc_hats.dm index f5f066b74db8..c6c0352173ee 100644 --- a/code/modules/clothing/head/misc_hats.dm +++ b/code/modules/clothing/head/misc_hats.dm @@ -126,14 +126,6 @@ "Grey" = 'icons/mob/clothing/species/grey/head.dmi' ) -/obj/item/clothing/head/that - name = "sturdy top-hat" - desc = "It's an amish looking armored top hat." - icon_state = "tophat" - item_state = "that" - flags_inv = 0 - - /obj/item/clothing/head/greenbandana name = "green bandana" desc = "It's a green bandana with some fine nanotech lining." diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index f21c1b3fbc3e..9cc9981ea288 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -75,7 +75,7 @@ var/turf/location = loc if(ismob(location)) var/mob/living/carbon/human/M = location - if(M.l_hand == src || M.r_hand == src || M.head == src) + if(M.is_holding(src) || M.head == src) location = M.loc if(isturf(location)) diff --git a/code/modules/clothing/shoes/colour.dm b/code/modules/clothing/shoes/colour.dm index f3c486f23557..6f0c5aa35158 100644 --- a/code/modules/clothing/shoes/colour.dm +++ b/code/modules/clothing/shoes/colour.dm @@ -20,6 +20,7 @@ name = "brown shoes" desc = "A pair of brown shoes." icon_state = "brown" + item_color = "brown" /obj/item/clothing/shoes/brown/captain item_color = "captain" //Exists for washing machines. Is not different from brown shoes in any way. @@ -59,11 +60,6 @@ icon_state = "purple" item_color = "purple" -/obj/item/clothing/shoes/brown - name = "brown shoes" - icon_state = "brown" - item_color = "brown" - /obj/item/clothing/shoes/red name = "red shoes" desc = "Stylish red shoes." diff --git a/code/modules/clothing/spacesuits/alien_suits.dm b/code/modules/clothing/spacesuits/alien_suits.dm index 5713d1ff5fd5..748427fd9a68 100644 --- a/code/modules/clothing/spacesuits/alien_suits.dm +++ b/code/modules/clothing/spacesuits/alien_suits.dm @@ -219,7 +219,7 @@ return var/mob/living/carbon/human/H = user if(H.shoes != src) - to_chat(user, "You will have to put on [src] before you can do that.") return flags |= NODROP //kinda hard to take off magclaws when you are gripping them tightly. to_chat(user, "You dig your claws deeply into the flooring, bracing yourself.") diff --git a/code/modules/clothing/suits/armor_suits.dm b/code/modules/clothing/suits/armor_suits.dm index 9a5dda617572..f57c9fecf167 100644 --- a/code/modules/clothing/suits/armor_suits.dm +++ b/code/modules/clothing/suits/armor_suits.dm @@ -476,7 +476,7 @@ /obj/item/clothing/suit/armor/reactive/proc/reaction_check(hitby) if(prob(hit_reaction_chance)) - if(istype(hitby, /obj/item/projectile)) + if(isprojectile(hitby)) var/obj/item/projectile/P = hitby if(istype(P, /obj/item/projectile/ion)) return FALSE diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index a25ea41f2c0d..a315bf72e3a4 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -231,7 +231,7 @@ return if(!is_station_level(user.z)) return - GLOB.global_announcer.autosay("[H] has been rewarded [src] by [user]!", "Medal Announcer", channel = channel, follow_target_override = src) + GLOB.global_announcer.autosay("[H] has been rewarded [src] by [user]!", "Medal Announcer", channel, src) channel = null // GOLD (awarded by centcom) @@ -819,10 +819,10 @@ item_color = "corset_blue" /proc/english_accessory_list(obj/item/clothing/under/U) - if(!istype(U) || !U.accessories.len) + if(!istype(U) || !length(U.accessories)) return var/list/A = U.accessories - var/total = A.len + var/total = length(A) if(total == 1) return "\a [A[1]]" else if(total == 2) diff --git a/code/modules/clothing/under/accessories/holster.dm b/code/modules/clothing/under/accessories/holster.dm index ac798acda905..e31e66f186a2 100644 --- a/code/modules/clothing/under/accessories/holster.dm +++ b/code/modules/clothing/under/accessories/holster.dm @@ -36,7 +36,7 @@ to_chat(user, "There is already a [holstered] holstered here!") return - if(!istype(I, /obj/item/gun)) + if(!isgun(I)) to_chat(user, "Only guns can be holstered!") return diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm index 64e4fd9c6ad9..e5a6769e3084 100644 --- a/code/modules/clothing/under/color.dm +++ b/code/modules/clothing/under/color.dm @@ -146,11 +146,6 @@ icon_state = "lightgreen" item_color = "lightgreen" -/obj/item/clothing/under/color/lightblue - name = "light blue jumpsuit" - icon_state = "lightblue" - item_color = "lightblue" - /obj/item/clothing/under/color/lightbrown name = "light brown jumpsuit" icon_state = "lightbrown" diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index a520f476bc87..86a001c8bcd1 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -108,7 +108,7 @@ .["toolsother"][I] += 1 /datum/personal_crafting/proc/check_tools(mob/user, datum/crafting_recipe/R, list/contents) - if(!R.tools.len) //does not run if no tools are needed + if(!length(R.tools)) //does not run if no tools are needed return TRUE var/list/possible_tools = list() var/list/tools_used = list() @@ -134,7 +134,7 @@ return TRUE /datum/personal_crafting/proc/check_pathtools(mob/user, datum/crafting_recipe/R, list/contents) - if(!R.pathtools.len) //does not run if no tools are needed + if(!length(R.pathtools)) //does not run if no tools are needed return TRUE var/list/other_possible_tools = list() for(var/obj/item/I in user.contents) // searchs the inventory of the mob @@ -385,34 +385,34 @@ /datum/personal_crafting/proc/next_cat(readonly = TRUE) if(!readonly) viewing_subcategory = 1 - . = viewing_category % categories.len + 1 + . = viewing_category % length(categories) + 1 /datum/personal_crafting/proc/next_subcat() if(islist(subcategories[viewing_category])) var/list/subs = subcategories[viewing_category] - . = viewing_subcategory % subs.len + 1 + . = viewing_subcategory % length(subs) + 1 //Previous can go fuck itself /datum/personal_crafting/proc/prev_cat(readonly = TRUE) if(!readonly) viewing_subcategory = 1 - if(viewing_category == categories.len) + if(viewing_category == length(categories)) . = viewing_category-1 else - . = viewing_category % categories.len - 1 + . = viewing_category % length(categories) - 1 if(. <= 0) - . = categories.len + . = length(categories) /datum/personal_crafting/proc/prev_subcat() if(islist(subcategories[viewing_category])) var/list/subs = subcategories[viewing_category] - if(viewing_subcategory == subs.len) + if(viewing_subcategory == length(subs)) . = viewing_subcategory-1 else - . = viewing_subcategory % subs.len - 1 + . = viewing_subcategory % length(subs) - 1 if(. <= 0) - . = subs.len + . = length(subs) else . = null diff --git a/code/modules/detective_work/evidence.dm b/code/modules/detective_work/evidence.dm index 104e1130d23e..a8b7d0478251 100644 --- a/code/modules/detective_work/evidence.dm +++ b/code/modules/detective_work/evidence.dm @@ -33,7 +33,7 @@ to_chat(user, "[I] won't fit in [src].") return - if(contents.len) + if(length(contents)) to_chat(user, "[src] already has something inside it.") return @@ -66,7 +66,7 @@ return 1 /obj/item/evidencebag/attack_self(mob/user) - if(contents.len) + if(length(contents)) var/obj/item/I = contents[1] user.visible_message("[user] takes [I] out of [src].", "You take [I] out of [src].",\ "You hear someone rustle around in a plastic bag, and remove something.") diff --git a/code/modules/detective_work/footprints_and_rag.dm b/code/modules/detective_work/footprints_and_rag.dm index 282efb696d99..468eb94e3221 100644 --- a/code/modules/detective_work/footprints_and_rag.dm +++ b/code/modules/detective_work/footprints_and_rag.dm @@ -1,6 +1,3 @@ -/obj/item/clothing/gloves - var/transfer_blood = 0 - /obj/item/reagent_containers/glass/rag name = "damp rag" desc = "For cleaning up messes, you suppose." diff --git a/code/modules/economy/economy_events/economy_events.dm b/code/modules/economy/economy_events/economy_events.dm index b8f37e99fc97..63a65958c1dd 100644 --- a/code/modules/economy/economy_events/economy_events.dm +++ b/code/modules/economy/economy_events/economy_events.dm @@ -8,7 +8,7 @@ /datum/event/economic_event/start() affected_dest = pickweight(GLOB.weighted_randomevent_locations) - if(affected_dest.viable_random_events.len) + if(length(affected_dest.viable_random_events)) endWhen = rand(60,300) event_type = pick(affected_dest.viable_random_events) diff --git a/code/modules/economy/economy_events/economy_events_mundane.dm b/code/modules/economy/economy_events/economy_events_mundane.dm index f9974c1ca29c..4085f1c4e6cc 100644 --- a/code/modules/economy/economy_events/economy_events_mundane.dm +++ b/code/modules/economy/economy_events/economy_events_mundane.dm @@ -5,7 +5,7 @@ /datum/event/mundane_news/announce() var/datum/trade_destination/affected_dest = pickweight(GLOB.weighted_mundaneevent_locations) var/event_type = 0 - if(affected_dest.viable_mundane_events.len) + if(length(affected_dest.viable_mundane_events)) event_type = pick(affected_dest.viable_mundane_events) if(!event_type) diff --git a/code/modules/economy/money_account.dm b/code/modules/economy/money_account.dm index 4ce226fff006..2202838ac06c 100644 --- a/code/modules/economy/money_account.dm +++ b/code/modules/economy/money_account.dm @@ -27,7 +27,7 @@ var/suspended = FALSE ///Type of account this is var/account_type = ACCOUNT_TYPE_PERSONAL - ///the amount this account recieves every payday + ///the amount this account receives every payday var/payday_amount = CREW_BASE_PAY_LOW ///The nanobank programs associated with this account, used for notifying crew members through PDA, this is a lazy list diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index 2ecb9e20e863..475610825f3d 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -99,7 +99,7 @@ GLOBAL_VAR_INIT(total_runtimes_skipped, 0) // I apologize in advance var/list/splitlines = splittext(e.desc, "\n") var/list/desclines = list() - if(splitlines.len > 2) // If there aren't at least three lines, there's no info + if(length(splitlines) > 2) // If there aren't at least three lines, there's no info for(var/line in splitlines) if(length(line) < 3) continue // Blank line, skip it diff --git a/code/modules/events/abductor_event.dm b/code/modules/events/abductor_event.dm index 0557f3f131f4..aef93f7ef789 100644 --- a/code/modules/events/abductor_event.dm +++ b/code/modules/events/abductor_event.dm @@ -11,7 +11,7 @@ /datum/event/abductor/proc/makeAbductorTeam() var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you wish to be considered for an Abductor Team?", ROLE_ABDUCTOR, TRUE) - if(candidates.len >= 2) + if(length(candidates) >= 2) //Oh god why we can't have static functions var/number = SSticker.mode.abductor_teams + 1 diff --git a/code/modules/events/blob/blob_powers.dm b/code/modules/events/blob/blob_powers.dm index b5e8492a3a82..d8bf6e3765e3 100644 --- a/code/modules/events/blob/blob_powers.dm +++ b/code/modules/events/blob/blob_powers.dm @@ -22,9 +22,9 @@ set name = "Jump to Node" set desc = "Transport back to a selected node." - if(GLOB.blob_nodes.len) + if(length(GLOB.blob_nodes)) var/list/nodes = list() - for(var/i = 1; i <= GLOB.blob_nodes.len; i++) + for(var/i = 1; i <= length(GLOB.blob_nodes); i++) var/obj/structure/blob/node/B = GLOB.blob_nodes[i] nodes["Blob Node #[i] ([get_location_name(B)])"] = B var/node_name = tgui_input_list(src, "Choose a node to jump to.", "Node Jump", nodes) @@ -362,7 +362,7 @@ to_chat(src, "You rally your spores.") var/list/surrounding_turfs = block(locate(T.x - 1, T.y - 1, T.z), locate(T.x + 1, T.y + 1, T.z)) - if(!surrounding_turfs.len) + if(!length(surrounding_turfs)) return for(var/mob/living/simple_animal/hostile/blob/blobspore/BS in GLOB.alive_mob_list) diff --git a/code/modules/events/blob/blob_structures/factory.dm b/code/modules/events/blob/blob_structures/factory.dm index 8f5930fb2d2f..6bbf5d34f59c 100644 --- a/code/modules/events/blob/blob_structures/factory.dm +++ b/code/modules/events/blob/blob_structures/factory.dm @@ -16,7 +16,7 @@ return ..() /obj/structure/blob/factory/run_action() - if(spores.len >= max_spores) + if(length(spores) >= max_spores) return if(spore_delay > world.time) return diff --git a/code/modules/events/blob/theblob.dm b/code/modules/events/blob/theblob.dm index bc06566df54d..727eb3354ca8 100644 --- a/code/modules/events/blob/theblob.dm +++ b/code/modules/events/blob/theblob.dm @@ -70,6 +70,11 @@ GLOBAL_LIST_EMPTY(blob_minions) /obj/structure/blob/blob_act(obj/structure/blob/B) return +/obj/structure/blob/bullet_act(obj/item/projectile/P) + if(istype(P, /obj/item/projectile/kinetic)) + P.damage /= 2 + return ..() + /obj/structure/blob/proc/Life() return @@ -114,7 +119,7 @@ GLOBAL_LIST_EMPTY(blob_minions) var/list/dirs = list(1,2,4,8) dirs.Remove(origin_dir)//Dont pulse the guy who pulsed us for(var/i = 1 to 4) - if(!dirs.len) break + if(!length(dirs)) break var/dirn = pick(dirs) dirs.Remove(dirn) var/turf/T = get_step(src, dirn) diff --git a/code/modules/events/blob_spawn.dm b/code/modules/events/blob_spawn.dm index 544d9ac1e96a..1fbc9a4a0b94 100644 --- a/code/modules/events/blob_spawn.dm +++ b/code/modules/events/blob_spawn.dm @@ -5,7 +5,7 @@ /datum/event/blob/announce(false_alarm) if(successSpawn || false_alarm) - GLOB.major_announcement.Announce("Unknown biological growth detected aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak_blob.ogg') + GLOB.major_announcement.Announce("Unknown biological growth detected aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/effects/siren-spooky.ogg', new_sound2 = 'sound/AI/outbreak_blob.ogg') else log_and_message_admins("Warning: Could not spawn any mobs for event Blob") diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index c38d2c2e25c7..d63270785c6d 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -21,7 +21,7 @@ /datum/event/carp_migration/start() if(severity == EVENT_LEVEL_MAJOR) - spawn_fish(GLOB.landmarks_list.len) + spawn_fish(length(GLOB.landmarks_list)) else if(severity == EVENT_LEVEL_MODERATE) spawn_fish(rand(4, 6)) //12 to 30 carp, in small groups else @@ -33,7 +33,7 @@ for(var/thing in GLOB.carplist) spawn_locations.Add(get_turf(thing)) spawn_locations = shuffle(spawn_locations) - num_groups = min(num_groups, spawn_locations.len) + num_groups = min(num_groups, length(spawn_locations)) var/i = 1 while(i <= num_groups) diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index f9f61e7232bb..8eba69e98021 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -13,12 +13,12 @@ for(var/obj/effect/landmark/lightsout/newEpicentre in GLOB.landmarks_list) if(!(newEpicentre in epicentreList)) possibleEpicentres += newEpicentre - if(possibleEpicentres.len) + if(length(possibleEpicentres)) epicentreList += pick(possibleEpicentres) else break - if(!epicentreList.len) + if(!length(epicentreList)) return for(var/thing in epicentreList) diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index f2490d10c329..250a60891305 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -58,7 +58,7 @@ GLOBAL_LIST_EMPTY(event_last_fired) /datum/event_container/proc/acquire_event() - if(available_events.len == 0) + if(length(available_events) == 0) return var/active_with_role = number_active_with_role() @@ -79,7 +79,7 @@ GLOBAL_LIST_EMPTY(event_last_fired) else possible_events -= event_meta - if(possible_events.len == 0) + if(length(possible_events) == 0) return null // Select an event and remove it from the pool of available events @@ -97,7 +97,7 @@ GLOBAL_LIST_EMPTY(event_last_fired) // Otherwise, follow the standard setup process else var/playercount_modifier = 1 - switch(GLOB.player_list.len) + switch(length(GLOB.player_list)) if(0 to 10) playercount_modifier = 1.2 if(11 to 15) diff --git a/code/modules/events/event_procs.dm b/code/modules/events/event_procs.dm index c5ded25b5f04..d0af4971ec24 100644 --- a/code/modules/events/event_procs.dm +++ b/code/modules/events/event_procs.dm @@ -64,7 +64,7 @@ active_with_role["Cyborg"] = 0 active_with_role["Janitor"] = 0 active_with_role["Botanist"] = 0 - active_with_role["Any"] = GLOB.player_list.len + active_with_role["Any"] = length(GLOB.player_list) for(var/mob/M in GLOB.player_list) if(!M.mind || !M.client || M.client.inactivity > 10 * 10 * 60) // longer than 10 minutes AFK counts them as inactive diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index 130e1410b520..a7e3a48439ba 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -502,7 +502,7 @@ continue players += player.real_name var/random_player = "The Captain" - if(players.len) + if(length(players)) random_player = pick(players) //Random player's name, to be used in laws. var/random_department = "Science" diff --git a/code/modules/events/money_spam.dm b/code/modules/events/money_spam.dm index e9f398377e37..c6988e164718 100644 --- a/code/modules/events/money_spam.dm +++ b/code/modules/events/money_spam.dm @@ -35,7 +35,7 @@ continue viables.Add(check_pda) - if(!viables.len) + if(!length(viables)) return var/obj/item/pda/P = pick(viables) var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) @@ -78,6 +78,7 @@ "We are happy to inform you that due to the delay, we have been instructed to IMMEDIATELY deposit all funds into your account",\ "Dear fund beneficiary, We have please to inform you that overdue funds payment has finally been approved and released for payment",\ "Due to my lack of agents I require an off-world financial account to immediately deposit the sum of 1 POINT FIVE MILLION credits.",\ + // Intentional errors here, please do not fix. "Greetings sir, I regretfully to inform you that as I lay dying here due to my lack ofheirs I have chosen you to recieve the full sum of my lifetime savings of 1.5 billion credits") if(6) sender = pick("Nanotrasen Morale Divison","Feeling Lonely?","Bored?","www.wetskrell.nt") diff --git a/code/modules/events/prison_break.dm b/code/modules/events/prison_break.dm index a31683fe1f8a..637dd3a254c4 100644 --- a/code/modules/events/prison_break.dm +++ b/code/modules/events/prison_break.dm @@ -44,7 +44,7 @@ if(is_type_in_list(A,areaType) && !is_type_in_list(A,areaNotType)) areas += A - if(areas && areas.len > 0) + if(areas && length(areas) > 0) var/my_department = "[station_name()] firewall subroutines" var/rc_message = "An unknown malicious program has been detected in the [english_list(areaName)] lighting and airlock control systems at [station_time_timestamp()]. Systems will be fully compromised within approximately three minutes. Direct intervention is required immediately.
    " for(var/obj/machinery/message_server/MS in GLOB.machines) @@ -58,7 +58,7 @@ /datum/event/prison_break/tick() if(activeFor == releaseWhen) - if(areas && areas.len > 0) + if(areas && length(areas) > 0) for(var/area/A in areas) for(var/obj/machinery/light/L in A) L.forced_flicker(10) diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index 281a085dfe16..c4fe2d406503 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -38,7 +38,7 @@ qdel(D) num_recovered++ - if(num_recovered > drones_list.len * 0.75) + if(num_recovered > length(drones_list) * 0.75) GLOB.minor_announcement.Announce("Icarus drone control reports the malfunctioning wing has been recovered safely.", "Rogue drone alert") else GLOB.minor_announcement.Announce("Icarus drone control registers disappointment at the loss of the drones, but the survivors have been recovered.", "Rogue drone alert") diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index b8403cef9c39..94c5f21a236e 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -10,12 +10,12 @@ qdel(SV) - if(turfs.len) //Pick a turf to spawn at if we can + if(length(turfs)) //Pick a turf to spawn at if we can var/turf/T = pick(turfs) var/obj/structure/spacevine_controller/SC = new /obj/structure/spacevine_controller(T, null, rand(30,70),rand(5,2)) //spawn a controller at turf // Make the event start fun - give the vine a random hostile mutation - if(SC.vines.len) + if(length(SC.vines)) SV = SC.vines[1] var/list/mutations = subtypesof(/datum/spacevine_mutation) while(mutations) @@ -429,7 +429,7 @@ if(master) master.vines -= src master.growth_queue -= src - if(!master.vines.len) + if(!length(master.vines)) var/obj/item/seeds/kudzu/KZ = new(loc) for(var/mutation in mutations) KZ.mutations += mutation @@ -591,7 +591,7 @@ SM.on_birth(SV) /obj/structure/spacevine_controller/process() - if(!vines || !vines.len) + if(!vines || !length(vines)) qdel(src) //space vines exterminated. Remove the controller return if(!growth_queue) @@ -600,7 +600,7 @@ var/length = 0 - length = min( spread_cap , max( 1 , vines.len / spread_multiplier ) ) + length = min( spread_cap , max( 1 , length(vines) / spread_multiplier ) ) var/i = 0 var/list/obj/structure/spacevine/queue_end = list() @@ -663,7 +663,7 @@ for(var/SM_type in mutations) var/datum/spacevine_mutation/SM = mutations[SM_type] spread_search |= SM.on_search(src) - while(dir_list.len) + while(length(dir_list)) var/direction = pick(dir_list) dir_list -= direction var/turf/stepturf = get_step(src,direction) diff --git a/code/modules/events/traders.dm b/code/modules/events/traders.dm index 384978c872f5..3b1427bed87c 100644 --- a/code/modules/events/traders.dm +++ b/code/modules/events/traders.dm @@ -10,7 +10,7 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) var/list/trader_objectives = list() /datum/event/traders/setup() - if(GLOB.unused_trade_stations.len) + if(length(GLOB.unused_trade_stations)) station = pick_n_take(GLOB.unused_trade_stations) /datum/event/traders/fake_announce() @@ -34,7 +34,7 @@ GLOBAL_LIST_INIT(unused_trade_stations, list("sol")) var/list/spawnlocs = list() for(var/obj/effect/landmark/spawner/soltrader/S in GLOB.landmarks_list) spawnlocs += get_turf(S) - if(!spawnlocs.len) + if(!length(spawnlocs)) return trader_objectives = forge_trader_objectives() diff --git a/code/modules/events/undead_event.dm b/code/modules/events/undead_event.dm index 4685cefffce1..3b79018b9c05 100644 --- a/code/modules/events/undead_event.dm +++ b/code/modules/events/undead_event.dm @@ -25,9 +25,9 @@ if(okay) turflist += T - if(!turflist.len) continue - var/turfs = round(turflist.len * spawn_prob/100,1) - while(turfs > 0 && turflist.len) // safety + if(!length(turflist)) continue + var/turfs = round(length(turflist) * spawn_prob/100,1) + while(turfs > 0 && length(turflist)) // safety turfs-- var/turf/T = pick_n_take(turflist) var/undeadtype = pick(/mob/living/simple_animal/hostile/retaliate/skeleton, diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index 2bacfbac9646..793f0c83b632 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -12,7 +12,7 @@ endWhen = rand(25, 100) for(var/obj/machinery/atmospherics/unary/vent_scrubber/temp_vent in GLOB.machines) if(is_station_level(temp_vent.loc.z)) - if(temp_vent.parent.other_atmosmch.len > 50) + if(length(temp_vent.parent.other_atmosmch) > 50) vents += temp_vent /datum/event/vent_clog/tick() diff --git a/code/modules/events/wormholes.dm b/code/modules/events/wormholes.dm index 9bb4b88ae1c1..855989a13a16 100644 --- a/code/modules/events/wormholes.dm +++ b/code/modules/events/wormholes.dm @@ -52,7 +52,7 @@ return FALSE var/turf/target - if(GLOB.portals.len) + if(length(GLOB.portals)) var/obj/effect/portal/P = pick(GLOB.portals) if(P && isturf(P.loc)) target = P.loc diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm index a5aaa9280cda..f2b392d091d1 100644 --- a/code/modules/flufftext/Dreaming.dm +++ b/code/modules/flufftext/Dreaming.dm @@ -10,14 +10,14 @@ for(var/i in 1 to rand(3, rand(5, 10))) dream_images += pick_n_take(dreams) dreaming++ - for(var/i in 1 to dream_images.len) + for(var/i in 1 to length(dream_images)) addtimer(CALLBACK(src, PROC_REF(experience_dream), dream_images[i], FALSE), ((i - 1) * rand(30,60))) return TRUE /mob/living/carbon/proc/custom_dreams(list/dreamlist, mob/user) var/list/newlist = dreamlist.Copy() - for(var/i in 1 to newlist.len) + for(var/i in 1 to length(newlist)) newlist[i] = replacetext(newlist[i], "DREAMER", "[user.name]") return newlist @@ -32,7 +32,7 @@ for(var/i in 1 to rand(3, rand(5, 10))) dream_images += pick_n_take(nightmares) nightmare++ - for(var/i in 1 to dream_images.len) + for(var/i in 1 to length(dream_images)) addtimer(CALLBACK(src, PROC_REF(experience_dream), dream_images[i], TRUE), ((i - 1) * rand(30,60))) return TRUE diff --git a/code/modules/food_and_drinks/drinks/bottler/bottler.dm b/code/modules/food_and_drinks/drinks/bottler/bottler.dm index 4baba043cf16..d9c7654729ba 100644 --- a/code/modules/food_and_drinks/drinks/bottler/bottler.dm +++ b/code/modules/food_and_drinks/drinks/bottler/bottler.dm @@ -35,7 +35,7 @@ var/datum/bottler_recipe/recipe = new type if(recipe.result) // Ignore recipe subtypes that lack a result available_recipes += recipe - for(var/i = 1, i <= recipe.ingredients.len, i++) + for(var/i = 1, i <= length(recipe.ingredients), i++) acceptable_items |= recipe.ingredients[i] else qdel(recipe) @@ -95,7 +95,7 @@ to_chat(user, "[src] is full, please remove or process the contents first.") return var/slot_inserted = 0 - for(var/i = 1, i <= slots.len, i++) + for(var/i = 1, i <= length(slots), i++) if(!slots[i]) slots[i] = O slot_inserted = i @@ -111,7 +111,7 @@ /obj/machinery/bottler/proc/eject_items(slot) var/obj/item/O = null if(!slot) - for(var/i = 1, i <= slots.len, i++) + for(var/i = 1, i <= length(slots), i++) if(slots[i]) O = slots[i] O.forceMove(loc) @@ -205,7 +205,7 @@ /obj/machinery/bottler/proc/select_recipe() for(var/datum/bottler_recipe/recipe in available_recipes) var/number_matches = 0 - for(var/i = 1, i <= slots.len, i++) + for(var/i = 1, i <= length(slots), i++) var/obj/item/O = slots[i] if(istype(O, recipe.ingredients[i])) number_matches++ @@ -335,7 +335,7 @@ dat += "
    [bicon(O)]
    [O.name]
    Eject