From 5d29bf4c4a89dcaa7789a96e6a5d2dbea2fe571c Mon Sep 17 00:00:00 2001
From: zzzmike <85382350+zzzmike@users.noreply.github.com>
Date: Wed, 3 Jul 2024 10:20:10 -0700
Subject: [PATCH 01/20] Clarity for facehugger/drone text (#6577)
# About the pull request
A small change to make my other PR clear that the hive can support for
example "3 total facehuggers" and not "3 more facehuggers" - and changed
lesser drone text for parity
# Explain why it's good for the game
clarity
# Testing Photographs and Procedure
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the `` tags.
# Changelog
:cl:
spellcheck: more clarity for facehugger/lesser drone text
/:cl:
---------
Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
---
code/modules/cm_aliens/structures/egg.dm | 2 +-
code/modules/cm_aliens/structures/special/egg_morpher.dm | 2 +-
code/modules/cm_aliens/structures/special/pylon_core.dm | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/code/modules/cm_aliens/structures/egg.dm b/code/modules/cm_aliens/structures/egg.dm
index 4e22f1b5e6ba..9825389c8ac4 100644
--- a/code/modules/cm_aliens/structures/egg.dm
+++ b/code/modules/cm_aliens/structures/egg.dm
@@ -58,7 +58,7 @@
if(isobserver(user) && status == EGG_GROWN)
var/datum/hive_status/hive = GLOB.hive_datum[hivenumber]
var/current_hugger_count = hive.get_current_playable_facehugger_count();
- . += "There are currently [SPAN_NOTICE("[current_hugger_count]")] facehuggers in the hive. The hive can support [SPAN_NOTICE("[hive.playable_hugger_limit]")] facehuggers."
+ . += "There are currently [SPAN_NOTICE("[current_hugger_count]")] facehuggers in the hive. The hive can support a total of [SPAN_NOTICE("[hive.playable_hugger_limit]")] facehuggers at present."
/obj/effect/alien/egg/attack_alien(mob/living/carbon/xenomorph/M)
if(status == EGG_BURST || status == EGG_DESTROYED)
diff --git a/code/modules/cm_aliens/structures/special/egg_morpher.dm b/code/modules/cm_aliens/structures/special/egg_morpher.dm
index 32cf0ee591b5..c4fb5c0a900c 100644
--- a/code/modules/cm_aliens/structures/special/egg_morpher.dm
+++ b/code/modules/cm_aliens/structures/special/egg_morpher.dm
@@ -46,7 +46,7 @@
. += "It has [stored_huggers] facehuggers within, with [huggers_to_grow] more to grow (reserved: [huggers_reserved])."
if(isobserver(user))
var/current_hugger_count = linked_hive.get_current_playable_facehugger_count();
- . += "There are currently [SPAN_NOTICE("[current_hugger_count]")] facehuggers in the hive. The hive can support [SPAN_NOTICE("[linked_hive.playable_hugger_limit]")] facehuggers."
+ . += "There are currently [SPAN_NOTICE("[current_hugger_count]")] facehuggers in the hive. The hive can support a total of [SPAN_NOTICE("[linked_hive.playable_hugger_limit]")] facehuggers at present."
/obj/effect/alien/resin/special/eggmorph/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/grab))
diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm
index ae3be4d55bef..71211d67e23c 100644
--- a/code/modules/cm_aliens/structures/special/pylon_core.dm
+++ b/code/modules/cm_aliens/structures/special/pylon_core.dm
@@ -70,7 +70,7 @@
lesser_count++
. += "Currently holding [SPAN_NOTICE("[floor(lesser_drone_spawns)]")]/[SPAN_NOTICE("[lesser_drone_spawn_limit]")] lesser drones."
- . += "There are currently [SPAN_NOTICE("[lesser_count]")] lesser drones in the hive. The hive can support [SPAN_NOTICE("[linked_hive.lesser_drone_limit]")] lesser drones."
+ . += "There are currently [SPAN_NOTICE("[lesser_count]")] lesser drones in the hive. The hive can support a total of [SPAN_NOTICE("[linked_hive.lesser_drone_limit]")] lesser drones at present."
/obj/effect/alien/resin/special/pylon/attack_ghost(mob/dead/observer/user)
. = ..()
From 524c9dbd18e9334cb5108feceb95c0b7aab57486 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Wed, 3 Jul 2024 18:27:07 +0100
Subject: [PATCH 02/20] Automatic changelog for PR #6577 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6577.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6577.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6577.yml b/html/changelogs/AutoChangeLog-pr-6577.yml
new file mode 100644
index 000000000000..0a632cde43b2
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6577.yml
@@ -0,0 +1,4 @@
+author: "zzzmike"
+delete-after: True
+changes:
+ - spellcheck: "more clarity for facehugger/lesser drone text"
\ No newline at end of file
From 41dcf116f6cc7d048a412784d7f2e6f19d84e17e Mon Sep 17 00:00:00 2001
From: Doubleumc
Date: Wed, 3 Jul 2024 13:21:04 -0400
Subject: [PATCH 03/20] In-view verbs work for varying view ranges (#6591)
# About the pull request
Admin "InView" procs now take the user's current view range into
account. If you zoom out as a ghost, it will use your current view size
as you'd expect.
Where possible, admin and observer procs use a global list check instead
of a view check. This prevents an issue where a right-clicked subject
moves out of view before you can click on the menu option, which causes
the option to fail and fill your command bar with some useless text.
Does *not* take view offsets into account, e.g. binoculars shifting
`client.pixel_x` & `client.pixel_y`
# Explain why it's good for the game
Procs billed as "in-view" should work based on your current view range.
Right-click actions without a specific range cap should work on anything
in your view range.
# Testing Photographs and Procedure
Each proc continues to work as expected, just with more lenient ranging
rules.
# Changelog
:cl:
qol: ghost health scan & follow right-click actions work at any range
admin: "InView" procs use your current view range (e.g. ghost zoom)
/:cl:
---
code/modules/admin/callproc.dm | 2 +-
code/modules/admin/tabs/admin_tab.dm | 10 +++++-----
code/modules/admin/verbs/freeforghosts.dm | 2 +-
code/modules/admin/verbs/mob_verbs.dm | 8 ++++----
code/modules/admin/verbs/select_equipment.dm | 2 +-
code/modules/mob/dead/observer/observer.dm | 4 ++--
code/modules/mob/mob_helpers.dm | 2 +-
7 files changed, 15 insertions(+), 15 deletions(-)
diff --git a/code/modules/admin/callproc.dm b/code/modules/admin/callproc.dm
index 1af1f5aa9fa3..36ed859a210f 100644
--- a/code/modules/admin/callproc.dm
+++ b/code/modules/admin/callproc.dm
@@ -230,7 +230,7 @@ GLOBAL_PROTECT(LastAdminCalledProc)
to_chat(usr, SPAN_BOLDWARNING("Warning: Force attempt has been logged."))
message_admins("[key_name(usr)] has attempted to execute a restricted proc. ([procname])")
-/client/proc/callproc_datum(datum/called_datum as null|area|mob|obj|turf)
+/client/proc/callproc_datum(datum/called_datum as null|area|mob|obj|turf in view(src))
set category = "Debug"
set name = "Datum ProcCall"
set waitfor = FALSE
diff --git a/code/modules/admin/tabs/admin_tab.dm b/code/modules/admin/tabs/admin_tab.dm
index f29f99004625..5f3bc220876c 100644
--- a/code/modules/admin/tabs/admin_tab.dm
+++ b/code/modules/admin/tabs/admin_tab.dm
@@ -435,7 +435,7 @@
if(tgui_alert(src, "Do you want to strip yourself as well?", "Confirmation", list("Yes", "No")) == "Yes")
strip_self = TRUE
- for(var/mob/living/current_mob in view())
+ for(var/mob/living/current_mob in view(src))
if(!strip_self && usr == current_mob)
continue
for (var/obj/item/current_item in current_mob)
@@ -458,7 +458,7 @@
if(alert("This will rejuvenate ALL mobs within your view range. Are you sure?",,"Yes","Cancel") == "Cancel")
return
- for(var/mob/living/M in view())
+ for(var/mob/living/M in view(src))
M.rejuvenate(FALSE)
message_admins(WRAP_STAFF_LOG(usr, "ahealed everyone in [get_area(usr)] ([usr.x],[usr.y],[usr.z])."), usr.x, usr.y, usr.z)
@@ -476,7 +476,7 @@
if(alert("This will rejuvenate ALL humans within your view range. Are you sure?",,"Yes","Cancel") == "Cancel")
return
- for(var/mob/living/carbon/human/M in view())
+ for(var/mob/living/carbon/human/M in view(src))
M.rejuvenate(FALSE)
message_admins(WRAP_STAFF_LOG(usr, "ahealed all humans in [get_area(usr)] ([usr.x],[usr.y],[usr.z])"), usr.x, usr.y, usr.z)
@@ -493,7 +493,7 @@
if(alert("This will rejuvenate ALL revivable humans within your view range. Are you sure?",,"Yes","Cancel") == "Cancel")
return
- for(var/mob/living/carbon/human/M in view())
+ for(var/mob/living/carbon/human/M in view(src))
if(!ishuman_strict(M) && !ishumansynth_strict(M))
continue
@@ -519,7 +519,7 @@
if(alert("This will rejuvenate ALL xenos within your view range. Are you sure?",,"Yes","Cancel") == "Cancel")
return
- for(var/mob/living/carbon/xenomorph/X in view())
+ for(var/mob/living/carbon/xenomorph/X in view(src))
X.rejuvenate(FALSE)
message_admins(WRAP_STAFF_LOG(usr, "ahealed all xenos in [get_area(usr)] ([usr.x],[usr.y],[usr.z])"), usr.x, usr.y, usr.z)
diff --git a/code/modules/admin/verbs/freeforghosts.dm b/code/modules/admin/verbs/freeforghosts.dm
index 4bf5549f30f0..b5e43bbb8793 100644
--- a/code/modules/admin/verbs/freeforghosts.dm
+++ b/code/modules/admin/verbs/freeforghosts.dm
@@ -38,7 +38,7 @@
if(alert("This will free ALL mobs within your view range. Are you sure?",,"Yes","Cancel") == "Cancel")
return
- for(var/mob/living/M in view())
+ for(var/mob/living/M in view(src))
free_for_ghosts(M, notify = FALSE)
message_admins(WRAP_STAFF_LOG(usr, "freed all mobs in [get_area(usr)] ([usr.x],[usr.y],[usr.z])"), usr.x, usr.y, usr.z)
diff --git a/code/modules/admin/verbs/mob_verbs.dm b/code/modules/admin/verbs/mob_verbs.dm
index 3b4de192e78f..7a1dab7c7cf3 100644
--- a/code/modules/admin/verbs/mob_verbs.dm
+++ b/code/modules/admin/verbs/mob_verbs.dm
@@ -203,7 +203,7 @@
else
return
-/client/proc/cmd_admin_object_narrate(obj/selected)
+/client/proc/cmd_admin_object_narrate(obj/selected in view(src))
set name = "Object Narrate"
set category = null
@@ -234,7 +234,7 @@
log_admin("[key_name(src)] sent an Object Narrate with message [message].")
message_admins("[key_name(src)] sent an Object Narrate with message [message].")
-/client/proc/cmd_admin_direct_narrate(mob/M)
+/client/proc/cmd_admin_direct_narrate(mob/M in GLOB.mob_list)
set name = "Narrate"
set category = null
@@ -330,7 +330,7 @@
message_admins("[key_name_admin(usr)] made [key_name_admin(M)] drop everything!")
-/client/proc/cmd_admin_change_their_hivenumber(mob/living/carbon/H)
+/client/proc/cmd_admin_change_their_hivenumber(mob/living/carbon/H in GLOB.living_mob_list)
set name = "Change Hivenumber"
set category = null
@@ -370,7 +370,7 @@
message_admins("[key_name(src)] changed hivenumber of [H] to [H.hivenumber].")
-/client/proc/cmd_admin_change_their_name(mob/living/carbon/carbon)
+/client/proc/cmd_admin_change_their_name(mob/living/carbon/carbon in GLOB.living_mob_list)
set name = "Change Name"
set category = null
diff --git a/code/modules/admin/verbs/select_equipment.dm b/code/modules/admin/verbs/select_equipment.dm
index 90269f70c1aa..196079fe4739 100644
--- a/code/modules/admin/verbs/select_equipment.dm
+++ b/code/modules/admin/verbs/select_equipment.dm
@@ -98,7 +98,7 @@
var/datum/job/J = GLOB.RoleAuthority.roles_by_name[newskillset]
H.set_skills(J.get_skills())
-/client/proc/cmd_admin_dress(mob/M)
+/client/proc/cmd_admin_dress(mob/M in GLOB.mob_list)
set category = null
set name = "Select Equipment"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 0ea2b3856da1..1112247380dd 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -662,7 +662,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
usr.forceMove(pick(L))
following = null
-/mob/dead/observer/proc/scan_health(mob/living/target in view(src.client))
+/mob/dead/observer/proc/scan_health(mob/living/target in GLOB.living_mob_list)
set name = "Scan Health"
if(!istype(target))
@@ -695,7 +695,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
last_health_display.target_mob = target
last_health_display.look_at(src, DETAIL_LEVEL_FULL, bypass_checks = TRUE)
-/mob/dead/observer/verb/follow_local(mob/target)
+/mob/dead/observer/verb/follow_local(mob/target in GLOB.mob_list)
set category = "Ghost.Follow"
set name = "Follow Local Mob"
set desc = "Follow on-screen mob"
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 8c41e1149f35..76841c2097c9 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -484,7 +484,7 @@ GLOBAL_LIST_INIT(limb_types_by_name, list(
* [this byond forum post](https://secure.byond.com/forum/?post=1326139&page=2#comment8198716)
* for why this isn't atom/verb/examine()
*/
-/mob/verb/examinate(atom/examinify as mob|obj|turf in view())
+/mob/verb/examinate(atom/examinify as mob|obj|turf in view(client))
set name = "Examine"
set category = "IC"
From 39ac3938c17c975696d662176ad069bb51deca52 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Wed, 3 Jul 2024 18:34:16 +0100
Subject: [PATCH 04/20] Automatic changelog for PR #6591 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6591.yml | 5 +++++
1 file changed, 5 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6591.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6591.yml b/html/changelogs/AutoChangeLog-pr-6591.yml
new file mode 100644
index 000000000000..1cab75dbe648
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6591.yml
@@ -0,0 +1,5 @@
+author: "Doubleumc"
+delete-after: True
+changes:
+ - qol: "ghost health scan & follow right-click actions work at any range"
+ - admin: "\"InView\" procs use your current view range (e.g. ghost zoom)"
\ No newline at end of file
From a0e93b9a3eae4bc985b192f15563aa8ec3ddd3c2 Mon Sep 17 00:00:00 2001
From: Nomoresolvalou
Date: Wed, 3 Jul 2024 12:23:39 -0500
Subject: [PATCH 05/20] Replaces Synth Vendor Headset (#6574)
# About the pull request
Replaces the senior command headset with the synthetic headset in the
synth equipment vendor
# Explain why it's good for the game
The synth headset is very useful as it gives synthetics a tracker for
the SLs, XO, and CO. This change will allow for survivor synthetics that
ally with the Almayer to track just as a normal synth. It also allows
shipside synths to keep the tracker if their spawn headset is
lost/stolen/melted. Also makes sense that the synth vendor gives the
synth headset
# Testing Photographs and Procedure
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the `` tags.
# Changelog
:cl: Nomoresolvalou
balance: The headset in the synthetic equipment vendor has been replaced
with a synthetic headset as opposed to a senior command headset
/:cl:
Co-authored-by: harryob <55142896+harryob@users.noreply.github.com>
---
code/game/machinery/vending/vendor_types/crew/synthetic.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/game/machinery/vending/vendor_types/crew/synthetic.dm b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
index 1ece8d353d4f..0146af139871 100644
--- a/code/game/machinery/vending/vendor_types/crew/synthetic.dm
+++ b/code/game/machinery/vending/vendor_types/crew/synthetic.dm
@@ -91,7 +91,7 @@ GLOBAL_LIST_INIT(cm_vending_clothing_synth, list(
list("Experimental Tool Vendor Token", 0, /obj/item/coin/marine/synth, MARINE_CAN_BUY_ESSENTIALS, VENDOR_ITEM_MANDATORY),
list("RADIO (TAKE ALL)", 0, null, null, null),
- list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/cdrcom, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
+ list("Headset", 0, /obj/item/device/radio/headset/almayer/mcom/synth, MARINE_CAN_BUY_EAR, VENDOR_ITEM_MANDATORY),
list("UNIFORM (CHOOSE 1)", 0, null, null, null),
list("Uniform, Outdated Synth", 0, /obj/item/clothing/under/rank/synthetic/old, MARINE_CAN_BUY_UNIFORM, VENDOR_ITEM_REGULAR),
From f6596a7e511d55df12355de19ef4ddd1034b8879 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Wed, 3 Jul 2024 18:42:12 +0100
Subject: [PATCH 06/20] Automatic changelog for PR #6574 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6574.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6574.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6574.yml b/html/changelogs/AutoChangeLog-pr-6574.yml
new file mode 100644
index 000000000000..e7a6ad8e069b
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6574.yml
@@ -0,0 +1,4 @@
+author: "Nomoresolvalou"
+delete-after: True
+changes:
+ - balance: "The headset in the synthetic equipment vendor has been replaced with a synthetic headset as opposed to a senior command headset"
\ No newline at end of file
From 72fa3851c2226ec32bdaf2b365f17d12fff5fb54 Mon Sep 17 00:00:00 2001
From: Doubleumc
Date: Wed, 3 Jul 2024 13:32:01 -0400
Subject: [PATCH 07/20] length() over .len (#6546)
# About the pull request
Replaces `list.len` lookup with `length(list)`.
The following replacements are broadly applied:
- `list.len` -> `length(list)` : except where `len is being assigned or
modified, such as `list.len--`, which is a valid use-case
- `list && list.len`, `!isnull(list) && list.len`, `list?.len` ->
`LAZYLEN(list)` : also the inverted form; `LAZYLEN` is just a define for
`length` but is used here to more clearly communicate that originally
the list was tested for existence
- `if(list.len) list.Cut()` -> `LAZYCLEARLIST(list)` : identical to the
define so instead of replacing `len` with `length` just used the define
A few one-offs:
- `(list?(list.len):(0))` -> `(LAZYLEN(list) || 0)` in `recipe.dm` :
resulting value gets assigned to a variable that is used elsewhere, so
ensured it returned 0 in the same circumstances
- `if(!list || !list.len) { return FALSE } if(list?.len) { ...`->
`if(!LAZYLEN(list)) { return FALSE } ...` in `modify_variables.dm` :
simplified two branching checks into one
- `!list || list.len == 0` -> `!LAZYLEN(list)` in `teleporter.dm` :
removed the `==` test to allow simplifying down to `LAZYLEN` while
ensuring it has the same truthiness
# Explain why it's good for the game
`length(list)` is preferred over `list.len` since it inherently handles
nulls and is allegedly slightly more performant.
# Testing Photographs and Procedure
Boots without issue.
# Changelog
No player-facing changes.
---
code/__DEFINES/tgs.config.dm | 2 +-
code/__HELPERS/_lists.dm | 10 +-
code/__HELPERS/chat.dm | 2 +-
code/__HELPERS/game.dm | 4 +-
code/__HELPERS/guid.dm | 2 +-
code/__HELPERS/icons.dm | 10 +-
code/__HELPERS/lists.dm | 122 +++++++++---------
code/__HELPERS/mobs.dm | 4 +-
code/__HELPERS/sanitize_values.dm | 2 +-
code/__HELPERS/shell.dm | 2 +-
code/__HELPERS/sorts/TimSort.dm | 10 +-
code/__HELPERS/sorts/_Main.dm | 22 ++--
code/__HELPERS/unsorted.dm | 12 +-
code/_globalvars/global_lists.dm | 2 +-
code/_macros.dm | 2 +-
code/_onclick/adjacent.dm | 4 +-
code/_onclick/click.dm | 2 +-
code/_onclick/click_hold.dm | 2 +-
code/_onclick/hud/hud.dm | 32 ++---
code/_onclick/hud/human.dm | 2 +-
code/_onclick/hud/radial.dm | 8 +-
code/_onclick/hud/screen_objects.dm | 4 +-
code/_onclick/item_attack.dm | 2 +-
code/_onclick/ventcrawl.dm | 4 +-
.../controllers/configuration/config_entry.dm | 2 +-
.../configuration/configuration.dm | 2 +-
code/controllers/mc/globals.dm | 10 +-
code/controllers/mc/master.dm | 4 +-
code/controllers/shuttle_controller.dm | 4 +-
code/controllers/subsystem/acid_pillar.dm | 4 +-
code/controllers/subsystem/atoms.dm | 8 +-
code/controllers/subsystem/cellauto.dm | 6 +-
code/controllers/subsystem/decorator.dm | 20 +--
code/controllers/subsystem/disease.dm | 6 +-
code/controllers/subsystem/events.dm | 4 +-
code/controllers/subsystem/fz_transitions.dm | 2 +-
code/controllers/subsystem/garbage.dm | 2 +-
code/controllers/subsystem/human.dm | 6 +-
code/controllers/subsystem/init/landmarks.dm | 10 +-
code/controllers/subsystem/input.dm | 2 +-
code/controllers/subsystem/item_cleanup.dm | 10 +-
code/controllers/subsystem/lighting.dm | 2 +-
code/controllers/subsystem/machinery.dm | 6 +-
code/controllers/subsystem/mapping.dm | 14 +-
code/controllers/subsystem/mob.dm | 6 +-
code/controllers/subsystem/nanoui.dm | 6 +-
code/controllers/subsystem/perf_logging.dm | 4 +-
code/controllers/subsystem/ping.dm | 6 +-
code/controllers/subsystem/playtime.dm | 4 +-
code/controllers/subsystem/police_clues.dm | 6 +-
code/controllers/subsystem/power.dm | 10 +-
.../subsystem/processing/obj_tab_items.dm | 4 +-
.../subsystem/processing/processing.dm | 4 +-
code/controllers/subsystem/projectiles.dm | 6 +-
code/controllers/subsystem/quadtrees.dm | 8 +-
code/controllers/subsystem/round_recording.dm | 4 +-
code/controllers/subsystem/shuttles.dm | 12 +-
code/controllers/subsystem/sound.dm | 4 +-
code/controllers/subsystem/soundscape.dm | 4 +-
code/controllers/subsystem/statpanel.dm | 2 +-
code/controllers/subsystem/tgui.dm | 4 +-
code/controllers/subsystem/tracking.dm | 2 +-
code/controllers/subsystem/xeno.dm | 6 +-
code/datums/_ndatabase/code/brsql_adapter.dm | 6 +-
code/datums/_ndatabase/code/native_adapter.dm | 4 +-
.../code/native_persistent_query.dm | 6 +-
.../subsystems/database_query_manager.dm | 2 +-
.../_ndatabase/subsystems/entity_manager.dm | 4 +-
code/datums/_ndatabase/tests/test_entity.dm | 2 +-
code/datums/ammo/ammo.dm | 2 +-
code/datums/ammo/misc.dm | 6 +-
code/datums/browser.dm | 4 +-
code/datums/components/_component.dm | 8 +-
code/datums/datum.dm | 2 +-
code/datums/diseases/advance/advance.dm | 34 ++---
.../diseases/advance/symptoms/symptoms.dm | 2 +-
code/datums/diseases/black_goo.dm | 6 +-
code/datums/emergency_calls/custom.dm | 2 +-
code/datums/emergency_calls/emergency_call.dm | 18 +--
code/datums/entities/player.dm | 6 +-
code/datums/global_variables.dm | 4 +-
code/datums/helper_datums/getrev.dm | 4 +-
code/datums/helper_datums/teleport.dm | 4 +-
code/datums/matrix_editor.dm | 6 +-
code/datums/medal_awards.dm | 4 +-
code/datums/quadtree.dm | 2 +-
code/datums/recipe.dm | 12 +-
code/datums/soundOutput.dm | 2 +-
.../datums/statistics/entities/panel_stats.dm | 4 +-
.../datums/statistics/entities/round_stats.dm | 4 +-
code/datums/weather/weather_map_holder.dm | 2 +-
code/defines/procs/AStar.dm | 34 ++---
code/game/atoms.dm | 2 +-
.../cas_manager/datums/cas_fire_mission.dm | 6 +-
code/game/gamemodes/cm_initialize.dm | 30 ++---
code/game/gamemodes/cm_process.dm | 14 +-
.../colonialmarines/colonialmarines.dm | 14 +-
.../gamemodes/colonialmarines/huntergames.dm | 8 +-
.../colonialmarines/whiskey_outpost.dm | 12 +-
.../whiskey_outpost/whiskey_output_waves.dm | 2 +-
.../gamemodes/colonialmarines/xenovsxeno.dm | 6 +-
code/game/gamemodes/extended/extended.dm | 2 +-
code/game/gamemodes/extended/infection.dm | 8 +-
code/game/jobs/access.dm | 10 +-
.../jobs/job/civilians/other/survivors.dm | 2 +-
code/game/jobs/job/job.dm | 2 +-
code/game/jobs/job/marine/squad_info.dm | 6 +-
code/game/jobs/job/marine/squads.dm | 2 +-
code/game/jobs/role_authority.dm | 10 +-
code/game/machinery/air_alarm.dm | 10 +-
code/game/machinery/autolathe.dm | 16 +--
code/game/machinery/bots/cleanbot.dm | 12 +-
code/game/machinery/bots/floorbot.dm | 10 +-
code/game/machinery/bots/medbot.dm | 16 +--
code/game/machinery/bots/mulebot.dm | 12 +-
code/game/machinery/camera/camera.dm | 4 +-
code/game/machinery/camera/motion.dm | 2 +-
.../machinery/computer/almayer_control.dm | 2 +-
code/game/machinery/computer/arcade.dm | 2 +-
code/game/machinery/computer/atmos_alert.dm | 8 +-
.../game/machinery/computer/camera_console.dm | 2 +-
.../game/machinery/computer/communications.dm | 6 +-
.../machinery/computer/dropship_weapons.dm | 8 +-
code/game/machinery/computer/guestpass.dm | 2 +-
code/game/machinery/computer/security.dm | 10 +-
code/game/machinery/computer/skills.dm | 10 +-
code/game/machinery/computer/station_alert.dm | 6 +-
code/game/machinery/constructable_frame.dm | 2 +-
code/game/machinery/cryo.dm | 2 +-
code/game/machinery/cryopod.dm | 4 +-
.../machinery/door_display/door_display.dm | 2 +-
code/game/machinery/doors/airlock.dm | 4 +-
code/game/machinery/doors/firedoor.dm | 10 +-
code/game/machinery/doors/windowdoor.dm | 10 +-
code/game/machinery/iv_drip.dm | 2 +-
code/game/machinery/kitchen/microwave.dm | 4 +-
code/game/machinery/kitchen/processor.dm | 8 +-
code/game/machinery/kitchen/smartfridge.dm | 4 +-
code/game/machinery/medical_pod/autodoc.dm | 12 +-
.../game/machinery/medical_pod/bodyscanner.dm | 2 +-
code/game/machinery/nuclearbomb.dm | 8 +-
code/game/machinery/rechargestation.dm | 2 +-
code/game/machinery/scoreboard.dm | 3 +-
code/game/machinery/status_display.dm | 6 +-
.../telecomms/machine_interactions.dm | 4 +-
.../machinery/telecomms/portable_comms.dm | 4 +-
code/game/machinery/vending/cm_vending.dm | 14 +-
code/game/machinery/vending/vending.dm | 4 +-
.../machinery/vending/vendor_types/dress.dm | 4 +-
.../vending/vendor_types/requisitions.dm | 4 +-
code/game/machinery/washing_machine.dm | 2 +-
.../effects/decals/cleanable/blood/blood.dm | 2 +-
code/game/objects/effects/decals/posters.dm | 4 +-
.../effects/effect_system/chemsmoke.dm | 8 +-
code/game/objects/effects/glowshroom.dm | 2 +-
.../objects/effects/spawners/gibspawner.dm | 8 +-
.../effects/spawners/wo_spawners/supplies.dm | 2 +-
code/game/objects/effects/spiders.dm | 4 +-
code/game/objects/items.dm | 4 +-
code/game/objects/items/ashtray.dm | 8 +-
code/game/objects/items/bodybag.dm | 6 +-
code/game/objects/items/cards_ids.dm | 10 +-
.../objects/items/circuitboards/airlock.dm | 4 +-
.../objects/items/circuitboards/computer.dm | 2 +-
.../objects/items/devices/autopsy_scanner.dm | 6 +-
.../objects/items/devices/clue_scanner.dm | 2 +-
.../objects/items/devices/data_detector.dm | 2 +-
.../game/objects/items/devices/radio/radio.dm | 2 +-
code/game/objects/items/devices/scanners.dm | 4 +-
.../objects/items/devices/taperecorder.dm | 12 +-
.../objects/items/devices/teleportation.dm | 2 +-
code/game/objects/items/devices/walkman.dm | 10 +-
.../objects/items/explosives/explosive.dm | 14 +-
code/game/objects/items/frames/camera.dm | 4 +-
code/game/objects/items/frames/matrix.dm | 4 +-
.../objects/items/implants/implantchair.dm | 4 +-
code/game/objects/items/misc.dm | 4 +-
.../items/reagent_containers/autoinjectors.dm | 2 +-
.../reagent_containers/food/condiment.dm | 4 +-
.../reagent_containers/food/drinks/bottle.dm | 2 +-
.../food/drinks/drinkingglass.dm | 6 +-
.../reagent_containers/food/drinks/jar.dm | 2 +-
.../items/reagent_containers/food/sandwich.dm | 10 +-
.../items/reagent_containers/food/snacks.dm | 24 ++--
.../reagent_containers/food/snacks/grown.dm | 2 +-
.../reagent_containers/reagent_container.dm | 6 +-
.../objects/items/reagent_containers/spray.dm | 2 +-
code/game/objects/items/stacks/stack.dm | 2 +-
code/game/objects/items/storage/belt.dm | 6 +-
code/game/objects/items/storage/firstaid.dm | 6 +-
.../objects/items/storage/large_holster.dm | 2 +-
code/game/objects/items/storage/misc.dm | 6 +-
code/game/objects/items/storage/pouch.dm | 16 +--
code/game/objects/items/storage/storage.dm | 18 +--
.../objects/items/storage/surgical_tray.dm | 2 +-
.../objects/items/tools/experimental_tools.dm | 2 +-
code/game/objects/items/tools/extinguisher.dm | 2 +-
code/game/objects/items/weapons/weaponry.dm | 2 +-
code/game/objects/structures/bedsheet_bin.dm | 4 +-
code/game/objects/structures/bookcase.dm | 6 +-
.../crates_lockers/largecrate_supplies.dm | 4 +-
code/game/objects/structures/morgue.dm | 4 +-
.../objects/structures/reagent_dispensers.dm | 2 +-
code/game/objects/structures/safe.dm | 2 +-
.../game/objects/structures/tank_dispenser.dm | 4 +-
code/game/sound.dm | 2 +-
code/game/supplyshuttle.dm | 22 ++--
code/game/turfs/turf.dm | 22 ++--
code/game/turfs/walls/wall_icon.dm | 12 +-
code/game/verbs/who.dm | 2 +-
code/game/world.dm | 2 +-
code/modules/admin/IsBanned.dm | 2 +-
code/modules/admin/STUI.dm | 32 ++---
code/modules/admin/admin.dm | 6 +-
code/modules/admin/admin_ranks.dm | 10 +-
code/modules/admin/callproc.dm | 14 +-
.../admin/medal_panel/medals_panel_tgui.dm | 4 +-
code/modules/admin/player_notes.dm | 2 +-
.../admin/player_panel/player_panel.dm | 6 +-
code/modules/admin/tabs/debug_tab.dm | 4 +-
code/modules/admin/tabs/event_tab.dm | 2 +-
code/modules/admin/topic/topic.dm | 14 +-
code/modules/admin/topic/topic_chems.dm | 2 +-
code/modules/admin/topic/topic_events.dm | 4 +-
code/modules/admin/topic/topic_teleports.dm | 34 ++---
code/modules/admin/verbs/SDQL2/SDQL_2.dm | 8 +-
.../admin/verbs/SDQL2/SDQL_2_parser.dm | 8 +-
.../admin/verbs/SDQL2/SDQL_2_wrappers.dm | 4 +-
code/modules/admin/verbs/adminhelp.dm | 14 +-
code/modules/admin/verbs/adminpanelweapons.dm | 4 +-
code/modules/admin/verbs/autoreplace.dm | 2 +-
code/modules/admin/verbs/debug.dm | 2 +-
.../admin/view_variables/debug_variables.dm | 8 +-
.../admin/view_variables/get_variables.dm | 2 +-
.../view_variables/mass_edit_variables.dm | 10 +-
.../admin/view_variables/modify_variables.dm | 21 ++-
.../view_variables/reference_tracking.dm | 4 +-
.../admin/view_variables/topic_list.dm | 8 +-
.../admin/view_variables/view_variables.dm | 2 +-
code/modules/almayer/machinery.dm | 4 +-
code/modules/asset_cache/asset_list.dm | 4 +-
.../asset_cache/transports/asset_transport.dm | 4 +-
code/modules/clans/client.dm | 8 +-
code/modules/client/client_procs.dm | 2 +-
code/modules/client/player_details.dm | 2 +-
code/modules/client/preferences.dm | 8 +-
code/modules/client/preferences_savefile.dm | 7 +-
code/modules/clothing/clothing.dm | 6 +-
code/modules/clothing/clothing_accessories.dm | 2 +-
code/modules/clothing/head/helmet.dm | 2 +-
code/modules/clothing/spacesuits/breaches.dm | 8 +-
.../modules/clothing/spacesuits/spacesuits.dm | 2 +-
.../structures/special/recovery_node.dm | 2 +-
code/modules/cm_aliens/structures/tunnel.dm | 10 +-
code/modules/cm_marines/dropship_equipment.dm | 2 +-
code/modules/cm_marines/equipment/gear.dm | 2 +-
.../modules/cm_marines/equipment/kit_boxes.dm | 2 +-
code/modules/cm_marines/equipment/weapons.dm | 15 +--
code/modules/cm_marines/marines_consoles.dm | 4 +-
code/modules/cm_marines/shuttle_backend.dm | 2 +-
code/modules/cm_preds/yaut_items.dm | 2 +-
code/modules/customitems/item_spawning.dm | 4 +-
code/modules/decorators/cassette_decorator.dm | 2 +-
code/modules/defenses/sentry.dm | 12 +-
code/modules/droppod/droppod_ui.dm | 2 +-
.../dropships/cas/fire_mission_record.dm | 2 +-
code/modules/economy/economy_misc.dm | 4 +-
code/modules/flufftext/Hallucination.dm | 12 +-
code/modules/flufftext/TextFilters.dm | 4 +-
code/modules/hydroponics/grown_inedible.dm | 2 +-
code/modules/hydroponics/hydro_tools.dm | 8 +-
code/modules/hydroponics/hydro_tray.dm | 4 +-
code/modules/hydroponics/seed_datums.dm | 26 ++--
.../hydroponics/seed_machines/seed_editor.dm | 2 +-
.../seed_machines/seed_machines.dm | 4 +-
code/modules/hydroponics/vines.dm | 10 +-
code/modules/mapping/preloader.dm | 2 +-
code/modules/mapping/reader.dm | 10 +-
.../mapping/space_management/traits.dm | 8 +-
.../space_management/zlevel_manager.dm | 14 +-
code/modules/mapping/verify.dm | 12 +-
code/modules/mob/dead/observer/observer.dm | 6 +-
code/modules/mob/hear_say.dm | 4 +-
code/modules/mob/holder.dm | 2 +-
code/modules/mob/inventory.dm | 12 +-
code/modules/mob/language/language.dm | 6 +-
.../modules/mob/language/language_handling.dm | 2 +-
code/modules/mob/living/blood.dm | 6 +-
code/modules/mob/living/carbon/carbon.dm | 2 +-
.../mob/living/carbon/human/examine.dm | 18 +--
.../mob/living/carbon/human/exercise.dm | 2 +-
code/modules/mob/living/carbon/human/human.dm | 8 +-
.../mob/living/carbon/human/human_damage.dm | 8 +-
.../mob/living/carbon/human/human_defense.dm | 2 +-
.../mob/living/carbon/human/human_helpers.dm | 2 +-
.../mob/living/carbon/human/human_movement.dm | 2 +-
.../human/life/handle_regular_hud_updates.dm | 4 +-
code/modules/mob/living/carbon/human/say.dm | 2 +-
.../mob/living/carbon/human/species/monkey.dm | 2 +-
.../living/carbon/human/species/species.dm | 2 +-
.../mob/living/carbon/human/update_icons.dm | 4 +-
.../mob/living/carbon/human/whisper.dm | 4 +-
.../mob/living/carbon/xenomorph/XenoProcs.dm | 10 +-
.../abilities/ability_helper_procs.dm | 2 +-
.../xenomorph/abilities/general_powers.dm | 8 +-
.../abilities/praetorian/praetorian_powers.dm | 4 +-
.../xenomorph/abilities/queen/queen_powers.dm | 8 +-
.../living/carbon/xenomorph/castes/Crusher.dm | 2 +-
.../living/carbon/xenomorph/castes/Queen.dm | 4 +-
.../living/carbon/xenomorph/damage_procs.dm | 4 +-
.../living/carbon/xenomorph/hive_status.dm | 30 ++---
.../mob/living/carbon/xenomorph/life.dm | 4 +-
.../mob/living/carbon/xenomorph/say.dm | 4 +-
.../xenomorph/strains/castes/runner/acid.dm | 2 +-
.../living/carbon/xenomorph/xeno_helpers.dm | 2 +-
code/modules/mob/living/living.dm | 4 +-
code/modules/mob/living/living_healthscan.dm | 8 +-
code/modules/mob/living/login.dm | 2 +-
.../simple_animal/friendly/farm_animals.dm | 4 +-
.../hostile/retaliate/retaliate.dm | 2 +-
.../mob/living/simple_animal/parrot.dm | 12 +-
.../mob/living/simple_animal/simple_animal.dm | 32 ++---
code/modules/mob/mob.dm | 2 +-
code/modules/mob/mob_defines.dm | 2 +-
code/modules/mob/mob_grab.dm | 6 +-
code/modules/mob/mob_helpers.dm | 6 +-
code/modules/mob/mob_movement.dm | 2 +-
code/modules/mob/new_player/new_player.dm | 4 +-
code/modules/nano/nanomanager.dm | 12 +-
code/modules/nano/nanoui.dm | 2 +-
.../modules/nightmare/nmtasks/mapscheduler.dm | 2 +-
code/modules/organs/limbs.dm | 14 +-
code/modules/organs/wound.dm | 4 +-
code/modules/paperwork/filingcabinet.dm | 2 +-
code/modules/paperwork/folders.dm | 2 +-
code/modules/paperwork/notepad.dm | 6 +-
code/modules/paperwork/paper.dm | 23 ++--
code/modules/paperwork/paper_bundle.dm | 10 +-
code/modules/paperwork/paperbin.dm | 6 +-
code/modules/paperwork/photocopier.dm | 2 +-
code/modules/power/apc.dm | 4 +-
code/modules/power/power_monitor.dm | 2 +-
code/modules/power/powernet.dm | 4 +-
.../projectiles/ammo_boxes/ammo_boxes.dm | 4 +-
.../projectiles/ammo_boxes/box_structures.dm | 16 +--
.../projectiles/ammo_boxes/misc_boxes.dm | 2 +-
code/modules/projectiles/gun.dm | 2 +-
code/modules/projectiles/gun_attachables.dm | 2 +-
code/modules/projectiles/gun_helpers.dm | 4 +-
.../modules/projectiles/guns/flamer/flamer.dm | 10 +-
code/modules/projectiles/guns/shotguns.dm | 2 +-
code/modules/projectiles/guns/smartgun.dm | 6 +-
.../projectiles/guns/specialist/sniper.dm | 2 +-
code/modules/projectiles/magazines/flamer.dm | 4 +-
code/modules/projectiles/projectile.dm | 6 +-
code/modules/reagents/Chemistry-Holder.dm | 18 +--
code/modules/reagents/Chemistry-Reagents.dm | 2 +-
.../chemistry_machinery/autodispenser.dm | 18 +--
.../chemistry_machinery/centrifuge.dm | 10 +-
.../chemistry_machinery/chem_dispenser.dm | 2 +-
.../chemistry_machinery/chem_master.dm | 12 +-
.../chemistry_machinery/chem_simulator.dm | 2 +-
.../reagents/chemistry_machinery/pandemic.dm | 10 +-
.../chemistry_machinery/reagent_analyzer.dm | 6 +-
.../chemistry_machinery/reagent_grinder.dm | 10 +-
.../chemistry_properties/prop_positive.dm | 2 +-
code/modules/recycling/disposal.dm | 12 +-
code/modules/recycling/sortingmachinery.dm | 2 +-
code/modules/shuttle/docking.dm | 16 +--
code/modules/shuttle/on_move.dm | 4 +-
code/modules/shuttle/shuttle.dm | 14 +-
code/modules/shuttles/marine_ferry.dm | 6 +-
code/modules/shuttles/shuttle_console.dm | 2 +-
code/modules/teleporters/teleporter.dm | 4 +-
.../modules/teleporters/teleporter_console.dm | 2 +-
code/modules/tgs/core/tgs_version.dm | 6 +-
code/modules/tgs/v3210/api.dm | 12 +-
code/modules/tgui_panel/telemetry.dm | 2 +-
code/modules/unit_tests/unit_test.dm | 2 +-
.../vehicles/hardpoints/primary/minigun.dm | 2 +-
.../vehicles/multitile/multitile_verbs.dm | 2 +-
381 files changed, 1252 insertions(+), 1261 deletions(-)
diff --git a/code/__DEFINES/tgs.config.dm b/code/__DEFINES/tgs.config.dm
index e0d5f1baac92..bd30a6707966 100644
--- a/code/__DEFINES/tgs.config.dm
+++ b/code/__DEFINES/tgs.config.dm
@@ -8,5 +8,5 @@
#define TGS_WARNING_LOG(message) log_world("TGS Warn: [##message]")
#define TGS_ERROR_LOG(message) log_world("TGS Error: [##message]")
#define TGS_NOTIFY_ADMINS(event) message_admins(##event)
-#define TGS_CLIENT_COUNT GLOB.clients.len
+#define TGS_CLIENT_COUNT length(GLOB.clients)
#define TGS_PROTECT_DATUM(Path) GENERAL_PROTECT_DATUM(##Path)
diff --git a/code/__HELPERS/_lists.dm b/code/__HELPERS/_lists.dm
index dd92b9be1295..e46c92df543a 100644
--- a/code/__HELPERS/_lists.dm
+++ b/code/__HELPERS/_lists.dm
@@ -103,7 +103,7 @@
/proc/bitfield_to_list(bitfield = 0, list/wordlist)
var/list/return_list = list()
if(islist(wordlist))
- var/max = min(wordlist.len, 24)
+ var/max = min(length(wordlist), 24)
var/bit = 1
for(var/i in 1 to max)
if(bitfield & bit)
@@ -148,10 +148,10 @@
* Returns TRUE if the list had nulls, FALSE otherwise
**/
/proc/list_clear_nulls(list/list_to_clear)
- var/start_len = list_to_clear.len
+ var/start_len = length(list_to_clear)
var/list/new_list = new(start_len)
list_to_clear -= new_list
- return list_to_clear.len < start_len
+ return length(list_to_clear) < start_len
///Return a list with no duplicate entries
/proc/unique_list(list/inserted_list)
@@ -174,6 +174,6 @@
if(!inserted_list)
return
- for(var/i in 1 to inserted_list.len - 1)
- inserted_list.Swap(i, rand(i, inserted_list.len))
+ for(var/i in 1 to length(inserted_list) - 1)
+ inserted_list.Swap(i, rand(i, length(inserted_list)))
diff --git a/code/__HELPERS/chat.dm b/code/__HELPERS/chat.dm
index 20d1a45b31cc..4629c699636a 100644
--- a/code/__HELPERS/chat.dm
+++ b/code/__HELPERS/chat.dm
@@ -22,7 +22,7 @@
if((!admin_only || channel.is_admin_channel) && (channel_tag in applicable_tags))
channels_to_use += channel
- if(channels_to_use.len)
+ if(length(channels_to_use))
world.TgsChatBroadcast(message, channels_to_use)
/**
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 721c179b9cef..5bf36f785746 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -58,7 +58,7 @@
/proc/recursive_mob_check(atom/O, list/L = list(), recursion_limit = 3, client_check = 1, sight_check = 1, include_radio = 1)
- //debug_mob += O.contents.len
+ //debug_mob += length(O.contents)
if(!recursion_limit)
return L
for(var/atom/A in O.contents)
@@ -294,7 +294,7 @@
* * cache_only - Whether to not actually send a to_chat message and instead only update larva_queue_cached_message
*/
/proc/message_alien_candidates(list/candidates, dequeued, cache_only = FALSE)
- for(var/i in (1 + dequeued) to candidates.len)
+ for(var/i in (1 + dequeued) to length(candidates))
var/mob/dead/observer/cur_obs = candidates[i]
// Generate the messages
diff --git a/code/__HELPERS/guid.dm b/code/__HELPERS/guid.dm
index 49903cceb3c3..e763aaf73b69 100644
--- a/code/__HELPERS/guid.dm
+++ b/code/__HELPERS/guid.dm
@@ -6,7 +6,7 @@
/proc/GUID()
var/const/GUID_VERSION = "b"
var/const/GUID_VARIANT = "d"
- var/node_id = copytext_char(md5("[rand()*rand(1,9999999)][world.name][world.hub][world.hub_password][world.internet_address][world.address][world.contents.len][world.status][world.port][rand()*rand(1,9999999)]"), 1, 13)
+ var/node_id = copytext_char(md5("[rand()*rand(1,9999999)][world.name][world.hub][world.hub_password][world.internet_address][world.address][length(world.contents)][world.status][world.port][rand()*rand(1,9999999)]"), 1, 13)
var/time_high = "[num2hex(text2num(time2text(world.realtime,"YYYY")), 2)][num2hex(world.realtime, 6)]"
diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm
index 081fcec5a137..fcfb512e0c12 100644
--- a/code/__HELPERS/icons.dm
+++ b/code/__HELPERS/icons.dm
@@ -332,7 +332,7 @@ world
/proc/getFlatIcon(image/appearance, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE, appearance_flags = FALSE)
// Loop through the underlays, then overlays, sorting them into the layers list
#define PROCESS_OVERLAYS_OR_UNDERLAYS(flat, process, base_layer) \
- for (var/i in 1 to process.len) { \
+ for (var/i in 1 to length(process)) { \
var/image/current = process[i]; \
if (!current) { \
continue; \
@@ -347,7 +347,7 @@ world
} \
current_layer = base_layer + appearance.layer + current_layer / 1000; \
} \
- for (var/index_to_compare_to in 1 to layers.len) { \
+ for (var/index_to_compare_to in 1 to length(layers)) { \
var/compare_to = layers[index_to_compare_to]; \
if (current_layer < layers[compare_to]) { \
layers.Insert(index_to_compare_to, current); \
@@ -403,7 +403,7 @@ world
var/curblend = appearance.blend_mode || defblend
- if(appearance.overlays.len || appearance.underlays.len)
+ if(length(appearance.overlays) || length(appearance.underlays))
var/icon/flat = icon(flat_template)
// Layers will be a sorted list of icons/overlays, based on the order in which they are displayed
var/list/layers = list()
@@ -556,7 +556,7 @@ world
/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
@@ -564,7 +564,7 @@ world
gap = floor(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/__HELPERS/lists.dm b/code/__HELPERS/lists.dm
index 856a0a492cbb..d5212611a04b 100644
--- a/code/__HELPERS/lists.dm
+++ b/code/__HELPERS/lists.dm
@@ -12,7 +12,7 @@
//Returns a list in plain english as a string
/proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" )
- var/total = input.len
+ var/total = length(input)
if (!total)
return "[nothing_text]"
else if (total == 1)
@@ -33,9 +33,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(ISINRANGE(index,1,list.len))
+ if(ISINRANGE(index,1,length(list)))
return list[index]
else if(list[index])
return list[index]
@@ -106,35 +106,35 @@
/// Pick a random element from the list and remove it from the list.
/proc/pick_n_take(list/L)
RETURN_TYPE(L[_].type)
- if(L.len)
- var/picked = rand(1,L.len)
+ if(length(L))
+ var/picked = rand(1,length(L))
. = L[picked]
L.Cut(picked,picked+1) //Cut is far more efficient that Remove()
//Returns the top(last) element from the list and removes it from the list (typical stack function)
/proc/pop(list/L)
- if(L.len)
- . = 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)
//Returns the next element in parameter list after first appearance of parameter element. If it is the last element of the list or not present in list, returns first element.
/proc/next_in_list(element, list/L)
- for(var/i=1, i1, i--)
+ for(var/i=length(L), i>1, i--)
if(L[i] == element)
return L[i-1]
- return L[L.len]
+ return L[length(L)]
/*
* Sorting
@@ -144,7 +144,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
@@ -155,7 +155,7 @@
. = L_n
var/L_o[] = L.Copy()
var/i
- while(L_o.len)
+ while(length(L_o))
i = pick(L_o)
if(!ref) L_n += i
else L_n[i] = L_o[i]
@@ -171,9 +171,9 @@
//Mergesort: divides up the list into halves to begin the sort
/proc/sortKey(list/client/L, order = 1)
- if(isnull(L) || L.len < 2)
+ if(isnull(L) || length(L) < 2)
return L
- var/middle = L.len / 2 + 1
+ var/middle = length(L) / 2 + 1
return mergeKey(sortKey(L.Copy(0,middle)), sortKey(L.Copy(middle)), order)
//Mergsort: does the actual sorting and returns the results back to sortAtom
@@ -181,7 +181,7 @@
var/Li=1
var/Ri=1
var/list/result = new()
- while(Li <= L.len && Ri <= R.len)
+ while(Li <= length(L) && Ri <= length(R))
var/client/rL = L[Li]
var/client/rR = R[Ri]
if(sorttext(rL.ckey, rR.ckey) == order)
@@ -189,20 +189,20 @@
else
result += R[Ri++]
- if(Li <= L.len)
+ if(Li <= length(L))
return (result + L.Copy(Li, 0))
return (result + R.Copy(Ri, 0))
// Quicksort implementation
/proc/sortAtom(list/atom/L, order = 1)
- if(isnull(L) || L.len < 2)
+ if(isnull(L) || length(L) < 2)
return L
var/startIndex = 1
var/list/atom/M = new/list()
for(var/atom/mob in L)
if(istype(mob))
M.Add(mob)
- var/endIndex = M.len - 1
+ var/endIndex = length(M) - 1
var/top = 0
var/list/stack[endIndex*2]
stack[++top] = startIndex
@@ -241,9 +241,9 @@
/proc/sortRecord(list/datum/data/record/L, field = "name", order = 1)
if(isnull(L))
return list()
- if(L.len < 2)
+ if(length(L) < 2)
return L
- var/middle = L.len / 2 + 1
+ var/middle = length(L) / 2 + 1
return mergeRecordLists(sortRecord(L.Copy(0, middle), field, order), sortRecord(L.Copy(middle), field, order), field, order)
//Mergsort: does the actual sorting and returns the results back to sortRecord
@@ -252,7 +252,7 @@
var/Ri=1
var/list/result = new()
if(!isnull(L) && !isnull(R))
- while(Li <= L.len && Ri <= R.len)
+ while(Li <= length(L) && Ri <= length(R))
var/datum/data/record/rL = L[Li]
if(isnull(rL))
L -= rL
@@ -266,7 +266,7 @@
else
result += R[Ri++]
- if(Li <= L.len)
+ if(Li <= length(L))
return (result + L.Copy(Li, 0))
return (result + R.Copy(Ri, 0))
@@ -285,9 +285,9 @@
RETURN_TYPE(/list)
if(!istype(L))
return
- if(L.len < 2)
+ if(length(L) < 2)
return L
- var/middle = L.len / 2 + 1 // Copy is first,second-1
+ var/middle = length(L) / 2 + 1 // Copy is first,second-1
return mergeLists(sortList(L.Copy(0,middle)), sortList(L.Copy(middle))) //second parameter null = to end of list
//Mergsorge: uses sortList() but uses the var's name specifically. This should probably be using mergeAtom() instead
@@ -301,13 +301,13 @@
var/Li=1
var/Ri=1
var/list/result = new()
- while(Li <= L.len && Ri <= R.len)
+ while(Li <= length(L) && Ri <= length(R))
if(sorttext(L[Li], R[Ri]) < 1)
result += R[Ri++]
else
result += L[Li++]
- if(Li <= L.len)
+ if(Li <= length(L))
return (result + L.Copy(Li, 0))
return (result + R.Copy(Ri, 0))
@@ -322,68 +322,68 @@
// List of lists, sorts by element[key] - for things like crew monitoring computer sorting records by name.
/proc/sortByKey(list/L, key)
- if(L.len < 2)
+ if(length(L) < 2)
return L
- var/middle = L.len / 2 + 1
+ var/middle = length(L) / 2 + 1
return mergeKeyedLists(sortByKey(L.Copy(0, middle), key), sortByKey(L.Copy(middle), key), key)
/proc/mergeKeyedLists(list/L, list/R, key)
var/Li=1
var/Ri=1
var/list/result = new()
- while(Li <= L.len && Ri <= R.len)
+ while(Li <= length(L) && Ri <= length(R))
if(sorttext(L[Li][key], R[Ri][key]) < 1)
// Works around list += list2 merging lists; it's not pretty but it works
result += "temp item"
- result[result.len] = R[Ri++]
+ result[length(result)] = R[Ri++]
else
result += "temp item"
- result[result.len] = L[Li++]
+ result[length(result)] = L[Li++]
- if(Li <= L.len)
+ if(Li <= length(L))
return (result + L.Copy(Li, 0))
return (result + R.Copy(Ri, 0))
//Mergesort: any value in a list, preserves key=value structure
/proc/sortAssoc(list/L)
- if(L.len < 2)
+ if(length(L) < 2)
return L
- var/middle = L.len / 2 + 1 // Copy is first,second-1
+ var/middle = length(L) / 2 + 1 // Copy is first,second-1
return mergeAssoc(sortAssoc(L.Copy(0,middle)), sortAssoc(L.Copy(middle))) //second parameter null = to end of list
/proc/mergeAssoc(list/L, list/R)
var/Li=1
var/Ri=1
var/list/result = new()
- while(Li <= L.len && Ri <= R.len)
+ while(Li <= length(L) && Ri <= length(R))
if(sorttext(L[Li], R[Ri]) < 1)
result += R&R[Ri++]
else
result += L&L[Li++]
- if(Li <= L.len)
+ if(Li <= length(L))
return (result + L.Copy(Li, 0))
return (result + R.Copy(Ri, 0))
// Same as sortAssoc but rather than creating a whole new list keeps the original list ref and just returns that list modified
/proc/sortAssocKeepList(list/L)
- if(L.len < 2)
+ if(length(L) < 2)
return L
- var/middle = L.len / 2 + 1 // Copy is first,second-1
+ var/middle = length(L) / 2 + 1 // Copy is first,second-1
return mergeAssocKeepList(sortAssoc(L.Copy(0,middle)), sortAssoc(L.Copy(middle)), L) //second parameter null = to end of list
/proc/mergeAssocKeepList(list/L, list/R, list/original)
var/Li=1
var/Ri=1
var/list/result = new()
- while(Li <= L.len && Ri <= R.len)
+ while(Li <= length(L) && Ri <= length(R))
if(sorttext(L[Li], R[Ri]) < 1)
result += R&R[Ri++]
else
result += L&L[Li++]
- if(Li <= L.len)
+ if(Li <= length(L))
result += L.Copy(Li, 0)
else
result += R.Copy(Ri, 0)
@@ -408,7 +408,7 @@
/proc/bitfield2list(bitfield = 0, list/wordlist)
var/list/r = list()
if(islist(wordlist))
- var/max = min(wordlist.len,16)
+ var/max = min(length(wordlist),16)
var/bit = 1
for(var/i=1, i<=max, i++)
if(bitfield & bit)
@@ -430,9 +430,9 @@
//Move a single element from position fromIndex within a list, to position toIndex
//All elements in the range [1,toIndex) before the move will be before the pivot afterwards
-//All elements in the range [toIndex, L.len+1) before the move will be after the pivot afterwards
+//All elements in the range [toIndex, length(L)+1) before the move will be after the pivot afterwards
//In other words, it's as if the range [fromIndex,toIndex) have been rotated using a <<< operation common to other languages.
-//fromIndex and toIndex must be in the range [1,L.len+1]
+//fromIndex and toIndex must be in the range [1,length(L)+1]
//This will preserve associations ~Carnie
/proc/moveElement(list/L, fromIndex, toIndex)
if(fromIndex == toIndex || fromIndex+1 == toIndex) //no need to move
@@ -493,13 +493,13 @@
//replaces reverseList ~Carnie
/proc/reverseRange(list/L, start=1, end=0)
- if(L.len)
- start = start % L.len
- end = end % (L.len+1)
+ if(length(L))
+ start = start % length(L)
+ end = end % (length(L)+1)
if(start <= 0)
- start += L.len
+ start += length(L)
if(end <= 0)
- end += L.len + 1
+ end += length(L) + 1
--end
while(start < end)
@@ -518,13 +518,13 @@
///replaces reverseList ~Carnie
/proc/reverse_range(list/inserted_list, start = 1, end = 0)
- if(inserted_list.len)
- start = start % inserted_list.len
- end = end % (inserted_list.len + 1)
+ if(length(inserted_list))
+ start = start % length(inserted_list)
+ end = end % (length(inserted_list) + 1)
if(start <= 0)
- start += inserted_list.len
+ start += length(inserted_list)
if(end <= 0)
- end += inserted_list.len + 1
+ end += length(inserted_list) + 1
--end
while(start < end)
@@ -574,7 +574,7 @@
var/list/found = list()
for(var/atom/A in contents)
found += A
- if(A.contents.len)
+ if(length(A.contents))
found += A.contents_recursive()
return found
@@ -582,7 +582,7 @@
var/list/found = list()
for(var/atom/A in contents)
found += A
- if(A.contents.len)
+ if(length(A.contents))
found += A.contents
return found
@@ -594,15 +594,15 @@
if(!sort)
return L
- if(L.len <= 1)
+ if(length(L) <= 1)
return L
- var/middle = floor(L.len / 2)
+ var/middle = floor(length(L) / 2)
var/list/left = custom_mergesort(L.Copy(1, middle + 1))
var/list/right = custom_mergesort(L.Copy(middle + 1))
var/list/result = list()
- while(left.len > 0 && right.len > 0)
+ while(length(left) > 0 && length(right) > 0)
var/a = left[1]
var/b = right[1]
@@ -613,11 +613,11 @@
result += b
right.Cut(1,2)
- while(left.len > 0)
+ while(length(left) > 0)
result += left[1]
left.Cut(1,2)
- while(right.len > 0)
+ while(length(right) > 0)
result += right[1]
right.Cut(1,2)
diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm
index b5bf7a02d026..1d123b3a8e00 100644
--- a/code/__HELPERS/mobs.dm
+++ b/code/__HELPERS/mobs.dm
@@ -26,7 +26,7 @@
continue
valid_hairstyles[hairstyle] = GLOB.hair_styles_list[hairstyle]
- if(valid_hairstyles.len)
+ if(length(valid_hairstyles))
h_style = pick(valid_hairstyles)
return h_style
@@ -48,7 +48,7 @@
continue
valid_facialhairstyles[facialhairstyle] = GLOB.facial_hair_styles_list[facialhairstyle]
- if(valid_facialhairstyles.len)
+ if(length(valid_facialhairstyles))
f_style = pick(valid_facialhairstyles)
return f_style
diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm
index eddb326568c0..291246e621a0 100644
--- a/code/__HELPERS/sanitize_values.dm
+++ b/code/__HELPERS/sanitize_values.dm
@@ -20,7 +20,7 @@
/proc/sanitize_inlist(value, list/List, default)
if(value in List) return value
if(default) return default
- if(List && List.len)return List[1]
+ if(LAZYLEN(List))return List[1]
/proc/sanitize_list(list/List, list/filter = list(null), default = list())
if(!islist(List))
diff --git a/code/__HELPERS/shell.dm b/code/__HELPERS/shell.dm
index 35a8e4635b41..a165a7981fe8 100644
--- a/code/__HELPERS/shell.dm
+++ b/code/__HELPERS/shell.dm
@@ -20,7 +20,7 @@
shelleo_id = "[seo_id]"
break
if(!shelleo_id)
- shelleo_id = "[shelleo_ids.len + 1]"
+ shelleo_id = "[length(shelleo_ids) + 1]"
shelleo_ids += shelleo_id
shelleo_ids[shelleo_id] = TRUE
out_file = "[SHELLEO_NAME][shelleo_id][SHELLEO_OUT]"
diff --git a/code/__HELPERS/sorts/TimSort.dm b/code/__HELPERS/sorts/TimSort.dm
index ae83bd9b0682..89a93802edee 100644
--- a/code/__HELPERS/sorts/TimSort.dm
+++ b/code/__HELPERS/sorts/TimSort.dm
@@ -1,12 +1,12 @@
//TimSort interface
/proc/sortTim(list/L, cmp=/proc/cmp_numeric_asc, associative, fromIndex=1, toIndex=0)
- if(L && L.len >= 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/sort_instance = GLOB.sortInstance
if(!sort_instance)
diff --git a/code/__HELPERS/sorts/_Main.dm b/code/__HELPERS/sorts/_Main.dm
index 7fe3adf02870..4caf2c4c068e 100644
--- a/code/__HELPERS/sorts/_Main.dm
+++ b/code/__HELPERS/sorts/_Main.dm
@@ -76,7 +76,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
@@ -178,8 +178,8 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new())
//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
@@ -193,8 +193,8 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new())
//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)
@@ -204,9 +204,9 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new())
//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]
@@ -596,8 +596,8 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new())
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
@@ -607,8 +607,8 @@ GLOBAL_DATUM_INIT(sortInstance, /datum/sortInstance, new())
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/unsorted.dm b/code/__HELPERS/unsorted.dm
index 5b9154eac655..d8eebf79bca6 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -534,7 +534,7 @@
/atom/proc/GetAllContents(searchDepth = 5, list/toReturn = list())
for(var/atom/part as anything in contents)
toReturn += part
- if(part.contents.len && searchDepth)
+ if(length(part.contents) && searchDepth)
part.GetAllContents(searchDepth - 1, toReturn)
return toReturn
@@ -555,7 +555,7 @@
if(part.loc != src) // That's a multitile atom, and it's not actually here stricto sensu
continue
toReturn += part
- if(part.contents.len && searchDepth)
+ if(length(part.contents) && searchDepth)
part.GetAllContents(searchDepth - 1, toReturn)
return toReturn
@@ -1082,7 +1082,7 @@ GLOBAL_DATUM(action_purple_power_up, /image)
var/list/doors = new/list()
- if(toupdate.len)
+ if(length(toupdate))
for(var/turf/T1 in toupdate)
for(var/obj/structure/machinery/door/D2 in T1)
doors += D2
@@ -1091,7 +1091,7 @@ GLOBAL_DATUM(action_purple_power_up, /image)
else
air_master.tiles_to_update += T1*/
- if(fromupdate.len)
+ if(length(fromupdate))
for(var/turf/T2 in fromupdate)
for(var/obj/structure/machinery/door/D2 in T2)
doors += D2
@@ -1287,7 +1287,7 @@ GLOBAL_LIST_INIT(WALLITEMS, list(
for(var/turf/T in orange(origin, outer_range))
if(!inner_range || get_dist(origin, T) >= inner_range)
turfs += T
- if(turfs.len)
+ if(length(turfs))
return pick(turfs)
// Returns true if arming a given explosive might be considered grief
@@ -1531,7 +1531,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
return GetAllContents()
var/list/processing = list(src)
var/list/assembled = list()
- while(processing.len)
+ while(length(processing))
var/atom/A = processing[1]
processing.Cut(1,2)
if(!ignore_typecache[A.type])
diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm
index e663bc287946..c054b9a4bf1f 100644
--- a/code/_globalvars/global_lists.dm
+++ b/code/_globalvars/global_lists.dm
@@ -303,7 +303,7 @@ GLOBAL_LIST_INIT(hj_emotes, setup_hazard_joe_emotes())
/proc/number_list_decode(number_list_data)
var/list/L = params2list(number_list_data)
- for(var/i in 1 to L.len)
+ for(var/i in 1 to length(L))
L[i] = text2num(L[i])
return L
diff --git a/code/_macros.dm b/code/_macros.dm
index 075d098e3d50..abfa83df7d36 100644
--- a/code/_macros.dm
+++ b/code/_macros.dm
@@ -74,7 +74,7 @@
lazy_list[key] |= value;
// Insert an object A into a sorted list using cmp_proc (/code/_helpers/cmp.dm) for comparison.
-#define ADD_SORTED(list, A, cmp_proc) if(!list.len) {list.Add(A)} else {list.Insert(FindElementIndex(A, list, cmp_proc), A)}
+#define ADD_SORTED(list, A, cmp_proc) if(!length(list)) {list.Add(A)} else {list.Insert(FindElementIndex(A, list, cmp_proc), A)}
//Currently used in SDQL2 stuff
#define send_output(target, msg, control) target << output(msg, control)
diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm
index 678c5373fe67..af0882d6a9df 100644
--- a/code/_onclick/adjacent.dm
+++ b/code/_onclick/adjacent.dm
@@ -262,10 +262,10 @@ Quick adjacency (to turf):
// Make sure pass flags are removed
A.remove_temp_pass_flags(pass_flags)
- if ((fd1 && !blockers["fd1"].len) || (fd2 && !blockers["fd2"].len)) // This means that for a given direction it did not have a blocker
+ if ((fd1 && !length(blockers["fd1"])) || (fd2 && !length(blockers["fd2"]))) // This means that for a given direction it did not have a blocker
return src
- if (blockers["fd1"].len || blockers["fd2"].len)
+ if (length(blockers["fd1"]) || length(blockers["fd2"]))
var/guaranteed_hit = 0 // indicates whether there is a guaranteed hit (aka there is not chance to bypass blocker). 0 = nothing
var/list/cur_dense_blockers = list()
for (var/atom/blocker in blockers["fd1"])
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 57c529c7a156..a5d07ec060cb 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -199,7 +199,7 @@
if (mods["alt"])
var/turf/T = get_turf(src)
- if(T && user.TurfAdjacent(T) && T.contents.len)
+ if(T && user.TurfAdjacent(T) && length(T.contents))
user.set_listed_turf(T)
return TRUE
diff --git a/code/_onclick/click_hold.dm b/code/_onclick/click_hold.dm
index 41e2be147d85..1d6c25619e5e 100644
--- a/code/_onclick/click_hold.dm
+++ b/code/_onclick/click_hold.dm
@@ -88,7 +88,7 @@
if(mods["left"])
SEND_SIGNAL(src, COMSIG_CLIENT_LMB_DRAG, src_obj, over_obj, params)
- var/atom/last_atom = LAZYACCESS(mouse_trace_history, mouse_trace_history.len)
+ var/atom/last_atom = LAZYACCESS(mouse_trace_history, length(mouse_trace_history))
if(over_obj == last_atom)
return
diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm
index 7277c74b2fd3..2d49abb52012 100644
--- a/code/_onclick/hud/hud.dm
+++ b/code/_onclick/hud/hud.dm
@@ -91,19 +91,19 @@
/datum/hud/Destroy()
if(mymob.hud_used == src)
mymob.hud_used = null
- if(static_inventory.len)
+ if(length(static_inventory))
for(var/thing in static_inventory)
qdel(thing)
static_inventory.Cut()
- if(toggleable_inventory.len)
+ if(length(toggleable_inventory))
for(var/thing in toggleable_inventory)
qdel(thing)
toggleable_inventory.Cut()
- if(hotkeybuttons.len)
+ if(length(hotkeybuttons))
for(var/thing in hotkeybuttons)
qdel(thing)
hotkeybuttons.Cut()
- if(infodisplay.len)
+ if(length(infodisplay))
for(var/thing in infodisplay)
qdel(thing)
infodisplay.Cut()
@@ -188,24 +188,24 @@
switch(display_hud_version)
if(HUD_STYLE_STANDARD) //Default HUD
hud_shown = 1 //Governs behavior of other procs
- if(static_inventory.len)
+ if(length(static_inventory))
screenmob.client.add_to_screen(static_inventory)
- if(toggleable_inventory.len && inventory_shown)
+ if(length(toggleable_inventory) && inventory_shown)
screenmob.client.add_to_screen(toggleable_inventory)
- if(hotkeybuttons.len && !hotkey_ui_hidden)
+ if(length(hotkeybuttons) && !hotkey_ui_hidden)
screenmob.client.add_to_screen(hotkeybuttons)
- if(infodisplay.len)
+ if(length(infodisplay))
screenmob.client.add_to_screen(infodisplay)
if(HUD_STYLE_REDUCED) //Reduced HUD
hud_shown = 0 //Governs behavior of other procs
- if(static_inventory.len)
+ if(length(static_inventory))
screenmob.client.remove_from_screen(static_inventory)
- if(toggleable_inventory.len)
+ if(length(toggleable_inventory))
screenmob.client.remove_from_screen(toggleable_inventory)
- if(hotkeybuttons.len)
+ if(length(hotkeybuttons))
screenmob.client.remove_from_screen(hotkeybuttons)
- if(infodisplay.len)
+ if(length(infodisplay))
screenmob.client.add_to_screen(infodisplay)
//These ones are a part of 'static_inventory', 'toggleable_inventory' or 'hotkeybuttons' but we want them to stay
@@ -218,13 +218,13 @@
if(HUD_STYLE_NOHUD) //No HUD
hud_shown = 0 //Governs behavior of other procs
- if(static_inventory.len)
+ if(length(static_inventory))
screenmob.client.remove_from_screen(static_inventory)
- if(toggleable_inventory.len)
+ if(length(toggleable_inventory))
screenmob.client.remove_from_screen(toggleable_inventory)
- if(hotkeybuttons.len)
+ if(length(hotkeybuttons))
screenmob.client.remove_from_screen(hotkeybuttons)
- if(infodisplay.len)
+ if(length(infodisplay))
screenmob.client.remove_from_screen(infodisplay)
hud_version = display_hud_version
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index b8b55b42c028..bbdfaa25b92f 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -120,7 +120,7 @@
if(!screenmob?.client)
return
- if(!gear.len)
+ if(!length(gear))
inventory_shown = FALSE
return //species without inv slots don't show items.
diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm
index 2886b2edb0ee..244e79e583f6 100644
--- a/code/_onclick/hud/radial.dm
+++ b/code/_onclick/hud/radial.dm
@@ -143,9 +143,9 @@ GLOBAL_LIST_EMPTY(radial_menus)
zone = 360 - starting_angle + ending_angle
max_elements = floor(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/slice/new_element = new /atom/movable/screen/radial/slice
new_element.tooltips = use_tooltips
@@ -246,7 +246,7 @@ 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, use_tooltips, use_labels)
if(length(choices))
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index 8508352bb338..a8162911804b 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -119,7 +119,7 @@
layer = HUD_LAYER
/atom/movable/screen/storage/proc/update_fullness(obj/item/storage/master_storage)
- if(!master_storage.contents.len)
+ if(!length(master_storage.contents))
color = null
else
var/total_w = 0
@@ -131,7 +131,7 @@
if (master_storage.storage_slots == null)
fullness = floor(10*total_w/master_storage.max_storage_space)
else
- fullness = floor(10*master_storage.contents.len/master_storage.storage_slots)
+ fullness = floor(10*length(master_storage.contents)/master_storage.storage_slots)
switch(fullness)
if(10)
color = "#ff0000"
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index ffcab30234ae..1a3c279db8b3 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -90,7 +90,7 @@
power = floor(power * (1 + 0.25 * user.skills.get_skill_level(SKILL_MELEE_WEAPONS))) //25% bonus per melee level
if(!ishuman(M))
var/used_verb = "attacked"
- if(attack_verb && attack_verb.len)
+ if(LAZYLEN(attack_verb))
used_verb = pick(attack_verb)
user.visible_message(SPAN_DANGER("[M] has been [used_verb] with [src][showname]."), \
SPAN_DANGER("You [used_verb] [M == user ? "yourself":M] with [src]."), null, 5, CHAT_TYPE_MELEE_HIT)
diff --git a/code/_onclick/ventcrawl.dm b/code/_onclick/ventcrawl.dm
index e1877dcbd0a7..72fe31f35cdc 100644
--- a/code/_onclick/ventcrawl.dm
+++ b/code/_onclick/ventcrawl.dm
@@ -24,10 +24,10 @@
for(var/obj/structure/pipes/vents/V in range(1))
if(Adjacent(V) && !V.welded)
pipes |= V
- if(!pipes || !pipes.len)
+ if(!LAZYLEN(pipes))
to_chat(src, SPAN_WARNING("There are no pipes that we can ventcrawl into within range!"))
return
- if(pipes.len == 1)
+ if(length(pipes) == 1)
pipe = pipes[1]
else
pipe = tgui_input_list(usr, "Crawl Through Vent", "Pick a pipe", pipes)
diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm
index 657e7470fc54..49dae4c2ff38 100644
--- a/code/controllers/configuration/config_entry.dm
+++ b/code/controllers/configuration/config_entry.dm
@@ -125,7 +125,7 @@
if(isnull(temp))
return FALSE
new_list += temp
- if(!new_list.len)
+ if(!length(new_list))
return FALSE
config_entry_value = new_list
return TRUE
diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm
index 147f57fcb1aa..7207f878614a 100644
--- a/code/controllers/configuration/configuration.dm
+++ b/code/controllers/configuration/configuration.dm
@@ -329,7 +329,7 @@
continue
in_character_filter += REGEX_QUOTE(line)
- ic_filter_regex = in_character_filter.len ? regex("\\b([jointext(in_character_filter, "|")])\\b", "i") : null
+ ic_filter_regex = length(in_character_filter) ? regex("\\b([jointext(in_character_filter, "|")])\\b", "i") : null
//Message admins when you can.
/datum/controller/configuration/proc/DelayedMessageAdmins(text)
diff --git a/code/controllers/mc/globals.dm b/code/controllers/mc/globals.dm
index 724f58010699..59b96c017d10 100644
--- a/code/controllers/mc/globals.dm
+++ b/code/controllers/mc/globals.dm
@@ -20,7 +20,7 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars)
QDEL_IN(exclude_these, 0) //signal logging isn't ready
- log_world("[vars.len - gvars_datum_in_built_vars.len] global variables")
+ log_world("[length(vars) - length(gvars_datum_in_built_vars)] global variables")
Initialize()
@@ -42,10 +42,10 @@ GLOBAL_REAL(GLOB, /datum/controller/global_vars)
gvars_datum_init_order = list()
gvars_datum_protected_varlist = list(NAMEOF(src, 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/mc/master.dm b/code/controllers/mc/master.dm
index edfda35a1e75..31460bf4e9c5 100644
--- a/code/controllers/mc/master.dm
+++ b/code/controllers/mc/master.dm
@@ -415,9 +415,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/shuttle_controller.dm b/code/controllers/shuttle_controller.dm
index 35031cf7334f..fb0cb1ff7637 100644
--- a/code/controllers/shuttle_controller.dm
+++ b/code/controllers/shuttle_controller.dm
@@ -215,7 +215,7 @@
dock_controller_map[shuttle.docking_controller_tag] = shuttle
//search for the controllers, if we have one.
- if(dock_controller_map.len)
+ if(length(dock_controller_map))
for(var/obj/structure/machinery/embedded_controller/radio/C in GLOB.machines) //only radio controllers are supported at the moment
if (istype(C.program, /datum/computer/file/embedded_program/docking))
if(dock_controller_map[C.id_tag])
@@ -226,7 +226,7 @@
//sanity check
//NO SANITY
-// if (dock_controller_map.len || dock_controller_map_station.len || dock_controller_map_offsite.len)
+// if (length(dock_controller_map) || length(dock_controller_map_station) || length(dock_controller_map_offsite))
// var/dat = ""
// for (var/dock_tag in dock_controller_map + dock_controller_map_station + dock_controller_map_offsite)
// dat += "\"[dock_tag]\", "
diff --git a/code/controllers/subsystem/acid_pillar.dm b/code/controllers/subsystem/acid_pillar.dm
index aaa38834667f..70994e641503 100644
--- a/code/controllers/subsystem/acid_pillar.dm
+++ b/code/controllers/subsystem/acid_pillar.dm
@@ -11,8 +11,8 @@ SUBSYSTEM_DEF(acid_pillar)
if (!resumed)
currentrun = queuedrun.Copy()
- while (currentrun.len)
- var/hash = currentrun[currentrun.len]
+ while (length(currentrun))
+ var/hash = currentrun[length(currentrun)]
var/datum/acid_spray_info/data = currentrun[hash]
currentrun.len--
diff --git a/code/controllers/subsystem/atoms.dm b/code/controllers/subsystem/atoms.dm
index f0d5ee14363e..dbe2f1a39c6b 100644
--- a/code/controllers/subsystem/atoms.dm
+++ b/code/controllers/subsystem/atoms.dm
@@ -62,7 +62,7 @@ SUBSYSTEM_DEF(atoms)
processing_late_loaders = TRUE
- for(var/I = 1; I <= late_loaders.len; I++)
+ for(var/I = 1; I <= length(late_loaders); I++)
var/atom/A = late_loaders[I]
//I hate that we need this
if(QDELETED(A))
@@ -70,7 +70,7 @@ SUBSYSTEM_DEF(atoms)
A.LateInitialize()
#ifdef TESTING
- testing("Late initialized [late_loaders.len] atoms")
+ testing("Late initialized [length(late_loaders)] atoms")
#endif
late_loaders.Cut()
processing_late_loaders = FALSE
@@ -87,10 +87,10 @@ SUBSYSTEM_DEF(atoms)
var/list/mapload_arg = list(TRUE)
if(atoms)
#ifdef TESTING
- count = atoms.len
+ count = length(atoms)
#endif
- for(var/I in 1 to atoms.len)
+ for(var/I in 1 to length(atoms))
var/atom/A = atoms[I]
if(!(A.flags_atom & INITIALIZED))
CHECK_TICK
diff --git a/code/controllers/subsystem/cellauto.dm b/code/controllers/subsystem/cellauto.dm
index b543ddd43c26..983d168d61a1 100644
--- a/code/controllers/subsystem/cellauto.dm
+++ b/code/controllers/subsystem/cellauto.dm
@@ -9,15 +9,15 @@ SUBSYSTEM_DEF(cellauto)
var/list/currentrun = list()
/datum/controller/subsystem/cellauto/stat_entry(msg)
- msg = "C: [GLOB.cellauto_cells.len]"
+ msg = "C: [length(GLOB.cellauto_cells)]"
return ..()
/datum/controller/subsystem/cellauto/fire(resumed = FALSE)
if (!resumed)
currentrun = GLOB.cellauto_cells.Copy()
- while(currentrun.len)
- var/datum/automata_cell/C = currentrun[currentrun.len]
+ while(length(currentrun))
+ var/datum/automata_cell/C = currentrun[length(currentrun)]
currentrun.len--
if (!C || QDELETED(C))
diff --git a/code/controllers/subsystem/decorator.dm b/code/controllers/subsystem/decorator.dm
index 6194b05d561b..ac63fca47ac5 100644
--- a/code/controllers/subsystem/decorator.dm
+++ b/code/controllers/subsystem/decorator.dm
@@ -35,7 +35,7 @@ SUBSYSTEM_DEF(decorator)
if(!decor.is_active_decor())
continue
var/list/applicable_types = decor.get_decor_types()
- if(!applicable_types || !applicable_types.len)
+ if(!LAZYLEN(applicable_types))
continue
active_decorators |= decor
for(var/app_type in applicable_types)
@@ -64,7 +64,7 @@ SUBSYSTEM_DEF(decorator)
currentrun = swap
while(length(currentrun))
- var/datum/weakref/ref = currentrun[currentrun.len]
+ var/datum/weakref/ref = currentrun[length(currentrun)]
currentrun.len--
var/atom/A = ref?.resolve()
if(A) A.Decorate(deferable = FALSE)
@@ -80,7 +80,7 @@ SUBSYSTEM_DEF(decorator)
// DECORATOR IS ENABLED FORCEFULLY
var/list/applicable_types = decor.get_decor_types()
- if(!applicable_types || !applicable_types.len)
+ if(!LAZYLEN(applicable_types))
return
active_decorators |= decor
for(var/app_type in applicable_types)
@@ -100,7 +100,7 @@ SUBSYSTEM_DEF(decorator)
/datum/controller/subsystem/decorator/stat_entry(msg)
if(registered_decorators && decoratable)
- msg = "D:[registered_decorators.len],P:[decoratable.len]"
+ msg = "D:[length(registered_decorators)],P:[length(decoratable)]"
return ..()
/datum/controller/subsystem/decorator/proc/decorate(atom/o)
@@ -118,25 +118,25 @@ SUBSYSTEM_DEF(decorator)
/datum/controller/subsystem/decorator/proc/sortDecorators(list/datum/decorator/L)
if(!istype(L))
return null
- if(L.len < 2)
+ if(length(L) < 2)
return L
- var/middle = L.len / 2 + 1
+ var/middle = length(L) / 2 + 1
return mergeDecoratorLists(sortDecorators(L.Copy(0, middle)), sortDecorators(L.Copy(middle)))
/datum/controller/subsystem/decorator/proc/mergeDecoratorLists(list/datum/decorator/L, list/datum/decorator/R)
var/Li=1
var/Ri=1
var/list/result = new()
- while(Li <= L.len && Ri <= R.len)
+ while(Li <= length(L) && Ri <= length(R))
if(sorttext(L[Li].priority, R[Ri].priority) < 1)
// Works around list += list2 merging lists; it's not pretty but it works
result += "temp item"
- result[result.len] = R[Ri++]
+ result[length(result)] = R[Ri++]
else
result += "temp item"
- result[result.len] = L[Li++]
+ result[length(result)] = L[Li++]
- if(Li <= L.len)
+ if(Li <= length(L))
return (result + L.Copy(Li, 0))
return (result + R.Copy(Ri, 0))
diff --git a/code/controllers/subsystem/disease.dm b/code/controllers/subsystem/disease.dm
index b98187ca252c..342a6b28906b 100644
--- a/code/controllers/subsystem/disease.dm
+++ b/code/controllers/subsystem/disease.dm
@@ -8,15 +8,15 @@ SUBSYSTEM_DEF(disease)
var/list/datum/disease/currentrun = list()
/datum/controller/subsystem/disease/stat_entry(msg)
- msg = "P:[all_diseases.len]"
+ msg = "P:[length(all_diseases)]"
return ..()
/datum/controller/subsystem/disease/fire(resumed = FALSE)
if (!resumed)
currentrun = all_diseases.Copy()
- while (currentrun.len)
- var/datum/disease/D = currentrun[currentrun.len]
+ while (length(currentrun))
+ var/datum/disease/D = currentrun[length(currentrun)]
currentrun.len--
if (!D || QDELETED(D))
diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm
index f4dd544784f0..db1b07475489 100644
--- a/code/controllers/subsystem/events.dm
+++ b/code/controllers/subsystem/events.dm
@@ -35,8 +35,8 @@ SUBSYSTEM_DEF(events)
//cache for sanic speed (lists are references anyways)
var/list/currentrun = src.currentrun
- while(currentrun.len)
- var/datum/thing = currentrun[currentrun.len]
+ while(length(currentrun))
+ var/datum/thing = currentrun[length(currentrun)]
currentrun.len--
if(thing)
thing.process()
diff --git a/code/controllers/subsystem/fz_transitions.dm b/code/controllers/subsystem/fz_transitions.dm
index d12ab1358535..5a6db625145c 100644
--- a/code/controllers/subsystem/fz_transitions.dm
+++ b/code/controllers/subsystem/fz_transitions.dm
@@ -10,7 +10,7 @@ SUBSYSTEM_DEF(fz_transitions)
flags = SS_KEEP_TIMING
/datum/controller/subsystem/fz_transitions/stat_entry(msg)
- msg = "P:[GLOB.projectors.len]|C:[GLOB.clones.len]|T:[GLOB.clones_t.len]"
+ msg = "P:[length(GLOB.projectors)]|C:[length(GLOB.clones)]|T:[length(GLOB.clones_t)]"
return ..()
/datum/controller/subsystem/fz_transitions/Initialize()
diff --git a/code/controllers/subsystem/garbage.dm b/code/controllers/subsystem/garbage.dm
index 37c305d59cde..072419df2cbd 100644
--- a/code/controllers/subsystem/garbage.dm
+++ b/code/controllers/subsystem/garbage.dm
@@ -297,7 +297,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]
/// Qdel Item: Holds statistics on each type that passes thru qdel
diff --git a/code/controllers/subsystem/human.dm b/code/controllers/subsystem/human.dm
index ffbbb7aa9240..3bc67c48a2be 100644
--- a/code/controllers/subsystem/human.dm
+++ b/code/controllers/subsystem/human.dm
@@ -10,15 +10,15 @@ SUBSYSTEM_DEF(human)
/datum/controller/subsystem/human/stat_entry(msg)
- msg = "P:[processable_human_list.len]"
+ msg = "P:[length(processable_human_list)]"
return ..()
/datum/controller/subsystem/human/fire(resumed = FALSE)
if (!resumed)
currentrun = processable_human_list.Copy()
- while (currentrun.len)
- var/mob/living/carbon/human/M = currentrun[currentrun.len]
+ while (length(currentrun))
+ var/mob/living/carbon/human/M = currentrun[length(currentrun)]
currentrun.len--
if (!M || QDELETED(M))
diff --git a/code/controllers/subsystem/init/landmarks.dm b/code/controllers/subsystem/init/landmarks.dm
index 31b71c074a5d..1fdf83083833 100644
--- a/code/controllers/subsystem/init/landmarks.dm
+++ b/code/controllers/subsystem/init/landmarks.dm
@@ -47,14 +47,14 @@ SUBSYSTEM_DEF(landmark_init)
message_admins("Item pool [pool.pool_name] has no master landmark, aborting item spawns. Tell the devs. Code: ITEM_POOL_3")
continue
- if (pool.quota > pool.turfs.len)
- log_debug("Item pool [pool.pool_name] wants to spawn more items than it has landmarks for. Spawning [pool.turfs.len] instances of [pool.type_to_spawn] instead. Code: ITEM_POOL_4")
- message_admins("Item pool [pool.pool_name] wants to spawn more items than it has landmarks for. Spawning [pool.turfs.len] instances of [pool.type_to_spawn] instead. Tell the devs. Code: ITEM_POOL_4")
- pool.quota = pool.turfs.len
+ if (pool.quota > length(pool.turfs))
+ log_debug("Item pool [pool.pool_name] wants to spawn more items than it has landmarks for. Spawning [length(pool.turfs)] instances of [pool.type_to_spawn] instead. Code: ITEM_POOL_4")
+ message_admins("Item pool [pool.pool_name] wants to spawn more items than it has landmarks for. Spawning [length(pool.turfs)] instances of [pool.type_to_spawn] instead. Tell the devs. Code: ITEM_POOL_4")
+ pool.quota = length(pool.turfs)
// Quota times, pick a random turf, spawn an item there, then remove that turf from the list.
for (var/i in 1 to pool.quota)
- var/turf/T = pool.turfs[rand(1, pool.turfs.len)]
+ var/turf/T = pool.turfs[rand(1, length(pool.turfs))]
var/atom/movable/newly_spawned = new pool.type_to_spawn()
newly_spawned.forceMove(T)
diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm
index 26d393d197b7..5dfd7bc5bbac 100644
--- a/code/controllers/subsystem/input.dm
+++ b/code/controllers/subsystem/input.dm
@@ -33,7 +33,7 @@ SUBSYSTEM_DEF(input)
// Badmins just wanna have fun ♪
/datum/controller/subsystem/input/proc/refresh_client_macro_sets()
var/list/clients = GLOB.clients
- for(var/i in 1 to clients.len)
+ for(var/i in 1 to length(clients))
var/client/user = clients[i]
INVOKE_ASYNC(user, /client/proc/set_macros)
diff --git a/code/controllers/subsystem/item_cleanup.dm b/code/controllers/subsystem/item_cleanup.dm
index 26958eb8742b..85c25e4712d3 100644
--- a/code/controllers/subsystem/item_cleanup.dm
+++ b/code/controllers/subsystem/item_cleanup.dm
@@ -18,9 +18,9 @@ SUBSYSTEM_DEF(item_cleanup)
//Do nothing for the first 35 minutes to preserve the colony look for the first drop
return
- var/to_delete = items_to_clean_up.len * percentage_of_garbage_to_delete
+ var/to_delete = length(items_to_clean_up) * percentage_of_garbage_to_delete
var/deleted = 0
- var/total_items = items_to_clean_up.len //save total before we start deleting stuff
+ var/total_items = length(items_to_clean_up) //save total before we start deleting stuff
for (var/atom/o in items_to_clean_up)
if(QDELETED(o))
items_to_clean_up -= o
@@ -34,9 +34,9 @@ SUBSYSTEM_DEF(item_cleanup)
break
//We transfer items from the global garbage list onto the next iteration list
- while(!isnull(GLOB.item_cleanup_list) && GLOB.item_cleanup_list.len > 0)
- addToListNoDupe(items_to_clean_up, GLOB.item_cleanup_list[GLOB.item_cleanup_list.len])
- GLOB.item_cleanup_list -= GLOB.item_cleanup_list[GLOB.item_cleanup_list.len]
+ while(!isnull(GLOB.item_cleanup_list) && length(GLOB.item_cleanup_list) > 0)
+ addToListNoDupe(items_to_clean_up, GLOB.item_cleanup_list[length(GLOB.item_cleanup_list)])
+ GLOB.item_cleanup_list -= GLOB.item_cleanup_list[length(GLOB.item_cleanup_list)]
log_debug("item_cleanup deleted [deleted] garbage out of total [total_items]")
diff --git a/code/controllers/subsystem/lighting.dm b/code/controllers/subsystem/lighting.dm
index 3c3d14468bc2..f8c6b14e6bf7 100644
--- a/code/controllers/subsystem/lighting.dm
+++ b/code/controllers/subsystem/lighting.dm
@@ -27,7 +27,7 @@ SUBSYSTEM_DEF(lighting)
/datum/controller/subsystem/lighting/stat_entry()
- . = ..("ShCalcs:[total_shadow_calculations]|SourcQ:[static_sources_queue.len]|CcornQ:[corners_queue.len]|ObjQ:[objects_queue.len]|HybrQ:[mask_queue.len]")
+ . = ..("ShCalcs:[total_shadow_calculations]|SourcQ:[length(static_sources_queue)]|CcornQ:[length(corners_queue)]|ObjQ:[length(objects_queue)]|HybrQ:[length(mask_queue)]")
/datum/controller/subsystem/lighting/fire(resumed, init_tick_checks)
MC_SPLIT_TICK_INIT(3)
diff --git a/code/controllers/subsystem/machinery.dm b/code/controllers/subsystem/machinery.dm
index 6a0f938475a1..a2860615274f 100644
--- a/code/controllers/subsystem/machinery.dm
+++ b/code/controllers/subsystem/machinery.dm
@@ -19,15 +19,15 @@ SUBSYSTEM_DEF(machinery)
return SS_INIT_SUCCESS
/datum/controller/subsystem/machinery/stat_entry(msg)
- msg = "M:[GLOB.processing_machines.len]"
+ msg = "M:[length(GLOB.processing_machines)]"
return ..()
/datum/controller/subsystem/machinery/fire(resumed = FALSE)
if (!resumed)
currentrunmachines = GLOB.processing_machines.Copy()
- while (currentrunmachines.len)
- var/obj/structure/machinery/M = currentrunmachines[currentrunmachines.len]
+ while (length(currentrunmachines))
+ var/obj/structure/machinery/M = currentrunmachines[length(currentrunmachines)]
currentrunmachines.len--
if (!M || QDELETED(M))
diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm
index f6c45453950d..0d8848217d4f 100644
--- a/code/controllers/subsystem/mapping.dm
+++ b/code/controllers/subsystem/mapping.dm
@@ -161,11 +161,11 @@ SUBSYSTEM_DEF(mapping)
if (!length(traits)) // null or empty - default
for (var/i in 1 to total_z)
traits += list(default_traits)
- else if (total_z != traits.len) // mismatch
- INIT_ANNOUNCE("WARNING: [traits.len] trait sets specified for [total_z] z-levels in [path]!")
- if (total_z < traits.len) // ignore extra traits
+ else if (total_z != length(traits)) // mismatch
+ INIT_ANNOUNCE("WARNING: [length(traits)] trait sets specified for [total_z] z-levels in [path]!")
+ if (total_z < length(traits)) // ignore extra traits
traits.Cut(total_z + 1)
- while (total_z > traits.len) // fall back to defaults on extra levels
+ while (total_z > length(traits)) // fall back to defaults on extra levels
traits += list(default_traits)
// preload the relevant space_level datums
@@ -236,8 +236,8 @@ SUBSYSTEM_DEF(mapping)
if(LAZYLEN(FailedZs)) //but seriously, unless the server's filesystem is messed up this will never happen
var/msg = "RED ALERT! The following map files failed to load: [FailedZs[1]]"
- if(FailedZs.len > 1)
- for(var/I in 2 to FailedZs.len)
+ if(length(FailedZs) > 1)
+ for(var/I in 2 to length(FailedZs))
msg += ", [FailedZs[I]]"
msg += ". Yell at your server host!"
INIT_ANNOUNCE(msg)
@@ -276,7 +276,7 @@ SUBSYSTEM_DEF(mapping)
. = list()
var/list/Lines = file2list(filename)
- if(!Lines.len)
+ if(!length(Lines))
return
for (var/t in Lines)
if (!t)
diff --git a/code/controllers/subsystem/mob.dm b/code/controllers/subsystem/mob.dm
index 60e7476da89b..3596b17e5d16 100644
--- a/code/controllers/subsystem/mob.dm
+++ b/code/controllers/subsystem/mob.dm
@@ -8,7 +8,7 @@ SUBSYSTEM_DEF(mob)
var/list/living_misc_mobs = list()
/datum/controller/subsystem/mob/stat_entry(msg)
- msg = "P:[living_misc_mobs.len]"
+ msg = "P:[length(living_misc_mobs)]"
return ..()
@@ -16,8 +16,8 @@ SUBSYSTEM_DEF(mob)
if (!resumed)
currentrun = living_misc_mobs.Copy()
- while (currentrun.len)
- var/mob/living/M = currentrun[currentrun.len]
+ while (length(currentrun))
+ var/mob/living/M = currentrun[length(currentrun)]
currentrun.len--
if (!M || QDELETED(M))
diff --git a/code/controllers/subsystem/nanoui.dm b/code/controllers/subsystem/nanoui.dm
index 85ad0d32aaf4..b0117016e38b 100644
--- a/code/controllers/subsystem/nanoui.dm
+++ b/code/controllers/subsystem/nanoui.dm
@@ -13,15 +13,15 @@ SUBSYSTEM_DEF(nano)
nanomanager = new()
/datum/controller/subsystem/nano/stat_entry(msg)
- msg = "P:[nanomanager.processing_uis.len]"
+ msg = "P:[length(nanomanager.processing_uis)]"
return ..()
/datum/controller/subsystem/nano/fire(resumed = FALSE)
if (!resumed)
currentrun = nanomanager.processing_uis.Copy()
- while (currentrun.len)
- var/datum/nanoui/UI = currentrun[currentrun.len]
+ while (length(currentrun))
+ var/datum/nanoui/UI = currentrun[length(currentrun)]
currentrun.len--
if (!UI || QDELETED(UI))
diff --git a/code/controllers/subsystem/perf_logging.dm b/code/controllers/subsystem/perf_logging.dm
index 5ca98ad10dd0..4a3066b758ba 100644
--- a/code/controllers/subsystem/perf_logging.dm
+++ b/code/controllers/subsystem/perf_logging.dm
@@ -26,8 +26,8 @@ SUBSYSTEM_DEF(perf_logging)
if(SS?.cost > 0.1)
currentrun += SS
- while(currentrun.len)
- var/datum/controller/subsystem/SS = currentrun[currentrun.len]
+ while(length(currentrun))
+ var/datum/controller/subsystem/SS = currentrun[length(currentrun)]
currentrun.len--
var/datum/entity/mc_controller/C = controller_assoc[SS.type]
new_record(SS, C)
diff --git a/code/controllers/subsystem/ping.dm b/code/controllers/subsystem/ping.dm
index c813081ed526..5d413c128684 100644
--- a/code/controllers/subsystem/ping.dm
+++ b/code/controllers/subsystem/ping.dm
@@ -14,7 +14,7 @@ SUBSYSTEM_DEF(ping)
var/list/currentrun = list()
/datum/controller/subsystem/ping/stat_entry()
- ..("P:[GLOB.clients.len]")
+ ..("P:[length(GLOB.clients)]")
/datum/controller/subsystem/ping/fire(resumed = FALSE)
// Prepare the new batch of clients
@@ -24,8 +24,8 @@ SUBSYSTEM_DEF(ping)
// De-reference the list for sanic speeds
var/list/currentrun = src.currentrun
- while (currentrun.len)
- var/client/client = currentrun[currentrun.len]
+ while (length(currentrun))
+ var/client/client = currentrun[length(currentrun)]
currentrun.len--
if (client?.tgui_panel?.is_ready())
diff --git a/code/controllers/subsystem/playtime.dm b/code/controllers/subsystem/playtime.dm
index 7a6d3b97a036..6813c4fabd78 100644
--- a/code/controllers/subsystem/playtime.dm
+++ b/code/controllers/subsystem/playtime.dm
@@ -12,8 +12,8 @@ SUBSYSTEM_DEF(playtime)
var/list/currentrun = src.currentrun
- while (currentrun.len)
- var/client/C = currentrun[currentrun.len]
+ while (length(currentrun))
+ var/client/C = currentrun[length(currentrun)]
currentrun.len--
var/mob/M = C.mob
diff --git a/code/controllers/subsystem/police_clues.dm b/code/controllers/subsystem/police_clues.dm
index 134eae9bca9e..0d39c72c874d 100644
--- a/code/controllers/subsystem/police_clues.dm
+++ b/code/controllers/subsystem/police_clues.dm
@@ -8,15 +8,15 @@ SUBSYSTEM_DEF(clues)
var/list/prints_list = list()
/datum/controller/subsystem/clues/stat_entry(msg)
- msg = "P:[prints_list.len]"
+ msg = "P:[length(prints_list)]"
return ..()
/datum/controller/subsystem/clues/fire(resumed = FALSE)
if(!resumed && length(prints_list))
currentrun = prints_list.Copy()
- while(currentrun.len)
- var/obj/effect/decal/prints/P = currentrun[currentrun.len]
+ while(length(currentrun))
+ var/obj/effect/decal/prints/P = currentrun[length(currentrun)]
currentrun.len--
if(!P || QDELETED(P))
diff --git a/code/controllers/subsystem/power.dm b/code/controllers/subsystem/power.dm
index 9908a60420b2..08668e5fc564 100644
--- a/code/controllers/subsystem/power.dm
+++ b/code/controllers/subsystem/power.dm
@@ -12,7 +12,7 @@ SUBSYSTEM_DEF(power)
var/list/currentrun_areas = list()
/datum/controller/subsystem/power/stat_entry(msg)
- msg = "PN:[GLOB.powernets.len]|PM:[GLOB.power_machines.len]|A:[GLOB.active_areas.len]"
+ msg = "PN:[length(GLOB.powernets)]|PM:[length(GLOB.power_machines)]|A:[length(GLOB.active_areas)]"
return ..()
@@ -29,8 +29,8 @@ SUBSYSTEM_DEF(power)
// First we reset the powernets.
// This is done first because we want the power machinery to have acted last on the powernet between intervals.
- while(currentrun_powerents.len)
- var/datum/powernet/Powernet = currentrun_powerents[currentrun_powerents.len]
+ while(length(currentrun_powerents))
+ var/datum/powernet/Powernet = currentrun_powerents[length(currentrun_powerents)]
currentrun_powerents.len--
if(Powernet)
Powernet.process()
@@ -39,8 +39,8 @@ SUBSYSTEM_DEF(power)
// Next we let the power machines operate, this way until the next tick it will be as if they have all done their work.
- while (currentrun_power_machines.len)
- var/datum/X = currentrun_power_machines[currentrun_power_machines.len]
+ while (length(currentrun_power_machines))
+ var/datum/X = currentrun_power_machines[length(currentrun_power_machines)]
currentrun_power_machines.len--
if (!X || QDELETED(X))
continue
diff --git a/code/controllers/subsystem/processing/obj_tab_items.dm b/code/controllers/subsystem/processing/obj_tab_items.dm
index 53786daf0117..6be6bceab1eb 100644
--- a/code/controllers/subsystem/processing/obj_tab_items.dm
+++ b/code/controllers/subsystem/processing/obj_tab_items.dm
@@ -12,8 +12,8 @@ PROCESSING_SUBSYSTEM_DEF(obj_tab_items)
//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)]
if(QDELETED(thing))
processing -= thing
else if(thing.process(wait * 0.1) == PROCESS_KILL)
diff --git a/code/controllers/subsystem/processing/processing.dm b/code/controllers/subsystem/processing/processing.dm
index 73a5db433dc8..c2736528df86 100644
--- a/code/controllers/subsystem/processing/processing.dm
+++ b/code/controllers/subsystem/processing/processing.dm
@@ -20,8 +20,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/projectiles.dm b/code/controllers/subsystem/projectiles.dm
index a23303ea282d..da3b5a7b9c71 100644
--- a/code/controllers/subsystem/projectiles.dm
+++ b/code/controllers/subsystem/projectiles.dm
@@ -28,7 +28,7 @@ SUBSYSTEM_DEF(projectiles)
*/
/datum/controller/subsystem/projectiles/stat_entry(msg)
- msg = " | #Proj: [projectiles.len]"
+ msg = " | #Proj: [length(projectiles)]"
return ..()
/datum/controller/subsystem/projectiles/Initialize(start_timeofday)
@@ -41,8 +41,8 @@ SUBSYSTEM_DEF(projectiles)
if(!resumed)
flying = projectiles.Copy()
flying -= sleepers
- while(flying.len)
- var/obj/projectile/projectile = flying[flying.len]
+ while(length(flying))
+ var/obj/projectile/projectile = flying[length(flying)]
flying.len--
var/delta_time = wait * world.tick_lag * (1 SECONDS)
handle_projectile_flight(projectile, delta_time)
diff --git a/code/controllers/subsystem/quadtrees.dm b/code/controllers/subsystem/quadtrees.dm
index da217cb58cee..8c55cb8f1c50 100644
--- a/code/controllers/subsystem/quadtrees.dm
+++ b/code/controllers/subsystem/quadtrees.dm
@@ -24,17 +24,17 @@ SUBSYSTEM_DEF(quadtree)
if(!resumed)
player_feed = GLOB.clients.Copy()
cur_quadtrees = new_quadtrees.Copy()
- if(new_quadtrees.len < world.maxz)
+ if(length(new_quadtrees) < world.maxz)
new_quadtrees.len = world.maxz
for(var/i in 1 to world.maxz)
new_quadtrees[i] = QTREE(RECT(world.maxx/2,world.maxy/2, world.maxx, world.maxy), i)
while(length(player_feed))
- var/client/C = player_feed[player_feed.len]
+ var/client/C = player_feed[length(player_feed)]
player_feed.len--
if(!C) continue
var/turf/T = get_turf(C.mob)
- if(!T?.z || new_quadtrees.len < T.z)
+ if(!T?.z || length(new_quadtrees) < T.z)
continue
var/datum/coords/qtplayer/p_coords = new
p_coords.player = C
@@ -52,7 +52,7 @@ SUBSYSTEM_DEF(quadtree)
var/list/players = list()
if(!cur_quadtrees)
return players
- if(z_level && cur_quadtrees.len >= z_level)
+ if(z_level && length(cur_quadtrees) >= z_level)
var/datum/quadtree/Q = cur_quadtrees[z_level]
if(!Q)
return players
diff --git a/code/controllers/subsystem/round_recording.dm b/code/controllers/subsystem/round_recording.dm
index f1244d386d10..e45854ac5730 100644
--- a/code/controllers/subsystem/round_recording.dm
+++ b/code/controllers/subsystem/round_recording.dm
@@ -35,8 +35,8 @@ SUBSYSTEM_DEF(round_recording)
return
currentrun = recorder.tracked_players.Copy()
- while(currentrun.len)
- var/mob/M = currentrun[currentrun.len]
+ while(length(currentrun))
+ var/mob/M = currentrun[length(currentrun)]
currentrun.len--
// Try to stop the tracking
diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm
index 0348eddd9900..d400e02f3bae 100644
--- a/code/controllers/subsystem/shuttles.dm
+++ b/code/controllers/subsystem/shuttles.dm
@@ -94,7 +94,7 @@ SUBSYSTEM_DEF(shuttle)
qdel(T, force=TRUE)
if(!SSmapping.clearing_reserved_turfs)
- while(transit_requesters.len)
+ while(length(transit_requesters))
var/requester = popleft(transit_requesters)
var/success = null
// Do not try and generate any transit if we're using more then our max already
@@ -311,7 +311,7 @@ SUBSYSTEM_DEF(shuttle)
/datum/controller/subsystem/shuttle/proc/get_containing_shuttle(atom/A)
var/list/mobile_cache = mobile
- for(var/i in 1 to mobile_cache.len)
+ for(var/i in 1 to length(mobile_cache))
var/obj/docking_port/port = mobile_cache[i]
if(port.is_in_shuttle_bounds(A))
return port
@@ -319,7 +319,7 @@ SUBSYSTEM_DEF(shuttle)
/datum/controller/subsystem/shuttle/proc/get_containing_dock(atom/A)
. = 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.is_in_shuttle_bounds(A))
. += port
@@ -327,7 +327,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
@@ -335,7 +335,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)
@@ -353,7 +353,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/sound.dm b/code/controllers/subsystem/sound.dm
index 4fdfd7935349..024df7cc45ad 100644
--- a/code/controllers/subsystem/sound.dm
+++ b/code/controllers/subsystem/sound.dm
@@ -24,7 +24,7 @@ SUBSYSTEM_DEF(sound)
if(MC_TICK_CHECK)
return
while(length(run_hearers)) // Output sound to hearers
- var/client/C = run_hearers[run_hearers.len]
+ var/client/C = run_hearers[length(run_hearers)]
run_hearers.len--
if(C && C.soundOutput)
C.soundOutput.process_sound(run_template)
@@ -40,6 +40,6 @@ SUBSYSTEM_DEF(sound)
for(var/datum/interior/VI in extra_interiors)
if(VI?.ready)
var/list/bounds = VI.get_middle_coords()
- if(bounds.len >= 2)
+ if(length(bounds) >= 2)
hearers |= SSquadtree.players_in_range(RECT(bounds[1], bounds[2], VI.map_template.width, VI.map_template.height), bounds[3])
template_queue[template] = hearers
diff --git a/code/controllers/subsystem/soundscape.dm b/code/controllers/subsystem/soundscape.dm
index 2219a0b35c86..432166e06be9 100644
--- a/code/controllers/subsystem/soundscape.dm
+++ b/code/controllers/subsystem/soundscape.dm
@@ -15,8 +15,8 @@ SUBSYSTEM_DEF(soundscape)
if(!resumed)
currentrun = GLOB.clients.Copy()
- while(currentrun.len)
- var/client/C = currentrun[currentrun.len]
+ while(length(currentrun))
+ var/client/C = currentrun[length(currentrun)]
currentrun.len--
if(!C || !C.soundOutput)
diff --git a/code/controllers/subsystem/statpanel.dm b/code/controllers/subsystem/statpanel.dm
index 030043d12d3a..613c8df5850f 100644
--- a/code/controllers/subsystem/statpanel.dm
+++ b/code/controllers/subsystem/statpanel.dm
@@ -197,7 +197,7 @@ SUBSYSTEM_DEF(statpanels)
/datum/controller/subsystem/statpanels/proc/generate_mc_data()
mc_data = list(
list("CPU:", world.cpu),
- list("Instances:", "[num2text(world.contents.len, 10)]"),
+ list("Instances:", "[num2text(length(world.contents), 10)]"),
list("World Time:", "[world.time]"),
list("Globals:", GLOB.stat_entry(), "\ref[GLOB]"),
list("[config]:", config.stat_entry(), "\ref[config]"),
diff --git a/code/controllers/subsystem/tgui.dm b/code/controllers/subsystem/tgui.dm
index 0bd0c29e450a..a3ef03f3e397 100644
--- a/code/controllers/subsystem/tgui.dm
+++ b/code/controllers/subsystem/tgui.dm
@@ -45,8 +45,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?.user && ui.src_object)
diff --git a/code/controllers/subsystem/tracking.dm b/code/controllers/subsystem/tracking.dm
index 3955ace8da09..4dcc5d5c4e29 100644
--- a/code/controllers/subsystem/tracking.dm
+++ b/code/controllers/subsystem/tracking.dm
@@ -98,7 +98,7 @@ SUBSYSTEM_DEF(tracking)
/datum/controller/subsystem/tracking/proc/setup_trackers(mob/mob, tracked_group)
if(!tracked_group)
- tracked_group = "tracked_[tracked_mobs.len]"
+ tracked_group = "tracked_[length(tracked_mobs)]"
tracked_mobs[tracked_group] = list()
leaders[tracked_group] = mob
diff --git a/code/controllers/subsystem/xeno.dm b/code/controllers/subsystem/xeno.dm
index 0623da804254..df711fd90366 100644
--- a/code/controllers/subsystem/xeno.dm
+++ b/code/controllers/subsystem/xeno.dm
@@ -7,7 +7,7 @@ SUBSYSTEM_DEF(xeno)
var/list/currentrun = list()
/datum/controller/subsystem/xeno/stat_entry(msg)
- msg = "P:[GLOB.xeno_mob_list.len]"
+ msg = "P:[length(GLOB.xeno_mob_list)]"
return ..()
@@ -15,8 +15,8 @@ SUBSYSTEM_DEF(xeno)
if (!resumed)
currentrun = GLOB.xeno_mob_list.Copy()
- while (currentrun.len)
- var/mob/living/carbon/xenomorph/M = currentrun[currentrun.len]
+ while (length(currentrun))
+ var/mob/living/carbon/xenomorph/M = currentrun[length(currentrun)]
currentrun.len--
if (!M || QDELETED(M))
diff --git a/code/datums/_ndatabase/code/brsql_adapter.dm b/code/datums/_ndatabase/code/brsql_adapter.dm
index 251267a04fdb..2362572f588a 100644
--- a/code/datums/_ndatabase/code/brsql_adapter.dm
+++ b/code/datums/_ndatabase/code/brsql_adapter.dm
@@ -103,7 +103,7 @@
/datum/db/adapter/brsql_adapter/insert_table(table_name, list/values, datum/callback/CB, sync = FALSE)
set waitfor = FALSE
- var/length = values.len
+ var/length = length(values)
var/list/qpars = list()
var/query_inserttable = getquery_insert_table(table_name, values, qpars)
var/datum/callback/callback = CALLBACK(src, TYPE_PROC_REF(/datum/db/adapter/brsql_adapter, after_insert_table), CB, length, table_name)
@@ -150,7 +150,7 @@
if(table_meta.status != DB_QUERY_FINISHED)
issue_log += "Unable to access system table, error: '[table_meta.error]'"
return FALSE // OH SHIT OH FUCK
- if(!table_meta.results.len) // Table doesn't exist
+ if(!length(table_meta.results)) // Table doesn't exist
return internal_create_table(table_name, field_types) && internal_record_table_in_sys(type_name, table_name, field_types)
var/id = table_meta.results[1][DB_DEFAULT_ID_FIELD]
@@ -178,7 +178,7 @@
if(index_meta.status != DB_QUERY_FINISHED)
issue_log += "Unable to access system index table, error: '[index_meta.error]'"
return FALSE // OH SHIT OH FUCK
- if(!index_meta.results.len) // Index doesn't exist
+ if(!length(index_meta.results)) // Index doesn't exist
return internal_create_index(index_name, table_name, fields, unique, cluster) && internal_record_index_in_sys(index_name, table_name, fields)
var/id = index_meta.results[1][DB_DEFAULT_ID_FIELD]
diff --git a/code/datums/_ndatabase/code/native_adapter.dm b/code/datums/_ndatabase/code/native_adapter.dm
index 1c23a6ceab8f..d5956ca8d85f 100644
--- a/code/datums/_ndatabase/code/native_adapter.dm
+++ b/code/datums/_ndatabase/code/native_adapter.dm
@@ -92,7 +92,7 @@
/datum/db/adapter/native_adapter/insert_table(table_name, list/values, datum/callback/CB, sync = FALSE)
set waitfor = 0
- var/length = values.len
+ var/length = length(values)
var/startid = internal_request_insert_allocation(table_name, length)
var/list/qpars = list()
var/query_inserttable = getquery_insert_table(table_name, values, startid, qpars)
@@ -138,7 +138,7 @@
if(table_meta.status != DB_QUERY_FINISHED)
issue_log += "Unable to access system table, error: '[table_meta.error]'"
return FALSE // OH SHIT OH FUCK
- if(!table_meta.results.len) // Table doesn't exist
+ if(!length(table_meta.results)) // Table doesn't exist
return internal_create_table(table_name, field_types) && internal_record_table_in_sys(type_name, table_name, field_types)
var/id = table_meta.results[1][DB_DEFAULT_ID_FIELD]
diff --git a/code/datums/_ndatabase/code/native_persistent_query.dm b/code/datums/_ndatabase/code/native_persistent_query.dm
index 15e505d578d7..39025aa1fd93 100644
--- a/code/datums/_ndatabase/code/native_persistent_query.dm
+++ b/code/datums/_ndatabase/code/native_persistent_query.dm
@@ -29,7 +29,7 @@
/datum/db/query/native/read_single()
if(status >= DB_QUERY_FINISHED || completed) //broken or finished
return
-
+
if(!completed)
completed = TRUE
var/status = query.Execute(db)
@@ -41,9 +41,9 @@
if(!results)
results = list()
var/list/cols = query.Columns()
- if(cols && cols.len>0)
+ if(LAZYLEN(cols)>0)
while(query.NextRow())
var/list/current_row = query.GetRowData()
results += list(current_row)
- affected_rows = query.RowsAffected()
+ affected_rows = query.RowsAffected()
status = DB_QUERY_FINISHED
diff --git a/code/datums/_ndatabase/subsystems/database_query_manager.dm b/code/datums/_ndatabase/subsystems/database_query_manager.dm
index 596d55121920..5a68c4e349c1 100644
--- a/code/datums/_ndatabase/subsystems/database_query_manager.dm
+++ b/code/datums/_ndatabase/subsystems/database_query_manager.dm
@@ -62,7 +62,7 @@ GLOBAL_REAL(SSdatabase, /datum/controller/subsystem/database_query_manager)
/datum/controller/subsystem/database_query_manager/stat_entry(msg)
var/text = (connection && connection.status == DB_CONNECTION_READY) ? ("READY") : ("PREPPING")
- msg = "[text], AQ:[queries_active.len]; SQ:[queries_standby.len]; P:[queries_current.len]; C:[in_callback]"
+ msg = "[text], AQ:[length(queries_active)]; SQ:[length(queries_standby)]; P:[length(queries_current)]; C:[in_callback]"
return ..()
/datum/controller/subsystem/database_query_manager/fire(resumed = FALSE)
diff --git a/code/datums/_ndatabase/subsystems/entity_manager.dm b/code/datums/_ndatabase/subsystems/entity_manager.dm
index 833bc6926e09..2ef5da2b22dd 100644
--- a/code/datums/_ndatabase/subsystems/entity_manager.dm
+++ b/code/datums/_ndatabase/subsystems/entity_manager.dm
@@ -102,8 +102,8 @@ GLOBAL_REAL(SSentity_manager, /datum/controller/subsystem/entity_manager)
currentrun = tables_unsorted.Copy()
if(!SSdatabase.connection.connection_ready())
return
- while (currentrun.len)
- var/datum/entity_meta/Q = currentrun[currentrun.len]
+ while (length(currentrun))
+ var/datum/entity_meta/Q = currentrun[length(currentrun)]
do_select(Q)
do_insert(Q)
do_update(Q)
diff --git a/code/datums/_ndatabase/tests/test_entity.dm b/code/datums/_ndatabase/tests/test_entity.dm
index de1942eec7d3..3bc9cc829bf4 100644
--- a/code/datums/_ndatabase/tests/test_entity.dm
+++ b/code/datums/_ndatabase/tests/test_entity.dm
@@ -50,7 +50,7 @@
SSentity_manager.filter_then(/datum/entity/test_entity, DB_COMP("value", DB_EQUALS, value), CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(log_filter)))
/proc/log_filter(list/datum/entity/elist)
- to_world("got [elist.len] items")
+ to_world("got [length(elist)] items")
/proc/log_sync(datum/entity/test_entity/ET)
to_world("id:[ET.id] = name: [ET.name], description: [ET.description], value: [ET.value]")
diff --git a/code/datums/ammo/ammo.dm b/code/datums/ammo/ammo.dm
index a59290ab5f51..022909691cfc 100644
--- a/code/datums/ammo/ammo.dm
+++ b/code/datums/ammo/ammo.dm
@@ -212,7 +212,7 @@
M.apply_damage(damage,damage_type)
- if(XNO && XNO.xeno_shields.len)
+ if(XNO && length(XNO.xeno_shields))
P.play_shielded_hit_effect(M)
else
P.play_hit_effect(M)
diff --git a/code/datums/ammo/misc.dm b/code/datums/ammo/misc.dm
index d3ce356372be..9a9ed2fb505b 100644
--- a/code/datums/ammo/misc.dm
+++ b/code/datums/ammo/misc.dm
@@ -200,7 +200,7 @@
if(!M || M == P.firer) return
if(M.throw_mode && !M.get_active_hand()) //empty active hand and we're in throw mode. If so we catch the can.
if(!M.is_mob_incapacitated()) // People who are not able to catch cannot catch.
- if(P.contents.len == 1)
+ if(length(P.contents) == 1)
for(var/obj/item/reagent_container/food/drinks/cans/souto/S in P.contents)
M.put_in_active_hand(S)
for(var/mob/O in viewers(GLOB.world_view_size, P)) //find all people in view.
@@ -214,7 +214,7 @@
H.apply_effect(15, DAZE)
H.apply_effect(15, SLOW)
shake_camera(H, 2, 1)
- if(P.contents.len)
+ if(length(P.contents))
drop_can(P.loc, P) //We make a can at the location.
/datum/ammo/souto/on_hit_obj(obj/O,obj/projectile/P)
@@ -230,7 +230,7 @@
drop_can(P.loc, P) //We make a can at the location.
/datum/ammo/souto/proc/drop_can(loc, obj/projectile/P)
- if(P.contents.len)
+ if(length(P.contents))
for(var/obj/item/I in P.contents)
I.forceMove(loc)
randomize_projectile(P)
diff --git a/code/datums/browser.dm b/code/datums/browser.dm
index 3b694e8f44bb..f7626214a73e 100644
--- a/code/datums/browser.dm
+++ b/code/datums/browser.dm
@@ -117,9 +117,9 @@
window_size = "size=[width]x[height];"
common_asset.send(user)
other_asset.send(user)
- if (stylesheets.len)
+ if (length(stylesheets))
SSassets.transport.send_assets(user, stylesheets)
- if (scripts.len)
+ if (length(scripts))
SSassets.transport.send_assets(user, scripts)
user << browse(get_content(), "window=[window_id];[window_size][window_options]")
diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm
index c998bd55257c..f356fc5c1077 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()
@@ -243,7 +243,7 @@
lookup[sig] -= src
signal_procs[target] -= sig_type_or_types
- if(!signal_procs[target].len)
+ if(!length(signal_procs[target]))
signal_procs -= target
/**
diff --git a/code/datums/datum.dm b/code/datums/datum.dm
index 3e317ffd601e..e926dfd022ca 100644
--- a/code/datums/datum.dm
+++ b/code/datums/datum.dm
@@ -119,7 +119,7 @@
var/datum/component/C = all_components
qdel(C, FALSE, TRUE)
if(datum_components)
- debug_log("'[src]' datum_components was not null after removing all components! [datum_components.len] entries remained...")
+ debug_log("'[src]' datum_components was not null after removing all components! [length(datum_components)] entries remained...")
datum_components.Cut()
var/list/lookup = comp_lookup
diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm
index 6ccbaa66e7de..41f1fe30e921 100644
--- a/code/datums/diseases/advance/advance.dm
+++ b/code/datums/diseases/advance/advance.dm
@@ -50,7 +50,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
/datum/disease/advance/New(process = 1, datum/disease/advance/D)
// Setup our dictionary if it hasn't already.
- if(!GLOB.dictionary_symptoms.len)
+ if(!length(GLOB.dictionary_symptoms))
for(var/symp in GLOB.list_symptoms)
var/datum/symptom/S = new symp
GLOB.dictionary_symptoms[S.id] = symp
@@ -59,9 +59,9 @@ GLOBAL_LIST_INIT(advance_cures, list(
D = null
// Generate symptoms if we weren't given any.
- if(!symptoms || !symptoms.len)
+ if(!LAZYLEN(symptoms))
- if(!D || !D.symptoms || !D.symptoms.len)
+ if(!D || !LAZYLEN(D.symptoms))
symptoms = GenerateSymptoms()
else
for(var/datum/symptom/S in D.symptoms)
@@ -80,7 +80,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
// Randomly pick a symptom to activate.
/datum/disease/advance/stage_act()
..()
- if(symptoms && symptoms.len)
+ if(LAZYLEN(symptoms))
if(!processing)
processing = 1
@@ -148,7 +148,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
if(!HasSymptom(S))
possible_symptoms += S
- if(!possible_symptoms.len)
+ if(!length(possible_symptoms))
return
//error("Advance Disease - We weren't able to get any possible symptoms in GenerateSymptoms([type_level_limit], [amount_get])")
@@ -182,7 +182,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(!LAZYLEN(symptoms))
CRASH("We did not have any symptoms before generating properties.")
var/list/properties = list("resistance" = 1, "stealth" = 1, "stage_rate" = 1, "transmittable" = 1, "severity" = 1)
@@ -200,11 +200,11 @@ 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(LAZYLEN(properties))
hidden = list( (properties["stealth"] > 2), (properties["stealth"] > 3) )
// The more symptoms we have, the less transmittable it is but some symptoms can make up for it.
- SetSpread(clamp(properties["transmittable"] - symptoms.len, BLOOD, AIRBORNE))
+ SetSpread(clamp(properties["transmittable"] - length(symptoms), BLOOD, AIRBORNE))
permeability_mod = max(ceil(0.4 * properties["transmittable"]), 1)
cure_chance = 15 - clamp(properties["resistance"], -5, 5) // can be between 10 and 20
stage_prob = max(properties["stage_rate"], 2)
@@ -253,8 +253,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(LAZYLEN(properties))
+ var/res = clamp(properties["resistance"] - (length(symptoms) / 2), 1, length(GLOB.advance_cures))
cure_id = GLOB.advance_cures[res]
// Get the cure name from the cure_id
@@ -274,7 +274,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)
@@ -305,7 +305,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
if(HasSymptom(S))
return
- if(symptoms.len < 5 + rand(-1, 1))
+ if(length(symptoms) < 5 + rand(-1, 1))
symptoms += S
else
RemoveSymptom(pick(symptoms))
@@ -331,14 +331,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++
@@ -362,7 +362,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
R.data_properties = data.Copy()
else
R.data_properties = data
- if(preserve.len)
+ if(length(preserve))
R.data_properties["viruses"] = preserve
/proc/AdminCreateVirus(mob/user)
@@ -385,7 +385,7 @@ GLOBAL_LIST_INIT(advance_cures, list(
i--
while(i > 0)
- if(D.symptoms.len > 0)
+ if(length(D.symptoms) > 0)
var/new_name = input(user, "Name your new disease.", "New Name")
D.AssignName(new_name)
diff --git a/code/datums/diseases/advance/symptoms/symptoms.dm b/code/datums/diseases/advance/symptoms/symptoms.dm
index 7746a03b4f89..8ddd5897f92a 100644
--- a/code/datums/diseases/advance/symptoms/symptoms.dm
+++ b/code/datums/diseases/advance/symptoms/symptoms.dm
@@ -17,7 +17,7 @@ GLOBAL_LIST_EMPTY(dictionary_symptoms)
/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(src.type == S[i])
id = "[i]"
return
diff --git a/code/datums/diseases/black_goo.dm b/code/datums/diseases/black_goo.dm
index 5d6d96fcc57c..6fb74bc82bd4 100644
--- a/code/datums/diseases/black_goo.dm
+++ b/code/datums/diseases/black_goo.dm
@@ -301,12 +301,12 @@
/obj/item/storage/fancy/blackgoo/get_examine_text(mob/user)
. = ..()
. += "A strange looking metal container..."
- if(contents.len <= 0)
+ if(length(contents) <= 0)
. += "There are no bottles left inside it."
- else if(contents.len == 1)
+ else if(length(contents) == 1)
. += "There is one bottle left inside it."
else
- . += "There are [src.contents.len] bottles inside the container."
+ . += "There are [length(src.contents)] bottles inside the container."
/obj/item/storage/fancy/blackgoo/Initialize()
diff --git a/code/datums/emergency_calls/custom.dm b/code/datums/emergency_calls/custom.dm
index 0117c83fc19c..b62d984f6fe3 100644
--- a/code/datums/emergency_calls/custom.dm
+++ b/code/datums/emergency_calls/custom.dm
@@ -19,7 +19,7 @@
if(!istype(spawn_loc))
return //Didn't find a useable spawn point.
- if(!players_to_offer.len)
+ if(!length(players_to_offer))
return // No more players
var/mob/living/carbon/human/H = pick(players_to_offer)
diff --git a/code/datums/emergency_calls/emergency_call.dm b/code/datums/emergency_calls/emergency_call.dm
index a803a7f06c78..99b31ab41f19 100644
--- a/code/datums/emergency_calls/emergency_call.dm
+++ b/code/datums/emergency_calls/emergency_call.dm
@@ -64,11 +64,11 @@
var/home_base = /datum/lazy_template/ert/freelancer_station
/datum/game_mode/proc/initialize_emergency_calls()
- if(all_calls.len) //It's already been set up.
+ if(length(all_calls)) //It's already been set up.
return
var/list/total_calls = typesof(/datum/emergency_call)
- if(!total_calls.len)
+ if(!length(total_calls))
to_world(SPAN_DANGER("\b Error setting up emergency calls, no datums found."))
return FALSE
for(var/S in total_calls)
@@ -154,7 +154,7 @@
if(jobban_isbanned(src, "Syndicate") || jobban_isbanned(src, "Emergency Response Team"))
to_chat(src, SPAN_DANGER("You are jobbanned from the emergency response team!"))
return
- if(!SSticker.mode || !SSticker.mode.picked_calls.len)
+ if(!SSticker.mode || !length(SSticker.mode.picked_calls))
to_chat(src, SPAN_WARNING("No distress beacons are active. You will be notified if this changes."))
return
@@ -230,8 +230,8 @@
SEND_SIGNAL(src, COMSIG_ERT_SETUP)
- if(candidates.len < mob_min && !spawn_max_amount)
- message_admins("Aborting distress beacon, not enough candidates: found [candidates.len].")
+ if(length(candidates) < mob_min && !spawn_max_amount)
+ message_admins("Aborting distress beacon, not enough candidates: found [length(candidates)].")
members = list() //Empty the members list.
candidates = list()
@@ -244,7 +244,7 @@
var/list/datum/mind/picked_candidates = list()
if(mob_max > 0)
var/mob_count = 0
- while (mob_count < mob_max && candidates.len)
+ while (mob_count < mob_max && length(candidates))
var/datum/mind/M = pick(candidates) //Get a random candidate, then remove it from the candidates list.
if(!istype(M))//Something went horrifically wrong
candidates.Remove(M)
@@ -254,13 +254,13 @@
continue
if(M.current && M.current.stat != DEAD)
candidates.Remove(M) //Strip them from the list, they aren't dead anymore.
- if(!candidates.len)
+ if(!length(candidates))
break //NO picking from empty lists
continue
picked_candidates.Add(M)
candidates.Remove(M)
mob_count++
- if(candidates.len)
+ if(length(candidates))
for(var/datum/mind/I in candidates)
if(I.current)
to_chat(I.current, SPAN_WARNING("You didn't get selected to join the distress team. Better luck next time!"))
@@ -310,7 +310,7 @@
SSshuttle.moveShuttleToDock(shuttle, pick(active_lzs), TRUE)
var/i = 0
- if(picked_candidates.len)
+ if(length(picked_candidates))
for(var/datum/mind/M in picked_candidates)
members += M
i++
diff --git a/code/datums/entities/player.dm b/code/datums/entities/player.dm
index a62e663ba21c..fbdcc11e1037 100644
--- a/code/datums/entities/player.dm
+++ b/code/datums/entities/player.dm
@@ -606,14 +606,14 @@ BSQL_PROTECT_DATUM(/datum/entity/player)
note.admin_rank = "N/A"
note.date = I.timestamp
var/list/splitting = splittext(I.content, "|")
- if(splitting.len == 1)
+ if(length(splitting) == 1)
note.text = I.content
note.is_ban = FALSE
- if(splitting.len == 3)
+ if(length(splitting) == 3)
note.text = splitting[3]
note.ban_time = text2num(replacetext(replacetext(splitting[2],"Duration: ","")," minutes",""))
note.is_ban = TRUE
- if(splitting.len == 2)
+ if(length(splitting) == 2)
note.text = I.content
note.is_ban = TRUE
diff --git a/code/datums/global_variables.dm b/code/datums/global_variables.dm
index 53e9c0391e17..24d32bbf3552 100644
--- a/code/datums/global_variables.dm
+++ b/code/datums/global_variables.dm
@@ -154,9 +154,9 @@
else if (istype(value, /list))
var/list/L = value
- html += "[name] = /list ([L.len])"
+ html += "[name] = /list ([length(L)])"
- if (L.len > 0 && !(name == "underlays" || name == "overlays" || name == "vars" || L.len > 500))
+ if (length(L) > 0 && !(name == "underlays" || name == "overlays" || name == "vars" || length(L) > 500))
// not sure if this is completely right...
html += ""
var/index = 1
diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm
index b7d528380a42..aa4665bda652 100644
--- a/code/datums/helper_datums/getrev.dm
+++ b/code/datums/helper_datums/getrev.dm
@@ -41,7 +41,7 @@ GLOBAL_DATUM_INIT(revdata, /datum/getrev, new)
return msg.Join("\n")
/datum/getrev/proc/GetTestMergeInfo(header = TRUE)
- if(!testmerge.len)
+ if(!length(testmerge))
return ""
. = header ? "The following pull requests are currently test merged: " : ""
for(var/line in testmerge)
@@ -70,7 +70,7 @@ GLOBAL_DATUM_INIT(revdata, /datum/getrev, new)
var/pc = revdata.originmastercommit
if(pc)
msg += "Master commit: [pc] "
- if(revdata.testmerge.len)
+ if(length(revdata.testmerge))
msg += revdata.GetTestMergeInfo()
if(revdata.commit && revdata.commit != revdata.originmastercommit)
msg += "Local commit: [revdata.commit]"
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index 6a4276208d13..2b283c978c3a 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -157,8 +157,8 @@
precision = rand(1,100)
var/list/bagholding = teleatom.search_contents_for(/obj/item/storage/backpack/holding)
- if(bagholding.len)
- precision = max(rand(1,100)*bagholding.len,100)
+ if(length(bagholding))
+ precision = max(rand(1,100)*length(bagholding),100)
if(istype(teleatom, /mob/living))
var/mob/living/MM = teleatom
to_chat(MM, SPAN_WARNING("The Bluespace interface on your Bag of Holding interferes with the teleport!"))
diff --git a/code/datums/matrix_editor.dm b/code/datums/matrix_editor.dm
index 8e064d76db7b..c31720014d45 100644
--- a/code/datums/matrix_editor.dm
+++ b/code/datums/matrix_editor.dm
@@ -72,11 +72,11 @@
if(!elements_str)
return
var/list/elements = splittext(elements_str, ",")
- if(elements.len != 6)
- to_chat(usr, "When creating a custom matrix, explicitly provide all 6 elements! Only [elements.len] were provided.")
+ if(length(elements) != 6)
+ to_chat(usr, "When creating a custom matrix, explicitly provide all 6 elements! Only [length(elements)] were provided.")
return
- for(var/i = 1 to elements.len)
+ for(var/i = 1 to length(elements))
var/num_ver = text2num(elements[i])
if(isnull(num_ver))
to_chat(usr, "Failed to convert element #[i] ([elements[i]]) to a number.")
diff --git a/code/datums/medal_awards.dm b/code/datums/medal_awards.dm
index f2dfc6a5c1d5..15152a8179a4 100644
--- a/code/datums/medal_awards.dm
+++ b/code/datums/medal_awards.dm
@@ -402,7 +402,7 @@ GLOBAL_LIST_INIT(xeno_medals, list(XENO_SLAUGHTER_MEDAL, XENO_RESILIENCE_MEDAL,
to_chat(usr, "Error: Could not find the [is_marine_medal ? "marine" : "xeno"] awards for '[recipient_name]'!")
return FALSE
- if(index < 1 || index > recipient_award.medal_names.len)
+ if(index < 1 || index > length(recipient_award.medal_names))
to_chat(usr, "Error: Index [index] is out of bounds!")
return FALSE
@@ -429,7 +429,7 @@ GLOBAL_LIST_INIT(xeno_medals, list(XENO_SLAUGHTER_MEDAL, XENO_RESILIENCE_MEDAL,
// Either entirely delete the award from the list, or just remove the entry if there are multiple
var/medal_type = recipient_award.medal_names[index]
var/citation = recipient_award.medal_citations[index]
- if(recipient_award.medal_names.len == 1)
+ if(length(recipient_award.medal_names) == 1)
if(is_marine_medal)
GLOB.medal_awards.Remove(recipient_name)
else
diff --git a/code/datums/quadtree.dm b/code/datums/quadtree.dm
index 2b0360152997..5e5b27d57330 100644
--- a/code/datums/quadtree.dm
+++ b/code/datums/quadtree.dm
@@ -103,7 +103,7 @@
player_coords = list(p_coords)
return TRUE
- else if(!final_divide && player_coords.len >= QUADTREE_CAPACITY)
+ else if(!final_divide && length(player_coords) >= QUADTREE_CAPACITY)
if(!is_divided)
subdivide()
if(nw_branch.insert_player(p_coords))
diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm
index b4b6c45a0c2c..68c036ff71df 100644
--- a/code/datums/recipe.dm
+++ b/code/datums/recipe.dm
@@ -49,7 +49,7 @@
. = -1
else
return 0
- if ((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len)
+ if ((LAZYLEN(reagents) || 0) < length(avail_reagents.reagent_list))
return -1
return .
@@ -70,7 +70,7 @@
break
if (!found)
. = -1
- if (checklist.len)
+ if (length(checklist))
return 0
return .
@@ -107,17 +107,17 @@
for (var/datum/recipe/recipe in available_recipes)
if (recipe.check_reagents(obj.reagents)==exact && recipe.check_items(obj)==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 = LAZYLEN(recipe.items) || 0
+ var/N_r = LAZYLEN(recipe.reagents) || 0
if (N_i > i_count || (N_i== i_count && N_r > r_count ))
r_count = N_r
i_count = N_i
diff --git a/code/datums/soundOutput.dm b/code/datums/soundOutput.dm
index 1f4512b28d59..eb7339ceae51 100644
--- a/code/datums/soundOutput.dm
+++ b/code/datums/soundOutput.dm
@@ -104,7 +104,7 @@
/datum/soundOutput/proc/update_soundscape()
scape_cooldown--
if(scape_cooldown <= 0)
- if(soundscape_playlist.len)
+ if(length(soundscape_playlist))
var/sound/S = sound()
S.file = pick(soundscape_playlist)
S.volume = 100 * owner.volume_preferences[VOLUME_AMB]
diff --git a/code/datums/statistics/entities/panel_stats.dm b/code/datums/statistics/entities/panel_stats.dm
index 5cfb888b8ea1..c62925673622 100644
--- a/code/datums/statistics/entities/panel_stats.dm
+++ b/code/datums/statistics/entities/panel_stats.dm
@@ -463,7 +463,7 @@
total_deaths_list += list(list("name" = S.name, "value" = S.value))
for(var/datum/entity/statistic/death/S in death_stats_list)
- if(new_death_stats_list.len >= STATISTICS_DEATH_LIST_LEN)
+ if(length(new_death_stats_list) >= STATISTICS_DEATH_LIST_LEN)
break
var/list/damage_list = list()
if(S.total_brute)
@@ -496,7 +496,7 @@
"y" = S.y,
"z" = S.z
))
- if(new_death_stats_list.len < STATISTICS_DEATH_LIST_LEN)
+ if(length(new_death_stats_list) < STATISTICS_DEATH_LIST_LEN)
new_death_stats_list += death
for(var/iteration in weapon_stats_list)
diff --git a/code/datums/statistics/entities/round_stats.dm b/code/datums/statistics/entities/round_stats.dm
index 25543dff22b1..10ec04c6da0e 100644
--- a/code/datums/statistics/entities/round_stats.dm
+++ b/code/datums/statistics/entities/round_stats.dm
@@ -300,8 +300,8 @@
if(death_data["death_stats_list"])
new_death_list = death_data["death_stats_list"]
new_death_list.Insert(1, death)
- if(new_death_list.len > STATISTICS_DEATH_LIST_LEN)
- new_death_list.Cut(STATISTICS_DEATH_LIST_LEN+1, new_death_list.len)
+ if(length(new_death_list) > STATISTICS_DEATH_LIST_LEN)
+ new_death_list.Cut(STATISTICS_DEATH_LIST_LEN+1, length(new_death_list))
death_data["death_stats_list"] = new_death_list
track_dead_participant(new_death.faction_name)
diff --git a/code/datums/weather/weather_map_holder.dm b/code/datums/weather/weather_map_holder.dm
index c72925399a85..eb3458d70a25 100644
--- a/code/datums/weather/weather_map_holder.dm
+++ b/code/datums/weather/weather_map_holder.dm
@@ -33,7 +33,7 @@
// Return a type that can be initialized into the next weather event.
// Feel free to override this
/datum/weather_ss_map_holder/proc/get_new_event()
- if (potential_weather_events && potential_weather_events.len != 0)
+ if (LAZYLEN(potential_weather_events) != 0)
return pick(potential_weather_events)
else
log_debug("Weather subsystem map holder [src] is improperly configured. Code: WSSMH03")
diff --git a/code/defines/procs/AStar.dm b/code/defines/procs/AStar.dm
index fad263aea42b..b4baef969815 100644
--- a/code/defines/procs/AStar.dm
+++ b/code/defines/procs/AStar.dm
@@ -46,13 +46,13 @@ length to avoid portals or something i guess?? Not that they're counted right no
cmp = compare
/PriorityQueue/proc/IsEmpty()
- return !L.len
+ return !length(L)
/PriorityQueue/proc/Enqueue(d)
var/i
var/j
L.Add(d)
- i = L.len
+ i = length(L)
j = i>>1
while(i > 1 && call(cmp)(L[j],L[i]) > 0)
L.Swap(i,j)
@@ -60,22 +60,22 @@ length to avoid portals or something i guess?? Not that they're counted right no
j >>= 1
/PriorityQueue/proc/Dequeue()
- if(!L.len) return 0
+ if(!length(L)) return 0
. = L[1]
Remove(1)
/PriorityQueue/proc/Remove(i)
- if(i > L.len) return 0
- L.Swap(i,L.len)
- L.Cut(L.len)
- if(i < L.len)
+ if(i > length(L)) return 0
+ L.Swap(i,length(L))
+ L.Cut(length(L))
+ if(i < length(L))
_Fix(i)
/PriorityQueue/proc/_Fix(i)
var/child = i + i
var/item = L[i]
- while(child <= L.len)
- if(child + 1 <= L.len && call(cmp)(L[child],L[child + 1]) > 0)
+ while(child <= length(L))
+ if(child + 1 <= length(L) && call(cmp)(L[child],L[child + 1]) > 0)
child++
if(call(cmp)(item,L[child]) > 0)
L[i] = L[child]
@@ -159,7 +159,7 @@ length to avoid portals or something i guess?? Not that they're counted right no
var/ng = cur.g + call(cur.source,dist)(d)
if(d.bestF)
if(ng + call(d,dist)(end) < d.bestF)
- for(var/i = 1; i <= open.L.len; i++)
+ for(var/i = 1; i <= length(open.L); i++)
var/PathNode/n = open.L[i]
if(n.source == d)
open.Remove(i)
@@ -168,21 +168,21 @@ length to avoid portals or something i guess?? Not that they're counted right no
continue
open.Enqueue(new /PathNode(d,cur,ng,call(d,dist)(end),cur.nt+1))
- if(maxnodes && open.L.len > maxnodes)
- open.L.Cut(open.L.len)
+ if(maxnodes && length(open.L) > maxnodes)
+ open.L.Cut(length(open.L))
}
var/PathNode/temp
while(!open.IsEmpty())
temp = open.Dequeue()
temp.source.bestF = 0
- while(closed.len)
- temp = closed[closed.len]
+ while(length(closed))
+ temp = closed[length(closed)]
temp.bestF = 0
- closed.Cut(closed.len)
+ closed.Cut(length(closed))
if(path)
- for(var/i = 1; i <= path.len/2; i++)
- path.Swap(i,path.len-i+1)
+ for(var/i = 1; i <= length(path)/2; i++)
+ path.Swap(i,length(path)-i+1)
return path
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index a14f1018e49a..bc0e41a338e3 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -238,7 +238,7 @@ directive is properly returned.
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
diff --git a/code/game/cas_manager/datums/cas_fire_mission.dm b/code/game/cas_manager/datums/cas_fire_mission.dm
index dc55e057edcd..f672dffed83a 100644
--- a/code/game/cas_manager/datums/cas_fire_mission.dm
+++ b/code/game/cas_manager/datums/cas_fire_mission.dm
@@ -80,7 +80,7 @@
/datum/cas_fire_mission/proc/check(obj/structure/machinery/computer/dropship_weapons/linked_console)
error_weapon = null
- if(records.len == 0)
+ if(length(records) == 0)
return FIRE_MISSION_ALL_GOOD //I mean yes... but why?
for(var/datum/cas_fire_mission_record/record in records)
@@ -105,7 +105,7 @@
var/i
if(!record.offsets)
continue
- for(i=1,i<=record.offsets.len,i++)
+ for(i=1,i<=length(record.offsets),i++)
if(cd > 0)
cd--
if(record.offsets[i] == null || record.offsets[i] == "-")
@@ -192,7 +192,7 @@
envelope.change_current_loc(current_turf)
var/datum/cas_fire_mission_record/item
for(item in records)
- if(item.offsets.len < step || item.offsets[step] == null || item.offsets[step]=="-")
+ if(length(item.offsets) < step || item.offsets[step] == null || item.offsets[step]=="-")
continue
var/offset = item.offsets[step]
if (current_turf == null)
diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm
index ae6cdf10c64e..4a208b00a796 100644
--- a/code/game/gamemodes/cm_initialize.dm
+++ b/code/game/gamemodes/cm_initialize.dm
@@ -118,7 +118,7 @@ Additional game mode variables.
/datum/game_mode/proc/initialize_special_clamps()
xeno_starting_num = clamp((GLOB.readied_players/CONFIG_GET(number/xeno_number_divider)), xeno_required_num, INFINITY) //(n, minimum, maximum)
surv_starting_num = clamp((GLOB.readied_players/CONFIG_GET(number/surv_number_divider)), 2, 8) //this doesnt run
- marine_starting_num = GLOB.player_list.len - xeno_starting_num - surv_starting_num
+ marine_starting_num = length(GLOB.player_list) - xeno_starting_num - surv_starting_num
for(var/datum/squad/sq in GLOB.RoleAuthority.squads)
if(sq)
sq.max_engineers = engi_slot_formula(marine_starting_num)
@@ -266,7 +266,7 @@ Additional game mode variables.
/datum/game_mode/proc/initialize_starting_xenomorph_list(list/hives = list(XENO_HIVE_NORMAL), bypass_checks = FALSE)
var/list/datum/mind/possible_xenomorphs = get_players_for_role(JOB_XENOMORPH)
var/list/datum/mind/possible_queens = get_players_for_role(JOB_XENOMORPH_QUEEN)
- if(possible_xenomorphs.len < xeno_required_num && !bypass_checks) //We don't have enough aliens, we don't consider people rolling for only Queen.
+ if(length(possible_xenomorphs) < xeno_required_num && !bypass_checks) //We don't have enough aliens, we don't consider people rolling for only Queen.
to_world("Not enough players have chosen to be a xenomorph in their character setup. Aborting . ")
return
@@ -388,7 +388,7 @@ Additional game mode variables.
available_xenos += larva_option
available_xenos[larva_option] = list(hive)
- if(!available_xenos.len || (instant_join && !available_xenos_non_ssd.len))
+ if(!length(available_xenos) || (instant_join && !length(available_xenos_non_ssd)))
if(!xeno_candidate.client?.prefs || !(xeno_candidate.client.prefs.be_special & BE_ALIEN_AFTER_DEATH))
to_chat(xeno_candidate, SPAN_WARNING("There aren't any available xenomorphs or burrowed larvae. \
You can try getting spawned as a chestburster larva by toggling your Xenomorph candidacy in \
@@ -524,16 +524,16 @@ Additional game mode variables.
var/last_active_hive = 0
for(var/hivenumber in GLOB.hive_datum)
hive = GLOB.hive_datum[hivenumber]
- if(hive.totalXenos.len <= 0)
+ if(length(hive.totalXenos) <= 0)
continue
active_hives[hive.name] = hive.hivenumber
last_active_hive = hive.hivenumber
- if(active_hives.len <= 0)
+ if(length(active_hives) <= 0)
to_chat(xeno_candidate, SPAN_WARNING("There aren't any Hives active at this point for you to join."))
return FALSE
- if(active_hives.len > 1)
+ if(length(active_hives) > 1)
var/hive_picked = tgui_input_list(xeno_candidate, "Select which Hive to attempt joining.", "Hive Choice", active_hives, theme="hive_status")
if(!hive_picked)
to_chat(xeno_candidate, SPAN_ALERT("Hive choice error. Aborting."))
@@ -558,7 +558,7 @@ Additional game mode variables.
var/descriptive_name = "[morpher.name] in [area_name]"
available_facehugger_sources[descriptive_name] = morpher
- if(available_facehugger_sources.len <= 0)
+ if(length(available_facehugger_sources) <= 0)
to_chat(xeno_candidate, SPAN_WARNING("There aren't any Carriers or Egg Morphers with available Facehuggers for you to join. Please try again later!"))
return FALSE
@@ -590,16 +590,16 @@ Additional game mode variables.
var/last_active_hive = 0
for(var/hivenumber in GLOB.hive_datum)
hive = GLOB.hive_datum[hivenumber]
- if(hive.totalXenos.len <= 0)
+ if(length(hive.totalXenos) <= 0)
continue
active_hives[hive.name] = hive.hivenumber
last_active_hive = hive.hivenumber
- if(active_hives.len <= 0)
+ if(length(active_hives) <= 0)
to_chat(xeno_candidate, SPAN_WARNING("There aren't any Hives active at this point for you to join."))
return FALSE
- if(active_hives.len > 1)
+ if(length(active_hives) > 1)
var/hive_picked = tgui_input_list(xeno_candidate, "Select which Hive to attempt joining.", "Hive Choice", active_hives, theme="hive_status")
if(!hive_picked)
to_chat(xeno_candidate, SPAN_ALERT("Hive choice error. Aborting."))
@@ -826,7 +826,7 @@ Additional game mode variables.
H.name = H.get_visible_name()
if(!H.first_xeno) //Only give objectives/back-stories to uninfected survivors
- if(spawner.intro_text && spawner.intro_text.len)
+ if(LAZYLEN(spawner.intro_text))
spawn(4)
for(var/line in spawner.intro_text)
to_chat(H, line)
@@ -893,7 +893,7 @@ Additional game mode variables.
var/story //The actual story they will get to read.
var/random_name
var/datum/mind/survivor
- while(current_survivors.len)
+ while(length(current_survivors))
survivor = pick(current_survivors)
if(!istype(survivor))
current_survivors -= survivor
@@ -905,8 +905,8 @@ Additional game mode variables.
current_survivors -= survivor
continue
- if(current_survivors.len > 1) //If we have another survivor to pick from.
- if(survivor_multi_story.len) //Unlikely.
+ if(length(current_survivors) > 1) //If we have another survivor to pick from.
+ if(length(survivor_multi_story)) //Unlikely.
var/datum/mind/another_survivor = pick(current_survivors - survivor) // We don't want them to be picked twice.
current_survivors -= another_survivor
if(!istype(another_survivor)) continue//If somehow this thing screwed up, we're going to run another pass.
@@ -921,7 +921,7 @@ Additional game mode variables.
to_chat(another_survivor.current, temp_story)
another_survivor.memory += temp_story
else
- if(survivor_story.len) //Shouldn't happen, but technically possible.
+ if(length(survivor_story)) //Shouldn't happen, but technically possible.
story = pick(survivor_story)
survivor_story -= story
spawn(6)
diff --git a/code/game/gamemodes/cm_process.dm b/code/game/gamemodes/cm_process.dm
index 462f82e99cec..d6519bbcd887 100644
--- a/code/game/gamemodes/cm_process.dm
+++ b/code/game/gamemodes/cm_process.dm
@@ -40,12 +40,12 @@ of predators), but can be added to include variant game modes (like humans vs. h
set waitfor = 0
sleep(2 SECONDS)
GLOB.fallen_list += GLOB.fallen_list_cross
- if(GLOB.fallen_list.len)
+ if(length(GLOB.fallen_list))
var/dat = " "
dat += SPAN_ROUNDBODY("In Flanders fields... ")
dat += SPAN_CENTERBOLD("In memoriam of our fallen soldiers: ")
- for(var/i = 1 to GLOB.fallen_list.len)
- if(i != GLOB.fallen_list.len)
+ for(var/i = 1 to length(GLOB.fallen_list))
+ if(i != length(GLOB.fallen_list))
dat += "[GLOB.fallen_list[i]], "
else
dat += "[GLOB.fallen_list[i]]. "
@@ -87,20 +87,20 @@ of predators), but can be added to include variant game modes (like humans vs. h
/datum/game_mode/proc/declare_completion_announce_medal_awards()
set waitfor = 0
sleep(2 SECONDS)
- if(GLOB.medal_awards.len)
+ if(length(GLOB.medal_awards))
var/dat = " "
dat += SPAN_ROUNDBODY(" Medal Awards:")
for(var/recipient in GLOB.medal_awards)
var/datum/recipient_awards/recipient_award = GLOB.medal_awards[recipient]
- for(var/i in 1 to recipient_award.medal_names.len)
+ for(var/i in 1 to length(recipient_award.medal_names))
dat += "[recipient_award.recipient_rank] [recipient] is awarded [recipient_award.posthumous[i] ? "posthumously " : ""]the [recipient_award.medal_names[i]] : \'[recipient_award.medal_citations[i]] \'."
to_world(dat)
- if(GLOB.jelly_awards.len)
+ if(length(GLOB.jelly_awards))
var/dat = " "
dat += SPAN_ROUNDBODY(" Royal Jelly Awards:")
for(var/recipient in GLOB.jelly_awards)
var/datum/recipient_awards/recipient_award = GLOB.jelly_awards[recipient]
- for(var/i in 1 to recipient_award.medal_names.len)
+ for(var/i in 1 to length(recipient_award.medal_names))
dat += "[recipient] is awarded [recipient_award.posthumous[i] ? "posthumously " : ""]a [recipient_award.medal_names[i]] : \'[recipient_award.medal_citations[i]] \'[recipient_award.giver_rank[i] ? " by [recipient_award.giver_rank[i]]" : ""][recipient_award.giver_name[i] ? " ([recipient_award.giver_name[i]])" : ""]."
to_world(dat)
diff --git a/code/game/gamemodes/colonialmarines/colonialmarines.dm b/code/game/gamemodes/colonialmarines/colonialmarines.dm
index 796bf71c3a8e..14f5397b1f91 100644
--- a/code/game/gamemodes/colonialmarines/colonialmarines.dm
+++ b/code/game/gamemodes/colonialmarines/colonialmarines.dm
@@ -89,7 +89,7 @@
new type_to_spawn(T)
//desert river test
- if(!round_toxic_river.len)
+ if(!length(round_toxic_river))
round_toxic_river = null //No tiles?
else
round_time_river = rand(-100,100)
@@ -100,7 +100,7 @@
var/obj/structure/tunnel/T
var/i = 0
var/turf/t
- while(GLOB.xeno_tunnels.len && i++ < 3)
+ while(length(GLOB.xeno_tunnels) && i++ < 3)
t = get_turf(pick_n_take(GLOB.xeno_tunnels))
T = new(t)
T.id = "hole[i]"
@@ -522,7 +522,7 @@
GLOB.round_statistics.game_mode = name
GLOB.round_statistics.round_length = world.time
GLOB.round_statistics.round_result = round_finished
- GLOB.round_statistics.end_round_player_population = GLOB.clients.len
+ GLOB.round_statistics.end_round_player_population = length(GLOB.clients)
GLOB.round_statistics.log_round_statistics()
@@ -641,7 +641,7 @@
total_marines += squad_marines_job_report[job_type]
total_squad_marines += squad_marines_job_report[job_type]
incrementer++
- if(incrementer < squad_marines_job_report.len)
+ if(incrementer < length(squad_marines_job_report))
squad_marine_job_text += ", "
var/auxiliary_marine_job_text = ""
@@ -651,7 +651,7 @@
auxiliary_marine_job_text += "[job_type]: [auxiliary_marines_job_report[job_type]]"
total_marines += auxiliary_marines_job_report[job_type]
incrementer++
- if(incrementer < auxiliary_marines_job_report.len)
+ if(incrementer < length(auxiliary_marines_job_report))
auxiliary_marine_job_text += ", "
var/total_non_standard = 0
@@ -662,7 +662,7 @@
non_standard_job_text += "[job_type]: [non_standard_job_report[job_type]]"
total_non_standard += non_standard_job_report[job_type]
incrementer++
- if(incrementer < non_standard_job_report.len)
+ if(incrementer < length(non_standard_job_report))
non_standard_job_text += ", "
var/list/hive_xeno_numbers = list()
@@ -676,7 +676,7 @@
hive_caste_text += "[hive_caste]: [per_hive_status[hive_caste]]"
hive_amount += per_hive_status[hive_caste]
incrementer++
- if(incrementer < per_hive_status.len)
+ if(incrementer < length(per_hive_status))
hive_caste_text += ", "
if(hive_amount)
hive_xeno_numbers[hive] = hive_amount
diff --git a/code/game/gamemodes/colonialmarines/huntergames.dm b/code/game/gamemodes/colonialmarines/huntergames.dm
index 310785070458..23344ee9e8f0 100644
--- a/code/game/gamemodes/colonialmarines/huntergames.dm
+++ b/code/game/gamemodes/colonialmarines/huntergames.dm
@@ -212,10 +212,10 @@
var/mob/living/carbon/human/H
var/turf/picked
- if(GLOB.hunter_primaries.len)
+ if(length(GLOB.hunter_primaries))
picked = get_turf(pick_n_take(GLOB.hunter_primaries))
else
- if(GLOB.hunter_secondaries.len)
+ if(length(GLOB.hunter_secondaries))
picked = get_turf(pick_n_take(GLOB.hunter_secondaries))
else
message_admins("There were no spawn points available for a contestant.")
@@ -226,7 +226,7 @@
if(istype(M,/mob/living/carbon/human)) //somehow?
H = M
- if(H.contents.len)
+ if(length(H.contents))
for(var/obj/item/I in H.contents)
qdel(I)
H.forceMove(picked)
@@ -315,7 +315,7 @@
last_drop = world.time
waiting_for_drop_votes = 1
sleep(600)
- if(!supply_votes.len)
+ if(!length(supply_votes))
to_world(SPAN_ROUNDBODY("Nobody got anything! .. weird."))
waiting_for_drop_votes = 0
supply_votes = list()
diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
index e7a43debb5fc..b3fd079d638c 100644
--- a/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
+++ b/code/game/gamemodes/colonialmarines/whiskey_outpost.dm
@@ -201,9 +201,9 @@
/datum/game_mode/whiskey_outpost/proc/announce_xeno_wave(datum/whiskey_outpost_wave/wave_data)
if(!istype(wave_data))
return
- if(wave_data.command_announcement.len > 0)
+ if(length(wave_data.command_announcement) > 0)
marine_announcement(wave_data.command_announcement[1], wave_data.command_announcement[2])
- if(wave_data.sound_effect.len > 0)
+ if(length(wave_data.sound_effect) > 0)
playsound_z(SSmapping.levels_by_trait(ZTRAIT_GROUND), pick(wave_data.sound_effect))
//CHECK WIN
@@ -297,7 +297,7 @@
if(GLOB.round_statistics)
GLOB.round_statistics.game_mode = name
GLOB.round_statistics.round_length = world.time
- GLOB.round_statistics.end_round_player_population = GLOB.clients.len
+ GLOB.round_statistics.end_round_player_population = length(GLOB.clients)
GLOB.round_statistics.log_round_statistics()
@@ -485,7 +485,7 @@
if(crate)
crate.storage_capacity = 60
- if(randomitems.len)
+ if(length(randomitems))
for(var/i = 0; i < choosemax; i++)
var/path = pick(randomitems)
var/obj/I = new path(crate)
@@ -536,7 +536,7 @@
for(var/obj/O in T)
if(istype(O,/obj/structure/closet/crate))
var/obj/structure/closet/crate/C = O
- if(C.contents.len)
+ if(length(C.contents))
to_chat(user, SPAN_DANGER("[O] must be emptied before it can be recycled"))
continue
new /obj/item/stack/sheet/metal(get_step(src,dir))
@@ -778,7 +778,7 @@
return
/obj/item/storage/box/attachments/update_icon()
- if(!contents.len)
+ if(!length(contents))
var/turf/T = get_turf(src)
if(T)
new /obj/item/paper/crumpled(T)
diff --git a/code/game/gamemodes/colonialmarines/whiskey_outpost/whiskey_output_waves.dm b/code/game/gamemodes/colonialmarines/whiskey_outpost/whiskey_output_waves.dm
index 609a70f1dd3b..68b2a51e76e7 100644
--- a/code/game/gamemodes/colonialmarines/whiskey_outpost/whiskey_output_waves.dm
+++ b/code/game/gamemodes/colonialmarines/whiskey_outpost/whiskey_output_waves.dm
@@ -43,7 +43,7 @@
available_xenos += unique_xenos
- if(!available_xenos.len)
+ if(!length(available_xenos))
to_chat(xeno_candidate, SPAN_WARNING("There aren't any available xenomorphs."))
return FALSE
diff --git a/code/game/gamemodes/colonialmarines/xenovsxeno.dm b/code/game/gamemodes/colonialmarines/xenovsxeno.dm
index 40e67df4d458..e1672f362731 100644
--- a/code/game/gamemodes/colonialmarines/xenovsxeno.dm
+++ b/code/game/gamemodes/colonialmarines/xenovsxeno.dm
@@ -44,8 +44,8 @@
/datum/game_mode/xenovs/pre_setup()
monkey_types = SSmapping.configs[GROUND_MAP].monkey_types
if(monkey_amount)
- if(monkey_types.len)
- for(var/i = min(floor(monkey_amount*GLOB.clients.len), GLOB.monkey_spawns.len), i > 0, i--)
+ if(length(monkey_types))
+ for(var/i = min(floor(monkey_amount*length(GLOB.clients)), length(GLOB.monkey_spawns)), i > 0, i--)
var/turf/T = get_turf(pick_n_take(GLOB.monkey_spawns))
var/monkey_to_spawn = pick(monkey_types)
@@ -265,7 +265,7 @@
if(GLOB.round_statistics)
GLOB.round_statistics.game_mode = name
GLOB.round_statistics.round_length = world.time
- GLOB.round_statistics.end_round_player_population = GLOB.clients.len
+ GLOB.round_statistics.end_round_player_population = length(GLOB.clients)
GLOB.round_statistics.log_round_statistics()
diff --git a/code/game/gamemodes/extended/extended.dm b/code/game/gamemodes/extended/extended.dm
index 72512a7e77ff..f5b64571f98c 100644
--- a/code/game/gamemodes/extended/extended.dm
+++ b/code/game/gamemodes/extended/extended.dm
@@ -42,7 +42,7 @@
if(GLOB.round_statistics)
GLOB.round_statistics.game_mode = name
GLOB.round_statistics.round_length = world.time
- GLOB.round_statistics.end_round_player_population = GLOB.clients.len
+ GLOB.round_statistics.end_round_player_population = length(GLOB.clients)
GLOB.round_statistics.log_round_statistics()
calculate_end_statistics()
diff --git a/code/game/gamemodes/extended/infection.dm b/code/game/gamemodes/extended/infection.dm
index e2c34f9aa16c..1f641917d53f 100644
--- a/code/game/gamemodes/extended/infection.dm
+++ b/code/game/gamemodes/extended/infection.dm
@@ -71,16 +71,16 @@
possible_synth_survivors -= A
possible_survivors = shuffle(possible_survivors) //Shuffle them up a bit
- if(possible_survivors.len) //We have some, it looks like.
+ if(length(possible_survivors)) //We have some, it looks like.
for(var/datum/mind/A in possible_survivors) //Strip out any xenos first so we don't double-dip.
if(A.roundstart_picked)
possible_survivors -= A
- if(possible_survivors.len) //We may have stripped out all the contendors, so check again.
+ if(length(possible_survivors)) //We may have stripped out all the contendors, so check again.
var/i = surv_starting_num
var/datum/mind/new_survivor
while(i > 0)
- if(!possible_survivors.len)
+ if(!length(possible_survivors))
break //Ran out of candidates! Can't have a null pick(), so just stick with what we have.
new_survivor = pick(possible_survivors)
if(!new_survivor)
@@ -123,7 +123,7 @@
if(GLOB.round_statistics)
GLOB.round_statistics.game_mode = name
GLOB.round_statistics.round_length = world.time
- GLOB.round_statistics.end_round_player_population = GLOB.clients.len
+ GLOB.round_statistics.end_round_player_population = length(GLOB.clients)
GLOB.round_statistics.log_round_statistics()
declare_completion_announce_xenomorphs()
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 94e59cbd93ef..5c10e8e7d934 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -61,7 +61,7 @@
gen_access()
if(!islist(req_access)) return 1//something's very wrong
var/L[] = req_access
- if(!L.len && (!req_one_access || !req_one_access.len)) return 1//no requirements
+ if(!length(L) && !LAZYLEN(req_one_access)) return 1//no requirements
if(!I) return
var/list/A = I.GetAccess()
@@ -69,7 +69,7 @@
if(!(i in A))
return FALSE//doesn't have this access
- if(req_one_access && req_one_access.len)
+ if(LAZYLEN(req_one_access))
for(var/i in req_one_access)
if(i in A)
return TRUE//has an access from the single access list
@@ -80,14 +80,14 @@
gen_access()
if(!req_access && !req_one_access) return 1
if(!islist(req_access)) return 1
- if(!req_access.len && !islist(req_one_access))
+ if(!length(req_access) && !islist(req_one_access))
return TRUE
- if(!req_access.len && (!req_one_access || !req_one_access.len)) return 1
+ if(!length(req_access) && !LAZYLEN(req_one_access)) return 1
if(!islist(L)) return
var/i
for(i in req_access)
if(!(i in L)) return //doesn't have this access
- if(req_one_access && req_one_access.len)
+ if(LAZYLEN(req_one_access))
for(i in req_one_access)
if(i in L) return 1//has an access from the single access list
return
diff --git a/code/game/jobs/job/civilians/other/survivors.dm b/code/game/jobs/job/civilians/other/survivors.dm
index 4fc344713d61..87b7fcb2b18f 100644
--- a/code/game/jobs/job/civilians/other/survivors.dm
+++ b/code/game/jobs/job/civilians/other/survivors.dm
@@ -187,7 +187,7 @@ AddTimelock(/datum/job/civilian/survivor, list(
/datum/job/civilian/survivor/commanding_officer/set_spawn_positions()
var/list/CO_survivor_types = SSmapping.configs[GROUND_MAP].CO_survivor_types
- if(CO_survivor_types.len)
+ if(length(CO_survivor_types))
total_positions = 1
spawn_positions = 1
return spawn_positions
diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm
index d758e187ce70..0af315fc3b9d 100644
--- a/code/game/jobs/job/job.dm
+++ b/code/game/jobs/job/job.dm
@@ -188,7 +188,7 @@
remembered_info += "Your account pin is: [generated_account.remote_access_pin] "
remembered_info += "Your account funds are: $[generated_account.money] "
- if(generated_account.transaction_log.len)
+ if(length(generated_account.transaction_log))
var/datum/transaction/T = generated_account.transaction_log[1]
remembered_info += "Your account was created: [T.time], [T.date] at [T.source_terminal] "
account_user.mind.store_memory(remembered_info)
diff --git a/code/game/jobs/job/marine/squad_info.dm b/code/game/jobs/job/marine/squad_info.dm
index 7e7dfcc0229a..37db48c3116e 100644
--- a/code/game/jobs/job/marine/squad_info.dm
+++ b/code/game/jobs/job/marine/squad_info.dm
@@ -9,7 +9,7 @@
return GLOB.not_incapacitated_state
/datum/squad/ui_data(mob/user)
- if(!squad_info_data.len) //initial first update of data
+ if(!length(squad_info_data)) //initial first update of data
update_all_squad_info()
if(squad_info_data["total_mar"] != count) //updates for new marines
update_free_mar()
@@ -130,7 +130,7 @@
//fireteam and TL update
/datum/squad/proc/update_fireteam(team)
- squad_info_data["fireteams"][team]["total"] = fireteams[team].len
+ squad_info_data["fireteams"][team]["total"] = length(fireteams[team])
if(squad_info_data["fireteams"][team]["total"] < 1)
squad_info_data["fireteams"][team]["tl"] = list()
squad_info_data["fireteams"][team]["mar"] = list()
@@ -197,7 +197,7 @@
squad_info_data["total_kia"] = 0
var/mar_free = count
for(var/team in fireteams)
- mar_free -= fireteams[team].len
+ mar_free -= length(fireteams[team])
if(squad_leader)
mar_free--
for(var/list/freeman in squad_info_data["mar_free"])
diff --git a/code/game/jobs/job/marine/squads.dm b/code/game/jobs/job/marine/squads.dm
index 3285e75e45c3..419f7d545fcf 100644
--- a/code/game/jobs/job/marine/squads.dm
+++ b/code/game/jobs/job/marine/squads.dm
@@ -649,7 +649,7 @@
//Not a safe proc. Returns null if squads or jobs aren't set up.
//Mostly used in the marine squad console in marine_consoles.dm.
/proc/get_squad_by_name(text)
- if(!GLOB.RoleAuthority || GLOB.RoleAuthority.squads.len == 0)
+ if(!GLOB.RoleAuthority || length(GLOB.RoleAuthority.squads) == 0)
return null
var/datum/squad/S
for(S in GLOB.RoleAuthority.squads)
diff --git a/code/game/jobs/role_authority.dm b/code/game/jobs/role_authority.dm
index a9017e2cc8d3..b4894eda4d24 100644
--- a/code/game/jobs/role_authority.dm
+++ b/code/game/jobs/role_authority.dm
@@ -331,7 +331,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
var/i = 0
var/j
while(++i < 3) //Get two passes.
- if(!roles_to_iterate.len || prob(65)) break //Base chance to become a marine when being assigned randomly, or there are no roles available.
+ if(!length(roles_to_iterate) || prob(65)) break //Base chance to become a marine when being assigned randomly, or there are no roles available.
j = pick(roles_to_iterate)
J = roles_to_iterate[j]
@@ -533,7 +533,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
//Find which squad has the least population. If all 4 squads are equal it should just use a random one
/datum/authority/branch/role/proc/get_lowest_squad(mob/living/carbon/human/H)
- if(!squads.len) //Something went wrong, our squads aren't set up.
+ if(!length(squads)) //Something went wrong, our squads aren't set up.
to_world("Warning, something messed up in get_lowest_squad(). No squads set up!")
return null
@@ -542,7 +542,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
var/list/squads_copy = squads.Copy()
var/list/mixed_squads = list()
- for(var/i= 1 to squads_copy.len)
+ for(var/i= 1 to length(squads_copy))
var/datum/squad/S = pick_n_take(squads_copy)
if (S.roundstart && S.usable && S.faction == H.faction && S.name != "Root")
mixed_squads += S
@@ -586,7 +586,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
if(!H)
return
- if(!squads.len)
+ if(!length(squads))
to_chat(H, "Something went wrong with your squad randomizer! Tell a coder!")
return //Shit, where's our squad data
@@ -597,7 +597,7 @@ I hope it's easier to tell what the heck this proc is even doing, unlike previou
var/list/squads_copy = squads.Copy()
var/list/mixed_squads = list()
// The following code removes non useable squads from the lists of squads we assign marines too.
- for(var/i= 1 to squads_copy.len)
+ for(var/i= 1 to length(squads_copy))
var/datum/squad/S = pick_n_take(squads_copy)
if (S.roundstart && S.usable && S.faction == H.faction && S.name != "Root")
mixed_squads += S
diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm
index 7eccb51c0660..3efb579ceadc 100644
--- a/code/game/machinery/air_alarm.dm
+++ b/code/game/machinery/air_alarm.dm
@@ -264,10 +264,10 @@
/obj/structure/machinery/alarm/proc/register_env_machine(m_id, device_type)
var/new_name
if (device_type=="AVP")
- new_name = "[alarm_area.name] Vent Pump #[alarm_area.air_vent_names.len+1]"
+ new_name = "[alarm_area.name] Vent Pump #[length(alarm_area.air_vent_names)+1]"
alarm_area.air_vent_names[m_id] = new_name
else if (device_type=="AScr")
- new_name = "[alarm_area.name] Air Scrubber #[alarm_area.air_scrub_names.len+1]"
+ new_name = "[alarm_area.name] Air Scrubber #[length(alarm_area.air_scrub_names)+1]"
alarm_area.air_scrub_names[m_id] = new_name
else
return
@@ -648,7 +648,7 @@ Pressure: [environment_pressure] kP
if (AALARM_SCREEN_VENT)
var/sensor_data = ""
- if(alarm_area.air_vent_names.len)
+ if(length(alarm_area.air_vent_names))
for(var/id_tag in alarm_area.air_vent_names)
var/long_name = alarm_area.air_vent_names[id_tag]
var/list/data = alarm_area.air_vent_info[id_tag]
@@ -690,7 +690,7 @@ siphoning
output = {"Main menu [sensor_data]"}
if (AALARM_SCREEN_SCRUB)
var/sensor_data = ""
- if(alarm_area.air_scrub_names.len)
+ if(length(alarm_area.air_scrub_names))
for(var/id_tag in alarm_area.air_scrub_names)
var/long_name = alarm_area.air_scrub_names[id_tag]
var/list/data = alarm_area.air_scrub_info[id_tag]
@@ -735,7 +735,7 @@ Nitrous Oxide
AALARM_MODE_FILL = SET_CLASS("Fill - Shuts off scrubbers and opens vents", INTERFACE_GREEN),\
AALARM_MODE_OFF = SET_CLASS("Off - Shuts off vents and scrubbers", INTERFACE_BLUE)
)
- for (var/m=1,m<=modes.len,m++)
+ for (var/m=1,m<=length(modes),m++)
if (mode==m)
output += "[modes[m]] (selected) "
else
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index fed690f6707b..4150aead979e 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -106,7 +106,7 @@
/obj/structure/machinery/autolathe/ui_data(mob/user)
var/list/data = list()
- if(queue.len)
+ if(length(queue))
var/list/queue_list = list()
var/i = 0
for(var/params in queue)
@@ -119,7 +119,7 @@
else
data["queued"] = null
- if(currently_making_data.len)
+ if(length(currently_making_data))
data["currently_making"] = currently_making_data
else
data["currently_making"] = null
@@ -129,7 +129,7 @@
var/list/wire_descriptions = get_wire_descriptions()
var/list/panel_wires = list()
- for(var/wire = 1 to wire_descriptions.len)
+ for(var/wire = 1 to length(wire_descriptions))
panel_wires += list(list("desc" = wire_descriptions[wire], "cut" = isWireCut(wire)))
data["electrical"] = list(
@@ -164,7 +164,7 @@
switch(action)
if("cancel")
var/index = params["index"]
- if(index < 1 || index > queue.len)
+ if(index < 1 || index > length(queue))
return
var/list/to_del = queue[index]
@@ -198,7 +198,7 @@
if(!initial(make_loc))
make_loc = get_step(loc, get_dir(src,usr))
- if(index > 0 && index <= recipes.len)
+ if(index > 0 && index <= length(recipes))
making = recipes[index]
//Exploit detection, not sure if necessary after rewrite.
@@ -358,7 +358,7 @@
storage_capacity[material] = tot_rating * 30000
/obj/structure/machinery/autolathe/proc/try_queue(mob/living/carbon/human/user, datum/autolathe/recipe/making, turf/make_loc, multiplier = 1)
- if(queue.len >= queue_max)
+ if(length(queue) >= queue_max)
to_chat(usr, SPAN_DANGER("The [name] has queued the maximum number of operations. Please wait for completion of current operation."))
return AUTOLATHE_FAILED
@@ -392,7 +392,7 @@
busy = TRUE
- while (queue.len)
+ while (length(queue))
print_params = queue[1]
queue -= list(print_params)
print_item(arglist(print_params))
@@ -526,7 +526,7 @@
max_print_amt = -1
- if(!R.resources || !R.resources.len)
+ if(!LAZYLEN(R.resources))
print_data["materials"] = "No resources required"
else
//Make sure it's buildable and list requires resources.
diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm
index c21a7a854bc3..cd93ce513972 100644
--- a/code/game/machinery/bots/cleanbot.dm
+++ b/code/game/machinery/bots/cleanbot.dm
@@ -180,7 +180,7 @@ text("[src.oddbutton ? "Yes" : "No"
if (!should_patrol)
return
- if (!patrol_path || patrol_path.len < 1)
+ if (LAZYLEN(patrol_path) < 1)
var/datum/radio_frequency/frequency = SSradio.return_frequency(beacon_freq)
if(!frequency) return
@@ -204,20 +204,20 @@ text(" [src.oddbutton ? "Yes" : "No"
return
- if(target && path.len == 0)
+ if(target && length(path) == 0)
spawn(0)
if(!src || !target) return
src.path = AStar(src.loc, src.target.loc, /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30, id=botcard)
if (!path) path = list()
- if(src.path.len == 0)
+ if(length(src.path) == 0)
src.oldtarget = src.target
target.targeted_by = null
src.target = null
return
- if(src.path.len > 0 && src.target && (src.target != null))
+ if(length(src.path) > 0 && src.target && (src.target != null))
step_to(src, src.path[1])
src.path -= src.path[1]
- else if(src.path.len == 1)
+ else if(length(src.path) == 1)
step_to(src, target)
if(src.target && (src.target != null))
@@ -231,7 +231,7 @@ text(" [src.oddbutton ? "Yes" : "No"
src.oldloc = src.loc
/obj/structure/machinery/bot/cleanbot/proc/patrol_move()
- if (src.patrol_path.len <= 0)
+ if (length(src.patrol_path) <= 0)
return
var/next = src.patrol_path[1]
diff --git a/code/game/machinery/bots/floorbot.dm b/code/game/machinery/bots/floorbot.dm
index be8ec5aa8574..85f6d580cec7 100644
--- a/code/game/machinery/bots/floorbot.dm
+++ b/code/game/machinery/bots/floorbot.dm
@@ -199,21 +199,21 @@
src.oldtarget = null
return
- if(src.target && (src.target != null) && src.path.len == 0)
+ if(src.target && (src.target != null) && length(src.path) == 0)
spawn(0)
if(!istype(src.target, /turf/))
src.path = AStar(src.loc, src.target.loc, /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30, id=botcard)
else
src.path = AStar(src.loc, src.target, /turf/proc/AdjacentTurfsSpace, /turf/proc/Distance, 0, 30, id=botcard)
if (!src.path) src.path = list()
- if(src.path.len == 0)
+ if(length(src.path) == 0)
src.oldtarget = src.target
src.target = null
return
- if(src.path.len > 0 && src.target && (src.target != null))
+ if(length(src.path) > 0 && src.target && (src.target != null))
step_to(src, src.path[1])
src.path -= src.path[1]
- else if(src.path.len == 1)
+ else if(length(src.path) == 1)
step_to(src, target)
src.path = new()
@@ -342,7 +342,7 @@
if(!istype(T, /obj/item/stack/tile/plasteel))
..()
return
- if(src.contents.len >= 1)
+ if(length(src.contents) >= 1)
to_chat(user, SPAN_NOTICE("That won't fit, there's already stuff inside."))
return
for(var/mob/M in content_watchers)
diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm
index 77e890d88d34..5193b1b7cddd 100644
--- a/code/game/machinery/bots/medbot.dm
+++ b/code/game/machinery/bots/medbot.dm
@@ -62,7 +62,7 @@
src.overlays += image('icons/obj/structures/machinery/aibots.dmi', "medskin_[src.skin]")
src.botcard = new /obj/item/card/id(src)
- if(isnull(src.botcard_access) || (src.botcard_access.len < 1))
+ if(!LAZYLEN(src.botcard_access))
var/datum/job/J = GLOB.RoleAuthority ? GLOB.RoleAuthority.roles_by_path[/datum/job/civilian/doctor] : new /datum/job/civilian/doctor
botcard.access = J.get_access()
else
@@ -278,31 +278,31 @@
src.medicate_patient(src.patient)
return
- else if(src.patient && (src.path.len) && (get_dist(src.patient,src.path[src.path.len]) > 2))
+ else if(src.patient && (length(src.path)) && (get_dist(src.patient,src.path[length(src.path)]) > 2))
src.path = new()
src.currently_healing = 0
src.last_found = world.time
- if(src.patient && src.path.len == 0 && (get_dist(src,src.patient) > 1))
+ if(src.patient && length(src.path) == 0 && (get_dist(src,src.patient) > 1))
spawn(0)
src.path = AStar(src.loc, get_turf(src.patient), /turf/proc/CardinalTurfsWithAccess, /turf/proc/Distance, 0, 30,id=botcard)
if (!path) path = list()
- if(src.path.len == 0)
+ if(length(src.path) == 0)
src.oldpatient = src.patient
src.patient = null
src.currently_healing = 0
src.last_found = world.time
return
- if(src.path.len > 0 && src.patient)
+ if(length(src.path) > 0 && src.patient)
step_to(src, src.path[1])
src.path -= src.path[1]
spawn(3)
- if(src.path.len)
+ if(length(src.path))
step_to(src, src.path[1])
src.path -= src.path[1]
- if(src.path.len > 8 && src.patient)
+ if(length(src.path) > 8 && src.patient)
src.frustration++
return
@@ -487,7 +487,7 @@
return
//Making a medibot!
- if(src.contents.len >= 1)
+ if(length(src.contents) >= 1)
to_chat(user, SPAN_NOTICE("You need to empty [src] out first."))
return
diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm
index 0686759f0edd..563c4b89c590 100644
--- a/code/game/machinery/bots/mulebot.dm
+++ b/code/game/machinery/bots/mulebot.dm
@@ -105,12 +105,12 @@
var/list/orders = list("0","1","2","3","4","5","6","7","8","9")
wire_text = list()
wire_order = list()
- while(colours.len > 0)
- var/color = colours[ rand(1,colours.len) ]
+ while(length(colours) > 0)
+ var/color = colours[ rand(1,length(colours)) ]
wire_text += color
colours -= color
- var/order = orders[ rand(1,orders.len) ]
+ var/order = orders[ rand(1,length(orders)) ]
wire_order += text2num(order)
orders -= order
@@ -584,7 +584,7 @@
at_target()
return
- else if(path.len > 0 && target) // valid path
+ else if(length(path) > 0 && target) // valid path
var/turf/next = path[1]
reached_target = 0
@@ -645,7 +645,7 @@
spawn(2)
calc_path(next)
- if(path.len > 0)
+ if(length(path) > 0)
src.visible_message("[src] makes a delighted ping!", "You hear a ping.")
playsound(src.loc, 'sound/machines/ping.ogg', 25, 0)
mode = 4
@@ -667,7 +667,7 @@
calc_path()
- if(path.len > 0)
+ if(length(path) > 0)
blockcount = 0
mode = 4
src.visible_message("[src] makes a delighted ping!", "You hear a ping.")
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 6943544e30d4..4f6b40968bdb 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -52,13 +52,13 @@ GLOBAL_LIST_EMPTY_TYPED(all_cameras, /obj/structure/machinery/camera)
if(colony_camera_mapload && mapload && is_ground_level(z))
network = list(CAMERA_NET_COLONY)
- if(!src.network || src.network.len < 1)
+ if(LAZYLEN(src.network) < 1)
if(loc)
error("[src.name] in [get_area(src)] (x:[src.x] y:[src.y] z:[src.z]) has errored. [src.network?"Empty network list":"Null network list"]")
else
error("[src.name] in [get_area(src)]has errored. [src.network?"Empty network list":"Null network list"]")
ASSERT(src.network)
- ASSERT(src.network.len > 0)
+ ASSERT(length(src.network) > 0)
set_pixel_location()
update_icon()
diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm
index 6a869f443d12..498984a48736 100644
--- a/code/game/machinery/camera/motion.dm
+++ b/code/game/machinery/camera/motion.dm
@@ -32,7 +32,7 @@
/obj/structure/machinery/camera/proc/lostTarget(mob/target)
if (target in motionTargets)
motionTargets -= target
- if (motionTargets.len == 0)
+ if (length(motionTargets) == 0)
cancelAlarm()
/obj/structure/machinery/camera/proc/cancelAlarm()
diff --git a/code/game/machinery/computer/almayer_control.dm b/code/game/machinery/computer/almayer_control.dm
index 8cd043e23998..3d3c0fdbe4df 100644
--- a/code/game/machinery/computer/almayer_control.dm
+++ b/code/game/machinery/computer/almayer_control.dm
@@ -85,7 +85,7 @@
if(SShijack.evac_status == EVACUATION_STATUS_INITIATED)
data["evac_eta"] = SShijack.get_evac_eta()
- if(!messagetitle.len)
+ if(!length(messagetitle))
data["messages"] = null
else
for(var/i in 1 to length(messagetitle))
diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm
index 1ac5a06738d5..ff8f3959d64e 100644
--- a/code/game/machinery/computer/arcade.dm
+++ b/code/game/machinery/computer/arcade.dm
@@ -122,7 +122,7 @@
src.gameover = 1
src.temp = "[src.enemy_name] has fallen! Rejoice!"
- if(!contents.len)
+ if(!length(contents))
var/prizeselect = pickweight(prizes)
new prizeselect(src.loc)
diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm
index 9a17449b9e47..8ce8248b07a2 100644
--- a/code/game/machinery/computer/atmos_alert.dm
+++ b/code/game/machinery/computer/atmos_alert.dm
@@ -62,10 +62,10 @@
..()
if(inoperable())
return
- if(priority_alarms.len)
+ if(length(priority_alarms))
icon_state = "alert:2"
- else if(minor_alarms.len)
+ else if(length(minor_alarms))
icon_state = "alert:1"
else
@@ -77,13 +77,13 @@
var/priority_text
var/minor_text
- if(priority_alarms.len)
+ if(length(priority_alarms))
for(var/zone in priority_alarms)
priority_text += "[zone] X "
else
priority_text = "No priority alerts detected. "
- if(minor_alarms.len)
+ if(length(minor_alarms))
for(var/zone in minor_alarms)
minor_text += "[zone] X "
else
diff --git a/code/game/machinery/computer/camera_console.dm b/code/game/machinery/computer/camera_console.dm
index 1e2cb427cab4..c818df9fbfb9 100644
--- a/code/game/machinery/computer/camera_console.dm
+++ b/code/game/machinery/computer/camera_console.dm
@@ -167,7 +167,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/communications.dm b/code/game/machinery/computer/communications.dm
index dec523ccc5b2..2e6922e43a85 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -366,7 +366,7 @@
dat += "Select primary LZ "
dat += " "
dat += "Make an announcement "
- dat += GLOB.admins.len > 0 ? "Send a message to USCM " : " USCM communication offline"
+ dat += length(GLOB.admins) > 0 ? "Send a message to USCM " : " USCM communication offline"
dat += "Award a medal "
dat += "Send Distress Beacon "
dat += "Activate Self-Destruct "
@@ -393,7 +393,7 @@
if(STATE_MESSAGELIST)
dat += "Messages:"
- for(var/i = 1; i<=messagetitle.len; i++)
+ for(var/i = 1; i<=length(messagetitle); i++)
dat += "[messagetitle[i]] "
if(STATE_VIEWMESSAGE)
@@ -466,7 +466,7 @@
if(STATE_MESSAGELIST)
dat += "Messages:"
- for(var/i = 1; i<=messagetitle.len; i++)
+ for(var/i = 1; i<=length(messagetitle); i++)
dat += "[messagetitle[i]] "
if(STATE_VIEWMESSAGE)
diff --git a/code/game/machinery/computer/dropship_weapons.dm b/code/game/machinery/computer/dropship_weapons.dm
index abd3ab50b75c..e07b415ed233 100644
--- a/code/game/machinery/computer/dropship_weapons.dm
+++ b/code/game/machinery/computer/dropship_weapons.dm
@@ -581,8 +581,8 @@
for(var/datum/cas_fire_mission_record/firerec as anything in editing_firemission.records)
var/gimbal = firerec.get_offsets()
var/ammo = firerec.get_ammo()
- var/offsets = new /list(firerec.offsets.len)
- for(var/idx = 1; idx < firerec.offsets.len; idx++)
+ var/offsets = new /list(length(firerec.offsets))
+ for(var/idx = 1; idx < length(firerec.offsets); idx++)
offsets[idx] = firerec.offsets[idx] == null ? "-" : firerec.offsets[idx]
. += list(
"name" = sanitize(copytext(firerec.weapon.name, 1, 50)),
@@ -738,7 +738,7 @@
if(!skillcheck(weapon_operator, SKILL_PILOT, SKILL_PILOT_TRAINED)) //only pilots can fire dropship weapons.
to_chat(weapon_operator, SPAN_WARNING("A screen with graphics and walls of physics and engineering values open, you immediately force it closed."))
return FALSE
- if(firemission_tag > firemission_envelope.missions.len)
+ if(firemission_tag > length(firemission_envelope.missions))
to_chat(weapon_operator, SPAN_WARNING("Fire Mission ID corrupted or already deleted."))
return FALSE
if(selected_firemission == firemission_envelope.missions[firemission_tag])
@@ -757,7 +757,7 @@
if(firemission_envelope.stat > FIRE_MISSION_STATE_IN_TRANSIT && firemission_envelope.stat < FIRE_MISSION_STATE_COOLDOWN)
to_chat(weapon_operator, SPAN_WARNING("Fire Mission already underway."))
return FALSE
- if(firemission_tag > firemission_envelope.missions.len)
+ if(firemission_tag > length(firemission_envelope.missions))
to_chat(weapon_operator, SPAN_WARNING("Fire Mission ID corrupted or deleted."))
return FALSE
if(selected_firemission == firemission_envelope.missions[firemission_tag])
diff --git a/code/game/machinery/computer/guestpass.dm b/code/game/machinery/computer/guestpass.dm
index 5204b53e20ee..20a7260320f2 100644
--- a/code/game/machinery/computer/guestpass.dm
+++ b/code/game/machinery/computer/guestpass.dm
@@ -165,7 +165,7 @@
if (giver)
var/number = add_zero("[rand(0,9999)]", 4)
var/entry = "\[[worldtime2text()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: "
- for (var/i=1 to accesses.len)
+ for (var/i=1 to length(accesses))
var/A = accesses[i]
if (A)
var/area = get_access_desc(A)
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 4138d89908d4..b3892de24413 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -155,7 +155,7 @@
dat += text("New Security Record ", src)
dat += text("\nPrint Record \nBack ", src, src)
if(4.0)
- if(!Perp.len)
+ if(!length(Perp))
dat += text("ERROR. String could not be located.Back ", src)
else
dat += {"
@@ -172,7 +172,7 @@
Rank
Criminal Status
"}
- for(var/i=1, i<=Perp.len, i += 2)
+ for(var/i=1, i<=length(Perp), i += 2)
var/crimstat = ""
var/datum/data/record/R = Perp[i]
if(istype(Perp[i+1],/datum/data/record/))
@@ -271,16 +271,16 @@ What a mess.*/
Perp = new/list()
t1 = lowertext(t1)
var/list/components = splittext(t1, " ")
- if(components.len > 5)
+ if(length(components) > 5)
return //Lets not let them search too greedily.
for(var/datum/data/record/R in GLOB.data_core.general)
var/temptext = R.fields["name"] + " " + R.fields["id"] + " " + R.fields["rank"]
- for(var/i = 1, i<=components.len, i++)
+ for(var/i = 1, i<=length(components), i++)
if(findtext(temptext,components[i]))
var/prelist = new/list(2)
prelist[1] = R
Perp += prelist
- for(var/i = 1, i<=Perp.len, i+=2)
+ for(var/i = 1, i<=length(Perp), i+=2)
for(var/datum/data/record/E in GLOB.data_core.security)
var/datum/data/record/R = Perp[i]
if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
diff --git a/code/game/machinery/computer/skills.dm b/code/game/machinery/computer/skills.dm
index cc4d93f5a24c..cba8d50791f9 100644
--- a/code/game/machinery/computer/skills.dm
+++ b/code/game/machinery/computer/skills.dm
@@ -97,7 +97,7 @@
dat += "General Record Lost! "
dat += "\nDelete Record (ALL) \nPrint Record \nBack "
if(4.0)
- if(!Perp.len)
+ if(!length(Perp))
dat += "ERROR. String could not be located.Back "
else
dat += {"
@@ -114,7 +114,7 @@
Rank
Fingerprints
"}
- for(var/i=1, i<=Perp.len, i += 2)
+ for(var/i=1, i<=length(Perp), i += 2)
var/crimstat = ""
var/datum/data/record/R = Perp[i]
if(istype(Perp[i+1],/datum/data/record/))
@@ -202,16 +202,16 @@ What a mess.*/
Perp = new/list()
t1 = lowertext(t1)
var/list/components = splittext(t1, " ")
- if(components.len > 5)
+ if(length(components) > 5)
return //Lets not let them search too greedily.
for(var/datum/data/record/R in GLOB.data_core.general)
var/temptext = R.fields["name"] + " " + R.fields["id"] + " " + R.fields["rank"]
- for(var/i = 1, i<=components.len, i++)
+ for(var/i = 1, i<=length(components), i++)
if(findtext(temptext,components[i]))
var/prelist = new/list(2)
prelist[1] = R
Perp += prelist
- for(var/i = 1, i<=Perp.len, i+=2)
+ for(var/i = 1, i<=length(Perp), i+=2)
for(var/datum/data/record/E in GLOB.data_core.security)
var/datum/data/record/R = Perp[i]
if ((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"]))
diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm
index d262caf47859..ddce92c966fb 100644
--- a/code/game/machinery/computer/station_alert.dm
+++ b/code/game/machinery/computer/station_alert.dm
@@ -55,7 +55,7 @@
var/list/CL = null
if(O && islist(O))
CL = O
- if (CL.len == 1)
+ if (length(CL) == 1)
C = CL[1]
else if(O && istype(O, /obj/structure/machinery/camera))
C = O
@@ -73,7 +73,7 @@
var/list/srcs = alarm[3]
if (origin in srcs)
srcs -= origin
- if (srcs.len == 0)
+ if (length(srcs) == 0)
cleared = 1
L -= I
return !cleared
@@ -85,7 +85,7 @@
var/active_alarms = 0
for (var/cat in src.alarms)
var/list/L = src.alarms[cat]
- if(L.len) active_alarms = 1
+ if(length(L)) active_alarms = 1
if(active_alarms)
icon_state = "alert:2"
else
diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm
index 357ef48fff37..0c8cc62c3f87 100644
--- a/code/game/machinery/constructable_frame.dm
+++ b/code/game/machinery/constructable_frame.dm
@@ -124,7 +124,7 @@
state = CONSTRUCTION_STATE_BEGIN
circuit.forceMove(loc)
circuit = null
- if(components.len == 0)
+ if(length(components) == 0)
to_chat(user, SPAN_NOTICE("You remove the circuit board."))
else
to_chat(user, SPAN_NOTICE("You remove the circuit board and other components."))
diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm
index 61972f2f6c46..70c4a175489c 100644
--- a/code/game/machinery/cryo.dm
+++ b/code/game/machinery/cryo.dm
@@ -114,7 +114,7 @@
data["isBeakerLoaded"] = beaker ? TRUE : FALSE
var/beakerContents = list()
- 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 += list(list("name" = R.name, "volume" = R.volume))
data["beakerContents"] = beakerContents
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 1793b87c72ae..658e2aa150f3 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -103,7 +103,7 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li
else if(href_list["item"])
- if(frozen_items_for_type.len == 0)
+ if(length(frozen_items_for_type) == 0)
to_chat(user, SPAN_WARNING("There is nothing to recover from storage."))
return
@@ -122,7 +122,7 @@ GLOBAL_LIST_INIT(frozen_items, list(SQUAD_MARINE_1 = list(), SQUAD_MARINE_2 = li
else if(href_list["allitems"])
- if(frozen_items_for_type.len == 0)
+ if(length(frozen_items_for_type) == 0)
to_chat(user, SPAN_WARNING("There is nothing to recover from storage."))
return
diff --git a/code/game/machinery/door_display/door_display.dm b/code/game/machinery/door_display/door_display.dm
index 3f0c53ada18e..4624ba5f1bd2 100644
--- a/code/game/machinery/door_display/door_display.dm
+++ b/code/game/machinery/door_display/door_display.dm
@@ -35,7 +35,7 @@
if (D.id == id)
targets += D
- if(targets.len == 0)
+ if(length(targets) == 0)
stat |= BROKEN
update_icon()
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index e8db9dd63875..84f02f0a5bbd 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -677,9 +677,9 @@ GLOBAL_LIST_INIT(airlock_wire_descriptions, list(
airlock_electronics = new/obj/item/circuitboard/airlock(loc)
if(!req_access || !req_one_access)
check_access()
- if(req_access.len)
+ if(length(req_access))
airlock_electronics.conf_access = req_access
- else if(req_one_access.len)
+ else if(length(req_one_access))
airlock_electronics.conf_access = req_one_access
airlock_electronics.one_access = TRUE
else
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index cddd67c7e2b2..f3fba382fb04 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -75,7 +75,7 @@
. += SPAN_WARNING("WARNING: Current pressure differential is [pdiff]kPa! Opening door may result in injury!")
. += "Sensor readings: "
- for(var/index = 1; index <= tile_info.len; index++)
+ for(var/index = 1; index <= length(tile_info); index++)
var/o = " "
switch(index)
if(1)
@@ -101,10 +101,10 @@
o += "[pressure]kPa"
. += o
- if(islist(users_to_open) && users_to_open.len)
+ if(islist(users_to_open) && length(users_to_open))
var/users_to_open_string = users_to_open[1]
- if(users_to_open.len >= 2)
- for(var/i = 2 to users_to_open.len)
+ if(length(users_to_open) >= 2)
+ for(var/i = 2 to length(users_to_open))
users_to_open_string += ", [users_to_open[i]]"
. += "These people have opened \the [src] during an alert: [users_to_open_string]."
@@ -275,7 +275,7 @@
if(dir_alerts)
for(var/d=1;d<=4;d++)
var/cdir = GLOB.cardinals[d]
- for(var/i=1;i<=ALERT_STATES.len;i++)
+ for(var/i=1;i<=length(ALERT_STATES);i++)
if(dir_alerts[d] & (1<<(i-1)))
overlays += new/icon(icon,"alert_[ALERT_STATES[i]]", dir=cdir)
else
diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm
index a7af3ba4bdcb..61727d1fa471 100644
--- a/code/game/machinery/doors/windowdoor.dm
+++ b/code/game/machinery/doors/windowdoor.dm
@@ -15,7 +15,7 @@
/obj/structure/machinery/door/window/Initialize()
. = ..()
addtimer(CALLBACK(src, PROC_REF(update_icon)), 1)
- if (src.req_access && src.req_access.len)
+ if (LAZYLEN(src.req_access))
src.icon_state = "[src.icon_state]"
src.base_state = src.icon_state
@@ -105,9 +105,9 @@
ae = new/obj/item/circuitboard/airlock( src.loc )
if(!src.req_access)
src.check_access()
- if(src.req_access.len)
+ if(length(src.req_access))
ae.conf_access = src.req_access
- else if (src.req_one_access && src.req_one_access.len)
+ else if (LAZYLEN(src.req_one_access))
ae.conf_access = src.req_one_access
ae.one_access = 1
else
@@ -189,9 +189,9 @@
ae = new/obj/item/circuitboard/airlock( src.loc )
if(!src.req_access)
src.check_access()
- if(src.req_access.len)
+ if(length(src.req_access))
ae.conf_access = src.req_access
- else if (src.req_one_access.len)
+ else if (length(src.req_one_access))
ae.conf_access = src.req_one_access
ae.one_access = 1
else
diff --git a/code/game/machinery/iv_drip.dm b/code/game/machinery/iv_drip.dm
index 4e4e38d953d1..f4a3a9f25cc3 100644
--- a/code/game/machinery/iv_drip.dm
+++ b/code/game/machinery/iv_drip.dm
@@ -190,7 +190,7 @@
. += "The IV drip is [mode ? "injecting" : "taking blood"]."
if(beaker)
- if(beaker.reagents && beaker.reagents.reagent_list.len)
+ if(beaker.reagents && length(beaker.reagents.reagent_list))
. += SPAN_NOTICE(" Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.")
else
. += SPAN_NOTICE(" Attached is an empty [beaker].")
diff --git a/code/game/machinery/kitchen/microwave.dm b/code/game/machinery/kitchen/microwave.dm
index 78e64ab49f89..dbb93a0e30c1 100644
--- a/code/game/machinery/kitchen/microwave.dm
+++ b/code/game/machinery/kitchen/microwave.dm
@@ -42,7 +42,7 @@
for (var/reagent in recipe.reagents)
acceptable_reagents |= reagent
if (recipe.items)
- max_n_of_items = max(max_n_of_items,recipe.items.len)
+ max_n_of_items = max(max_n_of_items,length(recipe.items))
// This will do until I can think of a fun recipe to use dionaea in -
// will also allow anything using the holder item to be microwaved into
@@ -115,7 +115,7 @@
else if(operating)
to_chat(user, SPAN_DANGER("It's running!"))
else if(is_type_in_list(O,acceptable_items))
- if (contents.len>=max_n_of_items)
+ if (length(contents)>=max_n_of_items)
to_chat(user, SPAN_DANGER("This [src] is full of ingredients, you cannot put more."))
return 1
if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it
diff --git a/code/game/machinery/kitchen/processor.dm b/code/game/machinery/kitchen/processor.dm
index 4918df4d9a5b..62455d770539 100644
--- a/code/game/machinery/kitchen/processor.dm
+++ b/code/game/machinery/kitchen/processor.dm
@@ -41,7 +41,7 @@
if(!skillcheck(user, SKILL_DOMESTIC, SKILL_DOMESTIC_MASTER))
to_chat(user, SPAN_DANGER("You aren't trained to remove dangerous substances from food!"))
return FALSE
- return TRUE
+ return TRUE
/datum/food_processor_process/meat
input = /obj/item/reagent_container/food/snacks/meat
@@ -55,7 +55,7 @@
if(!skillcheck(user, SKILL_DOMESTIC, SKILL_DOMESTIC_MASTER))
to_chat(user, SPAN_DANGER("You aren't trained to remove dangerous substances from food!"))
return FALSE
- return TRUE
+ return TRUE
/datum/food_processor_process/potato
input = /obj/item/reagent_container/food/snacks/grown/potato
@@ -102,7 +102,7 @@
if(processing)
to_chat(user, SPAN_DANGER("The processor is in the process of processing."))
return 1
- if(contents.len > 0) //TODO: several items at once? several different items?
+ if(length(contents) > 0) //TODO: several items at once? several different items?
to_chat(user, SPAN_DANGER("Something is already in the processing chamber."))
return 1
if(HAS_TRAIT(O, TRAIT_TOOL_WRENCH))
@@ -130,7 +130,7 @@
if(src.processing)
to_chat(user, SPAN_DANGER("The processor is in the process of processing."))
return 1
- if(src.contents.len == 0)
+ if(length(src.contents) == 0)
to_chat(user, SPAN_DANGER("The processor is empty."))
return 1
for(var/O in src.contents)
diff --git a/code/game/machinery/kitchen/smartfridge.dm b/code/game/machinery/kitchen/smartfridge.dm
index 6d3e18933457..774153316baa 100644
--- a/code/game/machinery/kitchen/smartfridge.dm
+++ b/code/game/machinery/kitchen/smartfridge.dm
@@ -125,7 +125,7 @@
user.visible_message( \
SPAN_NOTICE("[user] loads \the [src] with \the [P]."), \
SPAN_NOTICE("You load \the [src] with \the [P]."))
- if(P.contents.len > 0)
+ if(length(P.contents) > 0)
to_chat(user, SPAN_NOTICE("Some items are refused."))
else if(!(O.flags_item & NOBLUDGEON)) //so we can spray, scan, c4 the machine.
@@ -186,7 +186,7 @@
var/list/wire_descriptions = get_wire_descriptions()
var/list/panel_wires = list()
- for(var/wire = 1 to wire_descriptions.len)
+ for(var/wire = 1 to length(wire_descriptions))
panel_wires += list(list("desc" = wire_descriptions[wire], "cut" = isWireCut(wire)))
.["electrical"] = list(
diff --git a/code/game/machinery/medical_pod/autodoc.dm b/code/game/machinery/medical_pod/autodoc.dm
index 937afa0cdb4d..ef335c6841e6 100644
--- a/code/game/machinery/medical_pod/autodoc.dm
+++ b/code/game/machinery/medical_pod/autodoc.dm
@@ -109,7 +109,7 @@
/obj/structure/machinery/medical_pod/autodoc/proc/heal_limb(mob/living/carbon/human/human, brute, burn)
var/list/obj/limb/parts = human.get_damaged_limbs(brute,burn)
- if(!parts.len) return
+ if(!length(parts)) return
var/obj/limb/picked = pick(parts)
if(picked.status & (LIMB_ROBOT|LIMB_SYNTHSKIN))
picked.heal_damage(brute, burn, TRUE)
@@ -248,7 +248,7 @@
if(L.status & LIMB_DESTROYED)
if(!(L.parent.status & LIMB_DESTROYED) && L.name != "head")
surgery_list += create_autodoc_surgery(L,LIMB_SURGERY,"missing")
- if(L.implants.len)
+ if(length(L.implants))
for(var/I in L.implants)
if(!is_type_in_list(I,known_implants))
surgery_list += create_autodoc_surgery(L,LIMB_SURGERY,"shrapnel")
@@ -294,7 +294,7 @@
var/list/surgery_todo_list = N.fields["autodoc_manual"]
- if(!surgery_todo_list.len)
+ if(!length(surgery_todo_list))
visible_message("\The [src] buzzes, no surgical procedures were queued.")
return
@@ -320,7 +320,7 @@
surgery_todo_list -= A
var/currentsurgery = 1
- while(surgery_todo_list.len > 0)
+ while(length(surgery_todo_list) > 0)
if(!surgery)
break;
sleep(-1)
@@ -508,7 +508,7 @@
open_incision(H,S.limb_ref)
if(S.limb_ref.name == "chest" || S.limb_ref.name == "head")
open_encased(H,S.limb_ref)
- if(S.limb_ref.implants.len)
+ if(length(S.limb_ref.implants))
for(var/obj/item/I in S.limb_ref.implants)
if(!surgery) break
if(!is_type_in_list(I,known_implants))
@@ -893,7 +893,7 @@
var/known_implants = list(/obj/item/implant/chem, /obj/item/implant/death_alarm, /obj/item/implant/loyalty, /obj/item/implant/tracking, /obj/item/implant/neurostim)
for(var/obj/limb/L in connected.occupant.limbs)
if(L)
- if(L.implants.len)
+ if(length(L.implants))
for(var/I in L.implants)
if(!is_type_in_list(I,known_implants))
N.fields["autodoc_manual"] += create_autodoc_surgery(L,LIMB_SURGERY,"shrapnel")
diff --git a/code/game/machinery/medical_pod/bodyscanner.dm b/code/game/machinery/medical_pod/bodyscanner.dm
index 73e5a87b2304..54b454f945a8 100644
--- a/code/game/machinery/medical_pod/bodyscanner.dm
+++ b/code/game/machinery/medical_pod/bodyscanner.dm
@@ -333,7 +333,7 @@
open = "Open "
var/unknown_body = 0
- if (e.implants.len)
+ if (length(e.implants))
for(var/I in e.implants)
if(is_type_in_list(I,known_implants))
imp += "[I] implanted "
diff --git a/code/game/machinery/nuclearbomb.dm b/code/game/machinery/nuclearbomb.dm
index bb83261ae948..42b5d95694cb 100644
--- a/code/game/machinery/nuclearbomb.dm
+++ b/code/game/machinery/nuclearbomb.dm
@@ -345,7 +345,7 @@ GLOBAL_VAR_INIT(bomb_set, FALSE)
var/datum/hive_status/hive
for(var/hivenumber in GLOB.hive_datum)
hive = GLOB.hive_datum[hivenumber]
- if(!hive.totalXenos.len)
+ if(!length(hive.totalXenos))
return
xeno_announcement(SPAN_XENOANNOUNCE(warning), hive.hivenumber, XENO_GENERAL_ANNOUNCE)
return
@@ -358,7 +358,7 @@ GLOBAL_VAR_INIT(bomb_set, FALSE)
yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING! A human purification device has been detected. You have approximately [t_left] to abandon the hunting grounds before it activates."))
for(var/hivenumber in GLOB.hive_datum)
hive = GLOB.hive_datum[hivenumber]
- if(!hive.totalXenos.len)
+ if(!length(hive.totalXenos))
continue
xeno_announcement(SPAN_XENOANNOUNCE("The tallhosts have deployed a hive killer at [get_area_name(loc)]! Stop it at all costs!"), hive.hivenumber, XENO_GENERAL_ANNOUNCE)
else
@@ -367,7 +367,7 @@ GLOBAL_VAR_INIT(bomb_set, FALSE)
yautja_announcement(SPAN_YAUTJABOLDBIG("WARNING! The human purification device's signature has disappeared."))
for(var/hivenumber in GLOB.hive_datum)
hive = GLOB.hive_datum[hivenumber]
- if(!hive.totalXenos.len)
+ if(!length(hive.totalXenos))
continue
xeno_announcement(SPAN_XENOANNOUNCE("The hive killer has been disabled! Rejoice!"), hive.hivenumber, XENO_GENERAL_ANNOUNCE)
return
@@ -594,7 +594,7 @@ GLOBAL_VAR_INIT(bomb_set, FALSE)
var/datum/hive_status/hive
for(var/hivenumber in GLOB.hive_datum)
hive = GLOB.hive_datum[hivenumber]
- if(!hive.totalXenos.len)
+ if(!length(hive.totalXenos))
return
xeno_announcement(SPAN_XENOANNOUNCE(warning), hive.hivenumber, XENO_GENERAL_ANNOUNCE)
return
diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm
index 2e98eb7e88e9..536ad72557d9 100644
--- a/code/game/machinery/rechargestation.dm
+++ b/code/game/machinery/rechargestation.dm
@@ -167,7 +167,7 @@
doing_stuff = TRUE
if(!doing_stuff)
for(var/obj/limb/current_limb in humanoid_occupant.limbs)
- if(current_limb.implants.len)
+ if(length(current_limb.implants))
doing_stuff = TRUE
to_chat(occupant, "Foreign material detected. Beginning removal process...")
for(var/obj/item/current_implant in current_limb.implants)
diff --git a/code/game/machinery/scoreboard.dm b/code/game/machinery/scoreboard.dm
index 8fd5dd984e6f..0810ae26cbf4 100644
--- a/code/game/machinery/scoreboard.dm
+++ b/code/game/machinery/scoreboard.dm
@@ -16,8 +16,7 @@
update_display()
/obj/structure/machinery/scoreboard/proc/update_display()
- if(overlays.len)
- overlays.Cut()
+ LAZYCLEARLIST(overlays)
var/score_state = "s[( floor(scoreleft/10) > scoreleft/10 ? floor(scoreleft/10)-1 : floor(scoreleft/10) )]a"
overlays += image('icons/obj/structures/machinery/scoreboard.dmi', icon_state=score_state)
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 547dbba68e4f..db2e58cf325b 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -158,8 +158,7 @@
return ""
/obj/structure/machinery/status_display/proc/remove_display()
- if(overlays.len)
- overlays.Cut()
+ LAZYCLEARLIST(overlays)
if(maptext)
maptext = ""
@@ -241,8 +240,7 @@
/obj/structure/machinery/ai_status_display/proc/set_picture(state)
picture_state = state
- if(overlays.len)
- overlays.Cut()
+ LAZYCLEARLIST(overlays)
overlays += image('icons/obj/structures/machinery/status_display.dmi', icon_state=picture_state)
#undef DEFAULT_FONT_COLOR
diff --git a/code/game/machinery/telecomms/machine_interactions.dm b/code/game/machinery/telecomms/machine_interactions.dm
index 87bfcd466766..9bffa8ebe450 100644
--- a/code/game/machinery/telecomms/machine_interactions.dm
+++ b/code/game/machinery/telecomms/machine_interactions.dm
@@ -69,7 +69,7 @@
to_chat(user, "You finish prying out the components.")
// Drop all the component stuff
- if(contents.len > 0)
+ if(length(contents) > 0)
for(var/obj/x in src)
x.forceMove(user.loc)
else
@@ -125,7 +125,7 @@
else
dat += " Identification String: NULL "
dat += " Network: [network] "
- dat += " Prefabrication: [autolinkers.len ? "TRUE" : "FALSE"]"
+ dat += " Prefabrication: [length(autolinkers) ? "TRUE" : "FALSE"]"
if(hide) dat += " Shadow Link: ACTIVE"
//Show additional options for certain GLOB.machines.
diff --git a/code/game/machinery/telecomms/portable_comms.dm b/code/game/machinery/telecomms/portable_comms.dm
index f8f34133750f..c2a9bb1072ac 100644
--- a/code/game/machinery/telecomms/portable_comms.dm
+++ b/code/game/machinery/telecomms/portable_comms.dm
@@ -18,9 +18,9 @@
is_wired = 1
break
if(components)
- switch(components.len)
+ switch(length(components))
if(0 to 8)
- icon_state = "construct_[contents.len]_[is_wired]"
+ icon_state = "construct_[length(contents)]_[is_wired]"
else
icon_state = "construct_8_1"
else if(state)
diff --git a/code/game/machinery/vending/cm_vending.dm b/code/game/machinery/vending/cm_vending.dm
index afce800b0af4..217ed870cd75 100644
--- a/code/game/machinery/vending/cm_vending.dm
+++ b/code/game/machinery/vending/cm_vending.dm
@@ -247,7 +247,7 @@ GLOBAL_LIST_EMPTY(vending_products)
//M94 flare packs handling
else if(istype(item_to_stock, /obj/item/storage/box/m94))
var/obj/item/storage/box/m94/flare_pack = item_to_stock
- if(flare_pack.contents.len < flare_pack.max_storage_space)
+ if(length(flare_pack.contents) < flare_pack.max_storage_space)
to_chat(user, SPAN_WARNING("\The [item_to_stock] is not full."))
return
var/flare_type
@@ -272,7 +272,7 @@ GLOBAL_LIST_EMPTY(vending_products)
//Machete holsters handling
else if(istype(item_to_stock, /obj/item/clothing/suit/storage/marine))
var/obj/item/clothing/suit/storage/marine/AR = item_to_stock
- if(AR.pockets && AR.pockets.contents.len)
+ if(AR.pockets && length(AR.pockets.contents))
if(user)
to_chat(user, SPAN_WARNING("\The [AR] has something inside it. Empty it before restocking."))
return FALSE
@@ -300,7 +300,7 @@ GLOBAL_LIST_EMPTY(vending_products)
if(AM.current_rounds != AM.max_rounds)
to_chat(user, SPAN_WARNING("\The [A] isn't full. You need to fill it before you can restock it."))
return
- else if(A.contents.len < A.num_of_magazines)
+ else if(length(A.contents) < A.num_of_magazines)
to_chat(user, SPAN_WARNING("[A] is not full."))
return
else
@@ -317,14 +317,14 @@ GLOBAL_LIST_EMPTY(vending_products)
//Marine armor handling
else if(istype(item_to_stock, /obj/item/clothing/suit/storage/marine))
var/obj/item/clothing/suit/storage/marine/AR = item_to_stock
- if(AR.pockets && AR.pockets.contents.len)
+ if(AR.pockets && length(AR.pockets.contents))
if(user)
to_chat(user, SPAN_WARNING("\The [AR] has something inside it. Empty it before restocking."))
return FALSE
//Marine helmet handling
else if(istype(item_to_stock, /obj/item/clothing/head/helmet/marine))
var/obj/item/clothing/head/helmet/marine/H = item_to_stock
- if(H.pockets && H.pockets.contents.len)
+ if(H.pockets && length(H.pockets.contents))
if(user)
to_chat(user, SPAN_WARNING("\The [H] has something inside it. Empty it before restocking."))
return FALSE
@@ -541,7 +541,7 @@ GLOBAL_LIST_EMPTY(vending_products)
var/turf/target_turf = get_appropriate_vend_turf(user)
if(vend_flags & VEND_CLUTTER_PROTECTION)
- if(target_turf.contents.len > 25)
+ if(length(target_turf.contents) > 25)
to_chat(usr, SPAN_WARNING("The floor is too cluttered, make some space."))
vend_fail()
return FALSE
@@ -991,7 +991,7 @@ GLOBAL_LIST_EMPTY(vending_products)
tmp_list += list(list(initial(IBP.box.name), floor(L[2] / IBP.items_in_box), IBP.box, VENDOR_ITEM_REGULAR))
//Putting Ammo and other boxes on the bottom of the list as per player preferences
- if(tmp_list.len > 0)
+ if(length(tmp_list) > 0)
listed_products += list(list("BOXES", -1, null, null))
for(var/list/L as anything in tmp_list)
listed_products += list(L)
diff --git a/code/game/machinery/vending/vending.dm b/code/game/machinery/vending/vending.dm
index 8629ce2bb2be..a05245e4b185 100644
--- a/code/game/machinery/vending/vending.dm
+++ b/code/game/machinery/vending/vending.dm
@@ -728,7 +728,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
var/list/wire_descriptions = get_wire_descriptions()
var/list/panel_wires = list()
- for(var/wire = 1 to wire_descriptions.len)
+ for(var/wire = 1 to length(wire_descriptions))
panel_wires += list(list("desc" = wire_descriptions[wire], "cut" = isWireCut(wire)))
.["electrical"] = list(
@@ -898,7 +898,7 @@ GLOBAL_LIST_EMPTY_TYPED(total_vending_machines, /obj/structure/machinery/vending
seconds_electrified--
//Pitch to the people! Really sell it!
- if(((last_slogan + slogan_delay) <= world.time) && (slogan_list.len > 0) && (!shut_up) && prob(5))
+ if(((last_slogan + slogan_delay) <= world.time) && (length(slogan_list) > 0) && (!shut_up) && prob(5))
var/slogan = pick(slogan_list)
speak(slogan)
last_slogan = world.time
diff --git a/code/game/machinery/vending/vendor_types/dress.dm b/code/game/machinery/vending/vendor_types/dress.dm
index 68809c10003f..6a4e76cda49c 100644
--- a/code/game/machinery/vending/vendor_types/dress.dm
+++ b/code/game/machinery/vending/vendor_types/dress.dm
@@ -197,11 +197,11 @@
if(findtext("[path]", item))
matches += path
- if(matches.len==0)
+ if(length(matches)==0)
return
var/obj/item/chosen
- if(matches.len==1)
+ if(length(matches)==1)
chosen = matches[1]
else
//If we have multiple options, let them select which one they meant
diff --git a/code/game/machinery/vending/vendor_types/requisitions.dm b/code/game/machinery/vending/vendor_types/requisitions.dm
index f76b86228c61..1b35cbe238d2 100644
--- a/code/game/machinery/vending/vendor_types/requisitions.dm
+++ b/code/game/machinery/vending/vendor_types/requisitions.dm
@@ -438,13 +438,13 @@
//Marine armor handling
if(istype(item_to_stock, /obj/item/clothing/suit/storage/marine))
var/obj/item/clothing/suit/storage/marine/AR = item_to_stock
- if(AR.pockets && AR.pockets.contents.len)
+ if(AR.pockets && length(AR.pockets.contents))
to_chat(user, SPAN_WARNING("\The [AR] has something inside it. Empty it before restocking."))
return
//Marine helmet handling
else if(istype(item_to_stock, /obj/item/clothing/head/helmet/marine))
var/obj/item/clothing/head/helmet/marine/H = item_to_stock
- if(H.pockets && H.pockets.contents.len)
+ if(H.pockets && length(H.pockets.contents))
to_chat(user, SPAN_WARNING("\The [H] has something inside it. Empty it before restocking."))
return
diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm
index e32d4091c16e..1214b141da15 100644
--- a/code/game/machinery/washing_machine.dm
+++ b/code/game/machinery/washing_machine.dm
@@ -131,7 +131,7 @@
to_chat(user, "This item does not fit.")
return
- if(contents.len < 5)
+ if(length(contents) < 5)
if ( state in list(1, 3) )
if(user.drop_inv_item_to_loc(W, src))
state = 3
diff --git a/code/game/objects/effects/decals/cleanable/blood/blood.dm b/code/game/objects/effects/decals/cleanable/blood/blood.dm
index 918797608b7b..9fd5e79965af 100644
--- a/code/game/objects/effects/decals/cleanable/blood/blood.dm
+++ b/code/game/objects/effects/decals/cleanable/blood/blood.dm
@@ -112,7 +112,7 @@
/obj/effect/decal/cleanable/blood/writing/New()
..()
- 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/posters.dm b/code/game/objects/effects/decals/posters.dm
index 23f7b8c5296a..f13244cbc058 100644
--- a/code/game/objects/effects/decals/posters.dm
+++ b/code/game/objects/effects/decals/posters.dm
@@ -10,7 +10,7 @@
/obj/item/poster/New(turf/loc, given_serial = 0)
if(given_serial == 0)
- serial_number = rand(1, GLOB.poster_designs.len)
+ serial_number = rand(1, length(GLOB.poster_designs))
else
serial_number = given_serial
name += " - No. [serial_number]"
@@ -33,7 +33,7 @@
serial_number = serial
if(!isnum(serial_number))
- serial_number = rand(1, GLOB.poster_designs.len)
+ serial_number = rand(1, length(GLOB.poster_designs))
var/designtype = GLOB.poster_designs[serial_number]
var/datum/poster/design=new designtype
diff --git a/code/game/objects/effects/effect_system/chemsmoke.dm b/code/game/objects/effects/effect_system/chemsmoke.dm
index eea302f29325..1b22ed6054eb 100644
--- a/code/game/objects/effects/effect_system/chemsmoke.dm
+++ b/code/game/objects/effects/effect_system/chemsmoke.dm
@@ -70,7 +70,7 @@
smokeFlow(location, targetTurfs, wallList)
//set the density of the cloud - for diluting reagents
- density = max(1, targetTurfs.len / 4) //clamp the cloud density minimum to 1 so it cant multiply the reagents
+ density = max(1, length(targetTurfs) / 4) //clamp the cloud density minimum to 1 so it cant multiply the reagents
//Admin messaging
var/contained = ""
@@ -110,7 +110,7 @@
return
//reagent application - only run if there are extra reagents in the smoke
- if(chemholder.reagents.reagent_list.len)
+ if(length(chemholder.reagents.reagent_list))
for(var/datum/reagent/R in chemholder.reagents.reagent_list)
var/proba = 100
var/runs = 5
@@ -197,7 +197,7 @@
//------------------------------------------
/datum/effect_system/smoke_spread/chem/proc/spawnSmoke(turf/T, icon/I, dist = 1)
var/obj/effect/particle_effect/smoke/chem/smoke = new(location)
- if(chemholder.reagents.reagent_list.len)
+ if(length(chemholder.reagents.reagent_list))
chemholder.reagents.copy_to(smoke, chemholder.reagents.total_volume / dist, safety = 1) //copy reagents to the smoke so mob/breathe() can handle inhaling the reagents
smoke.icon = I
smoke.layer = FLY_LAYER
@@ -230,7 +230,7 @@
pending += location
- while(pending.len)
+ while(length(pending))
for(var/turf/current in pending)
for(var/D in GLOB.cardinals)
var/turf/target = get_step(current, D)
diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm
index 58e3b868f7e0..fdb481e0f2bc 100644
--- a/code/game/objects/effects/glowshroom.dm
+++ b/code/game/objects/effects/glowshroom.dm
@@ -65,7 +65,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/spawners/gibspawner.dm b/code/game/objects/effects/spawners/gibspawner.dm
index 77b69f79e86f..a68afc1d42fa 100644
--- a/code/game/objects/effects/spawners/gibspawner.dm
+++ b/code/game/objects/effects/spawners/gibspawner.dm
@@ -43,7 +43,7 @@
qdel(src)
/obj/effect/spawner/gibspawner/proc/Gib(list/viruses = list(), mob/living/ml = null)
- if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len)
+ if(length(gibtypes) != length(gibamounts) || length(gibamounts) != length(gibdirections))
to_world(SPAN_DANGER("Gib list length mismatch!"))
return
@@ -58,7 +58,7 @@
s.set_up(2, 1, loc)
s.start()
- for(var/i = 1, i<= gibtypes.len, i++)
+ for(var/i = 1, i<= length(gibtypes), i++)
if(gibamounts[i])
for(var/j = 1, j<= gibamounts[i], j++)
var/gibType = gibtypes[i]
@@ -72,7 +72,7 @@
gib.update_icon()
- if(viruses.len > 0)
+ if(length(viruses) > 0)
for(var/datum/disease/D in viruses)
if(prob(virusProb))
var/datum/disease/viruus = D.Copy(1)
@@ -80,7 +80,7 @@
viruus.holder = gib
var/list/directions = gibdirections[i]
- if(directions.len)
+ if(length(directions))
INVOKE_ASYNC(gib, /obj/effect/decal/cleanable/blood/gibs/proc/streak, directions)
diff --git a/code/game/objects/effects/spawners/wo_spawners/supplies.dm b/code/game/objects/effects/spawners/wo_spawners/supplies.dm
index 28f9936b972f..f2a502344660 100644
--- a/code/game/objects/effects/spawners/wo_spawners/supplies.dm
+++ b/code/game/objects/effects/spawners/wo_spawners/supplies.dm
@@ -6,7 +6,7 @@
/obj/effect/landmark/wo_supplies/New()
..()
- if(stuff.len)
+ if(length(stuff))
for(var/s in stuff)
var/amt = rand(amount[1], amount[2])
for(var/i = 1, i <= amt, i++)
diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm
index 6a5d31010ef1..e22ab2cd1009 100644
--- a/code/game/objects/effects/spiders.dm
+++ b/code/game/objects/effects/spiders.dm
@@ -144,7 +144,7 @@
//=================
if(prob(25))
var/list/nearby = oview(5, src)
- if(nearby.len)
+ if(length(nearby))
var/target_atom = pick(nearby)
walk_to(src, target_atom, 5)
if(prob(25))
@@ -170,7 +170,7 @@
//=================
if(prob(25))
var/list/nearby = oview(5, src)
- if(nearby.len)
+ if(length(nearby))
var/target_atom = pick(nearby)
walk_to(src, target_atom, 5)
if(prob(25))
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 1a632569eccb..6c354faca0b0 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -244,9 +244,9 @@ cases. Override_icon_state should be a list.*/
var/new_icon_state
var/new_protection
var/new_item_state
- if(override_icon_state && override_icon_state.len)
+ if(LAZYLEN(override_icon_state))
new_icon_state = override_icon_state[SSmapping.configs[GROUND_MAP].map_name]
- if(override_protection && override_protection.len)
+ if(LAZYLEN(override_protection))
new_protection = override_protection[SSmapping.configs[GROUND_MAP].map_name]
switch(SSmapping.configs[GROUND_MAP].camouflage_type)
if("snow")
diff --git a/code/game/objects/items/ashtray.dm b/code/game/objects/items/ashtray.dm
index 540f3ac44e21..7d2dc00a9983 100644
--- a/code/game/objects/items/ashtray.dm
+++ b/code/game/objects/items/ashtray.dm
@@ -12,7 +12,7 @@
if (health < 1)
return
if (istype(W,/obj/item/trash/cigbutt) || istype(W,/obj/item/clothing/mask/cigarette) || istype(W, /obj/item/tool/match))
- if (contents.len >= max_butts)
+ if (length(contents) >= max_butts)
to_chat(user, "This ashtray is full.")
return
var/drop = TRUE
@@ -42,10 +42,10 @@
user.update_inv_l_hand(0)
user.update_inv_r_hand()
add_fingerprint(user)
- if (contents.len == max_butts)
+ if (length(contents) == max_butts)
icon_state = icon_full
desc = empty_desc + " It's stuffed full."
- else if (contents.len > max_butts/2)
+ else if (length(contents) > max_butts/2)
icon_state = icon_half
desc = empty_desc + " It's half-filled."
else
@@ -61,7 +61,7 @@
if (health < 1)
die()
return
- if (contents.len)
+ if (length(contents))
src.visible_message(SPAN_DANGER("[src] slams into [hit_atom] spilling its contents!"))
for (var/obj/item/clothing/mask/cigarette/O in contents)
O.forceMove(src.loc)
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index 3b84d2433e88..9b0cf37299eb 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -137,7 +137,7 @@
continue
dead_mobs += mob
var/mob/living/mob_to_store
- if(dead_mobs.len)
+ if(length(dead_mobs))
mob_to_store = pick(dead_mobs)
mob_to_store.forceMove(src)
stored_units += mob_size
@@ -169,7 +169,7 @@
..()
if(over_object == usr && Adjacent(usr) && !roller_buckled)
if(!ishuman(usr)) return
- if(contents.len) return 0
+ if(length(contents)) return 0
visible_message(SPAN_NOTICE("[usr] folds up [name]."))
var/obj/item/I = new item_path(get_turf(src), src)
usr.put_in_hands(I)
@@ -271,7 +271,7 @@
continue
mobs_can_store += H
var/mob/living/carbon/human/mob_to_store
- if(mobs_can_store.len)
+ if(length(mobs_can_store))
mob_to_store = pick(mobs_can_store)
mob_to_store.forceMove(src)
stored_units += mob_size
diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm
index 31158d055327..80044e2fab3e 100644
--- a/code/game/objects/items/cards_ids.dm
+++ b/code/game/objects/items/cards_ids.dm
@@ -391,7 +391,7 @@
/obj/item/dogtag/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/dogtag))
var/obj/item/dogtag/D = I
- to_chat(user, SPAN_NOTICE("You join the [fallen_names.len>1 ? "tags":"two tags"] together."))
+ to_chat(user, SPAN_NOTICE("You join the [length(fallen_names)>1 ? "tags":"two tags"] together."))
name = "information dog tags"
if(D.fallen_names)
fallen_names += D.fallen_names
@@ -404,11 +404,11 @@
/obj/item/dogtag/get_examine_text(mob/user)
. = ..()
- if(ishuman(user) && fallen_names && fallen_names.len)
- var/msg = "There [fallen_names.len>1 ? \
- "are [fallen_names.len] tags. They read":\
+ if(ishuman(user) && LAZYLEN(fallen_names))
+ var/msg = "There [length(fallen_names)>1 ? \
+ "are [length(fallen_names)] tags. They read":\
"is one ID tag. It reads"]:"
- for (var/i=1 to fallen_names.len)
+ for (var/i=1 to length(fallen_names))
msg += " [i]. \"[fallen_names[i]] - [fallen_assgns[i]] - [fallen_blood_types[i]]\""
. += SPAN_NOTICE("[msg]")
diff --git a/code/game/objects/items/circuitboards/airlock.dm b/code/game/objects/items/circuitboards/airlock.dm
index cc6a8e95af0e..07add70280ca 100644
--- a/code/game/objects/items/circuitboards/airlock.dm
+++ b/code/game/objects/items/circuitboards/airlock.dm
@@ -48,7 +48,7 @@
for (var/acc in accesses)
var/aname = get_access_desc(acc)
- if (!conf_access || !conf_access.len || !(acc in conf_access))
+ if (!LAZYLEN(conf_access) || !(acc in conf_access))
t1 += "[aname] "
else if(one_access)
t1 += "[aname] "
@@ -107,7 +107,7 @@
conf_access += req
else
conf_access -= req
- if (!conf_access.len)
+ if (!length(conf_access))
conf_access = null
diff --git a/code/game/objects/items/circuitboards/computer.dm b/code/game/objects/items/circuitboards/computer.dm
index ecdfba00719d..43215faf0fbb 100644
--- a/code/game/objects/items/circuitboards/computer.dm
+++ b/code/game/objects/items/circuitboards/computer.dm
@@ -285,7 +285,7 @@
return
var/list/tempnetwork = splittext(input, ",")
tempnetwork = difflist(tempnetwork,GLOB.RESTRICTED_CAMERA_NETWORKS,1)
- if(tempnetwork.len < 1)
+ if(length(tempnetwork) < 1)
to_chat(usr, "No network found please hang up and try your call again.")
return
network = tempnetwork
diff --git a/code/game/objects/items/devices/autopsy_scanner.dm b/code/game/objects/items/devices/autopsy_scanner.dm
index 6703ead88147..581336f85337 100644
--- a/code/game/objects/items/devices/autopsy_scanner.dm
+++ b/code/game/objects/items/devices/autopsy_scanner.dm
@@ -46,7 +46,7 @@
return W
/obj/item/device/autopsy_scanner/proc/add_data(obj/limb/O)
- if(!O.autopsy_data.len && !O.trace_chemicals.len) return
+ if(!length(O.autopsy_data) && !length(O.trace_chemicals)) return
for(var/V in O.autopsy_data)
var/datum/autopsy_data/W = O.autopsy_data[V]
@@ -133,7 +133,7 @@
if(30 to 1000)
damage_desc = "severe "
- if(!total_score) total_score = D.organs_scanned.len
+ if(!total_score) total_score = length(D.organs_scanned)
scan_data += "Weapon #[n] "
if(damaging_weapon)
@@ -149,7 +149,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/clue_scanner.dm b/code/game/objects/items/devices/clue_scanner.dm
index d6b6d0d80a25..33cc2ab7d207 100644
--- a/code/game/objects/items/devices/clue_scanner.dm
+++ b/code/game/objects/items/devices/clue_scanner.dm
@@ -52,4 +52,4 @@
if(!newlyfound)
to_chat(user, SPAN_INFO("No new print sets found!"))
else
- to_chat(user, SPAN_INFO("New print sets found: [newlyfound], total stored amount: [print_list.len]"))
+ to_chat(user, SPAN_INFO("New print sets found: [newlyfound], total stored amount: [length(print_list)]"))
diff --git a/code/game/objects/items/devices/data_detector.dm b/code/game/objects/items/devices/data_detector.dm
index fe4b9cde0ab5..27476f7a3872 100644
--- a/code/game/objects/items/devices/data_detector.dm
+++ b/code/game/objects/items/devices/data_detector.dm
@@ -70,7 +70,7 @@
if(M == loc) continue //device user isn't detected
if((isxeno(M) || isyautja(M)) && M.stat == DEAD )
detected = TRUE
- else if(ishuman(M) && M.stat == DEAD && M.contents.len)
+ else if(ishuman(M) && M.stat == DEAD && length(M.contents))
for(var/obj/I in M.contents_twice())
for(var/DT in objects_to_detect)
if(istype(I, DT))
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index 0c71ae847674..2e693987f99b 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -196,7 +196,7 @@
return radio_connection
// Otherwise, if a channel is specified, look for it.
- if(channels && channels.len)
+ if(LAZYLEN(channels))
if (message_mode == RADIO_CHANNEL_DEPARTMENT ) // Department radio shortcut
message_mode = channels[1]
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 778082fc46a4..309c7ff20f8b 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -276,7 +276,7 @@ FORENSIC SCANNER
if(!QDELETED(O.reagents))
var/dat = ""
- 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(prob(reliability))
@@ -381,7 +381,7 @@ FORENSIC SCANNER
/obj/item/device/demo_scanner/proc/scan(obj/O)
if(QDELETED(O.reagents))
return
- if(O.reagents.reagent_list.len > 0)
+ if(length(O.reagents.reagent_list) > 0)
for(var/datum/reagent/R in O.reagents.reagent_list)
dat += SPAN_BLUE(" [R.name]: [R.volume]u")
if(R.explosive)
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index 8410c72ee831..9521de9a039a 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -67,7 +67,7 @@
if(!playing && !recording)
icons_available += list("Record" = image(radial_icon_file,"record"))
icons_available += list("Play" = image(radial_icon_file,"play"))
- if(canprint && mytape?.storedinfo.len)
+ if(canprint && length(mytape?.storedinfo))
icons_available += list("Print Transcript" = image(radial_icon_file,"print"))
if(playing || recording)
@@ -241,7 +241,7 @@
if(playing)
return
- if(mytape.storedinfo.len < 1)
+ if(length(mytape.storedinfo) < 1)
audible_message(SPAN_MAROON("[icon2html(src, usr)] Tape has no data."))
return
@@ -257,7 +257,7 @@
break
if(playing == FALSE)
break
- if(mytape.storedinfo.len < i)
+ if(length(mytape.storedinfo) < i)
audible_message(SPAN_MAROON("[icon2html(src, usr)] End of recording."))
break
@@ -265,7 +265,7 @@
langchat_speech(mytape.storedinfo[i], heard, GLOB.all_languages, skip_language_check = TRUE, additional_styles = list("langchat_small"))
audible_message(SPAN_MAROON("[icon2html(src, usr)] [mytape.storedinfo[i]]"))//We want to display this properly, don't double encode
- if(mytape.storedinfo.len < i + 1)
+ if(length(mytape.storedinfo) < i + 1)
playsleepseconds = 1
sleep(1 SECONDS)
else
@@ -310,7 +310,7 @@
set name = "Print Transcript"
set category = "Object"
- if(!mytape.storedinfo.len)
+ if(!length(mytape.storedinfo))
return
if(!can_use(usr))
return
@@ -326,7 +326,7 @@
playsound(src, 'sound/items/taperecorder/taperecorder_print.ogg', 50, FALSE)
var/obj/item/paper/sheet_of_paper = new /obj/item/paper(get_turf(src))
var/t1 = "Transcript: "
- for(var/i in 1 to mytape.storedinfo.len)
+ for(var/i in 1 to length(mytape.storedinfo))
t1 += "[mytape.storedinfo[i]] "
sheet_of_paper.info = t1
var/tapename = mytape.name
diff --git a/code/game/objects/items/devices/teleportation.dm b/code/game/objects/items/devices/teleportation.dm
index 8dea3b872cd1..d64e717a3095 100644
--- a/code/game/objects/items/devices/teleportation.dm
+++ b/code/game/objects/items/devices/teleportation.dm
@@ -156,7 +156,7 @@
if(T.x>world.maxx-8 || T.x<8) continue //putting them at the edge is dumb
if(T.y>world.maxy-8 || T.y<8) continue
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 ((user.get_active_hand() != src || user.stat || user.is_mob_restrained()))
diff --git a/code/game/objects/items/devices/walkman.dm b/code/game/objects/items/devices/walkman.dm
index 2bbcb802d426..42c03d757dbd 100644
--- a/code/game/objects/items/devices/walkman.dm
+++ b/code/game/objects/items/devices/walkman.dm
@@ -95,17 +95,17 @@
/obj/item/device/walkman/proc/play()
if(!current_song)
- if(current_playlist.len > 0)
+ if(length(current_playlist) > 0)
current_song = sound(current_playlist[pl_index], 0, 0, SOUND_CHANNEL_WALKMAN, volume)
current_song.status = SOUND_STREAM
else
return
paused = FALSE
if(current_song.status & SOUND_PAUSED)
- to_chat(current_listener,SPAN_INFO("Resuming [pl_index] of [current_playlist.len]"))
+ to_chat(current_listener,SPAN_INFO("Resuming [pl_index] of [length(current_playlist)]"))
update_song(current_song,current_listener)
else
- to_chat(current_listener,SPAN_INFO("Now playing [pl_index] of [current_playlist.len]"))
+ to_chat(current_listener,SPAN_INFO("Now playing [pl_index] of [length(current_playlist)]"))
update_song(current_song,current_listener,0)
update_song(current_song,current_listener)
@@ -146,11 +146,11 @@
/obj/item/device/walkman/proc/next_song(mob/user)
- if(user.is_mob_incapacitated() || current_playlist.len == 0) return
+ if(user.is_mob_incapacitated() || length(current_playlist) == 0) return
break_sound()
- if(pl_index + 1 <= current_playlist.len)
+ if(pl_index + 1 <= length(current_playlist))
pl_index++
else
pl_index = 1
diff --git a/code/game/objects/items/explosives/explosive.dm b/code/game/objects/items/explosives/explosive.dm
index cac5bd3d0b61..1bd6985bc015 100644
--- a/code/game/objects/items/explosives/explosive.dm
+++ b/code/game/objects/items/explosives/explosive.dm
@@ -74,13 +74,13 @@
detonator=null
assembly_stage = ASSEMBLY_EMPTY
icon_state = base_icon_state
- else if(containers.len)
+ else if(length(containers))
for(var/obj/B in containers)
if(istype(B))
containers -= B
user.put_in_hands(B)
current_container_volume = 0
- desc = initial(desc) + "\n Contains [containers.len] containers[detonator?" and detonator":""]"
+ desc = initial(desc) + "\n Contains [length(containers)] containers[detonator?" and detonator":""]"
return
cause_data = create_cause_data(initial(name), user)
return TRUE
@@ -128,11 +128,11 @@
det.forceMove(src)
detonator = det
assembly_stage = ASSEMBLY_UNLOCKED
- desc = initial(desc) + "\n Contains [containers.len] containers[detonator?" and detonator":""]"
+ desc = initial(desc) + "\n Contains [length(containers)] containers[detonator?" and detonator":""]"
update_icon()
else if(HAS_TRAIT(W, TRAIT_TOOL_SCREWDRIVER))
if(assembly_stage == ASSEMBLY_UNLOCKED)
- if(containers.len)
+ if(length(containers))
to_chat(user, SPAN_NOTICE("You lock the assembly."))
else
to_chat(user, SPAN_NOTICE("You lock the empty assembly."))
@@ -143,7 +143,7 @@
else if(assembly_stage == ASSEMBLY_LOCKED)
to_chat(user, SPAN_NOTICE("You unlock the assembly."))
playsound(loc, 'sound/items/Screwdriver.ogg', 25, 0, 6)
- desc = initial(desc) + "\n Contains [containers.len] containers[detonator?" and detonator":""]"
+ desc = initial(desc) + "\n Contains [length(containers)] containers[detonator?" and detonator":""]"
assembly_stage = ASSEMBLY_UNLOCKED
update_icon()
else if(is_type_in_list(W, allowed_containers) && (!assembly_stage || assembly_stage == ASSEMBLY_UNLOCKED))
@@ -161,7 +161,7 @@
containers += W
current_container_volume += W.reagents.maximum_volume
assembly_stage = ASSEMBLY_UNLOCKED
- desc = initial(desc) + "\n Contains [containers.len] containers[detonator?" and detonator":""]"
+ desc = initial(desc) + "\n Contains [length(containers)] containers[detonator?" and detonator":""]"
else
to_chat(user, SPAN_DANGER("\the [W] is empty."))
@@ -210,7 +210,7 @@
reagents.source_mob = WEAKREF(cause_mob)
msg_admin_niche("[key_name(cause_mob)] detonated custom explosive by [key_name(creator)]: [name] (REAGENTS: [reagent_list_text]) in [get_area(src)] [ADMIN_JMP(loc)]", loc.x, loc.y, loc.z)
- if(containers.len < 2)
+ if(length(containers) < 2)
reagents.trigger_volatiles = TRUE //Explode on the first transfer
for(var/obj/item/reagent_container/glass/G in containers)
diff --git a/code/game/objects/items/frames/camera.dm b/code/game/objects/items/frames/camera.dm
index 6b6061df8af0..5283540ea358 100644
--- a/code/game/objects/items/frames/camera.dm
+++ b/code/game/objects/items/frames/camera.dm
@@ -89,7 +89,7 @@
return
var/list/tempnetwork = splittext(input, ",")
- if(tempnetwork.len < 1)
+ if(length(tempnetwork) < 1)
to_chat(usr, "No network found please hang up and try your call again.")
return
@@ -133,7 +133,7 @@
return
// Taking out upgrades
- else if(HAS_TRAIT(W, TRAIT_TOOL_CROWBAR) && upgrades.len)
+ else if(HAS_TRAIT(W, TRAIT_TOOL_CROWBAR) && length(upgrades))
var/obj/U = locate(/obj) in upgrades
if(U)
to_chat(user, "You unattach an upgrade from the assembly.")
diff --git a/code/game/objects/items/frames/matrix.dm b/code/game/objects/items/frames/matrix.dm
index 3a8464f58568..46d121909068 100644
--- a/code/game/objects/items/frames/matrix.dm
+++ b/code/game/objects/items/frames/matrix.dm
@@ -18,7 +18,7 @@
/obj/item/frame/matrix_frame/attackby(obj/item/W, mob/user as mob)
switch(state)
if(ASSEMBLY_EMPTY)
- if(istype(W, /obj/item/reagent_container/glass/beaker/vial) && W.reagents.total_volume == 30 && W.reagents.reagent_list.len == 1)
+ if(istype(W, /obj/item/reagent_container/glass/beaker/vial) && W.reagents.total_volume == 30 && length(W.reagents.reagent_list) == 1)
user.drop_held_item(W)
W.forceMove(src)
state = ASSEMBLY_UNLOCKED
@@ -45,7 +45,7 @@
else if(W.reagents.total_volume < 30)
to_chat(user, SPAN_WARNING("The testing indicator lights up with red! The container requires to be fully filled!"))
return
- else if (W.reagents.reagent_list.len > 1)
+ else if (length(W.reagents.reagent_list) > 1)
to_chat(user, SPAN_WARNING("The testing indicator lights up with red! The container requires a pure sample!"))
if(ASSEMBLY_UNLOCKED)
diff --git a/code/game/objects/items/implants/implantchair.dm b/code/game/objects/items/implants/implantchair.dm
index 0969b2609331..bcec5100aae4 100644
--- a/code/game/objects/items/implants/implantchair.dm
+++ b/code/game/objects/items/implants/implantchair.dm
@@ -38,7 +38,7 @@
var/dat ="Implanter Status "
dat +="Current occupant: [src.occupant ? " Name: [src.occupant] Health: [health_text] " : "None "] "
- dat += "Implants: [src.implant_list.len ? "[implant_list.len]" : "Replenish "] "
+ dat += "Implants: [length(src.implant_list) ? "[length(implant_list)]" : "Replenish "] "
if(src.occupant)
dat += "[src.ready ? "Implant " : "Recharging"] "
user.set_interaction(src)
@@ -113,7 +113,7 @@
/obj/structure/machinery/implantchair/proc/implant(mob/M)
if (!istype(M, /mob/living/carbon))
return
- if(!implant_list.len) return
+ if(!length(implant_list)) return
for(var/obj/item/implant/loyalty/imp in implant_list)
if(!imp) continue
if(istype(imp, /obj/item/implant/loyalty))
diff --git a/code/game/objects/items/misc.dm b/code/game/objects/items/misc.dm
index 8c0f88ddb7ca..d73893e2671c 100644
--- a/code/game/objects/items/misc.dm
+++ b/code/game/objects/items/misc.dm
@@ -224,7 +224,7 @@
to_chat(user, SPAN_NOTICE("[I] won't fit in [src]."))
return
- if(contents.len)
+ if(length(contents))
to_chat(user, SPAN_NOTICE("[src] already has something inside it."))
return
@@ -257,7 +257,7 @@
/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/game/objects/items/reagent_containers/autoinjectors.dm b/code/game/objects/items/reagent_containers/autoinjectors.dm
index ff830318fda0..9c4726371f90 100644
--- a/code/game/objects/items/reagent_containers/autoinjectors.dm
+++ b/code/game/objects/items/reagent_containers/autoinjectors.dm
@@ -289,7 +289,7 @@
/obj/item/reagent_container/hypospray/autoinjector/skillless/get_examine_text(mob/user)
. = ..()
- if(reagents && reagents.reagent_list.len)
+ if(reagents && length(reagents.reagent_list))
. += SPAN_NOTICE("It is currently loaded.")
else if(!uses_left)
. += SPAN_NOTICE("It is spent.")
diff --git a/code/game/objects/items/reagent_containers/food/condiment.dm b/code/game/objects/items/reagent_containers/food/condiment.dm
index 35944e4422c4..45cfe9c2aa67 100644
--- a/code/game/objects/items/reagent_containers/food/condiment.dm
+++ b/code/game/objects/items/reagent_containers/food/condiment.dm
@@ -88,7 +88,7 @@
/obj/item/reagent_container/food/condiment/on_reagent_change()
if(icon_state == "saltshakersmall" || icon_state == "peppermillsmall" || icon_state == "hotsauce_cholula" || icon_state == "hotsauce_franks" || icon_state == "hotsauce_sriracha" || icon_state == "hotsauce_tabasco" || icon_state == "coldsauce_cole")
return
- if(reagents.reagent_list.len > 0)
+ if(length(reagents.reagent_list) > 0)
switch(reagents.get_master_reagent_id())
if("ketchup")
name = "Ketchup"
@@ -131,7 +131,7 @@
center_of_mass = "x=16;y=6"
else
name = "Misc Condiment Bottle"
- if (reagents.reagent_list.len==1)
+ if (length(reagents.reagent_list)==1)
desc = "Looks like it is [reagents.get_master_reagent_name()], but you are not sure."
else
desc = "A mixture of various condiments. [reagents.get_master_reagent_name()] is one of them."
diff --git a/code/game/objects/items/reagent_containers/food/drinks/bottle.dm b/code/game/objects/items/reagent_containers/food/drinks/bottle.dm
index b522d8d2ed81..75b5aadfc43b 100644
--- a/code/game/objects/items/reagent_containers/food/drinks/bottle.dm
+++ b/code/game/objects/items/reagent_containers/food/drinks/bottle.dm
@@ -93,7 +93,7 @@
/obj/item/reagent_container/food/drinks/bottle/attackby(obj/item/I, mob/living/user)
if(!isGlass || !istype(I, /obj/item/paper))
return ..()
- if(!reagents || !reagents.reagent_list.len)
+ if(!reagents || !length(reagents.reagent_list))
to_chat(user, SPAN_NOTICE("\The [src] is empty..."))
return
var/alcohol_potency = 0
diff --git a/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm b/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm
index eea71cd1a4bc..59f27ab91728 100644
--- a/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm
+++ b/code/game/objects/items/reagent_containers/food/drinks/drinkingglass.dm
@@ -10,14 +10,14 @@
center_of_mass = "x=16;y=10"
/obj/item/reagent_container/food/drinks/drinkingglass/on_reagent_change()
- /*if(reagents.reagent_list.len > 1 )
+ /*if(length(reagents.reagent_list) > 1 )
icon_state = "glass_brown"
name = "Glass of Hooch"
desc = "Two or more drinks, mixed together."*/
- /*else if(reagents.reagent_list.len == 1)
+ /*else if(length(reagents.reagent_list) == 1)
for(var/datum/reagent/R in reagents.reagent_list)
switch(R.id)*/
- if (reagents.reagent_list.len > 0)
+ if (length(reagents.reagent_list) > 0)
//mrid = R.get_master_reagent_id()
var/datum/reagent/R = reagents.get_master_reagent()
switch(R.id)
diff --git a/code/game/objects/items/reagent_containers/food/drinks/jar.dm b/code/game/objects/items/reagent_containers/food/drinks/jar.dm
index 987cfcedca5d..45a5137d0db5 100644
--- a/code/game/objects/items/reagent_containers/food/drinks/jar.dm
+++ b/code/game/objects/items/reagent_containers/food/drinks/jar.dm
@@ -10,7 +10,7 @@
center_of_mass = "x=15;y=8"
/obj/item/reagent_container/food/drinks/jar/on_reagent_change()
- if(reagents.reagent_list.len > 0)
+ if(length(reagents.reagent_list) > 0)
icon_state ="jar_what"
name = "jar of something"
desc = "You can't really tell what this is."
diff --git a/code/game/objects/items/reagent_containers/food/sandwich.dm b/code/game/objects/items/reagent_containers/food/sandwich.dm
index 9370b643fc98..fd71c20e48ff 100644
--- a/code/game/objects/items/reagent_containers/food/sandwich.dm
+++ b/code/game/objects/items/reagent_containers/food/sandwich.dm
@@ -26,7 +26,7 @@
if(istype(O,/obj/item/reagent_container/food/snacks/breadslice))
sandwich_limit += 4
- if(src.contents.len > sandwich_limit)
+ if(length(src.contents) > sandwich_limit)
to_chat(user, SPAN_DANGER("If you put anything else on \the [src] it's going to collapse."))
return
else if(istype(W,/obj/item/shard))
@@ -56,7 +56,7 @@
i++
if(i == 1)
fullname += "[O.name]"
- else if(i == ingredients.len)
+ else if(i == length(ingredients))
fullname += " and [O.name]"
else
fullname += ", [O.name]"
@@ -69,12 +69,12 @@
var/image/T = new(src.icon, "sandwich_top")
T.pixel_x = pick(list(-1,0,1))
- T.pixel_y = (ingredients.len * 2)+1
+ T.pixel_y = (length(ingredients) * 2)+1
overlays += T
name = lowertext("[fullname] sandwich")
if(length(name) > 80) name = "[pick(list("absurd","colossal","enormous","ridiculous"))] sandwich"
- w_class = ceil(clamp((ingredients.len/2),1,3))
+ w_class = ceil(clamp((length(ingredients)/2),1,3))
/obj/item/reagent_container/food/snacks/csandwich/Destroy()
QDEL_NULL_LIST(ingredients)
@@ -82,7 +82,7 @@
/obj/item/reagent_container/food/snacks/csandwich/get_examine_text(mob/user)
. = ..()
- if(contents && contents.len)
+ if(LAZYLEN(contents))
var/obj/item/O = pick(contents)
. += SPAN_NOTICE("You think you can see [O.name] in there.")
diff --git a/code/game/objects/items/reagent_containers/food/snacks.dm b/code/game/objects/items/reagent_containers/food/snacks.dm
index 09b4379e7bb7..4e00f32a9b13 100644
--- a/code/game/objects/items/reagent_containers/food/snacks.dm
+++ b/code/game/objects/items/reagent_containers/food/snacks.dm
@@ -2755,10 +2755,10 @@
// Set appropriate description
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."
+ 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/topbox = boxes[boxes.len]
+ var/obj/item/pizzabox/topbox = boxes[length(boxes)]
var/toptag = topbox.boxtag
if( toptag != "" )
desc = "[desc] The box on top has a tag, it reads: '[toptag]'."
@@ -2784,8 +2784,8 @@
else
// Stupid code because byondcode sucks
var/doimgtag = 0
- if( boxes.len > 0 )
- var/obj/item/pizzabox/topbox = boxes[boxes.len]
+ if( length(boxes) > 0 )
+ var/obj/item/pizzabox/topbox = boxes[length(boxes)]
if( topbox.boxtag != "" )
doimgtag = 1
else
@@ -2794,10 +2794,10 @@
if( doimgtag )
var/image/tagimg = image("food.dmi", icon_state = "pizzabox_tag")
- tagimg.pixel_y = boxes.len * 3
+ tagimg.pixel_y = length(boxes) * 3
overlays += tagimg
- icon_state = "pizzabox[boxes.len+1]"
+ icon_state = "pizzabox[length(boxes)+1]"
/obj/item/pizzabox/attack_hand( mob/user as mob )
@@ -2809,12 +2809,12 @@
update_icon()
return
- if( boxes.len > 0 )
+ if( length(boxes) > 0 )
if( user.get_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 )
@@ -2847,7 +2847,7 @@
for(var/obj/item/pizzabox/i in box.boxes)
boxestoadd += i
- if( (boxes.len+1) + boxestoadd.len <= 5 )
+ if( (length(boxes)+1) + length(boxestoadd) <= 5 )
user.drop_inv_item_to_loc(box, src)
box.boxes = list() // Clear the box boxes so we don't have boxes inside boxes. - Xzibit
src.boxes.Add( boxestoadd )
@@ -2884,8 +2884,8 @@
var/t = stripped_input(user,"Enter what you want to add to the tag:", "Write", "", 30)
var/obj/item/pizzabox/boxtotagto = src
- if( boxes.len > 0 )
- boxtotagto = boxes[boxes.len]
+ if( length(boxes) > 0 )
+ boxtotagto = boxes[length(boxes)]
boxtotagto.boxtag = "[boxtotagto.boxtag][t]"
playsound(src, "paper_writing", 15, TRUE)
diff --git a/code/game/objects/items/reagent_containers/food/snacks/grown.dm b/code/game/objects/items/reagent_containers/food/snacks/grown.dm
index 68b617d6a476..55ed8c8d34f0 100644
--- a/code/game/objects/items/reagent_containers/food/snacks/grown.dm
+++ b/code/game/objects/items/reagent_containers/food/snacks/grown.dm
@@ -591,7 +591,7 @@
if(T.x>world.maxx-outer_teleport_radius || T.xworld.maxy-outer_teleport_radius || T.yConstructions from [] Amount Left: [] ", src, src.amount)
- for(var/i = 1; i <= recipe_list.len, i++)
+ for(var/i = 1; i <= length(recipe_list), i++)
var/E = recipe_list[i]
if(isnull(E))
t1 += " "
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index 23f8c884f41c..d68dc4dea753 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -1084,11 +1084,11 @@
if(ammo_dumping.flags_magazine & AMMUNITION_HANDFUL_BOX)
var/handfuls = round(ammo_dumping.current_rounds / amount_to_dump, 1) //The number of handfuls, we round up because we still want the last one that isn't full
if(ammo_dumping.current_rounds != 0)
- if(contents.len < storage_slots - 1) //this is because it's a gunbelt and the final slot is reserved for the gun
+ if(length(contents) < storage_slots - 1) //this is because it's a gunbelt and the final slot is reserved for the gun
to_chat(user, SPAN_NOTICE("You start refilling [src] with [ammo_dumping]."))
if(!do_after(user, 1.5 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) return
for(var/i = 1 to handfuls)
- if(contents.len < storage_slots - 1)
+ if(length(contents) < storage_slots - 1)
var/obj/item/ammo_magazine/handful/new_handful = new /obj/item/ammo_magazine/handful
var/transferred_handfuls = min(ammo_dumping.current_rounds, amount_to_dump)
new_handful.generate_handful(ammo_dumping.default_ammo, ammo_dumping.caliber, amount_to_dump, transferred_handfuls, ammo_dumping.gun_type)
@@ -1383,7 +1383,7 @@
set name = "Detach revolver holster"
set src in usr
if(ishuman(usr))
- if(contents.len)
+ if(length(contents))
to_chat(usr, SPAN_WARNING("The belt needs to be fully empty to remove the holster!"))
return
to_chat(usr, SPAN_NOTICE("You detach the holster from the belt."))
diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm
index f9f5983c925d..52fd50e9b022 100644
--- a/code/game/objects/items/storage/firstaid.dm
+++ b/code/game/objects/items/storage/firstaid.dm
@@ -383,7 +383,7 @@
/obj/item/storage/pill_bottle/get_examine_text(mob/user)
. = ..()
- var/pills_amount = contents.len
+ var/pills_amount = length(contents)
if(pills_amount)
var/percentage_filled = floor(pills_amount/max_storage_space * 100)
switch(percentage_filled)
@@ -409,7 +409,7 @@
if(skilllock && !skillcheck(user, SKILL_MEDICAL, SKILL_MEDICAL_MEDIC))
error_idlock(user)
return
- if(contents.len)
+ if(length(contents))
var/obj/item/I = contents[1]
if(user.put_in_inactive_hand(I))
playsound(loc, use_sound, 10, TRUE, 3)
@@ -464,7 +464,7 @@
if(C.is_mob_restrained())
to_chat(user, SPAN_WARNING("You are restrained!"))
return FALSE
- if(!contents.len)
+ if(!length(contents))
to_chat(user, SPAN_WARNING("The [name] is empty."))
return FALSE
var/obj/item/I = contents[1]
diff --git a/code/game/objects/items/storage/large_holster.dm b/code/game/objects/items/storage/large_holster.dm
index 220bf4e86d1e..02983e1552ed 100644
--- a/code/game/objects/items/storage/large_holster.dm
+++ b/code/game/objects/items/storage/large_holster.dm
@@ -332,7 +332,7 @@
/obj/item/storage/large_holster/fuelpack/get_examine_text(mob/user)
. = ..()
- if(contents.len)
+ if(length(contents))
. += "It is storing a M240-T incinerator unit."
if (get_dist(user, src) <= 1)
if(fuel)
diff --git a/code/game/objects/items/storage/misc.dm b/code/game/objects/items/storage/misc.dm
index e8da7936ddb6..c3fd647853d6 100644
--- a/code/game/objects/items/storage/misc.dm
+++ b/code/game/objects/items/storage/misc.dm
@@ -30,7 +30,7 @@
to_chat(user, message)
open = !open
update_icon()
- if(!contents.len)
+ if(!length(contents))
..()
return
@@ -100,7 +100,7 @@
new /obj/item/reagent_container/food/drinks/cans/aspen(src)
/obj/item/storage/beer_pack/update_icon()
- if(contents.len == 1)
+ if(length(contents) == 1)
var/turf/T = get_turf(src)
var/obj/item/reagent_container/food/drinks/cans/aspen/B = new(T)
if(ishuman(loc))
@@ -109,7 +109,7 @@
H.put_in_inactive_hand(B)
qdel(src)
else
- icon_state = "6_pack_[contents.len]"
+ icon_state = "6_pack_[length(contents)]"
/obj/item/storage/box/clf
name = "D18-storing box"
diff --git a/code/game/objects/items/storage/pouch.dm b/code/game/objects/items/storage/pouch.dm
index 7fa32cc21eaa..63516ac20aa0 100644
--- a/code/game/objects/items/storage/pouch.dm
+++ b/code/game/objects/items/storage/pouch.dm
@@ -871,13 +871,13 @@
inner = new /obj/item/reagent_container/glass/pressurized_canister()
//Only add an autoinjector if the canister is empty
//Important for the snowflake /obj/item/storage/pouch/pressurized_reagent_canister/oxycodone
- if(contents.len == 0)
+ if(length(contents) == 0)
new /obj/item/reagent_container/hypospray/autoinjector/empty/medic(src)
update_icon()
/obj/item/storage/pouch/pressurized_reagent_canister/proc/fill_with(ragent)
inner.reagents.add_reagent(ragent, inner.volume)
- if(contents.len > 0)
+ if(length(contents) > 0)
var/obj/item/reagent_container/hypospray/autoinjector/empty/A = contents[1]
A.reagents.add_reagent(ragent, A.volume)
A.update_uses_left()
@@ -903,7 +903,7 @@
inner.reagents.add_reagent("adrenaline", inner.volume/3)
inner.reagents.add_reagent("inaprovaline", inner.volume/3)
inner.reagents.add_reagent("tricordrazine", inner.volume/3)
- if(contents.len > 0)
+ if(length(contents) > 0)
var/obj/item/reagent_container/hypospray/autoinjector/empty/medic/A = contents[1]
A.reagents.add_reagent("adrenaline", A.volume/3)
A.reagents.add_reagent("inaprovaline", A.volume/3)
@@ -973,7 +973,7 @@
var/obj/O = target
- if(!O.reagents || O.reagents.reagent_list.len < 1)
+ if(!O.reagents || length(O.reagents.reagent_list) < 1)
to_chat(user, SPAN_WARNING("[O] is empty!"))
return
@@ -986,7 +986,7 @@
O.reagents.trans_to(inner, amt_to_remove)
//Refill our autoinjector
- if(contents.len > 0)
+ if(length(contents) > 0)
fill_autoinjector(contents[1])
//Top up our inner reagent canister after filling up the injector
@@ -1032,14 +1032,14 @@
//returns a text listing the reagents (and their volume) in the atom. Used by Attack logs for reagents in pills
/obj/item/storage/pouch/pressurized_reagent_canister/proc/get_reagent_list_text()
- if(inner && inner.reagents && inner.reagents.reagent_list && inner.reagents.reagent_list.len)
+ if(inner && inner.reagents && LAZYLEN(inner.reagents.reagent_list))
var/datum/reagent/R = inner.reagents.reagent_list[1]
. = "[R.name]([R.volume]u)"
- if(inner.reagents.reagent_list.len < 2)
+ if(length(inner.reagents.reagent_list) < 2)
return
- for(var/i in 2 to inner.reagents.reagent_list.len)
+ for(var/i in 2 to length(inner.reagents.reagent_list))
R = inner.reagents.reagent_list[i]
if(!R)
diff --git a/code/game/objects/items/storage/storage.dm b/code/game/objects/items/storage/storage.dm
index 7b616b275793..047163713e80 100644
--- a/code/game/objects/items/storage/storage.dm
+++ b/code/game/objects/items/storage/storage.dm
@@ -366,7 +366,7 @@ GLOBAL_LIST_EMPTY_TYPED(item_storage_box_cache, /datum/item_storage_box)
//This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing.
/obj/item/storage/proc/orient2hud()
- var/adjusted_contents = contents.len
+ var/adjusted_contents = length(contents)
//Numbered contents display
var/list/datum/numbered_display/numbered_contents
@@ -396,7 +396,7 @@ GLOBAL_LIST_EMPTY_TYPED(item_storage_box_cache, /datum/item_storage_box)
///Returns TRUE if there is room for the given item. W_class_override allows checking for just a generic W_class, meant for checking shotgun handfuls without having to spawn and delete one just to check.
/obj/item/storage/proc/has_room(obj/item/new_item, W_class_override = null)
- if(storage_slots != null && contents.len < storage_slots)
+ if(storage_slots != null && length(contents) < storage_slots)
return TRUE //At least one open slot.
//calculate storage space only for containers that don't have slots
if (storage_slots == null)
@@ -458,7 +458,7 @@ GLOBAL_LIST_EMPTY_TYPED(item_storage_box_cache, /datum/item_storage_box)
return
var/w_limit_bypassed = 0
- if(bypass_w_limit.len)
+ if(length(bypass_w_limit))
for(var/A in bypass_w_limit)
if(istype(W, A))
w_limit_bypassed = 1
@@ -585,7 +585,7 @@ W is always an item. stop_warning prevents messaging. user may be null.**/
if(storage_flags & STORAGE_USING_FIFO_DRAWING)
I = contents[1]
else
- I = contents[contents.len]
+ I = contents[length(contents)]
I.attack_hand(user)
else
open(user)
@@ -707,7 +707,7 @@ W is always an item. stop_warning prevents messaging. user may be null.**/
if(storage_flags & STORAGE_USING_FIFO_DRAWING)
item_obj = contents[1]
else
- item_obj = contents[contents.len]
+ item_obj = contents[length(contents)]
if(!istype(item_obj))
return
remove_from_storage(item_obj, tile)
@@ -725,11 +725,11 @@ W is always an item. stop_warning prevents messaging. user may be null.**/
if(ammo_dumping.flags_magazine & AMMUNITION_HANDFUL_BOX)
var/handfuls = round(ammo_dumping.current_rounds / amount_to_dump, 1) //The number of handfuls, we round up because we still want the last one that isn't full
if(ammo_dumping.current_rounds != 0)
- if(contents.len < storage_slots)
+ if(length(contents) < storage_slots)
to_chat(user, SPAN_NOTICE("You start refilling [src] with [ammo_dumping]."))
if(!do_after(user, 1.5 SECONDS, INTERRUPT_ALL, BUSY_ICON_GENERIC)) return
for(var/i = 1 to handfuls)
- if(contents.len < storage_slots)
+ if(length(contents) < storage_slots)
//Hijacked from /obj/item/ammo_magazine/proc/create_handful because it had to be handled differently
//All this because shell types are instances and not their own objects :)
@@ -754,7 +754,7 @@ W is always an item. stop_warning prevents messaging. user may be null.**/
if(user.action_busy)
return
- if(!origin_storage.contents.len)
+ if(!length(origin_storage.contents))
to_chat(user, SPAN_WARNING("[origin_storage] is empty."))
return
if(!has_room(origin_storage.contents[1])) //Does it have room for the first item to be inserted?
@@ -857,7 +857,7 @@ W is always an item. stop_warning prevents messaging. user may be null.**/
..()
//Clicking on itself will empty it, if it has contents and the verb to do that. Contents but no verb means nothing happens.
- if(contents.len)
+ if(length(contents))
empty(user)
return
diff --git a/code/game/objects/items/storage/surgical_tray.dm b/code/game/objects/items/storage/surgical_tray.dm
index 16c0d1352961..61f56c35b555 100644
--- a/code/game/objects/items/storage/surgical_tray.dm
+++ b/code/game/objects/items/storage/surgical_tray.dm
@@ -34,7 +34,7 @@
new /obj/item/tool/surgery/synthgraft(src)
/obj/item/storage/surgical_tray/update_icon()
- if(!contents.len)
+ if(!length(contents))
icon_state = "surgical_tray_e"
else
icon_state = "surgical_tray"
diff --git a/code/game/objects/items/tools/experimental_tools.dm b/code/game/objects/items/tools/experimental_tools.dm
index fc58f95909c9..140a05a534b7 100644
--- a/code/game/objects/items/tools/experimental_tools.dm
+++ b/code/game/objects/items/tools/experimental_tools.dm
@@ -379,5 +379,5 @@
arms_to_damage -= l_arm
if(r_arm.status & LIMB_DESTROYED)
arms_to_damage -= r_arm
- if(arms_to_damage.len)
+ if(length(arms_to_damage))
human_to_damage.apply_damage(3, BRUTE, pick(arms_to_damage))
diff --git a/code/game/objects/items/tools/extinguisher.dm b/code/game/objects/items/tools/extinguisher.dm
index cdd7f31f19f0..723d34c64f7e 100644
--- a/code/game/objects/items/tools/extinguisher.dm
+++ b/code/game/objects/items/tools/extinguisher.dm
@@ -153,7 +153,7 @@
var/list/unpicked_targets = list()
for(var/a in 0 to (EXTINGUISHER_WATER_USE_AMT-1))
- if (!unpicked_targets.len)
+ if (!length(unpicked_targets))
unpicked_targets += targets
var/turf/TT = pick(unpicked_targets)
unpicked_targets -= TT
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index 89f5d2186271..6e94961de15e 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -248,7 +248,7 @@
showname = "."
var/used_verb = "attacked"
- if(attack_verb && attack_verb.len)
+ if(LAZYLEN(attack_verb))
used_verb = pick(attack_verb)
user.visible_message(SPAN_DANGER("[M] has been [used_verb] with [src][showname]."),\
SPAN_DANGER("You [used_verb] [M] with [src]."), null, 5)
diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm
index a4666c633aae..ed18c28de6f7 100644
--- a/code/game/objects/structures/bedsheet_bin.dm
+++ b/code/game/objects/structures/bedsheet_bin.dm
@@ -128,8 +128,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/bookcase.dm b/code/game/objects/structures/bookcase.dm
index a6fc95fa0d73..56b69e4a32a4 100644
--- a/code/game/objects/structures/bookcase.dm
+++ b/code/game/objects/structures/bookcase.dm
@@ -54,7 +54,7 @@
..()
/obj/structure/bookcase/attack_hand(mob/user as mob)
- if(contents.len)
+ if(length(contents))
var/obj/item/book/choice = input("Which book would you like to remove from the shelf?") as null|obj in contents
if(choice)
if(user.is_mob_incapacitated() || !in_range(loc, user))
@@ -84,8 +84,8 @@
return
/obj/structure/bookcase/update_icon()
- if(contents.len < 5)
- icon_state = "book-[contents.len]"
+ if(length(contents) < 5)
+ icon_state = "book-[length(contents)]"
else
icon_state = "book-5"
diff --git a/code/game/objects/structures/crates_lockers/largecrate_supplies.dm b/code/game/objects/structures/crates_lockers/largecrate_supplies.dm
index 9ff84376a762..28f5f5cb3b81 100644
--- a/code/game/objects/structures/crates_lockers/largecrate_supplies.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate_supplies.dm
@@ -10,7 +10,7 @@
var/list/T = list()
for(var/turf/open/O in range(1))
T += O
- if(supply.len)
+ if(length(supply))
for(var/s in supply)
var/amount = supply[s]
for(var/i = 1, i <= amount, i++)
@@ -92,7 +92,7 @@
/obj/structure/largecrate/supply/Initialize()
. = ..()
- if(supplies.len)
+ if(length(supplies))
for(var/s in supplies)
var/amount = supplies[s]
for(var/i = 1, i <= amount, i++)
diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm
index f1717f5bf0f5..c69a570e4923 100644
--- a/code/game/objects/structures/morgue.dm
+++ b/code/game/objects/structures/morgue.dm
@@ -31,7 +31,7 @@
if(morgue_open)
icon_state = "[morgue_type]0"
else
- if(contents.len > 1) //not counting the morgue tray
+ if(length(contents) > 1) //not counting the morgue tray
icon_state = "[morgue_type]2"
else
icon_state = "[morgue_type]1"
@@ -217,7 +217,7 @@
if(cremating)
return
- if(contents.len <= 1) //1 because the tray is inside.
+ if(length(contents) <= 1) //1 because the tray is inside.
visible_message(SPAN_DANGER("You hear a hollow crackle."))
else
visible_message(SPAN_DANGER("You hear a roar as the crematorium activates."))
diff --git a/code/game/objects/structures/reagent_dispensers.dm b/code/game/objects/structures/reagent_dispensers.dm
index aeab625857d5..0dab5e55c004 100644
--- a/code/game/objects/structures/reagent_dispensers.dm
+++ b/code/game/objects/structures/reagent_dispensers.dm
@@ -34,7 +34,7 @@
. = ..()
if(get_dist(user, src) > 2 && user != loc) return
. += SPAN_NOTICE("It contains:")
- if(reagents && reagents.reagent_list.len)
+ if(reagents && length(reagents.reagent_list))
for(var/datum/reagent/R in reagents.reagent_list)
. += SPAN_NOTICE(" [R.volume] units of [R.name]")
else
diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm
index 011fa2a17f48..6cefadd88a12 100644
--- a/code/game/objects/structures/safe.dm
+++ b/code/game/objects/structures/safe.dm
@@ -124,7 +124,7 @@ FLOOR SAFES
dat += "Dial 2: - [tumbler_2_pos] + "
if(open)
dat += ""
- for(var/i = contents.len, i>=1, i--)
+ for(var/i = length(contents), i>=1, i--)
var/obj/item/P = contents[i]
dat += "[P.name] "
dat += "
"
diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm
index 8df4359aa5f8..129e03b7179c 100644
--- a/code/game/objects/structures/tank_dispenser.dm
+++ b/code/game/objects/structures/tank_dispenser.dm
@@ -95,7 +95,7 @@
if(href_list["oxygen"])
if(oxygentanks > 0)
var/obj/item/tank/oxygen/O
- if(oxytanks.len == oxygentanks)
+ if(length(oxytanks) == oxygentanks)
O = oxytanks[1]
oxytanks.Remove(O)
else
@@ -107,7 +107,7 @@
if(href_list["phoron"])
if(phorontanks > 0)
var/obj/item/tank/phoron/P
- if(platanks.len == phorontanks)
+ if(length(platanks) == phorontanks)
P = platanks[1]
platanks.Remove(P)
else
diff --git a/code/game/sound.dm b/code/game/sound.dm
index d63e4a1b0c18..49ccb4eb9331 100644
--- a/code/game/sound.dm
+++ b/code/game/sound.dm
@@ -407,4 +407,4 @@
set category = "Debug"
for(var/sound/S in SoundQuery())
- UNLINT(to_chat(src, "channel#[S.channel]: [S.status] - [S.file] - len=[S.len], wait=[S.wait], offset=[S.offset], repeat=[S.repeat]")) // unlint until spacemandmm suite-1.7
+ UNLINT(to_chat(src, "channel#[S.channel]: [S.status] - [S.file] - len=[length(S)], wait=[S.wait], offset=[S.offset], repeat=[S.repeat]")) // unlint until spacemandmm suite-1.7
diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm
index c1d0352766a6..c5a675b531d2 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -472,7 +472,7 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new())
return
for(var/pool in base_random_crate_intervals)
var/interval = base_random_crate_intervals[pool]
- if(interval && iteration % interval == 0 && shoppinglist.len <= 20)
+ if(interval && iteration % interval == 0 && length(shoppinglist) <= 20)
add_random_crates(pool)
crate_iteration++
@@ -539,7 +539,7 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new())
if(istype(A,/mob/living) && !black_market_enabled)
return TRUE
- for(var/i=1, i<=A.contents.len, i++)
+ for(var/i=1, i<=length(A.contents), i++)
var/atom/B = A.contents[i]
if(.(B))
return 1
@@ -560,7 +560,7 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new())
for(var/atom/movable/movable_atom in area_shuttle)
if(istype(movable_atom, /obj/item/paper/manifest))
var/obj/item/paper/manifest/M = movable_atom
- if(M.stamped && M.stamped.len)
+ if(LAZYLEN(M.stamped))
points += points_per_slip
//black market points
@@ -601,19 +601,19 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new())
//Buyin
/datum/controller/supply/proc/buy()
var/area/area_shuttle = shuttle?.get_location_area()
- if(!area_shuttle || !shoppinglist.len)
+ if(!area_shuttle || !length(shoppinglist))
return
// Try to find an available turf to place our package
var/list/turf/clear_turfs = list()
for(var/turf/T in area_shuttle)
- if(T.density || T.contents?.len)
+ if(T.density || LAZYLEN(T.contents))
continue
clear_turfs += T
for(var/datum/supply_order/order in shoppinglist)
// No space! Forget buying, it's no use.
- if(!clear_turfs.len)
+ if(!length(clear_turfs))
shoppinglist.Cut()
return
@@ -716,7 +716,7 @@ GLOBAL_DATUM_INIT(supply_controller, /datum/controller/supply, new())
Approved by: \
[approvedby] \
# packages: \
- [packages.len] \
+ [length(packages)] \
\
"
- if(bad_keys.len)
+ if(length(bad_keys))
html += "Bad keys:
"
for(var/key in bad_keys)
var/list/messages = bad_keys[key]
html += "[key] "
- if(messages.len == 1)
+ if(length(messages) == 1)
html += ": [bad_keys[key][1]]"
else
html += ""
@@ -74,7 +74,7 @@
var/turfs = 0
var/areas = 0
- for(var/i in 1 to members.len)
+ for(var/i in 1 to length(members))
var/atom/path = members[i]
turfs += ispath(path, /turf)
@@ -91,7 +91,7 @@
LAZYADD(report.bad_keys[key], "[areas] areas instead of 1")
// return the report
- if(report.bad_paths.len || report.bad_keys.len || !report.loadable)
+ if(length(report.bad_paths) || length(report.bad_keys) || !report.loadable)
// keep the report around so it can be referenced later
report.tag = "mapreport_[++report.tag_number]"
report.crashed = FALSE
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 1112247380dd..d4db6bccde83 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -628,7 +628,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/value = SStechtree.trees[1]
- if(trees.len > 1)
+ if(length(trees) > 1)
value = tgui_input_list(src, "Choose which tree to enter", "Enter Tree", trees)
if(!value)
@@ -655,7 +655,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
for(var/turf/T in get_area_turfs(thearea.type))
L+=T
- if(!L || !L.len)
+ if(!LAZYLEN(L))
to_chat(src, "No area available. ")
return
@@ -879,7 +879,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/datum/hive_status/hive
for(var/hivenumber in GLOB.hive_datum)
hive = GLOB.hive_datum[hivenumber]
- if(hive.totalXenos.len > 0)
+ if(length(hive.totalXenos) > 0)
hives += list("[hive.name]" = hive.hivenumber)
last_hive_checked = hive
diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm
index 0d8d1ff0dc48..ef9ac4b6cfcc 100644
--- a/code/modules/mob/hear_say.dm
+++ b/code/modules/mob/hear_say.dm
@@ -18,7 +18,7 @@
if(!say_understands(speaker,language))
if(istype(speaker,/mob/living/simple_animal))
var/mob/living/simple_animal/S = speaker
- if(S.speak.len)
+ if(length(S.speak))
message = pick(S.speak)
else
message = stars(message)
@@ -189,7 +189,7 @@
var/list/punctuation = list(",", "!", ".", ";", "?")
var/list/messages = splittext(message, " ")
- var/R = rand(1, messages.len)
+ var/R = rand(1, length(messages))
var/heardword = messages[R]
if(copytext(heardword,1, 1) in punctuation)
heardword = copytext(heardword,2)
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index bcee5b81a100..cb8bbc11303b 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -15,7 +15,7 @@
/obj/item/holder/process()
- if(istype(loc,/turf) || !(contents.len))
+ if(istype(loc,/turf) || !(length(contents)))
for(var/mob/M in contents)
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index c9837e144c1b..e1c3bf49af8a 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -340,7 +340,7 @@
if(WEAR_IN_BACK)
if (src.back && isstorage(src.back))
var/obj/item/storage/B = src.back
- if(B.contents.len < B.storage_slots && W.w_class <= B.max_w_class)
+ if(length(B.contents) < B.storage_slots && W.w_class <= B.max_w_class)
W.forceMove(B)
equipped = 1
if(WEAR_IN_SHOES)
@@ -353,7 +353,7 @@
if(WEAR_IN_SCABBARD)
if(src.back && istype(src.back, /obj/item/storage/large_holster))
var/obj/item/storage/large_holster/B = src.back
- if(B.contents.len < B.storage_slots && W.w_class <= B.max_w_class)
+ if(length(B.contents) < B.storage_slots && W.w_class <= B.max_w_class)
W.forceMove(B)
equipped = 1
if(WEAR_IN_ACCESSORY)
@@ -377,25 +377,25 @@
if(WEAR_IN_BELT)
if(src.belt && isstorage(src.belt))
var/obj/item/storage/B = src.belt
- if(B.contents.len < B.storage_slots && W.w_class <= B.max_w_class)
+ if(length(B.contents) < B.storage_slots && W.w_class <= B.max_w_class)
W.forceMove(B)
equipped = 1
if(WEAR_IN_J_STORE)
if(src.s_store && isstorage(src.s_store))
var/obj/item/storage/B = src.s_store
- if(B.contents.len < B.storage_slots && W.w_class <= B.max_w_class)
+ if(length(B.contents) < B.storage_slots && W.w_class <= B.max_w_class)
W.forceMove(B)
equipped = 1
if(WEAR_IN_L_STORE)
if(src.l_store && istype(src.l_store, /obj/item/storage/pouch))
var/obj/item/storage/pouch/P = src.l_store
- if(P.contents.len < P.storage_slots && W.w_class <= P.max_w_class)
+ if(length(P.contents) < P.storage_slots && W.w_class <= P.max_w_class)
W.forceMove(P)
equipped = 1
if(WEAR_IN_R_STORE)
if(src.r_store && istype(src.r_store, /obj/item/storage/pouch))
var/obj/item/storage/pouch/P = src.r_store
- if(P.contents.len < P.storage_slots && W.w_class <= P.max_w_class)
+ if(length(P.contents) < P.storage_slots && W.w_class <= P.max_w_class)
W.forceMove(P)
equipped = 1
diff --git a/code/modules/mob/language/language.dm b/code/modules/mob/language/language.dm
index 0a2fbca787d6..45086aaeba8b 100644
--- a/code/modules/mob/language/language.dm
+++ b/code/modules/mob/language/language.dm
@@ -60,12 +60,12 @@
/datum/language/proc/add_to_cache(input, scrambled_text)
// 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)
/datum/language/proc/scramble(input)
- if(!syllables || !syllables.len)
+ if(!LAZYLEN(syllables))
return stars(input)
// If the input is cached already, move it to the end of the cache and return it
diff --git a/code/modules/mob/language/language_handling.dm b/code/modules/mob/language/language_handling.dm
index d9df36681261..c45ced8ad150 100644
--- a/code/modules/mob/language/language_handling.dm
+++ b/code/modules/mob/language/language_handling.dm
@@ -18,7 +18,7 @@
return 0
/mob/proc/get_default_language()
- if (languages.len > 0)
+ if (length(languages) > 0)
return languages[1]
return null
diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm
index 27d6f5ee4ccf..c2d0c63e3307 100644
--- a/code/modules/mob/living/blood.dm
+++ b/code/modules/mob/living/blood.dm
@@ -110,9 +110,9 @@
//An even amount of each plasma and blood type
if(plasma == PLASMA_EGG)
//Preserve hive_number for the possible larva
- O.reagents.add_reagent(plasma, amount / plasmas.len, list("hive_number" = hivenumber))
+ O.reagents.add_reagent(plasma, amount / length(plasmas), list("hive_number" = hivenumber))
else
- O.reagents.add_reagent(plasma, amount / plasmas.len)
+ O.reagents.add_reagent(plasma, amount / length(plasmas))
blood_volume = max(0, blood_volume - amount)
return 1
@@ -142,7 +142,7 @@
for(var/datum/disease/D in viruses)
blood_data["viruses"] += D.Copy()
- if(resistances && resistances.len)
+ if(LAZYLEN(resistances))
blood_data["resistances"] = resistances.Copy()
return blood_data
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 974312fc42f7..36d2518d7e75 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -482,7 +482,7 @@
/mob/living/carbon/on_stored_atom_del(atom/movable/AM)
..()
- if(stomach_contents.len && ismob(AM))
+ if(length(stomach_contents) && ismob(AM))
for(var/X in stomach_contents)
if(AM == X)
stomach_contents -= AM
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index dcbab12c7291..c8820ec3b97d 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -263,7 +263,7 @@
wound_flavor_text["[temp.display_name]"] += SPAN_WARNING(pick(" a lot of burns"," severe melting"))
if(wound_flavor_text["[temp.display_name]"])
wound_flavor_text["[temp.display_name]"] += SPAN_WARNING("!\n")
- else if(temp.wounds.len > 0)
+ else if(length(temp.wounds) > 0)
var/list/wound_descriptors = list()
for(var/datum/wound/W as anything in temp.wounds)
if(W.internal && incision_depths[temp.name] == SURGERY_DEPTH_SURFACE)
@@ -286,37 +286,37 @@
wound_descriptors[this_wound_desc] += W.amount
continue
wound_descriptors[this_wound_desc] = W.amount
- if(wound_descriptors.len)
+ if(length(wound_descriptors))
var/list/flavor_text = list()
var/list/no_exclude = list("gaping wound", "big gaping wound", "massive wound", "large bruise",\
"huge bruise", "massive bruise", "severe burn", "large burn", "deep burn", "carbonised area")
for(var/wound in wound_descriptors)
switch(wound_descriptors[wound])
if(1)
- if(!flavor_text.len)
+ if(!length(flavor_text))
flavor_text += SPAN_WARNING("[t_He] has[prob(10) && !(wound in no_exclude) ? " what might be" : ""] a [wound]")
else
flavor_text += "[prob(10) && !(wound in no_exclude) ? " what might be" : ""] a [wound]"
if(2)
- if(!flavor_text.len)
+ if(!length(flavor_text))
flavor_text += SPAN_WARNING("[t_He] has[prob(10) && !(wound in no_exclude) ? " what might be" : ""] a pair of [wound]s")
else
flavor_text += "[prob(10) && !(wound in no_exclude) ? " what might be" : ""] a pair of [wound]s"
if(3 to 5)
- if(!flavor_text.len)
+ if(!length(flavor_text))
flavor_text += SPAN_WARNING("[t_He] has several [wound]s")
else
flavor_text += " several [wound]s"
if(6 to INFINITY)
- if(!flavor_text.len)
+ if(!length(flavor_text))
flavor_text += SPAN_WARNING("[t_He] has a bunch of [wound]s")
else
flavor_text += " a ton of [wound]\s"
var/flavor_text_string = ""
- for(var/text = 1, text <= flavor_text.len, text++)
- if(text == flavor_text.len && flavor_text.len > 1)
+ for(var/text = 1, text <= length(flavor_text), text++)
+ if(text == length(flavor_text) && length(flavor_text) > 1)
flavor_text_string += ", and"
- else if(flavor_text.len > 1 && text > 1)
+ else if(length(flavor_text) > 1 && text > 1)
flavor_text_string += ","
flavor_text_string += flavor_text[text]
flavor_text_string += " on [t_his] [temp.display_name]. "
diff --git a/code/modules/mob/living/carbon/human/exercise.dm b/code/modules/mob/living/carbon/human/exercise.dm
index 3a2976da9130..9e01aa863244 100644
--- a/code/modules/mob/living/carbon/human/exercise.dm
+++ b/code/modules/mob/living/carbon/human/exercise.dm
@@ -83,7 +83,7 @@ Verbs related to getting fucking jacked, bro
if(!get_limb(zone))
extremities.Remove(zone)
- if(extremities.len < 8)
+ if(length(extremities) < 8)
to_chat(src, SPAN_WARNING("How do you think you'll be able to do a pushup without two hands and feet to stand on? See a doctor!"))
return FALSE
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 6db31ea6451a..62e2c7a01cd1 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1000,8 +1000,8 @@
if(self)
var/list/L = get_broken_limbs() - list("chest","head","groin")
- if(L.len > 0)
- msg += "Your [english_list(L)] [L.len > 1 ? "are" : "is"] broken\n"
+ if(length(L) > 0)
+ msg += "Your [english_list(L)] [length(L) > 1 ? "are" : "is"] broken\n"
to_chat(usr,SPAN_NOTICE("You [self ? "take a moment to analyze yourself":"start analyzing [src]"]"))
if(toxloss > 20)
msg += "[self ? "Your" : "Their"] skin is slightly green\n"
@@ -1404,13 +1404,13 @@
to_splint.Add(l)
var/msg = "" // Have to use this because there are issues with the to_chat macros and text macros and quotation marks
- if(to_splint.len)
+ if(length(to_splint))
if(do_after(user, HUMAN_STRIP_DELAY * user.get_skill_duration_multiplier(SKILL_MEDICAL), INTERRUPT_ALL, BUSY_ICON_GENERIC, target, INTERRUPT_MOVED, BUSY_ICON_GENERIC))
var/can_reach_splints = TRUE
var/amount_removed = 0
if(wear_suit && istype(wear_suit,/obj/item/clothing/suit/space))
var/obj/item/clothing/suit/space/suit = target.wear_suit
- if(suit.supporting_limbs && suit.supporting_limbs.len)
+ if(LAZYLEN(suit.supporting_limbs))
msg = "[user == target ? "your":"\proper [target]'s"]"
to_chat(user, SPAN_WARNING("You cannot remove the splints, [msg] [suit] is supporting some of the breaks."))
can_reach_splints = FALSE
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 49e490a33507..8a528df92de5 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -179,7 +179,7 @@
for(var/obj/limb/O in limbs)
if(O.status & (LIMB_ROBOT|LIMB_DESTROYED|LIMB_MUTATED|LIMB_SYNTHSKIN)) continue
candidates |= O
- if(candidates.len)
+ if(length(candidates))
var/obj/limb/O = pick(candidates)
O.mutate()
to_chat(src, SPAN_NOTICE("Something is not right with your [O.display_name]..."))
@@ -260,7 +260,7 @@
//It automatically updates health status
/mob/living/carbon/human/heal_limb_damage(brute, burn)
var/list/obj/limb/parts = get_damaged_limbs(brute,burn)
- if(!parts.len)
+ if(!length(parts))
return
var/obj/limb/picked = pick(parts)
if(brute != 0)
@@ -279,7 +279,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
//It automatically updates health status
/mob/living/carbon/human/take_limb_damage(brute, burn, sharp = 0, edge = 0)
var/list/obj/limb/parts = get_damageable_limbs()
- if(!parts.len) return
+ if(!length(parts)) return
var/obj/limb/picked = pick(parts)
if(brute != 0)
apply_damage(brute, BRUTE, picked, sharp, edge)
@@ -294,7 +294,7 @@ In most cases it makes more sense to use apply_damage() instead! And make sure t
var/list/obj/limb/parts = get_damaged_limbs(brute,burn)
var/update = 0
- while(parts.len && (brute>0 || burn>0) )
+ while(length(parts) && (brute>0 || burn>0) )
var/obj/limb/picked = pick(parts)
var/brute_was = picked.brute_dam
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 930e31a7770f..09ce5bb9c149 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -194,7 +194,7 @@ Contains most of the procs that are called when a mob is attacked by something
if((user != src) && check_shields(I.force, "the [I.name]"))
return FALSE
- if(I.attack_verb && I.attack_verb.len)
+ if(LAZYLEN(I.attack_verb))
visible_message(SPAN_DANGER("[src] has been [pick(I.attack_verb)] in the [hit_area] with [I.name] by [user]! "), null, null, 5)
else
visible_message(SPAN_DANGER("[src] has been attacked in the [hit_area] with [I.name] by [user]! "), null, null, 5)
diff --git a/code/modules/mob/living/carbon/human/human_helpers.dm b/code/modules/mob/living/carbon/human/human_helpers.dm
index 7b26b256e54b..cb6ba8137a00 100644
--- a/code/modules/mob/living/carbon/human/human_helpers.dm
+++ b/code/modules/mob/living/carbon/human/human_helpers.dm
@@ -369,7 +369,7 @@
/mob/living/carbon/human/proc/has_foreign_object()
for(var/obj/limb/L in limbs)
- if(L.implants && L.implants.len > 0)
+ if(LAZYLEN(L.implants) > 0)
return TRUE
for(var/obj/item/alien_embryo/A in contents)
return TRUE
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 7183d6c802b9..7cb2d04e67de 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -10,7 +10,7 @@
if(species.slowdown)
. += species.slowdown
- if(embedded_items.len > 0)
+ if(length(embedded_items) > 0)
handle_embedded_objects() //Moving with objects stuck in you can cause bad times.
var/reducible_tally = 0 //Tally elements that can be reduced are put here, then we apply MST effects
diff --git a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
index 0772d952d082..37750b5585ea 100644
--- a/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
+++ b/code/modules/mob/living/carbon/human/life/handle_regular_hud_updates.dm
@@ -198,7 +198,7 @@
hud_used.slowed_icon.name = ""
hud_used.slowed_icon.icon_state = "status_0"
- var/is_embedded = embedded_items.len
+ var/is_embedded = length(embedded_items)
if(is_embedded)
hud_used.shrapnel_icon.name = "shrapnel"
hud_used.shrapnel_icon.icon_state = "status_shrapnel"
@@ -228,7 +228,7 @@
hud_used.tethered_icon.name = ""
hud_used.tethered_icon.icon_state = "status_0"
- if(active_transfusions.len)
+ if(length(active_transfusions))
hud_used.tethered_icon.name = "transfusion"
hud_used.tethered_icon.icon_state = "status_blood"
hud_used.tethered_icon.screen_loc = ui_datum.get_status_loc(status_effect_placement)
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 230e178378ae..c95efd8a2995 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -158,7 +158,7 @@
for(var/mob/living/M in hearers(message_range, src))
if(M != src)
- M.show_message(SPAN_NOTICE("[src] talks into [used_radios.len ? used_radios[1] : "the radio."]"), SHOW_MESSAGE_VISIBLE)
+ M.show_message(SPAN_NOTICE("[src] talks into [length(used_radios) ? used_radios[1] : "the radio."]"), SHOW_MESSAGE_VISIBLE)
if(ishumansynth_strict(src))
playsound(src.loc, 'sound/effects/radiostatic.ogg', 15, 1)
diff --git a/code/modules/mob/living/carbon/human/species/monkey.dm b/code/modules/mob/living/carbon/human/species/monkey.dm
index 8e8d2443293d..2973e4b6a556 100644
--- a/code/modules/mob/living/carbon/human/species/monkey.dm
+++ b/code/modules/mob/living/carbon/human/species/monkey.dm
@@ -70,7 +70,7 @@
for(var/obj/O in range(1,get_turf(H)))
if(O.Adjacent(H))
touchables += O
- if(touchables.len)
+ if(length(touchables))
var/obj/touchy = pick(touchables)
touchy.attack_hand(H)
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 4e2a58190f98..42338c2c40a2 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -401,7 +401,7 @@
/datum/species/proc/get_offset_overlay_image(spritesheet, mob_icon, mob_state, color, slot)
// If we don't actually need to offset this, don't bother with any of the generation/caching.
- if(!spritesheet && equip_adjust.len && equip_adjust[slot] && LAZYLEN(equip_adjust[slot]))
+ if(!spritesheet && length(equip_adjust) && equip_adjust[slot] && LAZYLEN(equip_adjust[slot]))
// Check the cache for previously made icons.
var/image_key = "[mob_icon]-[mob_state]-[color]"
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index dfb903368503..6b2739780288 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -476,7 +476,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
apply_overlay(HEAD_SQUAD_LAYER)
var/num_helmet_overlays = 0
- for(var/i in 1 to marine_helmet.helmet_overlays.len)
+ for(var/i in 1 to length(marine_helmet.helmet_overlays))
// Add small numbers to the head garb layer so we don't have a layer conflict
// the i-1 bit is to make it 0-based, not 1-based like BYOND wants
overlays_standing[HEAD_GARB_LAYER + (i-1)] = image('icons/mob/humans/onmob/helmet_garb.dmi', src, marine_helmet.helmet_overlays[i])
@@ -537,7 +537,7 @@ Applied by gun suicide and high impact bullet executions, removed by rejuvenate,
overlays_standing[SUIT_SQUAD_LAYER] = squad_overlay
apply_overlay(SUIT_SQUAD_LAYER)
- if(marine_armor.armor_overlays.len)
+ if(length(marine_armor.armor_overlays))
var/image/K
var/image/IMG
for(var/i in marine_armor.armor_overlays)
diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm
index 1293da617f24..eb5ec949cece 100644
--- a/code/modules/mob/living/carbon/human/whisper.dm
+++ b/code/modules/mob/living/carbon/human/whisper.dm
@@ -104,7 +104,7 @@
M << speech_bubble
M.hear_say(message, verb, speaking, alt_name, italics, src)
- if (eavesdropping.len)
+ if (length(eavesdropping))
var/new_message = stars(message) //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)
if(not_dead_speaker)
@@ -120,7 +120,7 @@
for(var/mob/M in eavesdropping)
if(M.client) M.client.images -= speech_bubble
- if (watching.len)
+ if (length(watching))
var/rendered = "[src.name] whispers something. "
for (var/mob/M in watching)
M.show_message(rendered, SHOW_MESSAGE_AUDIBLE)
diff --git a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
index 45edbfe7d9e3..f0fd8a4d86a7 100644
--- a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
+++ b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm
@@ -15,7 +15,7 @@
if(3)
fontsize_style = "large"
- if(SSticker.mode && SSticker.mode.xenomorphs.len) //Send to only xenos in our gamemode list. This is faster than scanning all mobs
+ if(SSticker.mode && length(SSticker.mode.xenomorphs)) //Send to only xenos in our gamemode list. This is faster than scanning all mobs
for(var/datum/mind/L in SSticker.mode.xenomorphs)
var/mob/living/carbon/M = L.current
if(M && istype(M) && !M.stat && M.client && (!hivenumber || M.hivenumber == hivenumber)) //Only living and connected xenos
@@ -26,7 +26,7 @@
if(text == "" || !hivenumber)
return //Logic
- if(SSticker.mode && SSticker.mode.xenomorphs.len) //Send to only xenos in our gamemode list. This is faster than scanning all mobs
+ if(SSticker.mode && length(SSticker.mode.xenomorphs)) //Send to only xenos in our gamemode list. This is faster than scanning all mobs
for(var/datum/mind/living in SSticker.mode.xenomorphs)
var/mob/living/carbon/xenomorph/xeno = living.current
if(istype(xeno) && !xeno.stat && xeno.client && xeno.hivenumber == hivenumber) //Only living and connected xenos
@@ -370,13 +370,13 @@
//Bleuugh
/mob/living/carbon/xenomorph/proc/empty_gut()
- if(stomach_contents.len)
+ if(length(stomach_contents))
for(var/atom/movable/S in stomach_contents)
stomach_contents.Remove(S)
S.acid_damage = 0 //Reset the acid damage
S.forceMove(get_true_turf(src))
- if(contents.len) //Get rid of anything that may be stuck inside us as well
+ if(length(contents)) //Get rid of anything that may be stuck inside us as well
for(var/atom/movable/A in contents)
A.forceMove(get_true_turf(src))
@@ -392,7 +392,7 @@
update_sight()
/mob/living/carbon/xenomorph/proc/regurgitate(mob/living/victim, stuns = FALSE)
- if(stomach_contents.len)
+ if(length(stomach_contents))
if(victim)
stomach_contents.Remove(victim)
victim.acid_damage = 0
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm b/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm
index 0472dd9901b2..87657af5ce7a 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/ability_helper_procs.dm
@@ -289,7 +289,7 @@
for(var/turf/T in turflist)
distance++
- if(!prev_turf && turflist.len > 1)
+ if(!prev_turf && length(turflist) > 1)
prev_turf = get_turf(src)
continue //So we don't burn the tile we be standin on
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm
index 4bd70a93684f..014cb3d2f24b 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/general_powers.dm
@@ -111,9 +111,9 @@
var/mob/living/carbon/xenomorph/X = owner
if(!X.check_state())
return
- for(var/i in 1 to X.caste.spit_types.len)
+ for(var/i in 1 to length(X.caste.spit_types))
if(X.ammo == GLOB.ammo_list[X.caste.spit_types[i]])
- if(i == X.caste.spit_types.len)
+ if(i == length(X.caste.spit_types))
X.ammo = GLOB.ammo_list[X.caste.spit_types[1]]
else
X.ammo = GLOB.ammo_list[X.caste.spit_types[i+1]]
@@ -132,7 +132,7 @@
to_chat(X, SPAN_WARNING("We cannot regurgitate here."))
return
- if(X.stomach_contents.len)
+ if(length(X.stomach_contents))
for(var/mob/living/M in X.stomach_contents)
// Also has good reason to be a proc on all Xenos
X.regurgitate(M, TRUE)
@@ -367,7 +367,7 @@
SEND_SIGNAL(src, COMSIG_XENO_START_EMIT_PHEROMONES, pheromone)
playsound(loc, "alien_drool", 25)
- if(isqueen(src) && hive && hive.xeno_leader_list.len && anchored)
+ if(isqueen(src) && hive && length(hive.xeno_leader_list) && anchored)
for(var/mob/living/carbon/xenomorph/L in hive.xeno_leader_list)
L.handle_xeno_leader_pheromones()
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm
index d9e342c1f7e6..4d3a792af89a 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm
@@ -69,7 +69,7 @@
current_mob.apply_armoured_damage(get_xeno_damage_slash(current_mob, damage), ARMOR_MELEE, BRUTE, null, 20)
playsound(current_mob, 'sound/weapons/alien_tail_attack.ogg', 30, TRUE)
- if (target_mobs.len >= shield_regen_threshold)
+ if (length(target_mobs) >= shield_regen_threshold)
var/datum/behavior_delegate/praetorian_vanguard/behavior = source_xeno.behavior_delegate
if (istype(behavior))
behavior.regen_shield()
@@ -133,7 +133,7 @@
H.apply_armoured_damage(get_xeno_damage_slash(H, damage), ARMOR_MELEE, BRUTE)
playsound(get_turf(H), "alien_claw_flesh", 30, 1)
- if (target_mobs.len >= shield_regen_threshold)
+ if (length(target_mobs) >= shield_regen_threshold)
var/datum/behavior_delegate/praetorian_vanguard/behavior = X.behavior_delegate
if (istype(behavior))
behavior.regen_shield()
diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm
index 0ee1cf6b3c27..381acba92a51 100644
--- a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm
+++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm
@@ -216,8 +216,8 @@
return
var/datum/hive_status/hive = X.hive
if(X.observed_xeno)
- if(!hive.open_xeno_leader_positions.len && X.observed_xeno.hive_pos == NORMAL_XENO)
- to_chat(X, SPAN_XENOWARNING("You currently have [hive.xeno_leader_list.len] promoted leaders. You may not maintain additional leaders until your power grows."))
+ if(!length(hive.open_xeno_leader_positions) && X.observed_xeno.hive_pos == NORMAL_XENO)
+ to_chat(X, SPAN_XENOWARNING("You currently have [length(hive.xeno_leader_list)] promoted leaders. You may not maintain additional leaders until your power grows."))
return
var/mob/living/carbon/xenomorph/T = X.observed_xeno
if(T == X)
@@ -239,12 +239,12 @@
for(var/mob/living/carbon/xenomorph/T in hive.xeno_leader_list)
possible_xenos += T
- if(possible_xenos.len > 1)
+ if(length(possible_xenos) > 1)
var/mob/living/carbon/xenomorph/selected_xeno = tgui_input_list(X, "Target", "Watch which leader?", possible_xenos, theme="hive_status")
if(!selected_xeno || selected_xeno.hive_pos == NORMAL_XENO || selected_xeno == X.observed_xeno || selected_xeno.stat == DEAD || selected_xeno.z != X.z || !X.check_state())
return
X.overwatch(selected_xeno)
- else if(possible_xenos.len)
+ else if(length(possible_xenos))
X.overwatch(possible_xenos[1])
else
to_chat(X, SPAN_XENOWARNING("There are no Xenomorph leaders. Overwatch a Xenomorph to make it a leader."))
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Crusher.dm b/code/modules/mob/living/carbon/xenomorph/castes/Crusher.dm
index 7ccab754d6dd..24ac22d6bc52 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/Crusher.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/Crusher.dm
@@ -184,7 +184,7 @@
. = FALSE
else if (O.anchored)
visible_message(SPAN_DANGER("[src] crushes [O]!"), SPAN_XENODANGER("We crush [O]!"))
- if(O.contents.len) //Hopefully won't auto-delete things inside crushed stuff.
+ if(length(O.contents)) //Hopefully won't auto-delete things inside crushed stuff.
var/turf/T = get_turf(src)
for(var/atom/movable/S in T.contents) S.forceMove(T)
diff --git a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm
index 532f77d1bec2..a66903a938c5 100644
--- a/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm
+++ b/code/modules/mob/living/carbon/xenomorph/castes/Queen.dm
@@ -534,14 +534,14 @@
if(egg_amount >= 1)
if(isturf(loc))
var/turf/T = loc
- if(T.contents.len <= 25) //so we don't end up with a million object on that turf.
+ if(length(T.contents) <= 25) //so we don't end up with a million object on that turf.
egg_amount--
new /obj/item/xeno_egg(loc, hivenumber)
/mob/living/carbon/xenomorph/queen/get_status_tab_items()
. = ..()
var/stored_larvae = GLOB.hive_datum[hivenumber].stored_larva
- var/xeno_leader_num = hive?.queen_leader_limit - hive?.open_xeno_leader_positions.len
+ var/xeno_leader_num = hive?.queen_leader_limit - length(hive?.open_xeno_leader_positions)
. += "Pooled Larvae: [stored_larvae]"
. += "Leaders: [xeno_leader_num] / [hive?.queen_leader_limit]"
diff --git a/code/modules/mob/living/carbon/xenomorph/damage_procs.dm b/code/modules/mob/living/carbon/xenomorph/damage_procs.dm
index 2b1ef0aca867..4c97ce20b4eb 100644
--- a/code/modules/mob/living/carbon/xenomorph/damage_procs.dm
+++ b/code/modules/mob/living/carbon/xenomorph/damage_procs.dm
@@ -54,7 +54,7 @@
last_damage_data = istype(cause_data) ? cause_data : create_cause_data(cause_data)
- if(severity > EXPLOSION_THRESHOLD_LOW && stomach_contents.len)
+ if(severity > EXPLOSION_THRESHOLD_LOW && length(stomach_contents))
for(var/mob/M in stomach_contents)
M.ex_act(severity - EXPLOSION_THRESHOLD_LOW, last_damage_data, pierce)
@@ -170,7 +170,7 @@
return
var/shielded = FALSE
- if(xeno_shields.len != 0 && damage > 0)
+ if(length(xeno_shields) != 0 && damage > 0)
shielded = TRUE
for(var/datum/xeno_shield/XS in xeno_shields)
damage = XS.on_hit(damage)
diff --git a/code/modules/mob/living/carbon/xenomorph/hive_status.dm b/code/modules/mob/living/carbon/xenomorph/hive_status.dm
index 4782bcd8b288..9c8b54dad483 100644
--- a/code/modules/mob/living/carbon/xenomorph/hive_status.dm
+++ b/code/modules/mob/living/carbon/xenomorph/hive_status.dm
@@ -292,15 +292,15 @@
//No leaders for a Hive without a Queen!
queen_leader_limit = living_xeno_queen ? 4 : 0
- if (xeno_leader_list.len > queen_leader_limit)
+ if (length(xeno_leader_list) > queen_leader_limit)
var/diff = 0
- for (var/i in queen_leader_limit + 1 to xeno_leader_list.len)
+ for (var/i in queen_leader_limit + 1 to length(xeno_leader_list))
if(!open_xeno_leader_positions.Remove(i))
remove_hive_leader(xeno_leader_list[i])
diff++
xeno_leader_list.len -= diff // Changing the size of xeno_leader_list needs to go at the end or else it won't iterate through the list properly
- else if (xeno_leader_list.len < queen_leader_limit)
- for (var/i in xeno_leader_list.len + 1 to queen_leader_limit)
+ else if (length(xeno_leader_list) < queen_leader_limit)
+ for (var/i in length(xeno_leader_list) + 1 to queen_leader_limit)
open_xeno_leader_positions += i
xeno_leader_list.len++
@@ -309,7 +309,7 @@
/datum/hive_status/proc/add_hive_leader(mob/living/carbon/xenomorph/xeno)
if(!xeno)
return FALSE //How did this even happen?
- if(!open_xeno_leader_positions.len)
+ if(!length(open_xeno_leader_positions))
return FALSE //Too many leaders already (no available xeno leader positions)
if(xeno.hive_pos != NORMAL_XENO)
return FALSE //Already on the list
@@ -342,7 +342,7 @@
// Need to maintain ascending order of open_xeno_leader_positions
for (var/i in 1 to queen_leader_limit)
- if (i > open_xeno_leader_positions.len || open_xeno_leader_positions[i] > leader_num)
+ if (i > length(open_xeno_leader_positions) || open_xeno_leader_positions[i] > leader_num)
open_xeno_leader_positions.Insert(i, leader_num)
break
@@ -626,7 +626,7 @@
/datum/hive_status/proc/has_structure(structure_name)
if(!structure_name)
return FALSE
- if(hive_structures[structure_name] && hive_structures[structure_name].len)
+ if(LAZYLEN(hive_structures[structure_name]))
return TRUE
return FALSE
@@ -636,7 +636,7 @@
var/name_ref = initial(S.template.name)
if(!hive_constructions[name_ref])
hive_constructions[name_ref] = list()
- if(hive_constructions[name_ref].len >= hive_structures_limit[name_ref])
+ if(length(hive_constructions[name_ref]) >= hive_structures_limit[name_ref])
return FALSE
hive_constructions[name_ref] += src
return TRUE
@@ -654,7 +654,7 @@
var/name_ref = initial(S.name)
if(!hive_structures[name_ref])
hive_structures[name_ref] = list()
- if(hive_structures[name_ref].len >= hive_structures_limit[name_ref])
+ if(length(hive_structures[name_ref]) >= hive_structures_limit[name_ref])
return FALSE
hive_structures[name_ref] += S
return TRUE
@@ -667,9 +667,9 @@
return TRUE
/datum/hive_status/proc/has_special_structure(name_ref)
- if(!name_ref || !hive_structures[name_ref] || !hive_structures[name_ref].len)
+ if(!name_ref || !LAZYLEN(hive_structures[name_ref]))
return 0
- return hive_structures[name_ref].len
+ return length(hive_structures[name_ref])
/datum/hive_status/proc/abandon_on_hijack()
var/area/hijacked_dropship = get_area(living_xeno_queen)
@@ -686,7 +686,7 @@
if(get_area(xeno) != hijacked_dropship && xeno.loc && is_ground_level(xeno.loc.z))
if(isfacehugger(xeno) || islesserdrone(xeno))
to_chat(xeno, SPAN_XENOANNOUNCE("The Queen has left without you, you quickly find a hiding place to enter hibernation as you lose touch with the hive mind."))
- if(xeno.stomach_contents.len)
+ if(length(xeno.stomach_contents))
xeno.devour_timer = 0
xeno.handle_stomach_contents()
qdel(xeno)
@@ -696,7 +696,7 @@
xeno.set_hive_and_update(XENO_HIVE_FORSAKEN)
else
to_chat(xeno, SPAN_XENOANNOUNCE("The Queen has left without you, you quickly find a hiding place to enter hibernation as you lose touch with the hive mind."))
- if(xeno.stomach_contents.len)
+ if(length(xeno.stomach_contents))
xeno.devour_timer = 0
xeno.handle_stomach_contents()
qdel(xeno)
@@ -847,7 +847,7 @@
var/time_left = floor((user.timeofdeath + JOIN_AS_FACEHUGGER_DELAY - world.time) / 10)
to_chat(user, SPAN_WARNING("You ghosted too recently. You cannot become a facehugger until 3 minutes have passed ([time_left] seconds remaining)."))
return FALSE
- if(totalXenos.len <= 0)
+ if(length(totalXenos) <= 0)
//This is to prevent people from joining as Forsaken Huggers on the pred ship
to_chat(user, SPAN_WARNING("The hive has fallen, you can't join it!"))
return FALSE
@@ -910,7 +910,7 @@
to_chat(user, SPAN_WARNING("You ghosted too recently. You cannot become a lesser drone until 30 seconds have passed ([time_left] seconds remaining)."))
return FALSE
- if(totalXenos.len <= 0)
+ if(length(totalXenos) <= 0)
to_chat(user, SPAN_WARNING("The hive has fallen, you can't join it!"))
return FALSE
diff --git a/code/modules/mob/living/carbon/xenomorph/life.dm b/code/modules/mob/living/carbon/xenomorph/life.dm
index a6fd0d15877d..1657d078ffda 100644
--- a/code/modules/mob/living/carbon/xenomorph/life.dm
+++ b/code/modules/mob/living/carbon/xenomorph/life.dm
@@ -220,7 +220,7 @@
/mob/living/carbon/xenomorph/proc/handle_stomach_contents()
//Deal with dissolving/damaging stuff in stomach.
- if(stomach_contents.len)
+ if(length(stomach_contents))
for(var/atom/movable/M in stomach_contents)
if(ishuman(M))
if(world.time > devour_timer - 50 && world.time < devour_timer - 30)
@@ -481,7 +481,7 @@ Make sure their actual health updates immediately.*/
if(status_flags & GODMODE)
health = maxHealth
set_stat(CONSCIOUS)
- else if(xeno_shields.len != 0)
+ else if(length(xeno_shields) != 0)
overlay_shields()
health = maxHealth - getFireLoss() - getBruteLoss()
else
diff --git a/code/modules/mob/living/carbon/xenomorph/say.dm b/code/modules/mob/living/carbon/xenomorph/say.dm
index 2c9404b745ef..9f99cdb45455 100644
--- a/code/modules/mob/living/carbon/xenomorph/say.dm
+++ b/code/modules/mob/living/carbon/xenomorph/say.dm
@@ -22,14 +22,14 @@
var/datum/language/speaking = null
if(length(message) >= 2)
- if(can_hivemind_speak && copytext(message,1,2) == ";" && languages.len)
+ if(can_hivemind_speak && copytext(message,1,2) == ";" && length(languages))
for(var/datum/language/L in languages)
if(L.flags & HIVEMIND)
verb = L.speech_verb
speaking = L
break
var/channel_prefix = copytext(message, 1, 3)
- if(languages.len)
+ if(length(languages))
for(var/datum/language/L in languages)
if(lowertext(channel_prefix) == ":[L.key]" || lowertext(channel_prefix) == ".[L.key]")
verb = L.speech_verb
diff --git a/code/modules/mob/living/carbon/xenomorph/strains/castes/runner/acid.dm b/code/modules/mob/living/carbon/xenomorph/strains/castes/runner/acid.dm
index 6983942fb562..0fdaa264bd99 100644
--- a/code/modules/mob/living/carbon/xenomorph/strains/castes/runner/acid.dm
+++ b/code/modules/mob/living/carbon/xenomorph/strains/castes/runner/acid.dm
@@ -96,7 +96,7 @@
var/amplitude = 50 + 50 * (caboom_timer - caboom_left) / caboom_timer
playsound(bound_xeno, caboom_sound[caboom_loop], amplitude, FALSE, 10)
caboom_loop++
- if(caboom_loop > caboom_sound.len)
+ if(caboom_loop > length(caboom_sound))
caboom_loop = 1
if(caboom_left <= 0)
caboom_trigger = FALSE
diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_helpers.dm b/code/modules/mob/living/carbon/xenomorph/xeno_helpers.dm
index 8b3487b7a878..2414d077b1c0 100644
--- a/code/modules/mob/living/carbon/xenomorph/xeno_helpers.dm
+++ b/code/modules/mob/living/carbon/xenomorph/xeno_helpers.dm
@@ -2,7 +2,7 @@
return (mob_size < MOB_SIZE_BIG && caste.can_vent_crawl)
/mob/living/carbon/xenomorph/ventcrawl_carry()
- if(stomach_contents.len)
+ if(length(stomach_contents))
for(var/mob/living/carbon/human/H in stomach_contents)
if(!isspeciesmonkey(H))
to_chat(src, SPAN_XENOWARNING("You cannot ventcrawl with [H] inside you!"))
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 9500d0a30e37..5f917cf6e0d5 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -66,7 +66,7 @@
/mob/living/proc/burn_skin(burn_amount)
if(ishuman(src))
var/mob/living/carbon/human/H = src //make this damage method divide the damage to be done among all the body parts, then burn each body part for that much damage. will have better effect then just randomly picking a body part
- var/divided_damage = (burn_amount)/(H.limbs.len)
+ var/divided_damage = (burn_amount)/(length(H.limbs))
var/extradam = 0 //added to when organ is at max dam
for(var/obj/limb/affecting in H.limbs)
if(!affecting) continue
@@ -472,7 +472,7 @@
/mob/living/create_clone_movable(shift_x, shift_y)
..()
- src.clone.hud_list = new /list(src.hud_list.len)
+ src.clone.hud_list = new /list(length(src.hud_list))
for(var/h in src.hud_possible) //Clone HUD
src.clone.hud_list[h] = new /image("loc" = src.clone, "icon" = src.hud_list[h].icon)
diff --git a/code/modules/mob/living/living_healthscan.dm b/code/modules/mob/living/living_healthscan.dm
index b26be6c0d585..6739e7046761 100644
--- a/code/modules/mob/living/living_healthscan.dm
+++ b/code/modules/mob/living/living_healthscan.dm
@@ -439,7 +439,7 @@ GLOBAL_LIST_INIT(known_implants, subtypesof(/obj/item/implant))
"icon" = "window-close",
"color" = "red"
))
- if(advice.len)
+ if(length(advice))
data["advice"] = advice
else
data["advice"] = null // interstingly even if we don't set data at all, re-using UI that had this data still has it
@@ -457,7 +457,7 @@ GLOBAL_LIST_INIT(known_implants, subtypesof(/obj/item/implant))
"cure" = disease.cure
)
diseases += list(current_disease)
- if(diseases.len)
+ if(length(diseases))
data["diseases"] = diseases
else
data["diseases"] = null // interstingly even if we don't set data at all, re-using UI that had this data still has it
@@ -633,7 +633,7 @@ GLOBAL_LIST_INIT(known_implants, subtypesof(/obj/item/implant))
if(ishuman(src))
var/mob/living/carbon/human/H = src
- if(H.embedded_items.len > 0)
+ if(length(H.embedded_items) > 0)
embedded_item_detected = TRUE
var/core_fracture = 0
@@ -665,7 +665,7 @@ GLOBAL_LIST_INIT(known_implants, subtypesof(/obj/item/implant))
reagentdata["[R.id]"] = "[R.overdose != 0 && R.volume > R.overdose && !(R.flags & REAGENT_CANNOT_OVERDOSE) ? SPAN_WARNING("OD: ") : ""] [round(R.volume, 1)]u [R.name] "
else
unknown++
- if(reagentdata.len)
+ if(length(reagentdata))
dat += "\n\tBeneficial reagents:\n"
for(var/d in reagentdata)
dat += "\t\t [reagentdata[d]]\n"
diff --git a/code/modules/mob/living/login.dm b/code/modules/mob/living/login.dm
index 50ea9e7a62e3..2bae197050dc 100644
--- a/code/modules/mob/living/login.dm
+++ b/code/modules/mob/living/login.dm
@@ -6,7 +6,7 @@
..()
- if(pipes_shown && pipes_shown.len) //ventcrawling, need to reapply pipe vision
+ if(LAZYLEN(pipes_shown)) //ventcrawling, need to reapply pipe vision
var/obj/structure/pipes/A = loc
if(istype(A)) //a sanity check just to be safe
remove_ventcrawl()
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 b85f188558b1..47b54196301d 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -39,10 +39,10 @@
. = ..()
if(.)
//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()
src.visible_message(SPAN_NOTICE("[src] calms down."))
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 79abd5cc7e0d..4c16c60d4835 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm
@@ -13,7 +13,7 @@
enemies -= L
/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/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm
index 14f220b3a77f..feb70f6f1b79 100644
--- a/code/modules/mob/living/simple_animal/parrot.dm
+++ b/code/modules/mob/living/simple_animal/parrot.dm
@@ -122,7 +122,7 @@
switch(remove_from)
if("ears")
if(ears)
- if(available_channels.len)
+ if(length(available_channels))
src.say("[pick(available_channels)] BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
else
src.say("BAWWWWWK LEAVE THE HEADSET BAWKKKKK!")
@@ -276,8 +276,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(speak.len)
+ if(length(speech_buffer) && prob(10))
+ if(length(speak))
speak.Remove(pick(speak))
speak.Add(pick(speech_buffer))
@@ -304,10 +304,10 @@
parrot_sleep_dur = parrot_sleep_max
//Cycle through message modes for the headset
- if(speak.len)
+ if(length(speak))
var/list/newspeak = list()
- if(available_channels.len && src.ears)
+ if(length(available_channels) && src.ears)
for(var/possible_phrase in speak)
//50/50 chance to not use the radio at all
@@ -685,7 +685,7 @@
return
var/verb = "says"
- if(speak_emote.len)
+ if(length(speak_emote))
verb = pick(speak_emote)
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index 652ee4c44024..f3b8da1a2d76 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -109,33 +109,33 @@
//Speaking
if(!client && speak_chance)
if(rand(0,200) < speak_chance)
- 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(LAZYLEN(speak))
+ if(LAZYLEN(emote_hear) || LAZYLEN(emote_see))
+ var/length = length(speak)
+ if(LAZYLEN(emote_hear))
+ length += length(emote_hear)
+ if(LAZYLEN(emote_see))
+ length += length(emote_see)
var/randomValue = rand(1,length)
- if(randomValue <= speak.len)
+ if(randomValue <= length(speak))
INVOKE_ASYNC(src, PROC_REF(say), pick(speak))
else
- randomValue -= speak.len
- if(emote_see && randomValue <= emote_see.len)
+ randomValue -= length(speak)
+ if(emote_see && randomValue <= length(emote_see))
INVOKE_ASYNC(src, PROC_REF(manual_emote), pick(emote_see),1)
else
INVOKE_ASYNC(src, PROC_REF(manual_emote), pick(emote_hear),2)
else
INVOKE_ASYNC(src, PROC_REF(say), pick(speak))
else
- if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len))
+ if(!LAZYLEN(emote_hear) && LAZYLEN(emote_see))
INVOKE_ASYNC(src, PROC_REF(manual_emote), pick(emote_see),1)
- if((emote_hear && emote_hear.len) && !(emote_see && emote_see.len))
+ if(LAZYLEN(emote_hear) && !LAZYLEN(emote_see))
INVOKE_ASYNC(src, PROC_REF(manual_emote), pick(emote_hear),2)
- if((emote_hear && emote_hear.len) && (emote_see && emote_see.len))
- var/length = emote_hear.len + emote_see.len
+ if(LAZYLEN(emote_hear) && LAZYLEN(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))
INVOKE_ASYNC(src, PROC_REF(manual_emote), pick(emote_see),1)
else
INVOKE_ASYNC(src, PROC_REF(manual_emote), pick(emote_hear),2)
@@ -352,7 +352,7 @@
var/verb = "says"
- if(speak_emote.len)
+ if(length(speak_emote))
verb = pick(speak_emote)
message = capitalize(trim_left(message))
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 8a792943e345..0a24468cc176 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -771,7 +771,7 @@ note dizziness decrements automatically in the mob's Life() proc.
else
visible_message(SPAN_WARNING("[usr] rips [selection] out of [src]'s body. "),SPAN_WARNING("[usr] rips [selection] out of your body. "), null, 5)
- if(valid_objects.len == 1) //Yanking out last object - removing verb.
+ if(length(valid_objects) == 1) //Yanking out last object - removing verb.
remove_verb(src, /mob/proc/yank_out_object)
if(ishuman(src))
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 4b3d2257eb9e..9806e5ce949c 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -397,7 +397,7 @@
if(!check_rights(R_SPAWN))
return
- if(!languages.len)
+ if(!length(languages))
to_chat(usr, "This mob knows no languages.")
return
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index b6f2871e0370..9dcdae3635cb 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -119,7 +119,7 @@
if(pulled.stat == DEAD && !pulled.chestburst)
to_chat(xeno, SPAN_WARNING("Ew, [pulled] is already starting to rot."))
return 0
- if(xeno.stomach_contents.len) //Only one thing in the stomach at a time, please
+ if(length(xeno.stomach_contents)) //Only one thing in the stomach at a time, please
to_chat(xeno, SPAN_WARNING("You already have something in your belly, there's no way that will fit."))
return 0
/* Saving this in case we want to allow devouring of dead bodies UNLESS their client is still online somewhere
@@ -138,10 +138,10 @@
if(HAS_TRAIT(xeno, TRAIT_CLOAKED)) //cloaked don't show the visible message, so we gotta work around
to_chat(pulled, FONT_SIZE_HUGE(SPAN_DANGER("[xeno] is trying to devour you!")))
if(do_after(xeno, 50, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE))
- if(isxeno(pulled.loc) && !xeno.stomach_contents.len)
+ if(isxeno(pulled.loc) && !length(xeno.stomach_contents))
to_chat(xeno, SPAN_WARNING("Someone already ate \the [pulled]."))
return 0
- if(xeno.pulling == pulled && !pulled.buckled && (pulled.stat != DEAD || pulled.chestburst) && !xeno.stomach_contents.len) //make sure you've still got them in your claws, and alive
+ if(xeno.pulling == pulled && !pulled.buckled && (pulled.stat != DEAD || pulled.chestburst) && !length(xeno.stomach_contents)) //make sure you've still got them in your claws, and alive
if(SEND_SIGNAL(pulled, COMSIG_MOB_DEVOURED, xeno) & COMPONENT_CANCEL_DEVOUR)
return FALSE
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 76841c2097c9..7c44605bf4bf 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -229,11 +229,11 @@ GLOBAL_LIST_INIT(limb_types_by_name, list(
var/list/split_phrase = text2list(phrase," ") //Split it up into words.
var/list/unstuttered_words = split_phrase.Copy()
- var/max_stutter = min(strength, split_phrase.len)
+ var/max_stutter = min(strength, length(split_phrase))
var/stutters = rand(max(max_stutter - 3, 1), max_stutter)
for(var/i = 0, i < stutters, i++)
- if (!unstuttered_words.len)
+ if (!length(unstuttered_words))
break
var/word = pick(unstuttered_words)
@@ -268,7 +268,7 @@ GLOBAL_LIST_INIT(limb_types_by_name, list(
else // normal stutter
word = R.Replace(word, "$1$2-$2$3$4")
- if(prob(3 * strength) && index != unstuttered_words.len - 1) // stammer / pause - don't pause at the end of sentences!
+ if(prob(3 * strength) && index != length(unstuttered_words) - 1) // stammer / pause - don't pause at the end of sentences!
word = R.Replace(word, "$0 ...")
split_phrase[index] = word
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index ab5aa898a848..e326ce9e45b3 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -191,7 +191,7 @@
for(var/zone in extremities)
if(!(human.get_limb(zone)))
extremities.Remove(zone)
- if(extremities.len < 4)
+ if(length(extremities) < 4)
return
//now crawl
mob.crawling = TRUE
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 1bdf075c938e..829379eb28b6 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -264,8 +264,8 @@
for(var/datum/squad/sq in GLOB.RoleAuthority.squads)
if(sq)
- sq.max_engineers = engi_slot_formula(GLOB.clients.len)
- sq.max_medics = medic_slot_formula(GLOB.clients.len)
+ sq.max_engineers = engi_slot_formula(length(GLOB.clients))
+ sq.max_medics = medic_slot_formula(length(GLOB.clients))
var/latejoin_larva_drop = SSticker.mode.latejoin_larva_drop
diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm
index b2ac69b002b0..6cf1ecb78a0d 100644
--- a/code/modules/nano/nanomanager.dm
+++ b/code/modules/nano/nanomanager.dm
@@ -97,7 +97,7 @@
* @return int The number of uis updated
*/
/datum/nanomanager/proc/update_user_uis(mob/user, src_object = null, ui_key = null)
- if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0)
+ if (isnull(user.open_uis) || !istype(user.open_uis, /list) || length(open_uis) == 0)
return 0 // has no open uis
var/update_count = 0
@@ -118,7 +118,7 @@
* @return int The number of uis closed
*/
/datum/nanomanager/proc/close_user_uis(mob/user, src_object = null, ui_key = null)
- if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0)
+ if (isnull(user.open_uis) || !istype(user.open_uis, /list) || length(open_uis) == 0)
//testing("nanomanager/close_user_uis mob [user.name] has no open uis")
return 0 // has no open uis
@@ -128,7 +128,7 @@
ui.close()
close_count++
- //testing("nanomanager/close_user_uis mob [user.name] closed [open_uis.len] of [close_count] uis")
+ //testing("nanomanager/close_user_uis mob [user.name] closed [length(open_uis_] of [close_count] uis")
return close_count
@@ -151,7 +151,7 @@
var/list/uis = open_uis[src_object_key][ui.ui_key]
uis.Add(ui)
processing_uis.Add(ui)
- //testing("nanomanager/ui_opened mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_uis [ui.user.open_uis.len]|uis [uis.len]|processing_uis [processing_uis.len]")
+ //testing("nanomanager/ui_opened mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_uis [length(ui.user.open_uis)]|uis [length(uis)]|processing_uis [length(processing_uis)]")
/**
* Remove a /nanoui ui from the list of open uis
@@ -173,7 +173,7 @@
var/list/uis = open_uis[src_object_key][ui.ui_key]
uis.Remove(ui)
- //testing("nanomanager/ui_closed mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_uis [ui.user.open_uis.len]|uis [uis.len]|processing_uis [processing_uis.len]")
+ //testing("nanomanager/ui_closed mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_uis [length(ui.user.open_uis)]|uis [length(uis)]|processing_uis [length(processing_uis)]")
return 1
@@ -204,7 +204,7 @@
//testing("nanomanager/user_transferred from mob [oldMob.name] to mob [newMob.name]")
if(QDELETED(oldMob) || QDELETED(newMob))
return FALSE //ERROR
- if (isnull(oldMob.open_uis) || !istype(oldMob.open_uis, /list) || open_uis.len == 0)
+ if (isnull(oldMob.open_uis) || !istype(oldMob.open_uis, /list) || length(open_uis) == 0)
//testing("nanomanager/user_transferred mob [oldMob.name] has no open uis")
return 0 // has no open uis
diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm
index 3e26b2b8a1da..7e259711a20e 100644
--- a/code/modules/nano/nanoui.dm
+++ b/code/modules/nano/nanoui.dm
@@ -386,7 +386,7 @@ nanoui is used to open and update nano browser uis
head_content += " "
var/template_data_json = "{}" // An empty JSON object
- if (templates.len > 0)
+ if (length(templates) > 0)
template_data_json = strip_improper(json_encode(templates))
var/url_parameters_json = json_encode(list("src" = "\ref[src]"))
diff --git a/code/modules/nightmare/nmtasks/mapscheduler.dm b/code/modules/nightmare/nmtasks/mapscheduler.dm
index b97193eadb21..1d7f7385d4d3 100644
--- a/code/modules/nightmare/nmtasks/mapscheduler.dm
+++ b/code/modules/nightmare/nmtasks/mapscheduler.dm
@@ -16,7 +16,7 @@
/datum/nmtask/scheduler/mapload/proc/register_tainted_bounds(datum/nmtask/task, list/bounds)
tainted_bounds.len++
- tainted_bounds[tainted_bounds.len] = bounds
+ tainted_bounds[length(tainted_bounds)] = bounds
/datum/nmtask/scheduler/mapload/proc/patch_lighting()
var/list/tainted = list()
diff --git a/code/modules/organs/limbs.dm b/code/modules/organs/limbs.dm
index b84df6bf688b..37ebac207c28 100644
--- a/code/modules/organs/limbs.dm
+++ b/code/modules/organs/limbs.dm
@@ -20,7 +20,7 @@
var/display_name
var/list/datum/wound/wounds = list()
- var/number_wounds = 0 // cache the number of wounds, which is NOT wounds.len!
+ var/number_wounds = 0 // cache the number of wounds, which is NOT length(wounds)!
var/tmp/perma_injury = 0
@@ -349,9 +349,9 @@
possible_points += parent
if(children)
possible_points += children
- if(forbidden_limbs.len)
+ if(length(forbidden_limbs))
possible_points -= forbidden_limbs
- if(possible_points.len)
+ if(length(possible_points))
//And pass the damage around, but not the chance to cut the limb off.
var/obj/limb/target = pick(possible_points)
if(brute_reduced_by == -1)
@@ -483,14 +483,14 @@ This function completely restores a damaged organ to perfect condition.
// first check whether we can widen an existing wound
var/datum/wound/W
- if(wounds.len > 0 && prob(max(50+(number_wounds-1)*10,90)))
+ if(length(wounds) > 0 && prob(max(50+(number_wounds-1)*10,90)))
if((type == CUT || type == BRUISE) && damage >= 5)
//we need to make sure that the wound we are going to worsen is compatible with the type of damage...
var/compatible_wounds[] = new
for(W in wounds)
if(W.can_worsen(type, damage)) compatible_wounds += W
- if(compatible_wounds.len)
+ if(length(compatible_wounds))
W = pick(compatible_wounds)
W.open_wound(damage)
if(type != BURN)
@@ -654,7 +654,7 @@ This function completely restores a damaged organ to perfect condition.
//configurable regen speed woo, no-regen hardcore or instaheal hugbox, choose your destiny
heal_amt = heal_amt * CONFIG_GET(number/organ_regeneration_multiplier)
// amount of healing is spread over all the wounds
- heal_amt = heal_amt / (wounds.len + 1)
+ heal_amt = heal_amt / (length(wounds) + 1)
// making it look prettier on scanners
heal_amt = round(heal_amt,0.1)
@@ -801,7 +801,7 @@ This function completely restores a damaged organ to perfect condition.
if(istype(E, /obj/limb/chest) || istype(E, /obj/limb/groin) || istype(E, /obj/limb/head))
continue
limbs_to_remove += E
- if(limbs_to_remove.len)
+ if(length(limbs_to_remove))
var/obj/limb/L = pick(limbs_to_remove)
var/limb_name = L.display_name
L.droplimb(0, delete_limb)
diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm
index 86f4199a2e5b..d9fee4195ad5 100644
--- a/code/modules/organs/wound.dm
+++ b/code/modules/organs/wound.dm
@@ -56,7 +56,7 @@
// returns 1 if there's a next stage, 0 otherwise
/datum/wound/proc/init_stage(initial_damage)
- current_stage = stages.len
+ current_stage = length(stages)
while(src.current_stage > 1 && src.damage_list[current_stage-1] <= initial_damage / src.amount)
src.current_stage--
@@ -108,7 +108,7 @@
amount -= healed_damage
src.damage -= healed_damage
- while(src.wound_damage() < damage_list[current_stage] && current_stage < src.desc_list.len)
+ while(src.wound_damage() < damage_list[current_stage] && current_stage < length(src.desc_list))
current_stage++
desc = desc_list[current_stage]
src.min_damage = damage_list[current_stage]
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index 119c846a93a2..42d42413958f 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -64,7 +64,7 @@
to_chat(user, SPAN_NOTICE("You can't put [P] in [src]!"))
/obj/structure/filingcabinet/attack_hand(mob/user as mob)
- if(contents.len <= 0)
+ if(length(contents) <= 0)
to_chat(user, SPAN_NOTICE("\The [src] is empty."))
return
diff --git a/code/modules/paperwork/folders.dm b/code/modules/paperwork/folders.dm
index ad9da68a591d..0250b9c7d41e 100644
--- a/code/modules/paperwork/folders.dm
+++ b/code/modules/paperwork/folders.dm
@@ -41,7 +41,7 @@
/obj/item/folder/update_icon()
overlays.Cut()
- if(contents.len)
+ if(length(contents))
overlays += "folder_paper"
return
diff --git a/code/modules/paperwork/notepad.dm b/code/modules/paperwork/notepad.dm
index 3eb83b6a67b0..04a3d765ea1d 100644
--- a/code/modules/paperwork/notepad.dm
+++ b/code/modules/paperwork/notepad.dm
@@ -31,7 +31,7 @@
if(HAS_TRAIT(attack_item, TRAIT_TOOL_PEN) || istype(attack_item, /obj/item/toy/crayon))
close_browser(usr, name) //Closes the dialog
- if(page < contents.len)
+ if(page < length(contents))
page = 1
var/obj/item/paper/paper = contents[page]
paper.attackby(attack_item, user)
@@ -93,8 +93,8 @@
page--
playsound(loc, "pageturn", 15, 1)
if(href_list["remove"])
- if(contents.len < page)
- page = contents.len
+ if(length(contents) < page)
+ page = length(contents)
var/obj/item/ripped_out_page = contents[page]
usr.put_in_hands(ripped_out_page)
to_chat(usr, SPAN_NOTICE("You rip out [ripped_out_page] from [src]."))
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 27b1fa885133..e1610fb3401a 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -687,7 +687,7 @@
var/datum/reagent/R = GLOB.chemical_reagents_list["[I]"]
var/U = G.required_reagents[I]
txt += " - [U] [R.name] \n"
- if(G.required_catalysts && G.required_catalysts.len)
+ if(LAZYLEN(G.required_catalysts))
txt += " \nWhile using the following catalysts: \n \n"
for(var/I in G.required_catalysts)
var/datum/reagent/R = GLOB.chemical_reagents_list["[I]"]
@@ -835,17 +835,16 @@
else
var/U = C.required_reagents[I]
info += " - [U] [R.name] \n"
- if(C.required_catalysts)
- if(C.required_catalysts.len)
- info += " Reaction would require the following catalysts: \n"
- for(var/I in C.required_catalysts)
- var/datum/reagent/R = GLOB.chemical_reagents_list["[I]"]
- if(R.chemclass >= CHEM_CLASS_SPECIAL && !GLOB.chemical_data.chemical_identified_list[R.id] && !info_only)
- info += " - Unknown emission spectrum \n"
- completed = FALSE
- else
- var/U = C.required_catalysts[I]
- info += " - [U] [R.name] \n"
+ if(LAZYLEN(C.required_catalysts))
+ info += " Reaction would require the following catalysts: \n"
+ for(var/I in C.required_catalysts)
+ var/datum/reagent/R = GLOB.chemical_reagents_list["[I]"]
+ if(R.chemclass >= CHEM_CLASS_SPECIAL && !GLOB.chemical_data.chemical_identified_list[R.id] && !info_only)
+ info += " - Unknown emission spectrum \n"
+ completed = FALSE
+ else
+ var/U = C.required_catalysts[I]
+ info += " - [U] [R.name] \n"
else if(GLOB.chemical_gen_classes_list["C1"].Find(S.id))
info += " - [S.name] \n"
else
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index 8cbb7a266ffe..78ba3c8a7e72 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -44,8 +44,8 @@
else
if(HAS_TRAIT(W, TRAIT_TOOL_PEN) || istype(W, /obj/item/toy/crayon))
close_browser(usr, name) //Closes the dialog
- if(page < contents.len)
- page = contents.len
+ if(page < length(contents))
+ page = length(contents)
P = contents[page]
P.attackby(W, user)
@@ -148,8 +148,8 @@
page--
playsound(src.loc, "pageturn", 15, 1)
if(href_list["remove"])
- if(contents.len < page)
- page = contents.len
+ if(length(contents) < page)
+ page = length(contents)
var/obj/item/W = contents[page]
usr.put_in_hands(W)
to_chat(usr, SPAN_NOTICE("You remove the [W.name] from the bundle."))
@@ -198,7 +198,7 @@
qdel(src)
/obj/item/paper_bundle/update_icon()
- if(contents.len)
+ if(length(contents))
var/obj/item/I = contents[1]
icon_state = I.icon_state
overlays = I.overlays
diff --git a/code/modules/paperwork/paperbin.dm b/code/modules/paperwork/paperbin.dm
index 6ee3a12faffd..4c74cad468e6 100644
--- a/code/modules/paperwork/paperbin.dm
+++ b/code/modules/paperwork/paperbin.dm
@@ -28,7 +28,7 @@
/obj/item/paper_bin/attack_hand(mob/user)
var/response = ""
- if(!papers.len > 0)
+ if(!length(papers) > 0)
response = alert(user, "What kind of paper?", "Paper type request", "Regular", sec_paper_type, "Cancel")
if (response != "Regular" && response != "Carbon-Copy" && response != "Company Document" && response != "USCM Document")
add_fingerprint(user)
@@ -39,8 +39,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 (response == "Regular")
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 0d5eca1dd9a1..df421e8424cb 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -199,7 +199,7 @@
//Iterates through stamps and puts a matching gray overlay onto the copy
var/image/img //
- for (var/j = 1, j <= original.ico.len, j++)
+ for (var/j = 1, j <= length(original.ico), j++)
if (findtext(original.ico[j], "cap") || findtext(original.ico[j], "cent"))
img = image('icons/obj/items/paper.dmi', "paper_stamp-circle")
else if (findtext(original.ico[j], "deny"))
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 068344b905f2..6c1c234eaadd 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -457,13 +457,13 @@ GLOBAL_LIST_INIT(apc_wire_descriptions, list(
icon_state = "apcewires"
if(!(update_state & UPSTATE_ALLGOOD))
- if(overlays.len)
+ if(length(overlays))
overlays = 0
return
if(update & 2)
- if(overlays.len)
+ if(length(overlays))
overlays = 0
if(!(stat & (BROKEN|MAINT)) && update_state & UPSTATE_ALLGOOD)
diff --git a/code/modules/power/power_monitor.dm b/code/modules/power/power_monitor.dm
index 9a95047db6cc..74633cf368a5 100644
--- a/code/modules/power/power_monitor.dm
+++ b/code/modules/power/power_monitor.dm
@@ -57,7 +57,7 @@
t += ""
- if(L.len > 0)
+ if(length(L) > 0)
var/total_demand = 0
t += "Area Eqp./Lgt./Env. Load Cell "
diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm
index 0fe62154966b..5d09a06fc633 100644
--- a/code/modules/power/powernet.dm
+++ b/code/modules/power/powernet.dm
@@ -26,7 +26,7 @@
var/numapc = 0
- if(nodes && nodes.len) // Added to fix a bad list bug -- TLE
+ if(LAZYLEN(nodes)) // Added to fix a bad list bug -- TLE
for(var/obj/structure/machinery/power/terminal/term in nodes)
if( istype( term.master, /obj/structure/machinery/power/apc ) )
numapc++
@@ -45,7 +45,7 @@
perapc = avail/numapc + perapc_excess
if( netexcess > 100) // if there was excess power last cycle
- if(nodes && nodes.len)
+ if(LAZYLEN(nodes))
for(var/obj/structure/machinery/power/smes/S in nodes) // find the SMESes in the network
if(S.powernet == src)
S.restore() // and restore some of the power that was used
diff --git a/code/modules/projectiles/ammo_boxes/ammo_boxes.dm b/code/modules/projectiles/ammo_boxes/ammo_boxes.dm
index 7f6919b94f3a..9676b71f52f1 100644
--- a/code/modules/projectiles/ammo_boxes/ammo_boxes.dm
+++ b/code/modules/projectiles/ammo_boxes/ammo_boxes.dm
@@ -126,10 +126,10 @@
if(src.loc != user) //feeling box weight in a distance is unnatural and bad
return
if(!handfuls)
- if(contents.len < (num_of_magazines/3))
+ if(length(contents) < (num_of_magazines/3))
. += SPAN_INFO("It feels almost empty.")
return
- if(contents.len < ((num_of_magazines*2)/3))
+ if(length(contents) < ((num_of_magazines*2)/3))
. += SPAN_INFO("It feels about half full.")
return
. += SPAN_INFO("It feels almost full.")
diff --git a/code/modules/projectiles/ammo_boxes/box_structures.dm b/code/modules/projectiles/ammo_boxes/box_structures.dm
index 8ae178edf586..da0b700068b9 100644
--- a/code/modules/projectiles/ammo_boxes/box_structures.dm
+++ b/code/modules/projectiles/ammo_boxes/box_structures.dm
@@ -32,13 +32,13 @@
if(!item_box.handfuls)
if(item_box.overlay_ammo_type)
overlays += image(text_markings_icon, icon_state = "base_type[item_box.overlay_ammo_type]") //adding base color stripes
- if(item_box.contents.len == item_box.num_of_magazines)
+ if(length(item_box.contents) == item_box.num_of_magazines)
overlays += image(magazines_icon, icon_state = "magaz[item_box.overlay_content]")
- else if(item_box.contents.len > (item_box.num_of_magazines/2))
+ else if(length(item_box.contents) > (item_box.num_of_magazines/2))
overlays += image(magazines_icon, icon_state = "magaz[item_box.overlay_content]_3")
- else if(item_box.contents.len > (item_box.num_of_magazines/4))
+ else if(length(item_box.contents) > (item_box.num_of_magazines/4))
overlays += image(magazines_icon, icon_state = "magaz[item_box.overlay_content]_2")
- else if(item_box.contents.len > 0)
+ else if(length(item_box.contents) > 0)
overlays += image(magazines_icon, icon_state = "magaz[item_box.overlay_content]_1")
else
var/obj/item/ammo_magazine/AM = locate(/obj/item/ammo_magazine) in item_box.contents
@@ -103,7 +103,7 @@
if(AM)
. += SPAN_INFO("It has roughly [floor(AM.current_rounds/5)] handfuls remaining.")
else
- . += SPAN_INFO("It has [item_box.contents.len] magazines out of [item_box.num_of_magazines].")
+ . += SPAN_INFO("It has [length(item_box.contents)] magazines out of [item_box.num_of_magazines].")
if(burning)
. += SPAN_DANGER("It's on fire and might explode!")
@@ -111,7 +111,7 @@
if(burning)
to_chat(user, SPAN_DANGER("It's on fire and might explode!"))
return
- if(item_box.contents.len)
+ if(length(item_box.contents))
if(!item_box.handfuls)
var/obj/item/ammo_magazine/AM = pick(item_box.contents)
item_box.contents -= AM
@@ -133,7 +133,7 @@
if(istypestrict(W,item_box.magazine_type))
if(istype(W, /obj/item/storage/box/m94))
var/obj/item/storage/box/m94/flare_pack = W
- if(flare_pack.contents.len < flare_pack.max_storage_space)
+ if(length(flare_pack.contents) < flare_pack.max_storage_space)
to_chat(user, SPAN_WARNING("[W] is not full."))
return
var/flare_type
@@ -158,7 +158,7 @@
if(cell.charge != cell.maxcharge)
to_chat(user, SPAN_WARNING("[W] needs to be fully charged before it can be stored in [src]."))
return
- if(item_box.contents.len < item_box.num_of_magazines)
+ if(length(item_box.contents) < item_box.num_of_magazines)
user.drop_inv_item_to_loc(W, src)
item_box.contents += W
to_chat(user, SPAN_NOTICE("You put \a [W] into [src]"))
diff --git a/code/modules/projectiles/ammo_boxes/misc_boxes.dm b/code/modules/projectiles/ammo_boxes/misc_boxes.dm
index 434239fe25cd..0634c76270da 100644
--- a/code/modules/projectiles/ammo_boxes/misc_boxes.dm
+++ b/code/modules/projectiles/ammo_boxes/misc_boxes.dm
@@ -96,7 +96,7 @@
/obj/item/ammo_box/magazine/misc/flares/get_severity()
var/flare_amount = 0
for(var/obj/item/storage/box/m94/flare_box in contents)
- flare_amount += flare_box.contents.len
+ flare_amount += length(flare_box.contents)
flare_amount = floor(flare_amount / 8) //10 packs, 8 flares each, maximum total of 10 flares we can throw out
return flare_amount
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index db7a163f7536..f7ffbf2875e2 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -471,7 +471,7 @@
/obj/item/weapon/gun/proc/handle_starting_attachment()
- if(starting_attachment_types && starting_attachment_types.len)
+ if(LAZYLEN(starting_attachment_types))
for(var/path in starting_attachment_types)
var/obj/item/attachable/A = new path(src)
A.Attach(src)
diff --git a/code/modules/projectiles/gun_attachables.dm b/code/modules/projectiles/gun_attachables.dm
index 92eabd62daa2..7d015e4bac8d 100644
--- a/code/modules/projectiles/gun_attachables.dm
+++ b/code/modules/projectiles/gun_attachables.dm
@@ -2973,7 +2973,7 @@ Defined in conflicts.dm of the #defines folder.
current_rounds += transfered_rounds
FT.current_rounds -= transfered_rounds
- var/amount_of_reagents = FT.reagents.reagent_list.len
+ var/amount_of_reagents = length(FT.reagents.reagent_list)
var/amount_removed_per_reagent = transfered_rounds / amount_of_reagents
for(var/datum/reagent/R in FT.reagents.reagent_list)
R.volume -= amount_removed_per_reagent
diff --git a/code/modules/projectiles/gun_helpers.dm b/code/modules/projectiles/gun_helpers.dm
index 9fe8c1ee46be..efc7abf3aa20 100644
--- a/code/modules/projectiles/gun_helpers.dm
+++ b/code/modules/projectiles/gun_helpers.dm
@@ -815,11 +815,11 @@ DEFINES in setup.dm, referenced here.
if(attachment && (attachment.flags_attach_features & ATTACH_ACTIVATION) )
usable_attachments += attachment
- if(!usable_attachments.len) //No usable attachments.
+ if(!length(usable_attachments)) //No usable attachments.
to_chat(usr, SPAN_WARNING("[src] does not have any usable attachments!"))
return
- if(usable_attachments.len == 1) //Activates the only attachment if there is only one.
+ if(length(usable_attachments) == 1) //Activates the only attachment if there is only one.
chosen_attachment = usable_attachments[1]
else
chosen_attachment = tgui_input_list(usr, "Which attachment to activate?", "Activate attachment", usable_attachments)
diff --git a/code/modules/projectiles/guns/flamer/flamer.dm b/code/modules/projectiles/guns/flamer/flamer.dm
index 28bcc76c42df..c54d62e148b7 100644
--- a/code/modules/projectiles/guns/flamer/flamer.dm
+++ b/code/modules/projectiles/guns/flamer/flamer.dm
@@ -203,7 +203,7 @@
/obj/item/weapon/gun/flamer/proc/unleash_flame(atom/target, mob/living/user)
set waitfor = 0
last_fired = world.time
- if(!current_mag || !current_mag.reagents || !current_mag.reagents.reagent_list.len)
+ if(!current_mag || !current_mag.reagents || !length(current_mag.reagents.reagent_list))
return
var/datum/reagent/R = current_mag.reagents.reagent_list[1]
@@ -234,7 +234,7 @@
/obj/item/weapon/gun/flamer/proc/unleash_smoke(atom/target, mob/living/user)
last_fired = world.time
- if(!current_mag || !current_mag.reagents || !current_mag.reagents.reagent_list.len)
+ if(!current_mag || !current_mag.reagents || !length(current_mag.reagents.reagent_list))
return
var/source_turf = get_turf(user)
@@ -251,7 +251,7 @@
var/turf/turfs[] = get_line(user, target, FALSE)
var/turf/first_turf = turfs[1]
var/turf/second_turf = turfs[2]
- var/ammount_required = (min(turfs.len, smoke_range) * use_multiplier) // the ammount of units that this click requires
+ var/ammount_required = (min(length(turfs), smoke_range) * use_multiplier) // the ammount of units that this click requires
for(var/turf/turf in turfs)
if(chemical.volume < ammount_required)
@@ -294,7 +294,7 @@
/obj/item/weapon/gun/flamer/proc/unleash_foam(atom/target, mob/living/user)
last_fired = world.time
- if(!current_mag || !current_mag.reagents || !current_mag.reagents.reagent_list.len)
+ if(!current_mag || !current_mag.reagents || !length(current_mag.reagents.reagent_list))
return
var/source_turf = get_turf(user)
@@ -305,7 +305,7 @@
var/turf/turfs[] = get_line(user, target, FALSE)
var/turf/first_turf = turfs[1]
- var/ammount_required = (min(turfs.len, foam_range) * use_multiplier) // the ammount of units that this click requires
+ var/ammount_required = (min(length(turfs), foam_range) * use_multiplier) // the ammount of units that this click requires
for(var/turf/turf in turfs)
if(chemical.volume < ammount_required)
diff --git a/code/modules/projectiles/guns/shotguns.dm b/code/modules/projectiles/guns/shotguns.dm
index 5acad2255356..b1b3bb3c2ab4 100644
--- a/code/modules/projectiles/guns/shotguns.dm
+++ b/code/modules/projectiles/guns/shotguns.dm
@@ -1020,7 +1020,7 @@ can cause issues with ammo types getting mixed up during the burst.
throw_turfs.Remove(T)
continue
var/list/turf/path = get_line(get_step_towards(src, T), T) //Same path throw code will calculate from.
- if(!path.len)
+ if(!length(path))
throw_turfs.Remove(T)
continue
var/prev_turf = start_turf
diff --git a/code/modules/projectiles/guns/smartgun.dm b/code/modules/projectiles/guns/smartgun.dm
index a2f2a8a003a2..e5c9fff3a126 100644
--- a/code/modules/projectiles/guns/smartgun.dm
+++ b/code/modules/projectiles/guns/smartgun.dm
@@ -501,7 +501,7 @@
path = get_line(user, M)
- if(path.len)
+ if(length(path))
var/blocked = FALSE
for(T in path)
if(T.density || T.opacity)
@@ -524,9 +524,9 @@
else
conscious_targets += M
- if(conscious_targets.len)
+ if(length(conscious_targets))
. = pick(conscious_targets)
- else if(unconscious_targets.len)
+ else if(length(unconscious_targets))
. = pick(unconscious_targets)
/obj/item/weapon/gun/smartgun/proc/process_shot(mob/living/user, warned)
diff --git a/code/modules/projectiles/guns/specialist/sniper.dm b/code/modules/projectiles/guns/specialist/sniper.dm
index a6bb400ba5c9..b40477a8a460 100644
--- a/code/modules/projectiles/guns/specialist/sniper.dm
+++ b/code/modules/projectiles/guns/specialist/sniper.dm
@@ -222,7 +222,7 @@
/datum/action/item_action/specialist/aimed_shot/proc/check_shot_is_blocked(mob/firer, mob/target, obj/projectile/P)
var/list/turf/path = get_line(firer, target, include_start_atom = FALSE)
- if(!path.len || get_dist(firer, target) > P.ammo.max_range)
+ if(!length(path) || get_dist(firer, target) > P.ammo.max_range)
return TRUE
var/blocked = FALSE
diff --git a/code/modules/projectiles/magazines/flamer.dm b/code/modules/projectiles/magazines/flamer.dm
index 8a453beb90b4..24afe13c6297 100644
--- a/code/modules/projectiles/magazines/flamer.dm
+++ b/code/modules/projectiles/magazines/flamer.dm
@@ -78,7 +78,7 @@
if(!istype(target, /obj/structure/reagent_dispensers/fueltank) && !istype(target, /obj/item/tool/weldpack) && !istype(target, /obj/item/storage/backpack/marine/engineerpack))
return ..()
- if(!target.reagents || target.reagents.reagent_list.len < 1)
+ if(!target.reagents || length(target.reagents.reagent_list) < 1)
to_chat(user, SPAN_WARNING("[target] is empty!"))
return
@@ -133,7 +133,7 @@
/obj/item/ammo_magazine/flamer_tank/get_examine_text(mob/user)
. = ..()
. += SPAN_NOTICE("It contains:")
- if(reagents && reagents.reagent_list.len)
+ if(reagents && length(reagents.reagent_list))
for(var/datum/reagent/R in reagents.reagent_list)
. += SPAN_NOTICE(" [R.volume] units of [R.name].")
else
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index c1a43bda0ae8..0e335aa81da3 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -298,7 +298,7 @@
var/pixel_x_source = vis_source.x * world.icon_size + vis_source_pixel_x
var/pixel_y_source = vis_source.y * world.icon_size + vis_source_pixel_y
- var/turf/vis_target = path[path.len]
+ var/turf/vis_target = path[length(path)]
var/pixel_x_target = vis_target.x * world.icon_size + p_x
var/pixel_y_target = vis_target.y * world.icon_size + p_y
@@ -311,7 +311,7 @@
//Determine apparent position along visual path, then lerp between start and end positions
- var/vis_length = vis_travelled + path.len
+ var/vis_length = vis_travelled + length(path)
var/vis_current = vis_travelled + speed * (time_carry * 0.1) //speed * (time_carry * 0.1) for remainder time movement, visually "catching up" to where it should be
var/vis_interpolant = vis_current / vis_length
@@ -1130,7 +1130,7 @@
handle_blood_splatter(get_dir(P.starting, loc))
apply_damage(damage_result,P.ammo.damage_type, P.def_zone) //Deal the damage.
- if(xeno_shields.len)
+ if(length(xeno_shields))
P.play_shielded_hit_effect(src)
else
P.play_hit_effect(src)
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index 710cca821385..de365de8e2a6 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -39,13 +39,13 @@
var/total_transfered = 0
var/current_list_element = 1
- current_list_element = rand(1,reagent_list.len)
+ current_list_element = rand(1,length(reagent_list))
while(total_transfered != amount)
if(total_transfered >= amount) break
- if(total_volume <= 0 || !reagent_list.len) break
+ if(total_volume <= 0 || !length(reagent_list)) break
- if(current_list_element > reagent_list.len) current_list_element = 1
+ if(current_list_element > length(reagent_list)) current_list_element = 1
var/datum/reagent/current_reagent = reagent_list[current_list_element]
remove_reagent(current_reagent.id, 1)
@@ -62,17 +62,17 @@
var/total_transfered = 0
var/current_list_element = 1
- current_list_element = rand(1, reagent_list.len)
+ current_list_element = rand(1, length(reagent_list))
while(total_transfered != amount)
if(total_transfered >= amount) break
- if(total_volume <= 0 || !reagent_list.len) break
+ if(total_volume <= 0 || !length(reagent_list)) break
- if(current_list_element > reagent_list.len) current_list_element = 1
+ if(current_list_element > length(reagent_list)) current_list_element = 1
var/datum/reagent/current_reagent = reagent_list[current_list_element]
if(current_reagent.id == reagent_to_ignore)
- if(reagent_list.len == 1) break //if the reagent to be avoided is the only one in the list, we're done here.
+ if(length(reagent_list) == 1) break //if the reagent to be avoided is the only one in the list, we're done here.
if(current_list_element == 1)
current_reagent = reagent_list[current_list_element + 1] //if the selected reagent was number 1, we don't want it trying to draw id.0, so we add 1
else
@@ -252,11 +252,11 @@
var/datum/chemical_reaction/C = reaction
- var/total_required_reagents = C.required_reagents.len
+ var/total_required_reagents = length(C.required_reagents)
var/total_matching_reagents = 0
var/total_required_catalysts = 0
if(C.required_catalysts)
- total_required_catalysts = C.required_catalysts.len
+ total_required_catalysts = length(C.required_catalysts)
var/total_matching_catalysts= 0
var/matching_container = 0
var/matching_other = 0
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 3e4fb8f300a3..7faf2f85a7f7 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -346,7 +346,7 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
R = new P.type()
break
i++
- if(i > properties.len)
+ if(i > length(properties))
return FALSE
R.level = new_level
R.holder = src
diff --git a/code/modules/reagents/chemistry_machinery/autodispenser.dm b/code/modules/reagents/chemistry_machinery/autodispenser.dm
index eed96564da71..05d7988b9bf3 100644
--- a/code/modules/reagents/chemistry_machinery/autodispenser.dm
+++ b/code/modules/reagents/chemistry_machinery/autodispenser.dm
@@ -164,7 +164,7 @@
data["output_container"] = output_container.name
data["output_totalvol"] = output_container.reagents.total_volume
data["output_maxvol"] = output_container.reagents.maximum_volume
- if(output_container.reagents.reagent_list.len)
+ if(length(output_container.reagents.reagent_list))
data["output_color"] = mix_color_from_reagents(output_container.reagents.reagent_list)
else
data["output_color"] = null
@@ -182,12 +182,12 @@
var/list/memorylist = program_amount[PROGRAM_MEMORY]
var/list/boxlist = program_amount[PROGRAM_BOX]
- if(memorylist.len)
+ if(length(memorylist))
data["memory"] = tgui_friendly_program_list[PROGRAM_MEMORY]
else
data["memory"] = "Empty"
- if(boxlist.len)
+ if(length(boxlist))
data["box"] = tgui_friendly_program_list[PROGRAM_BOX]
else
data["box"] = "Empty"
@@ -308,7 +308,7 @@
update_icon()
return
- for(var/i=stage,i<=programs[1].len + programs[2].len && i != 0,i++)
+ for(var/i=stage,i<=length(programs[1]) + length(programs[2]) && i != 0,i++)
if(status < AUTODISPENSER_IDLE) //We're waiting for new chems to be stored
status++
if(status == AUTODISPENSER_IDLE)
@@ -376,7 +376,7 @@
for(var/obj/item/reagent_container/glass/beaker/vial/V in input_container.contents)
if(!V.reagents.get_reagents()) //Ignore empty vials
continue
- if(V.reagents.reagent_list.len > 1) //We don't work with impure vials
+ if(length(V.reagents.reagent_list) > 1) //We don't work with impure vials
continue
var/datum/reagent/R = V.reagents.reagent_list[1]
if(program_amount[save_to]["[R.name]"])
@@ -395,11 +395,11 @@
use_power(1500)
/obj/structure/machinery/autodispenser/proc/run_program()
- if(programs[PROGRAM_MEMORY].len)
+ if(length(programs[PROGRAM_MEMORY]))
program = PROGRAM_MEMORY
else
program = PROGRAM_BOX
- if(programs[program].len && (outputmode == OUTPUT_TO_CONTAINER && output_container) || outputmode != OUTPUT_TO_CONTAINER)
+ if(length(programs[program]) && (outputmode == OUTPUT_TO_CONTAINER && output_container) || outputmode != OUTPUT_TO_CONTAINER)
status = AUTODISPENSER_RUNNING
update_icon()
else
@@ -407,8 +407,8 @@
/obj/structure/machinery/autodispenser/proc/next_stage()
stage++
- if(stage > programs[program].len) //End of program
- if(programs[PROGRAM_MEMORY].len && programs[PROGRAM_BOX].len)
+ if(stage > length(programs[program])) //End of program
+ if(length(programs[PROGRAM_MEMORY]) && length(programs[PROGRAM_BOX]))
if(program == PROGRAM_BOX)
cycle++
program--
diff --git a/code/modules/reagents/chemistry_machinery/centrifuge.dm b/code/modules/reagents/chemistry_machinery/centrifuge.dm
index 706f33e38096..c679aa1c32b9 100644
--- a/code/modules/reagents/chemistry_machinery/centrifuge.dm
+++ b/code/modules/reagents/chemistry_machinery/centrifuge.dm
@@ -176,17 +176,17 @@
cleanup()
return FALSE
- if(status == 0 && input_source == INPUT_TURING && connected_turing && connected_turing.outputmode == 2 && (connected_turing.programs[1].len || connected_turing.programs[2].len))
+ if(status == 0 && input_source == INPUT_TURING && connected_turing && connected_turing.outputmode == 2 && (length(connected_turing.programs[1]) || length(connected_turing.programs[2])))
return TRUE
return FALSE
/obj/structure/machinery/centrifuge/proc/centrifuge()
- if(!output_container.contents.len) return //Is output empty?
+ if(!length(output_container.contents)) return //Is output empty?
var/obj/item/reagent_container/source_container = input_container
if(input_source == INPUT_TURING)
source_container = connected_turing
- var/initial_reagents = source_container.reagents.reagent_list.len
+ var/initial_reagents = length(source_container.reagents.reagent_list)
var/list/vials = list()
for(var/obj/item/reagent_container/V in output_container.contents)
vials += V
@@ -203,7 +203,7 @@
var/obj/item/reagent_container/hypospray/autoinjector/A = V
if(autolabel)
A.name = "autoinjector ([autolabel])"
- else if(!(A.reagents.reagent_list.len))
+ else if(!length(A.reagents.reagent_list))
A.name = "autoinjector"
else
A.name = "autoinjector (" + A.reagents.reagent_list[1].name + ")"
@@ -213,7 +213,7 @@
else
if(autolabel)
V.name = "vial ([autolabel])"
- else if(!(V.reagents.reagent_list.len) || (V.reagents.reagent_list.len > 1))
+ else if(!length(V.reagents.reagent_list) || (length(V.reagents.reagent_list) > 1))
V.name = "vial"
else
V.name = "vial (" + V.reagents.reagent_list[1].name + ")"
diff --git a/code/modules/reagents/chemistry_machinery/chem_dispenser.dm b/code/modules/reagents/chemistry_machinery/chem_dispenser.dm
index e897d106528e..f0a3faeb75ce 100644
--- a/code/modules/reagents/chemistry_machinery/chem_dispenser.dm
+++ b/code/modules/reagents/chemistry_machinery/chem_dispenser.dm
@@ -140,7 +140,7 @@
var/list/beakerContents = list()
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/current_reagent in beaker.reagents.reagent_list)
beakerContents += list(list("name" = current_reagent.name, "volume" = current_reagent.volume)) // list in a list because Byond merges the first list...
beakerCurrentVolume += current_reagent.volume
diff --git a/code/modules/reagents/chemistry_machinery/chem_master.dm b/code/modules/reagents/chemistry_machinery/chem_master.dm
index 5b145f75940f..6f6d45b6712e 100644
--- a/code/modules/reagents/chemistry_machinery/chem_master.dm
+++ b/code/modules/reagents/chemistry_machinery/chem_master.dm
@@ -248,7 +248,7 @@
P.icon_state = "pill"+pillsprite
reagents.trans_to(P,amount_per_pill)
if(loaded_pill_bottle)
- if(loaded_pill_bottle.contents.len < loaded_pill_bottle.max_storage_space)
+ if(length(loaded_pill_bottle.contents) < loaded_pill_bottle.max_storage_space)
loaded_pill_bottle.handle_item_insertion(P, TRUE)
updateUsrDialog()
@@ -354,7 +354,7 @@
dat = "Please insert beaker. "
if(pill_maker)
if(loaded_pill_bottle)
- dat += "Eject Pill Bottle \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.max_storage_space]\] "
+ dat += "Eject Pill Bottle \[[length(loaded_pill_bottle.contents)]/[loaded_pill_bottle.max_storage_space]\] "
else
dat += "No pill bottle inserted. "
dat += "Close "
@@ -362,10 +362,10 @@
dat += "Eject beaker and Clear Buffer "
if(pill_maker)
if(loaded_pill_bottle)
- dat += "Eject [loaded_pill_bottle] \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.max_storage_space]\] "
- dat += "Add label to [loaded_pill_bottle] \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.max_storage_space]\] "
- dat += "Set color to [loaded_pill_bottle] \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.max_storage_space]\] "
- dat += "Transfer [loaded_pill_bottle] \[[loaded_pill_bottle.contents.len]/[loaded_pill_bottle.max_storage_space]\] to the smartfridge "
+ dat += "Eject [loaded_pill_bottle] \[[length(loaded_pill_bottle.contents)]/[loaded_pill_bottle.max_storage_space]\] "
+ dat += "Add label to [loaded_pill_bottle] \[[length(loaded_pill_bottle.contents)]/[loaded_pill_bottle.max_storage_space]\] "
+ dat += "Set color to [loaded_pill_bottle] \[[length(loaded_pill_bottle.contents)]/[loaded_pill_bottle.max_storage_space]\] "
+ dat += "Transfer [loaded_pill_bottle] \[[length(loaded_pill_bottle.contents)]/[loaded_pill_bottle.max_storage_space]\] to the smartfridge "
else
dat += "No pill bottle inserted. "
if(!connected && pill_maker)
diff --git a/code/modules/reagents/chemistry_machinery/chem_simulator.dm b/code/modules/reagents/chemistry_machinery/chem_simulator.dm
index fd14698619ad..650b6cefbae9 100644
--- a/code/modules/reagents/chemistry_machinery/chem_simulator.dm
+++ b/code/modules/reagents/chemistry_machinery/chem_simulator.dm
@@ -679,7 +679,7 @@
R.make_alike(assoc_R)
if(mode != MODE_CREATE)
- if(R.required_reagents.len > 2 && !recipe_targets[recipe_target]) //we only replace if the recipe isn't small and the target is not set TRUE to being elevated
+ if(length(R.required_reagents) > 2 && !recipe_targets[recipe_target]) //we only replace if the recipe isn't small and the target is not set TRUE to being elevated
LAZYREMOVE(R.required_reagents, pick(R.required_reagents))
R.add_component(recipe_target)
diff --git a/code/modules/reagents/chemistry_machinery/pandemic.dm b/code/modules/reagents/chemistry_machinery/pandemic.dm
index f44da3af9613..645f1bba807a 100644
--- a/code/modules/reagents/chemistry_machinery/pandemic.dm
+++ b/code/modules/reagents/chemistry_machinery/pandemic.dm
@@ -75,7 +75,7 @@
Blood = L
break
var/list/res = Blood.data_properties["resistances"]
- spawn(res.len*200)
+ spawn(length(res)*200)
wait = null
else
temphtml = "The replicator is not ready yet."
@@ -160,7 +160,7 @@
if(B)
Blood = B
break
- if(!beaker.reagents.total_volume||!beaker.reagents.reagent_list.len)
+ if(!beaker.reagents.total_volume||!length(beaker.reagents.reagent_list))
dat += "The beaker is empty "
else if(!Blood)
dat += "No blood sample found in beaker"
@@ -172,7 +172,7 @@
if(Blood.data_properties["viruses"])
var/list/vir = Blood.data_properties["viruses"]
- if(vir.len)
+ if(length(vir))
for(var/datum/disease/D in Blood.data_properties["viruses"])
if(!D.hidden[PANDEMIC])
@@ -209,7 +209,7 @@
dat += "Contains antibodies to: "
if(Blood.data_properties["resistances"])
var/list/res = Blood.data_properties["resistances"]
- if(res.len)
+ if(length(res))
dat += ""
for(var/type in Blood.data_properties["resistances"])
var/disease_name = "Unknown"
@@ -230,7 +230,7 @@
dat += "nothing "
else
dat += "nothing "
- dat += "Eject beaker [((beaker.reagents.total_volume && beaker.reagents.reagent_list.len) ? "-- Empty beaker ":"")] "
+ dat += "Eject beaker [((beaker.reagents.total_volume && length(beaker.reagents.reagent_list)) ? "-- Empty beaker ":"")] "
dat += "Close "
show_browser(user, "[name] [dat]", name, "pandemic")
diff --git a/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm b/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm
index 51db188826b8..967177bda978 100644
--- a/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm
+++ b/code/modules/reagents/chemistry_machinery/reagent_analyzer.dm
@@ -33,7 +33,7 @@
to_chat(user, SPAN_WARNING("Someone else removed the sample. Make up your mind!"))
return
processing = TRUE
- if(sample.reagents.total_volume < 30 || sample.reagents.reagent_list.len > 1)
+ if(sample.reagents.total_volume < 30 || length(sample.reagents.reagent_list) > 1)
icon_state = "reagent_analyzer_error"
reagent_process()
else
@@ -54,12 +54,12 @@
addtimer(CALLBACK(src, TYPE_PROC_REF(/obj/structure/machinery/reagent_analyzer, finish_reagent_process)), 4 SECONDS)
/obj/structure/machinery/reagent_analyzer/proc/finish_reagent_process()
- if(!sample || !sample.reagents || sample.reagents.total_volume < 30 || sample.reagents.reagent_list.len > 1)
+ if(!sample || !sample.reagents || sample.reagents.total_volume < 30 || length(sample.reagents.reagent_list) > 1)
if(!sample || !sample.reagents)
print_report(0, "SAMPLE EMPTY.")
else if(sample.reagents.total_volume < 30)
print_report(0, "SAMPLE SIZE INSUFFICIENT; \nA sample size of 30 units is required for analysis. ")
- else if(sample.reagents.reagent_list.len > 1)
+ else if(length(sample.reagents.reagent_list) > 1)
print_report(0, "SAMPLE CONTAMINATED; \nA pure sample is required for analysis. ")
else
print_report(0, "UNKNOWN.")
diff --git a/code/modules/reagents/chemistry_machinery/reagent_grinder.dm b/code/modules/reagents/chemistry_machinery/reagent_grinder.dm
index 69e6567393b9..99b19a75f527 100644
--- a/code/modules/reagents/chemistry_machinery/reagent_grinder.dm
+++ b/code/modules/reagents/chemistry_machinery/reagent_grinder.dm
@@ -90,17 +90,17 @@
updateUsrDialog()
return 0
- if(holdingitems && holdingitems.len >= limit)
+ if(LAZYLEN(holdingitems) >= limit)
to_chat(user, SPAN_WARNING("The machine cannot hold anymore items."))
return 1
if(istype(O,/obj/item/storage))
var/obj/item/storage/B = O
- if(B.contents.len > 0)
+ if(length(B.contents) > 0)
to_chat(user, SPAN_NOTICE("You start dumping the contents of [B] into [src]."))
if(!do_after(user, 15, INTERRUPT_ALL, BUSY_ICON_GENERIC)) return
for(var/obj/item/I in B)
- if(holdingitems && holdingitems.len >= limit)
+ if(LAZYLEN(holdingitems) >= limit)
to_chat(user, SPAN_WARNING("The machine cannot hold anymore items."))
break
else
@@ -165,7 +165,7 @@
if(is_beaker_ready && !is_chamber_empty && !(inoperable()))
dat += "Grind the reagents "
dat += "Juice the reagents "
- if(holdingitems && holdingitems.len > 0)
+ if(LAZYLEN(holdingitems) > 0)
dat += "Eject the reagents "
if(beaker)
dat += "Detach the beaker "
@@ -357,7 +357,7 @@
if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
- if(O.reagents.reagent_list.len == 0)
+ if(length(O.reagents.reagent_list) == 0)
remove_object(O)
//Sheets
diff --git a/code/modules/reagents/chemistry_properties/prop_positive.dm b/code/modules/reagents/chemistry_properties/prop_positive.dm
index 0f51b816d034..40867892afbd 100644
--- a/code/modules/reagents/chemistry_properties/prop_positive.dm
+++ b/code/modules/reagents/chemistry_properties/prop_positive.dm
@@ -435,7 +435,7 @@
if(L.status & (LIMB_ROBOT|LIMB_SYNTHSKIN))
L.take_damage(0, potency)
return
- if(L.implants && L.implants.len > 0)
+ if(LAZYLEN(L.implants) > 0)
var/obj/implanted_object = pick(L.implants)
if(implanted_object)
L.implants -= implanted_object
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index c82109156a6c..1b8448991c6e 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -65,7 +65,7 @@
start_processing()
/obj/structure/machinery/disposal/Destroy()
- if(contents.len)
+ if(length(contents))
eject()
trunk = null
return ..()
@@ -86,7 +86,7 @@
add_fingerprint(user)
if(mode <= 0) //It's off
if(HAS_TRAIT(I, TRAIT_TOOL_SCREWDRIVER))
- if(contents.len > 0)
+ if(length(contents) > 0)
to_chat(user, SPAN_WARNING("Eject the contents first!"))
return
if(mode == DISPOSALS_OFF) //It's off but still not unscrewed
@@ -103,7 +103,7 @@
if(!HAS_TRAIT(I, TRAIT_TOOL_BLOWTORCH))
to_chat(user, SPAN_WARNING("You need a stronger blowtorch!"))
return
- if(contents.len > 0)
+ if(length(contents) > 0)
to_chat(user, SPAN_WARNING("Eject the contents first!"))
return
var/obj/item/tool/weldingtool/W = I
@@ -339,7 +339,7 @@
return
//Check for items in disposal - occupied light
- if(contents.len > 0)
+ if(length(contents) > 0)
overlays += image('icons/obj/pipes/disposal.dmi', "dispover-full")
//Charging and ready light
@@ -356,7 +356,7 @@
flush_count++
if(flush_count >= flush_after_ticks)
- if(contents.len)
+ if(length(contents))
if(mode == DISPOSALS_CHARGED)
spawn(0)
flush()
@@ -372,7 +372,7 @@
else if(disposal_pressure >= SEND_PRESSURE)
mode = DISPOSALS_CHARGED //If full enough, switch to ready mode
update()
- if(!contents.len)
+ if(!length(contents))
//Full and nothing to flush - stop processing!
stop_processing()
else
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index fb43d85e079d..dfb0ed8288b0 100644
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -337,7 +337,7 @@
var/dat = "TagMaster 2.3 "
dat += ""
- for(var/i = 1, i <= GLOB.tagger_locations.len, i++)
+ for(var/i = 1, i <= length(GLOB.tagger_locations), i++)
dat += "[GLOB.tagger_locations[i]] "
if (i%4==0)
diff --git a/code/modules/shuttle/docking.dm b/code/modules/shuttle/docking.dm
index aa9f4d6ad470..df89ee5bdf42 100644
--- a/code/modules/shuttle/docking.dm
+++ b/code/modules/shuttle/docking.dm
@@ -64,7 +64,7 @@
var/list/new_hidden_turfs
if(hidden)
new_hidden_turfs = list()
- for(var/i in 1 to old_turfs.len)
+ for(var/i in 1 to length(old_turfs))
CHECK_TICK
var/turf/oldT = old_turfs[i]
if(old_turfs[oldT] & MOVE_TURF)
@@ -135,7 +135,7 @@
old_turfs[oldT] = move_mode
/obj/docking_port/mobile/proc/takeoff(list/old_turfs, list/new_turfs, list/moved_atoms, rotation, movement_direction, old_dock, area/underlying_old_area)
- for(var/i in 1 to old_turfs.len)
+ for(var/i in 1 to length(old_turfs))
var/turf/oldT = old_turfs[i]
var/turf/newT = new_turfs[i]
var/move_mode = old_turfs[oldT]
@@ -162,12 +162,12 @@
var/new_parallax_dir = FALSE
if(istype(new_dock, /obj/docking_port/stationary/transit))
new_parallax_dir = preferred_direction
- for(var/i in 1 to areas_to_move.len)
+ for(var/i in 1 to length(areas_to_move))
CHECK_TICK
var/area/internal_area = areas_to_move[i]
internal_area.afterShuttleMove(new_parallax_dir) //areas
- for(var/i in 1 to old_turfs.len)
+ for(var/i in 1 to length(old_turfs))
CHECK_TICK
if(!(old_turfs[old_turfs[i]] & MOVE_TURF))
continue
@@ -175,7 +175,7 @@
var/turf/newT = new_turfs[i]
newT.afterShuttleMove(oldT, rotation) //turfs
- for(var/i in 1 to moved_atoms.len)
+ for(var/i in 1 to length(moved_atoms))
CHECK_TICK
var/atom/movable/moved_object = moved_atoms[i]
if(QDELETED(moved_object))
@@ -187,12 +187,12 @@
underlying_old_area.lateShuttleMove()
- for(var/i in 1 to areas_to_move.len)
+ for(var/i in 1 to length(areas_to_move))
CHECK_TICK
var/area/internal_area = areas_to_move[i]
internal_area.lateShuttleMove()
- for(var/i in 1 to old_turfs.len)
+ for(var/i in 1 to length(old_turfs))
CHECK_TICK
if(!(old_turfs[old_turfs[i]] & MOVE_CONTENTS | MOVE_TURF))
continue
@@ -200,7 +200,7 @@
var/turf/newT = new_turfs[i]
newT.lateShuttleMove(oldT)
- for(var/i in 1 to moved_atoms.len)
+ for(var/i in 1 to length(moved_atoms))
CHECK_TICK
var/atom/movable/moved_object = moved_atoms[i]
if(QDELETED(moved_object))
diff --git a/code/modules/shuttle/on_move.dm b/code/modules/shuttle/on_move.dm
index 7a9f032be444..934e3c353618 100644
--- a/code/modules/shuttle/on_move.dm
+++ b/code/modules/shuttle/on_move.dm
@@ -64,7 +64,7 @@ All ShuttleMove procs go here
var/shuttle_boundary = baseturfs.Find(/turf/baseturf_skipover/shuttle)
if(!shuttle_boundary)
CRASH("A turf queued to move via shuttle somehow had no skipover in baseturfs. [src]([type]):[loc]")
- var/depth = baseturfs.len - shuttle_boundary + 1
+ var/depth = length(baseturfs) - shuttle_boundary + 1
newT.CopyOnTop(src, 1, depth, TRUE)
return TRUE
@@ -76,7 +76,7 @@ All ShuttleMove procs go here
var/shuttle_boundary = baseturfs.Find(/turf/baseturf_skipover/shuttle)
if(shuttle_boundary)
- oldT.ScrapeAway(baseturfs.len - shuttle_boundary + 1)
+ oldT.ScrapeAway(length(baseturfs) - shuttle_boundary + 1)
if(rotation)
shuttleRotate(rotation) //see shuttle_rotate.dm
diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm
index fc4b0ccd2ee9..4a990ea7d1ae 100644
--- a/code/modules/shuttle/shuttle.dm
+++ b/code/modules/shuttle/shuttle.dm
@@ -469,13 +469,13 @@
. = ..()
if(!id)
- id = "[SSshuttle.mobile.len]"
+ id = "[length(SSshuttle.mobile)]"
if(name == "shuttle")
- name = "shuttle[SSshuttle.mobile.len]"
+ name = "shuttle[length(SSshuttle.mobile)]"
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 = get_area(curT)
if(istype(cur_area, area_type))
@@ -693,7 +693,7 @@
if(!underlying_area)
underlying_area = new underlying_area_type(null)
- for(var/i in 1 to old_turfs.len)
+ for(var/i in 1 to length(old_turfs))
var/turf/oldT = old_turfs[i]
if(!oldT || !istype(oldT.loc, area_type))
continue
@@ -706,7 +706,7 @@
var/list/baseturf_cache = oldT.baseturfs
for(var/k in 1 to length(baseturf_cache))
if(ispath(baseturf_cache[k], /turf/baseturf_skipover/shuttle))
- oldT.ScrapeAway(baseturf_cache.len - k + 1)
+ oldT.ScrapeAway(length(baseturf_cache) - k + 1)
break
qdel(src, force=TRUE)
@@ -745,7 +745,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]
var/turf/T1 = L1[i]
if(!T0 || !T1)
@@ -819,7 +819,7 @@
set_idle()
/obj/docking_port/mobile/proc/check_effects()
- if(!ripples.len)
+ if(!length(ripples))
if((mode == SHUTTLE_PREARRIVAL))
var/tl = timeLeft(1)
if(tl <= SHUTTLE_RIPPLE_TIME)
diff --git a/code/modules/shuttles/marine_ferry.dm b/code/modules/shuttles/marine_ferry.dm
index 14787fccb388..bd4a08716954 100644
--- a/code/modules/shuttles/marine_ferry.dm
+++ b/code/modules/shuttles/marine_ferry.dm
@@ -44,7 +44,7 @@
if(!LAZYLEN(locs_land))
return TRUE
- if(!main_doors.len && !controls.len)
+ if(!length(main_doors) && !length(controls))
var/turf/T_src = pick(locs_dock)
var/list/turfs = get_shuttle_turfs(T_src, info_datums)
for(var/turf/T in turfs)
@@ -164,7 +164,7 @@
var/int_rot = locs_move[T_int]
var/turf/T_trg
var/trg_rot
- if(!locs_land.len) // We check here as well to make sure that the order of operations/lag/changing it after launch. Wont mess this up.
+ if(!length(locs_land)) // We check here as well to make sure that the order of operations/lag/changing it after launch. Wont mess this up.
transit_gun_mission = 1
if(transit_gun_mission)//gun mission makes you land back where you started.
@@ -349,7 +349,7 @@
for(var/turf/TU in SSoldshuttle.shuttle_controller.locs_crash[target_section])
if(istype(get_area(TU), /area/almayer/hallways/hangar))
crash_turfs += TU
- if(crash_turfs.len) T_trg = pick(crash_turfs)
+ if(length(crash_turfs)) T_trg = pick(crash_turfs)
else message_admins("no crash turf found in Almayer Hangar, contact coders.")
break
diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm
index 0e9303d13583..502d7c1ffde4 100644
--- a/code/modules/shuttles/shuttle_console.dm
+++ b/code/modules/shuttles/shuttle_console.dm
@@ -238,7 +238,7 @@ GLOBAL_LIST_EMPTY(shuttle_controls)
return
if(istype(shuttle, /datum/shuttle/ferry/marine))
var/datum/shuttle/ferry/marine/s = shuttle
- if(!s.locs_land.len && !s.transit_gun_mission)
+ if(!length(s.locs_land) && !s.transit_gun_mission)
to_chat(usr, SPAN_WARNING("There is no suitable LZ for this shuttle. Flight configuration changed to fire-mission."))
s.transit_gun_mission = 1
if(shuttle.moving_status == SHUTTLE_IDLE) //Multi consoles, hopefully this will work
diff --git a/code/modules/teleporters/teleporter.dm b/code/modules/teleporters/teleporter.dm
index d3596cf3e9ea..21b362d85822 100644
--- a/code/modules/teleporters/teleporter.dm
+++ b/code/modules/teleporters/teleporter.dm
@@ -29,12 +29,12 @@
var/list/turf/source_turfs = locations[location_source]
var/list/turf/dest_turfs = locations[location_dest]
- if(!source_turfs || source_turfs.len == 0)
+ if(!LAZYLEN(source_turfs))
log_debug("Invalid source location ID [location_source] handed to teleporter [id]. Error code: TELEPORTER_3")
log_admin("Invalid source location ID [location_source] handed to teleporter [id]. Tell the devs. Error code: TELEPORTER_3")
return FALSE
- if(!dest_turfs || dest_turfs.len == 0)
+ if(!LAZYLEN(dest_turfs))
log_debug("Invalid destination location ID [location_dest] handed to teleporter [id]. Error code: TELEPORTER_3")
log_admin("Invalid destination location ID [location_dest] handed to teleporter [id]. Tell the devs. Error code: TELEPORTER_3")
return FALSE
diff --git a/code/modules/teleporters/teleporter_console.dm b/code/modules/teleporters/teleporter_console.dm
index 88384578a939..f1d3a74b902e 100644
--- a/code/modules/teleporters/teleporter_console.dm
+++ b/code/modules/teleporters/teleporter_console.dm
@@ -175,7 +175,7 @@
if(SSmapping.configs[GROUND_MAP].map_name != MAP_CORSAT) // Bad style, but I'm leaving it here for now until someone wants to add a teleporter to another map
return
- if(GLOB.teleporters.len) // already made the damn thing
+ if(length(GLOB.teleporters)) // already made the damn thing
return
var/datum/teleporter/corsat/teleporter = new
diff --git a/code/modules/tgs/core/tgs_version.dm b/code/modules/tgs/core/tgs_version.dm
index bc561e67487a..d8ef9d96c4e9 100644
--- a/code/modules/tgs/core/tgs_version.dm
+++ b/code/modules/tgs/core/tgs_version.dm
@@ -5,11 +5,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/api.dm b/code/modules/tgs/v3210/api.dm
index 666201a32256..fd7e8a3a26c7 100644
--- a/code/modules/tgs/v3210/api.dm
+++ b/code/modules/tgs/v3210/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_panel/telemetry.dm b/code/modules/tgui_panel/telemetry.dm
index 4ef1f06bfac0..bd49596aa19a 100644
--- a/code/modules/tgui_panel/telemetry.dm
+++ b/code/modules/tgui_panel/telemetry.dm
@@ -85,7 +85,7 @@
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 (LAZYLEN(row) < 3 || (!row["ckey"] || !row["address"] || !row["computer_id"]))
continue
/* TODO - Reintroduce this when we get a proper round ID tracking,
diff --git a/code/modules/unit_tests/unit_test.dm b/code/modules/unit_tests/unit_test.dm
index 8d04a51bcc19..cf02cdf62155 100644
--- a/code/modules/unit_tests/unit_test.dm
+++ b/code/modules/unit_tests/unit_test.dm
@@ -87,7 +87,7 @@ GLOBAL_VAR_INIT(focused_test, focused_test())
/datum/unit_test/proc/allocate(type, ...)
var/list/arguments = args.Copy(2)
if(ispath(type, /atom))
- if (!arguments.len)
+ if (!length(arguments))
arguments = list(run_loc_floor_bottom_left)
else if (arguments[1] == null)
arguments[1] = run_loc_floor_bottom_left
diff --git a/code/modules/vehicles/hardpoints/primary/minigun.dm b/code/modules/vehicles/hardpoints/primary/minigun.dm
index 7ae7c20c9870..759ce1d4153c 100644
--- a/code/modules/vehicles/hardpoints/primary/minigun.dm
+++ b/code/modules/vehicles/hardpoints/primary/minigun.dm
@@ -61,7 +61,7 @@
COOLDOWN_START(src, fire_cooldown, fire_delay * stage_delay_mult)
/obj/item/hardpoint/primary/minigun/proc/calculate_stage_delay_mult()
- var/stage_rate_len = stage_rate.len
+ var/stage_rate_len = length(stage_rate)
var/delta_time = world.time - last_fired
var/old_spin_stage = spin_stage
diff --git a/code/modules/vehicles/multitile/multitile_verbs.dm b/code/modules/vehicles/multitile/multitile_verbs.dm
index 52d8602c9852..5d73351321e2 100644
--- a/code/modules/vehicles/multitile/multitile_verbs.dm
+++ b/code/modules/vehicles/multitile/multitile_verbs.dm
@@ -65,7 +65,7 @@
if(!new_hp)
new_hp = 0
- new_hp = (new_hp % usable_hps.len) + 1
+ new_hp = (new_hp % length(usable_hps)) + 1
var/obj/item/hardpoint/HP = usable_hps[new_hp]
if(!HP)
return
From 34293227af198af44c732305f570a8e847470c5d Mon Sep 17 00:00:00 2001
From: Changelogs
Date: Thu, 4 Jul 2024 01:16:51 +0000
Subject: [PATCH 08/20] Automatic changelog compile [ci skip]
---
html/changelogs/AutoChangeLog-pr-6574.yml | 4 ----
html/changelogs/AutoChangeLog-pr-6577.yml | 4 ----
html/changelogs/AutoChangeLog-pr-6591.yml | 5 -----
html/changelogs/archive/2024-07.yml | 9 +++++++++
4 files changed, 9 insertions(+), 13 deletions(-)
delete mode 100644 html/changelogs/AutoChangeLog-pr-6574.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-6577.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-6591.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6574.yml b/html/changelogs/AutoChangeLog-pr-6574.yml
deleted file mode 100644
index e7a6ad8e069b..000000000000
--- a/html/changelogs/AutoChangeLog-pr-6574.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Nomoresolvalou"
-delete-after: True
-changes:
- - balance: "The headset in the synthetic equipment vendor has been replaced with a synthetic headset as opposed to a senior command headset"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6577.yml b/html/changelogs/AutoChangeLog-pr-6577.yml
deleted file mode 100644
index 0a632cde43b2..000000000000
--- a/html/changelogs/AutoChangeLog-pr-6577.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "zzzmike"
-delete-after: True
-changes:
- - spellcheck: "more clarity for facehugger/lesser drone text"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6591.yml b/html/changelogs/AutoChangeLog-pr-6591.yml
deleted file mode 100644
index 1cab75dbe648..000000000000
--- a/html/changelogs/AutoChangeLog-pr-6591.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: "Doubleumc"
-delete-after: True
-changes:
- - qol: "ghost health scan & follow right-click actions work at any range"
- - admin: "\"InView\" procs use your current view range (e.g. ghost zoom)"
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-07.yml b/html/changelogs/archive/2024-07.yml
index cf474db8722d..bcb5c9abe0b7 100644
--- a/html/changelogs/archive/2024-07.yml
+++ b/html/changelogs/archive/2024-07.yml
@@ -2,3 +2,12 @@
Blundir:
- soundadd: larva talking sounds
- imageadd: larva moving sprites, tweak of standing ones
+2024-07-04:
+ Doubleumc:
+ - qol: ghost health scan & follow right-click actions work at any range
+ - admin: '"InView" procs use your current view range (e.g. ghost zoom)'
+ Nomoresolvalou:
+ - balance: The headset in the synthetic equipment vendor has been replaced with
+ a synthetic headset as opposed to a senior command headset
+ zzzmike:
+ - spellcheck: more clarity for facehugger/lesser drone text
From 82c081a55ba4446443b68e6931b6650ff4ef34d9 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Thu, 4 Jul 2024 06:39:57 +0100
Subject: [PATCH 09/20] Automatic TGS DMAPI Update (#6611)
This pull request updates the TGS DMAPI to the latest version. Please
note any breaking or unimplemented changes before merging.
Co-authored-by: tgstation-server
---
code/modules/tgs/core/tgs_version.dm | 6 +++---
code/modules/tgs/v3210/api.dm | 12 ++++++------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/code/modules/tgs/core/tgs_version.dm b/code/modules/tgs/core/tgs_version.dm
index d8ef9d96c4e9..bc561e67487a 100644
--- a/code/modules/tgs/core/tgs_version.dm
+++ b/code/modules/tgs/core/tgs_version.dm
@@ -5,11 +5,11 @@
var/list/version_bits = splittext(deprefixed_parameter, ".")
suite = text2num(version_bits[1])
- if(length(version_bits) > 1)
+ if(version_bits.len > 1)
minor = text2num(version_bits[2])
- if(length(version_bits) > 2)
+ if(version_bits.len > 2)
patch = text2num(version_bits[3])
- if(length(version_bits) == 4)
+ if(version_bits.len == 4)
deprecated_patch = text2num(version_bits[4])
/datum/tgs_version/proc/Valid(allow_wildcards = FALSE)
diff --git a/code/modules/tgs/v3210/api.dm b/code/modules/tgs/v3210/api.dm
index fd7e8a3a26c7..666201a32256 100644
--- a/code/modules/tgs/v3210/api.dm
+++ b/code/modules/tgs/v3210/api.dm
@@ -64,17 +64,17 @@
instance_name = "TG Station Server" //maybe just upgraded
var/list/logs = TGS_FILE2LIST(".git/logs/HEAD")
- if(length(logs))
- logs = splittext(logs[length(logs)], " ")
- if (length(logs) >= 2)
+ if(logs.len)
+ logs = splittext(logs[logs.len], " ")
+ if (logs.len >= 2)
commit = logs[2]
else
TGS_ERROR_LOG("Error parsing commit logs")
logs = TGS_FILE2LIST(".git/logs/refs/remotes/origin/master")
- if(length(logs))
- logs = splittext(logs[length(logs)], " ")
- if (length(logs) >= 2)
+ if(logs.len)
+ logs = splittext(logs[logs.len], " ")
+ if (logs.len >= 2)
originmastercommit = logs[2]
else
TGS_ERROR_LOG("Error parsing origin commmit logs")
From 3d4be774eabf64a4ddbdec9ef3682877777d8db0 Mon Sep 17 00:00:00 2001
From: Venuska1117 <89580971+Venuska1117@users.noreply.github.com>
Date: Thu, 4 Jul 2024 21:52:14 +0200
Subject: [PATCH 10/20] Make Non-Toxic Water Stop Glowing (#6608)
# About the pull request
This PR make non-toxic water stop glowing, it kinda don't make sense,
that on some maps, where water cover essential points is just GLOWING,
now water will not glow unless its intended to be glowing.
# Explain why it's good for the game
Water should not glow in darkness (unless its intended like on trijent
dam)
# Testing Photographs and Procedure
![waterchange-ezgif
com-video-to-gif-converter](https://github.com/cmss13-devs/cmss13/assets/89580971/7a61318c-dce4-4af3-87b1-727000ebad68)
# Changelog
:cl:
fix: Make non-toxic water stop glowing.
/:cl:
---
code/game/turfs/floors/desert.dm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/code/game/turfs/floors/desert.dm b/code/game/turfs/floors/desert.dm
index 46a481e3bc64..d11ce0ff5c29 100644
--- a/code/game/turfs/floors/desert.dm
+++ b/code/game/turfs/floors/desert.dm
@@ -114,7 +114,7 @@
set_light(2)
icon = 'icons/turf/floors/desert_water_toxic.dmi'
if(0)
- set_light(1)
+ set_light(0)
icon = 'icons/turf/floors/desert_water.dmi'
if(-1)
set_light(1)
@@ -199,7 +199,7 @@
set_light(2)
icon = 'icons/turf/floors/desert_water_toxic.dmi'
if(0)
- set_light(1)
+ set_light(0)
icon = 'icons/turf/floors/desert_water.dmi'
if(-1)
set_light(1)
@@ -224,7 +224,7 @@
set_light(2)
icon = 'icons/turf/floors/desert_water_toxic.dmi'
if(0)
- set_light(1)
+ set_light(0)
icon = 'icons/turf/floors/desert_water.dmi'
if(-1)
set_light(1)
From 3728bf489cd8d19ec12e06596ed105ad85a72401 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Thu, 4 Jul 2024 20:57:39 +0100
Subject: [PATCH 11/20] Automatic changelog for PR #6608 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6608.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6608.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6608.yml b/html/changelogs/AutoChangeLog-pr-6608.yml
new file mode 100644
index 000000000000..3f9a4bebc760
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6608.yml
@@ -0,0 +1,4 @@
+author: "Venuska1117"
+delete-after: True
+changes:
+ - bugfix: "Make non-toxic water stop glowing."
\ No newline at end of file
From faee019e5ff6b3adfdeabdfef48f16fc1ce00346 Mon Sep 17 00:00:00 2001
From: ColdIronWarrior
Date: Thu, 4 Jul 2024 19:28:41 -0400
Subject: [PATCH 12/20] fix med rig belt description (#6528)
# About the pull request
fixes the med rig belt description so it doesnt say it takes pistol ammo
# Explain why it's good for the game
it doesn't take pistol ammo
# Testing Photographs and Procedure
Screenshots & Videos
Put screenshots and videos here with an empty line between the
screenshots and the `` tags.
# Changelog
:cl:
spellcheck: fixed the medical rig belt's description
/:cl:
Co-authored-by: nefarious <72267018+nefarious6th@users.noreply.github.com>
---
code/game/objects/items/storage/belt.dm | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index d68dc4dea753..d16602e04aaa 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -145,7 +145,7 @@
/obj/item/storage/belt/medical
name = "\improper M276 pattern medical storage rig"
- desc = "The M276 is the standard load-bearing equipment of the USCM. It consists of a modular belt with various clips. This version is a less common configuration, designed to transport medical supplies and pistol ammunition. \nRight click its sprite and click \"toggle belt mode\" to take pills out of bottles by simply clicking them."
+ desc = "The M276 is the standard load-bearing equipment of the USCM. It consists of a modular belt with various clips. This version is a less common configuration, designed to transport bulkier medical supplies. \nRight click its sprite and click \"toggle belt mode\" to take pills out of bottles by simply clicking them."
icon_state = "medicalbelt"
item_state = "medical"
storage_slots = 14
From 0a0c34f6ad3456dcb931b733ed02635415836c10 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Fri, 5 Jul 2024 00:33:45 +0100
Subject: [PATCH 13/20] Automatic changelog for PR #6528 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6528.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6528.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6528.yml b/html/changelogs/AutoChangeLog-pr-6528.yml
new file mode 100644
index 000000000000..30d2d87478d6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6528.yml
@@ -0,0 +1,4 @@
+author: "coldironwarrior"
+delete-after: True
+changes:
+ - spellcheck: "fixed the medical rig belt's description"
\ No newline at end of file
From 304358b5f928bc2d6653642aa883063bf22b84e9 Mon Sep 17 00:00:00 2001
From: Grrr kitten <158611449+GrrrKitten@users.noreply.github.com>
Date: Thu, 4 Jul 2024 19:29:18 -0400
Subject: [PATCH 14/20] Gives Screenshake an actual smoothing value versus just
jumping over a single frame (#6524)
# About the pull request
![image](https://github.com/cmss13-devs/cmss13/assets/158611449/58503bfd-0c2e-42b9-8534-8d2d01281d28)
![image](https://github.com/cmss13-devs/cmss13/assets/158611449/226062a7-0e76-40c0-b488-1a0481125ca6)
Basically in game rn, screenshake uses jump easing, which over the span
of a single frame sends you from your current screen position to the
location of the screenshake. This PR gives it cubic easing, which while
being one of the more 'rough' easing options, makes it look like your
FPS arent dropping.
# Explain why it's good for the game
Screenshake looked extremely low FPS/jumpy and honestly over long
periods of screenshake like queen screech kinda made your eyes hurt.
CM's screenshake was one of the worst of any SS13 servers and had us
looking extremely dated.
Screenshake should be Screenshake,not give players motion sickness
This PR fixes that, now with screenshake being heavily dependent on your
personal FPS choice, with those who choose to play on the server
FPS/lower FPS having whats more similarly to the older 'jumpy'
screenshake, while those on higher FPS have to deal with random low FPS
screenshake
The vids speak for themselves
# Testing Photographs and Procedure
Screenshots & Videos
I have vids of what it looks like too for gun recoil but photoshop
refuses to render my videos so theyll come later
What it used to look like:
https://streamable.com/c4wk97
One of the worst examples of old screenshake (at 48fps)
https://streamable.com/iyj8d7
What it looks like now (note I use 48 FPS for first one, then server FPS
for low fps ones)
https://streamable.com/5nd11l
Like the stuff I make?
[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/J3J6102QI0)
# Changelog
:cl:
qol: Makes screenshake look less low FPS/jumpy
/:cl:
---
code/modules/mob/mob_helpers.dm | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 7c44605bf4bf..4771626ee78c 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -315,7 +315,7 @@ GLOBAL_LIST_INIT(limb_types_by_name, list(
message = replace_X.Replace(message, "CKTH")
return message
-#define PIXELS_PER_STRENGTH_VAL 24
+#define PIXELS_PER_STRENGTH_VAL 28
/proc/shake_camera(mob/M, steps = 1, strength = 1, time_per_step = 1)
if(!M?.client || (M.shakecamera > world.time))
@@ -326,10 +326,10 @@ GLOBAL_LIST_INIT(limb_types_by_name, list(
var/old_X = M.client.pixel_x
var/old_y = M.client.pixel_y
- animate(M.client, pixel_x = old_X + rand(-(strength), strength), pixel_y = old_y + rand(-(strength), strength), easing = JUMP_EASING, time = time_per_step, flags = ANIMATION_PARALLEL)
+ animate(M.client, pixel_x = old_X + rand(-(strength), strength), pixel_y = old_y + rand(-(strength), strength), easing = CUBIC_EASING | EASE_IN, time = time_per_step, flags = ANIMATION_PARALLEL)
var/i = 1
while(i < steps)
- animate(pixel_x = old_X + rand(-(strength), strength), pixel_y = old_y + rand(-(strength), strength), easing = JUMP_EASING, time = time_per_step)
+ animate(pixel_x = old_X + rand(-(strength), strength), pixel_y = old_y + rand(-(strength), strength), easing = CUBIC_EASING | EASE_IN, time = time_per_step)
i++
animate(pixel_x = old_X, pixel_y = old_y,time = clamp(floor(strength/PIXELS_PER_STRENGTH_VAL),2,4))//ease it back
From 951c22da7c3ed10757bfca04689e86618f32643c Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Fri, 5 Jul 2024 00:42:32 +0100
Subject: [PATCH 15/20] Automatic changelog for PR #6524 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6524.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6524.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6524.yml b/html/changelogs/AutoChangeLog-pr-6524.yml
new file mode 100644
index 000000000000..0e34429b1a18
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6524.yml
@@ -0,0 +1,4 @@
+author: "GrrrKitten"
+delete-after: True
+changes:
+ - qol: "Makes screenshake look less low FPS/jumpy"
\ No newline at end of file
From e895024e65c9748b82d5dd96a54238984152377b Mon Sep 17 00:00:00 2001
From: AndroBetel <44546836+AndroBetel@users.noreply.github.com>
Date: Fri, 5 Jul 2024 02:43:47 +0300
Subject: [PATCH 16/20] iron teeth character trait (#6512)
# About the pull request
adds "iron teeth" trait for 1 point that allows marines to hold stuff in
their face slot with no fear of it falling out when they drop
# Explain why it's good for the game
i tried to larp as rambo and my combat knife fell out of my mouth and i
thought man you can only hold minor shit in your face slot would it be
cool if it was a little more useful so here we are
besides more character traits is good theres a shortage of them i think
# Testing Photographs and Procedure
Screenshots & Videos
got the trait... put a knife in my mouth... rested... hit myself with an
explosion to stun... knife was still in my mouth... no runtimes
# Changelog
:cl:
add: Adds "Iron teeth" trait.
/:cl:
---------
Co-authored-by: Contrabang <91113370+Contrabang@users.noreply.github.com>
Co-authored-by: Zonespace <41448081+Zonespace27@users.noreply.github.com>
---
code/__DEFINES/traits.dm | 2 ++
code/datums/elements/mouth_drop_item.dm | 2 +-
code/modules/character_traits/biology_traits.dm | 14 ++++++++++++++
3 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm
index 7b669124a2d0..964e77402655 100644
--- a/code/__DEFINES/traits.dm
+++ b/code/__DEFINES/traits.dm
@@ -233,6 +233,8 @@
#define TRAIT_IN_TUTORIAL "t_IN_TUTORIAL"
/// If the mob is cloaked in any form
#define TRAIT_CLOAKED "t_cloaked"
+/// If the mob won't drop items held in face slot when downed
+#define TRAIT_IRON_TEETH "t_iron_teeth"
// -- ability traits --
/// Xenos with this trait cannot have plasma transfered to them
diff --git a/code/datums/elements/mouth_drop_item.dm b/code/datums/elements/mouth_drop_item.dm
index 7a546c6b3933..f27e1b928b7d 100644
--- a/code/datums/elements/mouth_drop_item.dm
+++ b/code/datums/elements/mouth_drop_item.dm
@@ -18,7 +18,7 @@
/datum/element/mouth_drop_item/proc/item_equipped(obj/item/I, mob/living/carbon/human/user, slot)
SIGNAL_HANDLER
- if(slot == WEAR_FACE)
+ if(slot == WEAR_FACE && !HAS_TRAIT(user, TRAIT_IRON_TEETH))
I.RegisterSignal(user, COMSIG_LIVING_SET_BODY_POSITION, TYPE_PROC_REF(/obj/item, drop_to_floor))
/datum/element/mouth_drop_item/proc/item_dropped(obj/item/I, mob/living/carbon/human/user)
diff --git a/code/modules/character_traits/biology_traits.dm b/code/modules/character_traits/biology_traits.dm
index 2220f8f82fd2..5bdb67cc5419 100644
--- a/code/modules/character_traits/biology_traits.dm
+++ b/code/modules/character_traits/biology_traits.dm
@@ -130,3 +130,17 @@
/datum/character_trait/biology/hardcore/unapply_trait(mob/living/carbon/human/target)
REMOVE_TRAIT(target, TRAIT_HARDCORE, ROUNDSTART_TRAIT)
..()
+
+/datum/character_trait/biology/iron_teeth
+ trait_name = "Iron Teeth"
+ trait_desc = "You've got iron teeth or really good dental insurance. Items in your face slot won't fall out when you go down."
+ applyable = TRUE
+ cost = 1
+
+/datum/character_trait/biology/iron_teeth/apply_trait(mob/living/carbon/human/target, datum/equipment_preset/preset)
+ ADD_TRAIT(target, TRAIT_IRON_TEETH, ROUNDSTART_TRAIT)
+ ..()
+
+/datum/character_trait/biology/iron_teeth/unapply_trait(mob/living/carbon/human/target)
+ REMOVE_TRAIT(target, TRAIT_IRON_TEETH, ROUNDSTART_TRAIT)
+ ..()
From c664b586e7779d1b6fc74b30e953fd4877990c6c Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Fri, 5 Jul 2024 00:49:11 +0100
Subject: [PATCH 17/20] Automatic changelog for PR #6512 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6512.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6512.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6512.yml b/html/changelogs/AutoChangeLog-pr-6512.yml
new file mode 100644
index 000000000000..a988400bc1a6
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6512.yml
@@ -0,0 +1,4 @@
+author: "AndroBetel"
+delete-after: True
+changes:
+ - rscadd: "Adds \"Iron teeth\" trait."
\ No newline at end of file
From c860c1317347c903101980943cfe66b8a7ae1ea2 Mon Sep 17 00:00:00 2001
From: Changelogs
Date: Fri, 5 Jul 2024 01:16:57 +0000
Subject: [PATCH 18/20] Automatic changelog compile [ci skip]
---
html/changelogs/AutoChangeLog-pr-6512.yml | 4 ----
html/changelogs/AutoChangeLog-pr-6524.yml | 4 ----
html/changelogs/AutoChangeLog-pr-6528.yml | 4 ----
html/changelogs/AutoChangeLog-pr-6608.yml | 4 ----
html/changelogs/archive/2024-07.yml | 9 +++++++++
5 files changed, 9 insertions(+), 16 deletions(-)
delete mode 100644 html/changelogs/AutoChangeLog-pr-6512.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-6524.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-6528.yml
delete mode 100644 html/changelogs/AutoChangeLog-pr-6608.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6512.yml b/html/changelogs/AutoChangeLog-pr-6512.yml
deleted file mode 100644
index a988400bc1a6..000000000000
--- a/html/changelogs/AutoChangeLog-pr-6512.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "AndroBetel"
-delete-after: True
-changes:
- - rscadd: "Adds \"Iron teeth\" trait."
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6524.yml b/html/changelogs/AutoChangeLog-pr-6524.yml
deleted file mode 100644
index 0e34429b1a18..000000000000
--- a/html/changelogs/AutoChangeLog-pr-6524.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "GrrrKitten"
-delete-after: True
-changes:
- - qol: "Makes screenshake look less low FPS/jumpy"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6528.yml b/html/changelogs/AutoChangeLog-pr-6528.yml
deleted file mode 100644
index 30d2d87478d6..000000000000
--- a/html/changelogs/AutoChangeLog-pr-6528.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "coldironwarrior"
-delete-after: True
-changes:
- - spellcheck: "fixed the medical rig belt's description"
\ No newline at end of file
diff --git a/html/changelogs/AutoChangeLog-pr-6608.yml b/html/changelogs/AutoChangeLog-pr-6608.yml
deleted file mode 100644
index 3f9a4bebc760..000000000000
--- a/html/changelogs/AutoChangeLog-pr-6608.yml
+++ /dev/null
@@ -1,4 +0,0 @@
-author: "Venuska1117"
-delete-after: True
-changes:
- - bugfix: "Make non-toxic water stop glowing."
\ No newline at end of file
diff --git a/html/changelogs/archive/2024-07.yml b/html/changelogs/archive/2024-07.yml
index bcb5c9abe0b7..7a2ab938b286 100644
--- a/html/changelogs/archive/2024-07.yml
+++ b/html/changelogs/archive/2024-07.yml
@@ -11,3 +11,12 @@
a synthetic headset as opposed to a senior command headset
zzzmike:
- spellcheck: more clarity for facehugger/lesser drone text
+2024-07-05:
+ AndroBetel:
+ - rscadd: Adds "Iron teeth" trait.
+ GrrrKitten:
+ - qol: Makes screenshake look less low FPS/jumpy
+ Venuska1117:
+ - bugfix: Make non-toxic water stop glowing.
+ coldironwarrior:
+ - spellcheck: fixed the medical rig belt's description
From 5a554d0ff97eefce910059bbd97b4cf9925c2d01 Mon Sep 17 00:00:00 2001
From: Drathek <76988376+Drulikar@users.noreply.github.com>
Date: Thu, 4 Jul 2024 18:53:20 -0700
Subject: [PATCH 19/20] Fix weird hardpoint and vehicle examines (#6523)
# About the pull request
This PR makes all hardpoints (minus van wheels since those are being
changed in #6248 anyways) improperly named and changes the
grammar/plurality in the vehicle/hardpoint examines.
# Explain why it's good for the game
Fixes this:
![image](https://github.com/cmss13-devs/cmss13/assets/76988376/38ac1ecd-01bb-417b-910d-399212ec7154)
# Testing Photographs and Procedure
Screenshots & Videos
![image](https://github.com/cmss13-devs/cmss13/assets/76988376/a99c0038-01b2-449f-b096-134bfb25f026)
![image](https://github.com/cmss13-devs/cmss13/assets/76988376/4ee6ffb8-f538-42ce-a729-33f41ceadfc3)
# Changelog
:cl: Drathek
spellcheck: Fix grammar and plurality for vehicles and their hardpoints
/:cl:
---
code/game/objects/items.dm | 2 +-
.../vehicles/hardpoints/armor/ballistic.dm | 2 +-
.../modules/vehicles/hardpoints/armor/caustic.dm | 2 +-
.../vehicles/hardpoints/armor/concussive.dm | 2 +-
.../modules/vehicles/hardpoints/armor/paladin.dm | 2 +-
.../vehicles/hardpoints/armor/snowplow.dm | 2 +-
code/modules/vehicles/hardpoints/hardpoint.dm | 6 ++++++
.../vehicles/hardpoints/holder/tank_turret.dm | 2 +-
.../vehicles/hardpoints/primary/autocannon.dm | 2 +-
.../vehicles/hardpoints/primary/dual_cannon.dm | 2 +-
.../vehicles/hardpoints/primary/flamer.dm | 2 +-
code/modules/vehicles/hardpoints/primary/ltb.dm | 2 +-
.../vehicles/hardpoints/primary/minigun.dm | 2 +-
.../vehicles/hardpoints/secondary/cupola.dm | 2 +-
.../vehicles/hardpoints/secondary/flamer.dm | 2 +-
.../hardpoints/secondary/frontal_cannon.dm | 2 +-
.../hardpoints/secondary/grenade_launcher.dm | 2 +-
.../modules/vehicles/hardpoints/secondary/tow.dm | 2 +-
.../hardpoints/special/firing_port_weapon.dm | 2 +-
.../vehicles/hardpoints/support/artillery.dm | 2 +-
.../modules/vehicles/hardpoints/support/flare.dm | 2 +-
code/modules/vehicles/hardpoints/support/iwsa.dm | 2 +-
.../vehicles/hardpoints/support/overdrive.dm | 2 +-
.../vehicles/hardpoints/wheels/apc_wheels.dm | 2 +-
.../vehicles/hardpoints/wheels/arc_wheels.dm | 2 +-
.../vehicles/hardpoints/wheels/locomotion.dm | 16 ++++++++++++++++
.../modules/vehicles/hardpoints/wheels/treads.dm | 4 ++--
code/modules/vehicles/multitile/multitile.dm | 4 ++--
28 files changed, 50 insertions(+), 28 deletions(-)
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 6c354faca0b0..03e1f126e9d8 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -277,7 +277,7 @@ cases. Override_icon_state should be a list.*/
size = "huge"
if(SIZE_MASSIVE)
size = "massive"
- . += "This is a [blood_color ? blood_color != COLOR_OIL ? "bloody " : "oil-stained " : ""][icon2html(src, user)][src.name]. It is a [size] item."
+ . += "[p_are() == "are" ? "These are " : "This is a "][blood_color ? blood_color != COLOR_OIL ? "bloody " : "oil-stained " : ""][icon2html(src, user)][src.name]. [p_they(TRUE)] [p_are()] a [size] item."
if(desc)
. += desc
if(desc_lore)
diff --git a/code/modules/vehicles/hardpoints/armor/ballistic.dm b/code/modules/vehicles/hardpoints/armor/ballistic.dm
index 7fa19abf5b37..55f0f6bc4e6b 100644
--- a/code/modules/vehicles/hardpoints/armor/ballistic.dm
+++ b/code/modules/vehicles/hardpoints/armor/ballistic.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/armor/ballistic
- name = "Ballistic Armor"
+ name = "\improper Ballistic Armor"
desc = "Protects the vehicle from high-penetration weapons"
icon_state = "ballistic_armor"
diff --git a/code/modules/vehicles/hardpoints/armor/caustic.dm b/code/modules/vehicles/hardpoints/armor/caustic.dm
index 34bcf4c3b224..ac97d3da25f9 100644
--- a/code/modules/vehicles/hardpoints/armor/caustic.dm
+++ b/code/modules/vehicles/hardpoints/armor/caustic.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/armor/caustic
- name = "Caustic Armor"
+ name = "\improper Caustic Armor"
desc = "Protects vehicles from most types of acid"
icon_state = "caustic_armor"
diff --git a/code/modules/vehicles/hardpoints/armor/concussive.dm b/code/modules/vehicles/hardpoints/armor/concussive.dm
index a2e674255f2d..6da39b9c4173 100644
--- a/code/modules/vehicles/hardpoints/armor/concussive.dm
+++ b/code/modules/vehicles/hardpoints/armor/concussive.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/armor/concussive
- name = "Concussive Armor"
+ name = "\improper Concussive Armor"
desc = "Protects the vehicle from high-impact weapons"
icon_state = "concussive_armor"
diff --git a/code/modules/vehicles/hardpoints/armor/paladin.dm b/code/modules/vehicles/hardpoints/armor/paladin.dm
index 7635ffca74b3..fb131d47151e 100644
--- a/code/modules/vehicles/hardpoints/armor/paladin.dm
+++ b/code/modules/vehicles/hardpoints/armor/paladin.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/armor/paladin
- name = "Paladin Armor"
+ name = "\improper Paladin Armor"
desc = "Protects the vehicle from large incoming explosive projectiles"
icon_state = "paladin_armor"
diff --git a/code/modules/vehicles/hardpoints/armor/snowplow.dm b/code/modules/vehicles/hardpoints/armor/snowplow.dm
index a1b1a9dc800c..e7823854cff3 100644
--- a/code/modules/vehicles/hardpoints/armor/snowplow.dm
+++ b/code/modules/vehicles/hardpoints/armor/snowplow.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/armor/snowplow
- name = "Snowplow"
+ name = "\improper Snowplow"
desc = "Clears a path in the snow for friendlies"
icon_state = "snowplow"
diff --git a/code/modules/vehicles/hardpoints/hardpoint.dm b/code/modules/vehicles/hardpoints/hardpoint.dm
index 3aaa81daf19f..f94d0dc6b373 100644
--- a/code/modules/vehicles/hardpoints/hardpoint.dm
+++ b/code/modules/vehicles/hardpoints/hardpoint.dm
@@ -132,6 +132,12 @@
//------GENERAL PROCS----------
//-----------------------------
+/obj/item/hardpoint/p_s(temp_gender)
+ if(!temp_gender)
+ temp_gender = gender
+ if(temp_gender == PLURAL)
+ . = "s"
+
/obj/item/hardpoint/Initialize()
. = ..()
set_bullet_traits()
diff --git a/code/modules/vehicles/hardpoints/holder/tank_turret.dm b/code/modules/vehicles/hardpoints/holder/tank_turret.dm
index 2a01098de523..5be6a03863f2 100644
--- a/code/modules/vehicles/hardpoints/holder/tank_turret.dm
+++ b/code/modules/vehicles/hardpoints/holder/tank_turret.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/holder/tank_turret
- name = "M34A2-A Multipurpose Turret"
+ name = "\improper M34A2-A Multipurpose Turret"
desc = "The centerpiece of the tank. Designed to support quick installation and deinstallation of various tank weapon modules. Has inbuilt smoke screen deployment system."
icon = 'icons/obj/vehicles/tank.dmi'
diff --git a/code/modules/vehicles/hardpoints/primary/autocannon.dm b/code/modules/vehicles/hardpoints/primary/autocannon.dm
index fa865f40daa1..3e12f52be097 100644
--- a/code/modules/vehicles/hardpoints/primary/autocannon.dm
+++ b/code/modules/vehicles/hardpoints/primary/autocannon.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/primary/autocannon
- name = "AC3-E Autocannon"
+ name = "\improper AC3-E Autocannon"
desc = "A primary autocannon for tanks that shoots explosive flak rounds"
icon_state = "ace_autocannon"
diff --git a/code/modules/vehicles/hardpoints/primary/dual_cannon.dm b/code/modules/vehicles/hardpoints/primary/dual_cannon.dm
index 7cb4b9a621bb..b896640a4ff7 100644
--- a/code/modules/vehicles/hardpoints/primary/dual_cannon.dm
+++ b/code/modules/vehicles/hardpoints/primary/dual_cannon.dm
@@ -1,6 +1,6 @@
// APC cannons
/obj/item/hardpoint/primary/dualcannon
- name = "PARS-159 Boyars Dualcannon"
+ name = "\improper PARS-159 Boyars Dualcannon"
desc = "A primary two-barrel cannon for the APC that shoots 20mm IFF-compatible rounds."
icon = 'icons/obj/vehicles/hardpoints/apc.dmi'
diff --git a/code/modules/vehicles/hardpoints/primary/flamer.dm b/code/modules/vehicles/hardpoints/primary/flamer.dm
index d0e0596c141d..fce6e7f6a410 100644
--- a/code/modules/vehicles/hardpoints/primary/flamer.dm
+++ b/code/modules/vehicles/hardpoints/primary/flamer.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/primary/flamer
- name = "DRG-N Offensive Flamer Unit"
+ name = "\improper DRG-N Offensive Flamer Unit"
desc = "A primary weapon for the tank that spews fire everywhere."
icon_state = "drgn_flamer"
diff --git a/code/modules/vehicles/hardpoints/primary/ltb.dm b/code/modules/vehicles/hardpoints/primary/ltb.dm
index 6cb84cf453da..7ccbc18a2853 100644
--- a/code/modules/vehicles/hardpoints/primary/ltb.dm
+++ b/code/modules/vehicles/hardpoints/primary/ltb.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/primary/cannon
- name = "LTB Cannon"
+ name = "\improper LTB Cannon"
desc = "A primary cannon for tanks that shoots explosive rounds"
icon_state = "ltb_cannon"
diff --git a/code/modules/vehicles/hardpoints/primary/minigun.dm b/code/modules/vehicles/hardpoints/primary/minigun.dm
index 759ce1d4153c..8bc7c55bbb8a 100644
--- a/code/modules/vehicles/hardpoints/primary/minigun.dm
+++ b/code/modules/vehicles/hardpoints/primary/minigun.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/primary/minigun
- name = "LTAA-AP Minigun"
+ name = "\improper LTAA-AP Minigun"
desc = "A primary weapon for tanks that spews bullets"
icon_state = "ltaaap_minigun"
diff --git a/code/modules/vehicles/hardpoints/secondary/cupola.dm b/code/modules/vehicles/hardpoints/secondary/cupola.dm
index c1336eb05739..a4b40c7dd3a1 100644
--- a/code/modules/vehicles/hardpoints/secondary/cupola.dm
+++ b/code/modules/vehicles/hardpoints/secondary/cupola.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/secondary/m56cupola
- name = "M56 Cupola"
+ name = "\improper M56 Cupola"
desc = "A secondary weapon for tanks that shoots bullets"
icon_state = "m56_cupola"
diff --git a/code/modules/vehicles/hardpoints/secondary/flamer.dm b/code/modules/vehicles/hardpoints/secondary/flamer.dm
index 4bdc9e602974..56a9995b60c5 100644
--- a/code/modules/vehicles/hardpoints/secondary/flamer.dm
+++ b/code/modules/vehicles/hardpoints/secondary/flamer.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/secondary/small_flamer
- name = "LZR-N Flamer Unit"
+ name = "\improper LZR-N Flamer Unit"
desc = "A secondary weapon for tanks that spews hot fire."
icon_state = "flamer"
diff --git a/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm b/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm
index d0df1d295ffc..f9e4982bb736 100644
--- a/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm
+++ b/code/modules/vehicles/hardpoints/secondary/frontal_cannon.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/secondary/frontalcannon
- name = "Bleihagel RE-RE700 Frontal Cannon"
+ name = "\improper Bleihagel RE-RE700 Frontal Cannon"
desc = "The marketing department over at Bleihagel would have you believe that the RE-RE700 is an original design. However, experts who pried the cover off the cannon have discovered an object with a striking similarity to the popular M56 Cupola. It is still unknown why the cannon has two barrels."
icon = 'icons/obj/vehicles/hardpoints/apc.dmi'
diff --git a/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm b/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm
index ecaf36213d34..060f1f7ae9ef 100644
--- a/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm
+++ b/code/modules/vehicles/hardpoints/secondary/grenade_launcher.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/secondary/grenade_launcher
- name = "M92T Grenade Launcher"
+ name = "\improper M92T Grenade Launcher"
desc = "A secondary weapon for tanks that shoots grenades."
icon_state = "glauncher"
diff --git a/code/modules/vehicles/hardpoints/secondary/tow.dm b/code/modules/vehicles/hardpoints/secondary/tow.dm
index 30eadf224bda..7b0e0ea90a27 100644
--- a/code/modules/vehicles/hardpoints/secondary/tow.dm
+++ b/code/modules/vehicles/hardpoints/secondary/tow.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/secondary/towlauncher
- name = "TOW Launcher"
+ name = "\improper TOW Launcher"
desc = "A secondary weapon for tanks that shoots rockets"
icon_state = "tow_launcher"
diff --git a/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm b/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm
index f051d9a21bb5..5561ee48357d 100644
--- a/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm
+++ b/code/modules/vehicles/hardpoints/special/firing_port_weapon.dm
@@ -1,6 +1,6 @@
//this is Cupola guns that are fired from the sides of APC by support gunners
/obj/item/hardpoint/special/firing_port_weapon
- name = "M56 FPW"
+ name = "\improper M56 FPW"
desc = "A modified M56B Smartgun installed on the sides of M577 Armored Personnel Carrier as a Firing Port Weapon. Used by support gunners to cover friendly infantry at APC sides."
icon = 'icons/obj/vehicles/hardpoints/apc.dmi'
diff --git a/code/modules/vehicles/hardpoints/support/artillery.dm b/code/modules/vehicles/hardpoints/support/artillery.dm
index dfcdcaf73f74..dc3db8a3db0d 100644
--- a/code/modules/vehicles/hardpoints/support/artillery.dm
+++ b/code/modules/vehicles/hardpoints/support/artillery.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/support/artillery_module
- name = "Artillery Module"
+ name = "\improper Artillery Module"
desc = "Allows the user to look far into the distance."
icon_state = "artillery"
diff --git a/code/modules/vehicles/hardpoints/support/flare.dm b/code/modules/vehicles/hardpoints/support/flare.dm
index da1390b861d4..0fa37de34d2f 100644
--- a/code/modules/vehicles/hardpoints/support/flare.dm
+++ b/code/modules/vehicles/hardpoints/support/flare.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/support/flare_launcher
- name = "M-87F Flare Launcher"
+ name = "\improper M-87F Flare Launcher"
desc = "A support module for APCs that shoots flares."
icon = 'icons/obj/vehicles/hardpoints/apc.dmi'
diff --git a/code/modules/vehicles/hardpoints/support/iwsa.dm b/code/modules/vehicles/hardpoints/support/iwsa.dm
index c3de90c871b6..97fee4e0551a 100644
--- a/code/modules/vehicles/hardpoints/support/iwsa.dm
+++ b/code/modules/vehicles/hardpoints/support/iwsa.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/support/weapons_sensor
- name = "Integrated Weapons Sensor Array"
+ name = "\improper Integrated Weapons Sensor Array"
desc = "Improves the accuracy and fire rate of all onboard weapons"
icon_state = "warray"
diff --git a/code/modules/vehicles/hardpoints/support/overdrive.dm b/code/modules/vehicles/hardpoints/support/overdrive.dm
index 1b61d6c63dfb..4daa2fddad0a 100644
--- a/code/modules/vehicles/hardpoints/support/overdrive.dm
+++ b/code/modules/vehicles/hardpoints/support/overdrive.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/support/overdrive_enhancer
- name = "Overdrive Enhancer"
+ name = "\improper Overdrive Enhancer"
desc = "Increases the movement speed of the vehicle it's attached to"
icon_state = "odrive_enhancer"
diff --git a/code/modules/vehicles/hardpoints/wheels/apc_wheels.dm b/code/modules/vehicles/hardpoints/wheels/apc_wheels.dm
index 62c5e430c747..4bf8ca59e2ca 100644
--- a/code/modules/vehicles/hardpoints/wheels/apc_wheels.dm
+++ b/code/modules/vehicles/hardpoints/wheels/apc_wheels.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/locomotion/apc_wheels
- name = "APC Wheels"
+ name = "\improper APC Wheels"
desc = "Integral to the movement of the APC."
icon = 'icons/obj/vehicles/hardpoints/apc.dmi'
diff --git a/code/modules/vehicles/hardpoints/wheels/arc_wheels.dm b/code/modules/vehicles/hardpoints/wheels/arc_wheels.dm
index 9bb6c31746e0..17726e75c024 100644
--- a/code/modules/vehicles/hardpoints/wheels/arc_wheels.dm
+++ b/code/modules/vehicles/hardpoints/wheels/arc_wheels.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/locomotion/arc_wheels
- name = "ARC Wheels"
+ name = "\improper ARC Wheels"
desc = "Integral to the movement of the ARC."
icon = 'icons/obj/vehicles/hardpoints/arc.dmi'
diff --git a/code/modules/vehicles/hardpoints/wheels/locomotion.dm b/code/modules/vehicles/hardpoints/wheels/locomotion.dm
index c05ada322a8d..a0e57c3e97d4 100644
--- a/code/modules/vehicles/hardpoints/wheels/locomotion.dm
+++ b/code/modules/vehicles/hardpoints/wheels/locomotion.dm
@@ -12,6 +12,22 @@
var/move_momentum_build_factor = 0
var/move_turn_momentum_loss_factor = 0
+/obj/item/hardpoint/locomotion/p_are(temp_gender)
+ if(!temp_gender)
+ temp_gender = gender
+ . = "is"
+ if(temp_gender == PLURAL)
+ . = "are"
+
+/obj/item/hardpoint/locomotion/p_they(capitalized, temp_gender)
+ if(!temp_gender)
+ temp_gender = gender
+ . = "it"
+ if(temp_gender == PLURAL)
+ . = "they"
+ if(capitalized)
+ . = capitalize(.)
+
/obj/item/hardpoint/locomotion/deactivate()
owner.move_delay = initial(owner.move_delay)
owner.move_max_momentum = initial(owner.move_max_momentum)
diff --git a/code/modules/vehicles/hardpoints/wheels/treads.dm b/code/modules/vehicles/hardpoints/wheels/treads.dm
index dd819ea2af03..561795b8531e 100644
--- a/code/modules/vehicles/hardpoints/wheels/treads.dm
+++ b/code/modules/vehicles/hardpoints/wheels/treads.dm
@@ -1,5 +1,5 @@
/obj/item/hardpoint/locomotion/treads
- name = "Treads"
+ name = "\improper Treads"
desc = "Integral to the movement of the vehicle."
icon_state = "treads"
@@ -17,7 +17,7 @@
move_turn_momentum_loss_factor = 0.6
/obj/item/hardpoint/locomotion/treads/robust
- name = "Reinforced Treads"
+ name = "\improper Reinforced Treads"
desc = "These treads are made of a tougher material and are more durable. However, the extra weight slows the tank down slightly."
health = 500
diff --git a/code/modules/vehicles/multitile/multitile.dm b/code/modules/vehicles/multitile/multitile.dm
index ce118fd14c56..bcd48c3633be 100644
--- a/code/modules/vehicles/multitile/multitile.dm
+++ b/code/modules/vehicles/multitile/multitile.dm
@@ -258,7 +258,7 @@
/obj/vehicle/multitile/get_examine_text(mob/user)
. = ..()
for(var/obj/item/hardpoint/H in hardpoints)
- . += "There is \a [H] module installed."
+ . += "There [H.p_are()] \a [H] module[H.p_s()] installed."
H.examine(user, TRUE)
if(clamped)
. += "There is a vehicle clamp attached."
@@ -267,7 +267,7 @@
for(var/datum/role_reserved_slots/RRS in interior.role_reserved_slots)
passengers_amount += RRS.taken
if(passengers_amount > 0)
- . += "You can sense approximately [passengers_amount] hosts inside."
+ . += "You can sense approximately [passengers_amount] host\s inside."
/obj/vehicle/multitile/proc/load_hardpoints()
return
From a26c0a4318f8fd00c78027e996d4ef4dcf89abf3 Mon Sep 17 00:00:00 2001
From: cm13-github <128137806+cm13-github@users.noreply.github.com>
Date: Fri, 5 Jul 2024 02:58:49 +0100
Subject: [PATCH 20/20] Automatic changelog for PR #6523 [ci skip]
---
html/changelogs/AutoChangeLog-pr-6523.yml | 4 ++++
1 file changed, 4 insertions(+)
create mode 100644 html/changelogs/AutoChangeLog-pr-6523.yml
diff --git a/html/changelogs/AutoChangeLog-pr-6523.yml b/html/changelogs/AutoChangeLog-pr-6523.yml
new file mode 100644
index 000000000000..8a3caa8e33e9
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-6523.yml
@@ -0,0 +1,4 @@
+author: "Drathek"
+delete-after: True
+changes:
+ - spellcheck: "Fix grammar and plurality for vehicles and their hardpoints"
\ No newline at end of file