From 9ab624544be55a2d11b795834a86ce9d69c0ea9a Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Mon, 19 Jul 2021 23:04:23 -0400 Subject: [PATCH 01/23] Preserve dynamic lumcount through turf changes Credit to Rohesie --- code/game/turfs/turf_changing.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/game/turfs/turf_changing.dm b/code/game/turfs/turf_changing.dm index 85292aa2b3..492f3ef65b 100644 --- a/code/game/turfs/turf_changing.dm +++ b/code/game/turfs/turf_changing.dm @@ -41,6 +41,7 @@ var/old_directional_opacity = directional_opacity var/old_outdoors = outdoors var/old_dangerous_objects = dangerous_objects + var/old_dynamic_lumcount = dynamic_lumcount var/turf/Ab = GetAbove(src) if(Ab) @@ -111,6 +112,8 @@ lighting_corner_SW = old_lighting_corner_SW lighting_corner_NW = old_lighting_corner_NW + dynamic_lumcount = old_dynamic_lumcount + if(SSlighting.subsystem_initialized) lighting_object = old_lighting_object From 86fc5c3751ff5cab24fbffd0e8a111bf78273d8f Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Mon, 19 Jul 2021 23:05:16 -0400 Subject: [PATCH 02/23] Optimize a few things in overlay lighting procs Credit to Rohesie --- code/datums/components/overlay_lighting.dm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index b6a812ce9a..9bc3820494 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -171,8 +171,7 @@ ///Clears the affected_turfs lazylist, removing from its contents the effects of being near the light. /datum/component/overlay_lighting/proc/clean_old_turfs() - for(var/t in affected_turfs) - var/turf/lit_turf = t + for(var/turf/lit_turf as anything in affected_turfs) lit_turf.dynamic_lumcount -= lum_power affected_turfs = null @@ -182,9 +181,12 @@ if(!current_holder) return var/atom/movable/light_source = GET_LIGHT_SOURCE + . = list() for(var/turf/lit_turf in view(lumcount_range, get_turf(light_source))) lit_turf.dynamic_lumcount += lum_power - LAZYADD(affected_turfs, lit_turf) + . += lit_turf + if(length(.)) + affected_turfs = . ///Clears the old affected turfs and populates the new ones. @@ -431,8 +433,7 @@ . = lum_power lum_power = new_lum_power var/difference = . - lum_power - for(var/t in affected_turfs) - var/turf/lit_turf = t + for(var/turf/lit_turf as anything in affected_turfs) lit_turf.dynamic_lumcount -= difference ///Moves the light directional_atom that emits our "light" based on our position and our direction From a4fdfd5d93b5a55b244e5c8285f1c7e2c080efcb Mon Sep 17 00:00:00 2001 From: Heroman Date: Tue, 20 Jul 2021 16:06:49 +1000 Subject: [PATCH 03/23] Fixes some more potential issues with empty lines on examine --- code/modules/vore/eating/living_vr.dm | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 0a430cf044..07022d283b 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -300,8 +300,11 @@ var/list/message_list = list() for (var/belly in vore_organs) var/obj/belly/B = belly - message_list += B.get_examine_msg() - message_list += B.get_examine_msg_absorbed() + var/bellymessage = B.get_examine_msg() + if(bellymessage) message_list += bellymessage + + bellymessage = B.get_examine_msg_absorbed() + if(bellymessage) message_list += bellymessage return message_list @@ -519,7 +522,7 @@ // Their AI should get notified so they can stab us prey.ai_holder?.react_to_attack(user) - + //Timer and progress bar if(!do_after(user, swallow_time, prey, exclusive = TASK_USER_EXCLUSIVE)) return FALSE // Prey escpaed (or user disabled) before timer expired. From 7e2c8508504815b448bd57ef6eb450f5fe6d3c54 Mon Sep 17 00:00:00 2001 From: Heroman Date: Tue, 20 Jul 2021 16:30:45 +1000 Subject: [PATCH 04/23] Finishes purge of Industrial Expansion --- code/game/objects/random/mapping.dm | 12 ++++---- code/modules/mining/alloys.dm | 3 +- code/modules/mining/drilling/drill.dm | 10 +++---- code/modules/mining/drilling/scanner.dm | 8 +++--- code/modules/mining/mine_turfs.dm | 8 +++--- code/modules/mining/ore.dm | 8 +++--- code/modules/mining/ore_datum.dm | 7 +++-- code/modules/random_map/noise/ore.dm | 36 ++++++++++++------------ maps/expedition_vr/aerostat/_aerostat.dm | 3 +- maps/tether/tether_turfs.dm | 11 +------- 10 files changed, 49 insertions(+), 57 deletions(-) diff --git a/code/game/objects/random/mapping.dm b/code/game/objects/random/mapping.dm index 06a5e75fd1..f61567d6de 100644 --- a/code/game/objects/random/mapping.dm +++ b/code/game/objects/random/mapping.dm @@ -464,7 +464,7 @@ /obj/random/multiple/ore_pile/item_to_spawn() return pick( - prob(10);list( + /*prob(10);list( /obj/item/weapon/ore/bauxite, /obj/item/weapon/ore/bauxite, /obj/item/weapon/ore/bauxite, @@ -475,7 +475,7 @@ /obj/item/weapon/ore/bauxite, /obj/item/weapon/ore/bauxite, /obj/item/weapon/ore/bauxite - ), + ),*/ prob(10);list( /obj/item/weapon/ore/coal, /obj/item/weapon/ore/coal, @@ -488,7 +488,7 @@ /obj/item/weapon/ore/coal, /obj/item/weapon/ore/coal ), - prob(10);list( + /*prob(10);list( /obj/item/weapon/ore/copper, /obj/item/weapon/ore/copper, /obj/item/weapon/ore/copper, @@ -499,7 +499,7 @@ /obj/item/weapon/ore/copper, /obj/item/weapon/ore/copper, /obj/item/weapon/ore/copper - ), + ),*/ prob(3);list( /obj/item/weapon/ore/diamond, /obj/item/weapon/ore/diamond, @@ -598,11 +598,11 @@ prob(2);list( /obj/item/weapon/ore/verdantium, /obj/item/weapon/ore/verdantium - ), + ),/* prob(2);list( /obj/item/weapon/ore/void_opal, /obj/item/weapon/ore/void_opal - ), + ),*/ ) /obj/random/multiple/corp_crate diff --git a/code/modules/mining/alloys.dm b/code/modules/mining/alloys.dm index 219a2becdb..4ca7e64571 100644 --- a/code/modules/mining/alloys.dm +++ b/code/modules/mining/alloys.dm @@ -44,7 +44,7 @@ "sand" = 2 ) product = /obj/item/stack/material/glass/phoronglass - +/* /datum/alloy/bronze metaltag = "bronze" requires = list( @@ -52,3 +52,4 @@ "tin" = 1 ) product = /obj/item/stack/material/bronze +*/ \ No newline at end of file diff --git a/code/modules/mining/drilling/drill.dm b/code/modules/mining/drilling/drill.dm index f1b8816c8a..b8618ccf86 100644 --- a/code/modules/mining/drilling/drill.dm +++ b/code/modules/mining/drilling/drill.dm @@ -28,9 +28,9 @@ "hydrogen" = /obj/item/weapon/ore/hydrogen, "silicates" = /obj/item/weapon/ore/glass, "carbon" = /obj/item/weapon/ore/coal, - "copper" = /obj/item/weapon/ore/copper, + // "copper" = /obj/item/weapon/ore/copper, // "tin" = /obj/item/weapon/ore/tin, - "bauxite" = /obj/item/weapon/ore/bauxite, + // "bauxite" = /obj/item/weapon/ore/bauxite, "rutile" = /obj/item/weapon/ore/rutile ) @@ -44,14 +44,14 @@ // Found with an advanced laser. exotic_drilling >= 1 var/list/ore_types_uncommon = list( MAT_MARBLE = /obj/item/weapon/ore/marble, - "painite" = /obj/item/weapon/ore/painite, - "quartz" = /obj/item/weapon/ore/quartz, + //"painite" = /obj/item/weapon/ore/painite, + //"quartz" = /obj/item/weapon/ore/quartz, MAT_LEAD = /obj/item/weapon/ore/lead ) // Found with an ultra laser. exotic_drilling >= 2 var/list/ore_types_rare = list( - "void opal" = /obj/item/weapon/ore/void_opal, + //"void opal" = /obj/item/weapon/ore/void_opal, MAT_VERDANTIUM = /obj/item/weapon/ore/verdantium ) diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm index 302216b8d4..9d6eea4607 100644 --- a/code/modules/mining/drilling/scanner.dm +++ b/code/modules/mining/drilling/scanner.dm @@ -41,13 +41,13 @@ var/ore_type switch(metal) - if("silicates", "carbon", "marble", "quartz") ore_type = "surface minerals" - if("hematite", "tin", "copper", "bauxite", "lead") ore_type = "industrial metals" + if("silicates", "carbon", "marble", /*"quartz"*/) ore_type = "surface minerals" + if("hematite", /*"tin", "copper", "bauxite",*/ "lead") ore_type = "industrial metals" if("gold", "silver", "rutile") ore_type = "precious metals" - if("diamond", "painite") ore_type = "precious gems" + if("diamond", /*"painite"*/) ore_type = "precious gems" if("uranium") ore_type = "nuclear fuel" if("phoron", "osmium", "hydrogen") ore_type = "exotic matter" - if("verdantium", "void opal") ore_type = "anomalous matter" + if("verdantium", /*"void opal"*/) ore_type = "anomalous matter" if(ore_type) metals[ore_type] += T.resources[metal] diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 0b110781be..aea40de035 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -54,9 +54,9 @@ var/list/mining_overlay_cache = list() "verdantium" = /obj/item/weapon/ore/verdantium, "marble" = /obj/item/weapon/ore/marble, "lead" = /obj/item/weapon/ore/lead, - "copper" = /obj/item/weapon/ore/copper, +// "copper" = /obj/item/weapon/ore/copper, // "tin" = /obj/item/weapon/ore/tin, - "bauxite" = /obj/item/weapon/ore/bauxite, +// "bauxite" = /obj/item/weapon/ore/bauxite, // "void opal" = /obj/item/weapon/ore/void_opal, // "painite" = /obj/item/weapon/ore/painite, // "quartz" = /obj/item/weapon/ore/quartz, @@ -680,10 +680,10 @@ var/list/mining_overlay_cache = list() var/mineral_name if(rare_ore) - mineral_name = pickweight(list("marble" = 5,/* "quartz" = 15,*/ "copper" = 10, /*"tin" = 5,*/ "bauxite" = 5, "uranium" = 15, "platinum" = 20, "hematite" = 15, "rutile" = 20, "carbon" = 15, "diamond" = 3, "gold" = 15, "silver" = 15, "phoron" = 25, "lead" = 5,/* "void opal" = 1,*/ "verdantium" = 2/*, "painite" = 1*/)) + mineral_name = pickweight(list("marble" = 5,/* "quartz" = 15, "copper" = 10, "tin" = 5, "bauxite" = 5*/, "uranium" = 15, "platinum" = 20, "hematite" = 15, "rutile" = 20, "carbon" = 15, "diamond" = 3, "gold" = 15, "silver" = 15, "phoron" = 25, "lead" = 5,/* "void opal" = 1,*/ "verdantium" = 2/*, "painite" = 1*/)) else - mineral_name = pickweight(list("marble" = 3,/* "quartz" = 10,*/ "copper" = 20, /*"tin" = 15,*/ "bauxite" = 15, "uranium" = 10, "platinum" = 10, "hematite" = 70, "rutile" = 15, "carbon" = 70, "diamond" = 2, "gold" = 10, "silver" = 10, "phoron" = 20, "lead" = 3,/* "void opal" = 1,*/ "verdantium" = 1/*, "painite" = 1*/)) + mineral_name = pickweight(list("marble" = 3,/* "quartz" = 10, "copper" = 20, "tin" = 15, "bauxite" = 15*/, "uranium" = 10, "platinum" = 10, "hematite" = 70, "rutile" = 15, "carbon" = 70, "diamond" = 2, "gold" = 10, "silver" = 10, "phoron" = 20, "lead" = 3,/* "void opal" = 1,*/ "verdantium" = 1/*, "painite" = 1*/)) if(mineral_name && (mineral_name in GLOB.ore_data)) mineral = GLOB.ore_data[mineral_name] diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm index dc95d0e082..4fc2091b03 100644 --- a/code/modules/mining/ore.dm +++ b/code/modules/mining/ore.dm @@ -106,7 +106,7 @@ icon_state = "ore_lead" material = MAT_LEAD origin_tech = list(TECH_MATERIAL = 3) - +/* /obj/item/weapon/ore/copper name = "raw copper" icon_state = "ore_copper" @@ -121,12 +121,12 @@ name = "raw bauxite" icon_state = "ore_bauxite" material = "bauxite" - +*/ /obj/item/weapon/ore/rutile name = "raw rutile" icon_state = "ore_rutile" material = "rutile" - +/* /obj/item/weapon/ore/void_opal name = "raw void opal" icon_state = "ore_void_opal" @@ -141,7 +141,7 @@ name = "raw quartz" icon_state = "ore_quartz" material = "quartz" - +*/ /obj/item/weapon/ore/slag name = "Slag" desc = "Someone screwed up..." diff --git a/code/modules/mining/ore_datum.dm b/code/modules/mining/ore_datum.dm index 5a26dcf0fd..382e31b8bd 100644 --- a/code/modules/mining/ore_datum.dm +++ b/code/modules/mining/ore_datum.dm @@ -175,7 +175,7 @@ ore = /obj/item/weapon/ore/lead scan_icon = "mineral_rare" reagent = "lead" - +/* /ore/copper name = "copper" display_name = "copper" @@ -215,7 +215,7 @@ ore = /obj/item/weapon/ore/bauxite scan_icon = "mineral_common" reagent = "aluminum" - +*/ /ore/rutile name = "rutile" display_name = "rutile" @@ -225,7 +225,7 @@ alloy = 1 ore = /obj/item/weapon/ore/rutile scan_icon = "mineral_uncommon" - +/* /ore/painite name = "painite" display_name = "rough painite" @@ -243,3 +243,4 @@ spread_chance = 1 ore = /obj/item/weapon/ore/void_opal scan_icon = "mineral_rare" +*/ \ No newline at end of file diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm index f83f957c52..a2aaec2d75 100644 --- a/code/modules/random_map/noise/ore.dm +++ b/code/modules/random_map/noise/ore.dm @@ -64,13 +64,13 @@ T.resources["hydrogen"] = 0 T.resources["verdantium"] = 0 T.resources["lead"] = 0 - T.resources["copper"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) - T.resources["tin"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) - T.resources["bauxite"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) + //T.resources["copper"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) + //T.resources["tin"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) + //T.resources["bauxite"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["rutile"] = 0 - T.resources["void opal"] = 0 - T.resources["quartz"] = 0 - T.resources["painite"] = 0 + //T.resources["void opal"] = 0 + //T.resources["quartz"] = 0 + //T.resources["painite"] = 0 else if(current_cell < deep_val) // Rare metals. T.resources["gold"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) T.resources["silver"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) @@ -83,13 +83,13 @@ T.resources["diamond"] = 0 T.resources["hematite"] = 0 T.resources["marble"] = 0 - T.resources["copper"] = 0 - T.resources["tin"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) - T.resources["bauxite"] = 0 + //T.resources["copper"] = 0 + //T.resources["tin"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX) + //T.resources["bauxite"] = 0 T.resources["rutile"] = rand(RESOURCE_LOW_MIN, RESOURCE_MID_MAX) - T.resources["void opal"] = 0 - T.resources["quartz"] = 0 - T.resources["painite"] = 0 + //T.resources["void opal"] = 0 + //T.resources["quartz"] = 0 + //T.resources["painite"] = 0 else // Deep metals. T.resources["uranium"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) T.resources["diamond"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX) @@ -102,13 +102,13 @@ T.resources["hematite"] = 0 T.resources["gold"] = 0 T.resources["silver"] = 0 - T.resources["copper"] = 0 - T.resources["tin"] = 0 - T.resources["bauxite"] = 0 + //T.resources["copper"] = 0 + //T.resources["tin"] = 0 + //T.resources["bauxite"] = 0 T.resources["rutile"] = rand(RESOURCE_MID_MIN, RESOURCE_HIGH_MAX) - T.resources["void opal"] = 0 - T.resources["quartz"] = 0 - T.resources["painite"] = 0 + //T.resources["void opal"] = 0 + //T.resources["quartz"] = 0 + //T.resources["painite"] = 0 return /datum/random_map/noise/ore/get_map_char(var/value) diff --git a/maps/expedition_vr/aerostat/_aerostat.dm b/maps/expedition_vr/aerostat/_aerostat.dm index 783156b982..460771bf9c 100644 --- a/maps/expedition_vr/aerostat/_aerostat.dm +++ b/maps/expedition_vr/aerostat/_aerostat.dm @@ -135,7 +135,7 @@ VIRGO2_TURF_CREATE(/turf/simulated/mineral) if(mineral) return - var/mineral_name = pickweight(list("marble" = 5, "uranium" = 5, "platinum" = 5, "hematite" = 5, "carbon" = 5, "diamond" = 5, "gold" = 5, "silver" = 5, "lead" = 5, "verdantium" = 5, "rutile" = 10, "copper" = 5, "tin" = 5, "bauxite" = 5)) + var/mineral_name = pickweight(list("marble" = 5, "uranium" = 5, "platinum" = 5, "hematite" = 5, "carbon" = 5, "diamond" = 5, "gold" = 5, "silver" = 5, "lead" = 5, "verdantium" = 5, "rutile" = 20)) if(mineral_name && (mineral_name in GLOB.ore_data)) mineral = GLOB.ore_data[mineral_name] @@ -213,4 +213,3 @@ VIRGO2_TURF_CREATE(/turf/simulated/floor/hull) name = "V4 Outpost - Power Room" /area/tether_away/aerostat/surface/outpost/guardpost name = "V4 Outpost - Guard Post" - \ No newline at end of file diff --git a/maps/tether/tether_turfs.dm b/maps/tether/tether_turfs.dm index e10c6a5fe0..0bf0ef290f 100644 --- a/maps/tether/tether_turfs.dm +++ b/maps/tether/tether_turfs.dm @@ -69,10 +69,6 @@ VIRGO3B_TURF_CREATE(/turf/simulated/mineral/floor) "uranium" = 10, "platinum" = 10, "hematite" = 20, - "copper" = 8, -// "tin" = 4, - "bauxite" = 4, - "rutile" = 4, "carbon" = 20, "diamond" = 1, "gold" = 8, @@ -86,10 +82,6 @@ VIRGO3B_TURF_CREATE(/turf/simulated/mineral/floor) "uranium" = 5, "platinum" = 5, "hematite" = 35, - "copper" = 15, -// "tin" = 10, - "bauxite" = 10, - "rutile" = 10, "carbon" = 35, "gold" = 3, "silver" = 3, @@ -272,7 +264,7 @@ VIRGO3B_TURF_CREATE(/turf/simulated/mineral/floor) new_junction |= (1<<5) icon_state = "[base_icon_state]-[new_junction]" - + add_vis_overlay('icons/effects/effects.dmi', "white", plane = SPACE_PLANE, add_vis_flags = VIS_INHERIT_ID|VIS_UNDERLAY) /turf/space/v3b_midpoint/Initialize() @@ -283,4 +275,3 @@ VIRGO3B_TURF_CREATE(/turf/simulated/mineral/floor) . = ..() for(var/obj/effect/step_trigger/teleporter/planetary_fall/virgo3b/F in src) qdel(F) - \ No newline at end of file From 956c1aa45bf5b33ce3c0db8c4cd264e1c8650b88 Mon Sep 17 00:00:00 2001 From: Heroman Date: Tue, 20 Jul 2021 16:46:29 +1000 Subject: [PATCH 05/23] Should allow pAI to resize in dorms (as well as any other user of Set Size) --- code/modules/vore/resizing/resize_vr.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index 3d7086f9c3..ec2aead7de 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -78,7 +78,7 @@ var/datum/component/resize_guard/guard = GetComponent(/datum/component/resize_guard) if(guard) qdel(guard) - + if(size_multiplier == new_size) return 1 @@ -143,7 +143,7 @@ var/nagmessage = "Adjust your mass to be a size between 25 to 200% (or 1% to 600% in dormitories). (DO NOT ABUSE)" var/new_size = input(nagmessage, "Pick a Size") as num|null if(size_range_check(new_size)) - resize(new_size/100) + resize(new_size/100, uncapped = has_large_resize_bounds(), ignore_prefs = TRUE) // I'm not entirely convinced that `src ? ADMIN_JMP(src) : "null"` here does anything // but just in case it does, I'm leaving the null-src checking message_admins("[key_name(src)] used the resize command in-game to be [new_size]% size. [src ? ADMIN_JMP(src) : "null"]") From 40f038fc9173a89a451cf18e5c003991f075f522 Mon Sep 17 00:00:00 2001 From: Heroman Date: Tue, 20 Jul 2021 19:12:12 +1000 Subject: [PATCH 06/23] Adds xenochimera water breathing trait + refactors water breathing --- .../living/carbon/human/species/outsider/event.dm | 6 +----- .../carbon/human/species/shadekin/shadekin.dm | 4 +--- .../mob/living/carbon/human/species/species.dm | 5 +++-- .../carbon/human/species/station/alraune.dm | 4 +--- .../carbon/human/species/station/blank_vr.dm | 6 ------ .../carbon/human/species/station/station.dm | 5 ++--- .../carbon/human/species/station/station_vr.dm | 15 ++++++--------- .../human/species/station/traits_vr/positive.dm | 1 + .../human/species/station/xenochimera_trait_vr.dm | 11 ++++++++++- 9 files changed, 25 insertions(+), 32 deletions(-) diff --git a/code/modules/mob/living/carbon/human/species/outsider/event.dm b/code/modules/mob/living/carbon/human/species/outsider/event.dm index f88768aa74..32c3314b0b 100644 --- a/code/modules/mob/living/carbon/human/species/outsider/event.dm +++ b/code/modules/mob/living/carbon/human/species/outsider/event.dm @@ -112,7 +112,6 @@ Variables you may want to make use of are: ) var/use_bodyshape = SPECIES_HUMAN - var/waterbreathing = 0 var/overcome_gravity = 0 var/hover = 0 @@ -199,7 +198,7 @@ Variables you may want to make use of are: /datum/species/event1/proc/toggle_cloning() flags ^= NO_SCAN - + /datum/species/event1/proc/toggle_defibbing() flags ^= NO_DEFIB @@ -215,9 +214,6 @@ Variables you may want to make use of are: /datum/species/event1/get_bodytype(var/mob/living/carbon/human/H) //Default to human sprites, if they're based on another species, var edit use_bodyshape to the correct thing in _defines/mobs.dm of the species you want to use. return use_bodyshape -/datum/species/event1/can_breathe_water() - return waterbreathing - /datum/species/event1/can_overcome_gravity(var/mob/living/carbon/human/H) return overcome_gravity diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm index 6af26d350e..37872564c3 100644 --- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin.dm @@ -70,6 +70,7 @@ breath_type = null poison_type = null + water_breather = TRUE //They don't quite breathe vision_flags = SEE_SELF|SEE_MOBS appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_SKIN_COLOR | HAS_EYE_COLOR | HAS_UNDERWEAR @@ -131,9 +132,6 @@ /datum/species/shadekin/handle_environment_special(var/mob/living/carbon/human/H) handle_shade(H) -/datum/species/shadekin/can_breathe_water() - return TRUE //they dont quite breathe - /datum/species/shadekin/add_inherent_verbs(var/mob/living/carbon/human/H) ..() add_shadekin_abilities(H) diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 57da920cbb..459f90c5a5 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -107,7 +107,7 @@ var/alcohol_mod = 1 // Multiplier to alcohol strength; 0.5 = half, 0 = no effect at all, 2 = double, etc. var/pain_mod = 1 // Multiplier to pain effects; 0.5 = half, 0 = no effect (equal to NO_PAIN, really), 2 = double, etc. var/spice_mod = 1 // Multiplier to spice/capsaicin/frostoil effects; 0.5 = half, 0 = no effect (immunity), 2 = double, etc. - var/trauma_mod = 1 // Affects traumatic shock (how fast pain crit happens). 0 = no effect (immunity to pain crit), 2 = double etc.Overriden by "can_feel_pain" var + var/trauma_mod = 1 // Affects traumatic shock (how fast pain crit happens). 0 = no effect (immunity to pain crit), 2 = double etc.Overriden by "can_feel_pain" var // set below is EMP interactivity for nonsynth carbons var/emp_sensitivity = 0 // bitflag. valid flags are: EMP_PAIN, EMP_BLIND, EMP_DEAFEN, EMP_CONFUSE, EMP_STUN, and EMP_(BRUTE/BURN/TOX/OXY)_DMG var/emp_dmg_mod = 1 // Multiplier to all EMP damage sustained by the mob, if it's EMP-sensitive @@ -129,6 +129,7 @@ var/breath_type = "oxygen" // Non-oxygen gas breathed, if any. var/poison_type = "phoron" // Poisonous air. var/exhale_type = "carbon_dioxide" // Exhaled gas type. + var/water_breather = FALSE var/body_temperature = 310.15 // Species will try to stabilize at this temperature. (also affects temperature processing) @@ -499,7 +500,7 @@ // Called when lying down on a water tile. /datum/species/proc/can_breathe_water() - return FALSE + return water_breather // Impliments different trails for species depending on if they're wearing shoes. /datum/species/proc/get_move_trail(var/mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species/station/alraune.dm b/code/modules/mob/living/carbon/human/species/station/alraune.dm index 189eeb425d..12424f993c 100644 --- a/code/modules/mob/living/carbon/human/species/station/alraune.dm +++ b/code/modules/mob/living/carbon/human/species/station/alraune.dm @@ -20,6 +20,7 @@ breath_type = "oxygen" poison_type = "phoron" exhale_type = "oxygen" + water_breather = TRUE //eh, why not? Aquatic plants are a thing. // Heat and cold resistances are 20 degrees broader on the level 1 range, level 2 is default, level 3 is much weaker, halfway between L2 and normal L3. // Essentially, they can tolerate a broader range of comfortable temperatures, but suffer more at extremes. @@ -90,9 +91,6 @@ A_FRUIT = /obj/item/organ/internal/fruitgland, ) -/datum/species/alraune/can_breathe_water() - return TRUE //eh, why not? Aquatic plants are a thing. - /datum/species/alraune/handle_environment_special(var/mob/living/carbon/human/H) if(H.inStasisNow()) // if they're in stasis, they won't need this stuff. diff --git a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm index 7f5cb24989..bba44edf36 100644 --- a/code/modules/mob/living/carbon/human/species/station/blank_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/blank_vr.dm @@ -57,12 +57,6 @@ // Stub species overrides for shoving trait abilities into -//Called when face-down in the water or otherwise over their head. -// Return: TRUE for able to breathe fine in water. -/datum/species/custom/can_breathe_water() - return /datum/trait/positive/water_breather in traits - - //Called during handle_environment in Life() ticks. // Return: Not used. /datum/species/custom/handle_environment_special(var/mob/living/carbon/human/H) diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index 3b2f9f0b3b..5bb036f5bd 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -340,6 +340,8 @@ reagent_tag = IS_SKRELL allergens = ALLERGEN_MEAT|ALLERGEN_FISH|ALLERGEN_DAIRY|ALLERGEN_EGGS + water_breather = TRUE + has_limbs = list( BP_TORSO = list("path" = /obj/item/organ/external/chest), BP_GROIN = list("path" = /obj/item/organ/external/groin), @@ -354,9 +356,6 @@ BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right) ) -/datum/species/skrell/can_breathe_water() - return TRUE - /datum/species/zaddat name = SPECIES_ZADDAT name_plural = "Zaddat" diff --git a/code/modules/mob/living/carbon/human/species/station/station_vr.dm b/code/modules/mob/living/carbon/human/species/station/station_vr.dm index b6b5463405..96453b5e7b 100644 --- a/code/modules/mob/living/carbon/human/species/station/station_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/station_vr.dm @@ -104,13 +104,12 @@ spawn_flags = SPECIES_CAN_JOIN appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_UNDERWEAR | HAS_SKIN_COLOR | HAS_EYE_COLOR + water_breather = TRUE + flesh_color = "#AFA59E" base_color = "#777777" blood_color = "#1D2CBF" -/datum/species/akula/can_breathe_water() - return TRUE // Surprise, SHERKS. - /datum/species/nevrean name = SPECIES_NEVREAN name_plural = "Nevreans" @@ -295,7 +294,7 @@ /datum/species/zaddat spawn_flags = SPECIES_CAN_JOIN min_age = 18 - inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair) //I don't even know if Zaddat can HAVE hair, but here we are, I suppose + inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair) //I don't even know if Zaddat can HAVE hair, but here we are, I suppose gluttonous = 0 genders = list(MALE, FEMALE, PLURAL, NEUTER) descriptors = list() @@ -336,7 +335,7 @@ /datum/species/vox gluttonous = 0 spawn_flags = SPECIES_CAN_JOIN | SPECIES_IS_WHITELISTED | SPECIES_WHITELIST_SELECTABLE - min_age = 18 + min_age = 18 inherent_verbs = list(/mob/living/carbon/human/proc/tie_hair) //Get ya quills done did icobase = 'icons/mob/human_races/r_vox_old.dmi' deform = 'icons/mob/human_races/r_def_vox_old.dmi' @@ -456,6 +455,7 @@ breath_type = null poison_type = null + water_breather = TRUE //They do not quite breathe... appearance_flags = HAS_HAIR_COLOR | HAS_LIPS | HAS_SKIN_COLOR | HAS_UNDERWEAR @@ -486,12 +486,9 @@ BP_R_FOOT = list("path" = /obj/item/organ/external/foot/right/crewkin) ) -/datum/species/shadekin/get_bodytype() +/datum/species/crew_shadekin/get_bodytype() return SPECIES_SHADEKIN -/datum/species/shadekin/can_breathe_water() - return TRUE //they dont quite breathe - //These species are not really species but are just there for custom species selection /datum/species/fl_zorren diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm index 0298f370df..ca67f1bb05 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm @@ -158,3 +158,4 @@ name = "Water Breather" desc = "You can breathe under water." cost = 1 + var_changes = list("water_breather" = 1) diff --git a/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm b/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm index 2065d91cc4..bd1eb55172 100644 --- a/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm +++ b/code/modules/mob/living/carbon/human/species/station/xenochimera_trait_vr.dm @@ -1,4 +1,4 @@ -/* +/* ** For now, these are just neutral traits for Xenochimera only to take. ** These are only traits that they should reasonably be able to evolve to acquire themselves. ** I won't add the resistances though because those are kinda lame for a 'chimera to take! @@ -49,3 +49,12 @@ cost = 0 category = 0 custom_only = FALSE + +/datum/trait/positive/water_breather/xenochimera + sort = TRAIT_SORT_SPECIES + allowed_species = list(SPECIES_XENOCHIMERA) + name = "Xenochimera: Water Breather" + desc = "You can breathe under water." + cost = 0 + category = 0 + custom_only = FALSE \ No newline at end of file From 60bf7404c531c846df3dd4c4bb63658825ffffde Mon Sep 17 00:00:00 2001 From: VerySoft Date: Tue, 20 Jul 2021 05:18:35 -0400 Subject: [PATCH 07/23] Smole gateway tweak For something presently unused. --- code/modules/awaymissions/gateway.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index a89bd5e714..69fec5dcdf 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -176,6 +176,8 @@ GLOBAL_DATUM(gateway_station, /obj/machinery/gateway/centerstation) //VOREStation Addition Start: Abduction! if(istype(M, /mob/living) && dest.abductor) var/mob/living/L = M + if(L.nutrition > 500) + L.nutrition = 500 //If the aim is to negate people overpreparing, then they shouldn't be able to stuff themselves full of food either. //Situations to get the mob out of if(L.buckled) L.buckled.unbuckle_mob() From bcea1b71ad6535250a0c1e6b15af112aeeb9a7fe Mon Sep 17 00:00:00 2001 From: VerySoft Date: Tue, 20 Jul 2021 07:08:35 -0400 Subject: [PATCH 08/23] Allows hiding mobs/areas from observers without completely forbidding Basically for more common usage for place we would prefer people couldn't peek into before people are there ICly, like gateways. --- code/game/objects/effects/landmarks.dm | 9 +++++++++ code/modules/mob/dead/observer/observer.dm | 6 +++++- maps/~map_system/maps.dm | 1 + 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index d87c5f5bfa..ce1535601f 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -117,6 +117,15 @@ else log_error("[type] mapped in but no using_map") +/obj/effect/landmark/hidden_level + delete_me = 1 +/obj/effect/landmark/hidden_level/Initialize() + . = ..() + if(using_map) + using_map.hidden_levels |= z + else + log_error("[type] mapped in but no using_map") + /obj/effect/landmark/virtual_reality name = "virtual_reality" diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 885d6df5fe..350eef1967 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -341,6 +341,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/area/A = areas[key] if(A.z in using_map?.secret_levels) areas -= key + if(A.z in using_map?.hidden_levels) + areas -= key return areas @@ -353,7 +355,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp var/mobz = get_z(mobs[key]) if(mobz in using_map?.secret_levels) mobs -= key - + if(mobz in using_map?.hidden_levels) + mobs -= key + return mobs /mob/observer/dead/verb/dead_tele(areaname as null|anything in jumpable_areas()) diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index 0fbbca083b..ce1dedc801 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -35,6 +35,7 @@ var/list/all_maps = list() var/static/list/xenoarch_exempt_levels = list() //Z-levels exempt from xenoarch finds and digsites spawning. var/static/list/persist_levels = list() // Z-levels where SSpersistence should persist between rounds. Defaults to station_levels if unset. var/static/list/secret_levels = list() // Z-levels that (non-admin) ghosts can't get to + var/static/list/hidden_levels = list() // Z-levels who's contents are hidden, but not forbidden (gateways) var/static/list/empty_levels = list() // Empty Z-levels that may be used for various things var/static/list/mappable_levels = list()// List of levels where mapping or other similar devices might work fully // End Static Lists From d0e495f8d83c0c37a3c56dc6312b040245447063 Mon Sep 17 00:00:00 2001 From: Mewchild Date: Tue, 20 Jul 2021 10:07:34 -0500 Subject: [PATCH 09/23] TTS Devices can now be used in chairs, and by alt clicking from pockets --- code/game/objects/items/devices/text_to_speech.dm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/devices/text_to_speech.dm b/code/game/objects/items/devices/text_to_speech.dm index e962124022..58c1490a64 100644 --- a/code/game/objects/items/devices/text_to_speech.dm +++ b/code/game/objects/items/devices/text_to_speech.dm @@ -7,7 +7,7 @@ var/named /obj/item/device/text_to_speech/attack_self(mob/user as mob) - if(user.incapacitated(INCAPACITATION_ALL)) //Are you in a state to actual use the device? + if(user.incapacitated(INCAPACITATION_KNOCKDOWN) || user.incapacitated(INCAPACITATION_DISABLED)) // EDIT: We can use the device only if we are not in certain types of incapacitation. We don't want chairs stopping us from texting!! to_chat(user, "You cannot activate the device in your state.") return @@ -27,3 +27,6 @@ audible_message("[bicon(src)] \The [src.name] states, \"[message]\"", runemessage = "synthesized speech") if(ismob(loc)) loc.audible_message("", runemessage = "\[TTS Voice\] [message]") + +/obj/item/device/text_to_speech/AltClick(mob/user) // QOL Change + attack_self(user) \ No newline at end of file From 34982728cb021ed490fc96ad6e2334d8bd706bc6 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 20 Jul 2021 12:39:59 -0400 Subject: [PATCH 10/23] Add 'as anything' to various for loops --- code/ATMOSPHERICS/pipes/he_pipes.dm | 4 +-- code/ZAS/Atom.dm | 3 +-- code/ZAS/Fire.dm | 3 +-- code/_helpers/_lists.dm | 9 +++---- code/_helpers/game.dm | 6 ++--- code/_helpers/global_lists.dm | 15 +++++------ code/_helpers/icons.dm | 6 ++--- code/_helpers/unsorted.dm | 3 +-- code/_helpers/visual_filters.dm | 3 +-- code/_onclick/hud/minihud_rigmech.dm | 6 ++--- code/controllers/master.dm | 15 ++++------- code/controllers/subsystems/assets.dm | 3 +-- code/controllers/subsystems/atoms.dm | 10 +++---- code/controllers/subsystems/chat.dm | 3 +-- code/controllers/subsystems/circuits.dm | 18 ++++++------- code/controllers/subsystems/events2.dm | 3 +-- code/controllers/subsystems/game_master.dm | 15 ++++------- code/controllers/subsystems/garbage.dm | 3 +-- code/controllers/subsystems/mapping.dm | 8 +++--- code/controllers/subsystems/persistence.dm | 5 ++-- code/controllers/subsystems/planets.dm | 6 ++--- .../subsystems/processing/instruments.dm | 7 +++-- .../subsystems/processing/projectiles.dm | 3 +-- code/controllers/subsystems/radiation.dm | 3 +-- code/controllers/subsystems/shuttles.dm | 6 ++--- code/controllers/subsystems/timer.dm | 3 +-- code/controllers/subsystems/vote.dm | 3 +-- code/controllers/subsystems/xenoarch.dm | 3 +-- code/controllers/verbs.dm | 3 +-- code/datums/chat_message.dm | 6 ++--- code/datums/components/_component.dm | 6 ++--- code/datums/components/crafting/crafting.dm | 8 +++--- code/datums/components/material_container.dm | 17 ++++++------ code/datums/components/overlay_lighting.dm | 6 ++--- code/datums/datum.dm | 9 +++---- code/datums/game_masters/default.dm | 6 ++--- .../datums/game_masters/other_game_masters.dm | 6 ++--- code/datums/helper_datums/getrev.dm | 3 +-- code/datums/observation/~cleanup.dm | 9 +++---- code/datums/orbit.dm | 6 ++--- code/datums/progressbar.dm | 3 +-- code/datums/soul_link.dm | 14 ++++------ code/game/atoms.dm | 21 +++++---------- code/game/atoms_movable.dm | 18 +++++-------- code/game/dna/dna2_helpers.dm | 3 +-- code/game/machinery/adv_med.dm | 5 ++-- code/game/machinery/adv_med_vr.dm | 3 +-- code/game/machinery/autolathe.dm | 5 ++-- code/game/machinery/computer/card.dm | 3 +-- code/game/machinery/cryopod.dm | 3 +-- code/game/machinery/doors/airlock.dm | 6 ++--- code/game/machinery/frame.dm | 5 ++-- code/game/machinery/jukebox.dm | 3 +-- code/game/machinery/machinery.dm | 3 +-- code/game/machinery/partslathe_vr.dm | 3 +-- code/game/machinery/pointdefense.dm | 9 +++---- code/game/machinery/portable_turret.dm | 5 ++-- code/game/objects/buckling.dm | 3 +-- code/game/objects/effects/alien/aliens.dm | 3 +-- .../objects/effects/map_effects/portal.dm | 27 +++++++------------ .../effects/map_effects/screen_shaker.dm | 3 +-- .../temporary_visuals/projectiles/tracer.dm | 3 +-- .../items/devices/communicator/UI_tgui.dm | 3 +-- code/game/objects/items/devices/hacktool.dm | 3 +-- .../objects/items/devices/radio/jammer.dm | 3 +-- code/game/objects/items/devices/scanners.dm | 9 +++---- .../game/objects/items/devices/scanners_vr.dm | 3 +-- code/game/objects/items/stacks/medical_vr.dm | 6 ++--- code/game/objects/structures.dm | 3 +-- code/game/objects/structures/electricchair.dm | 3 +-- code/game/objects/structures/janicart.dm | 6 ++--- .../structures/stool_bed_chair_nest/chairs.dm | 6 ++--- .../stool_bed_chair_nest/wheelchair.dm | 9 +++---- code/game/objects/structures/watercloset.dm | 9 +++---- code/game/sound.dm | 3 +-- code/game/turfs/turf.dm | 10 +++---- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 6 ++--- code/modules/admin/verbs/adminhelp.dm | 12 +++------ code/modules/admin/verbs/randomverbs.dm | 3 +-- .../admin/view_variables/modify_variables.dm | 3 +-- code/modules/ai/ai_holder.dm | 8 +++--- code/modules/ai/ai_holder_combat.dm | 3 +-- code/modules/ai/ai_holder_communication.dm | 3 +-- code/modules/assembly/infrared.dm | 3 +-- code/modules/asset_cache/asset_list_items.dm | 3 +-- code/modules/blob2/blobs/base_blob.dm | 3 +-- code/modules/blob2/blobs/core.dm | 3 +-- code/modules/blob2/overmind/overmind.dm | 6 ++--- .../blob2/overmind/types/synchronous_mesh.dm | 3 +-- code/modules/catalogue/cataloguer.dm | 24 ++++++----------- code/modules/client/client procs.dm | 7 +++-- .../preference_setup/global/02_settings.dm | 6 ++--- .../preference_setup/global/setting_datums.dm | 9 +++---- .../preference_setup/loadout/loadout.dm | 7 +++-- .../loadout/loadout_accessories.dm | 24 ++++++----------- .../loadout/loadout_general.dm | 6 ++--- .../loadout/loadout_general_vr.dm | 9 +++---- .../preference_setup/loadout/loadout_head.dm | 9 +++---- .../loadout/loadout_smoking.dm | 3 +-- .../loadout/loadout_uniform.dm | 24 ++++++----------- .../loadout/loadout_uniform_vr.dm | 3 +-- .../loadout/loadout_utility.dm | 3 +-- code/modules/clothing/chameleon.dm | 5 ++-- code/modules/clothing/clothing_accessories.dm | 3 +-- code/modules/clothing/head/pilot_helmet.dm | 3 +-- code/modules/emotes/emote_mob.dm | 6 ++--- .../entopics_vr/alternate_appearance.dm | 6 ++--- code/modules/entopics_vr/entopics.dm | 6 ++--- code/modules/events/carp_migration.dm | 3 +-- code/modules/events/grubinfestation_vr.dm | 3 +-- code/modules/food/food/lunch.dm | 5 ++-- code/modules/food/food/snacks.dm | 6 ++--- .../kitchen/cooking_machines/_appliance.dm | 21 +++++---------- .../food/kitchen/cooking_machines/_mixer.dm | 3 +-- code/modules/food/kitchen/microwave.dm | 6 ++--- code/modules/gamemaster/event2/event.dm | 6 ++--- .../event2/events/engineering/blob.dm | 9 +++---- .../event2/events/engineering/grid_check.dm | 6 ++--- .../gamemaster/event2/events/mob_spawning.dm | 8 +++--- code/modules/holomap/mapper.dm | 6 ++--- .../hydroponics/spreading/spreading_growth.dm | 3 +-- .../spreading/spreading_response.dm | 6 ++--- code/modules/identification/identification.dm | 3 +-- .../instrument_data/_instrument_data.dm | 3 +-- code/modules/instruments/items.dm | 3 +-- code/modules/instruments/songs/play_legacy.dm | 3 +-- .../instruments/songs/play_synthesized.dm | 9 +++---- code/modules/looking_glass/lg_area.dm | 9 +++---- code/modules/maps/tg/map_template.dm | 6 ++--- code/modules/media/media_machinery.dm | 3 +-- code/modules/mining/fulton.dm | 3 +-- .../mining/machinery/machine_stacking.dm | 5 ++-- code/modules/mob/animations.dm | 3 +-- code/modules/mob/freelook/ai/chunk.dm | 3 +-- code/modules/mob/freelook/chunk.dm | 15 ++++------- code/modules/mob/freelook/visualnet.dm | 18 +++++-------- .../mob/living/carbon/human/human_defense.dm | 9 +++---- .../carbon/human/human_modular_limbs.dm | 6 ++--- code/modules/mob/living/carbon/human/life.dm | 6 ++--- .../species/shadekin/shadekin_abilities.dm | 6 ++--- .../human/species/species_shapeshift_vr.dm | 3 +-- .../station/protean_vr/protean_blob.dm | 6 ++--- .../station/protean_vr/protean_species.dm | 6 ++--- code/modules/mob/living/death.dm | 6 ++--- code/modules/mob/living/living.dm | 5 ++-- code/modules/mob/living/say.dm | 12 +++------ code/modules/mob/living/silicon/ai/ai.dm | 3 +-- .../living/silicon/ai/ai_remote_control.dm | 3 +-- .../modules/mob/living/silicon/ai/multicam.dm | 21 +++++---------- code/modules/mob/living/silicon/pai/pai_vr.dm | 3 +-- .../silicon/robot/dogborg/dog_sleeper_vr.dm | 3 +-- .../mob/living/silicon/robot/examine_vr.dm | 3 +-- code/modules/mob/living/simple_mob/defense.dm | 15 ++++------- .../mob/living/simple_mob/simple_mob_vr.dm | 3 +-- .../subtypes/animal/giant_spider/nurse.dm | 3 +-- .../subtypes/vore/demon/demon_abilities.dm | 12 +++------ .../living/simple_mob/subtypes/vore/lamia.dm | 6 ++--- .../subtypes/vore/shadekin/ability_procs.dm | 6 ++--- .../subtypes/vore/shadekin/shadekin.dm | 3 +-- .../subtypes/vore/solargrub_larva.dm | 3 +-- .../subtypes/vore/zz_vore_overrides.dm | 6 ++--- code/modules/mob/living/status_indicators.dm | 3 +-- code/modules/mob/mob.dm | 12 +++------ code/modules/mob/say_vr.dm | 6 ++--- .../programs/generic/ntnrc_client.dm | 12 +++------ .../hardware/network_card.dm | 3 +-- code/modules/nifsoft/nif.dm | 3 +-- code/modules/nifsoft/nif_softshop.dm | 8 +++--- code/modules/nifsoft/software/05_health.dm | 6 ++--- .../nifsoft/software/13_soulcatcher.dm | 26 +++++++----------- code/modules/organs/organ_external.dm | 3 +-- code/modules/overmap/events/event_handler.dm | 3 +-- code/modules/overmap/sectors.dm | 3 +-- .../overmap/ships/engines/gas_thruster.dm | 3 +-- code/modules/overmap/ships/panicbutton.dm | 3 +-- code/modules/paperwork/paperplane.dm | 3 +-- code/modules/pda/cart.dm | 6 ++--- code/modules/pda/cart_apps.dm | 15 ++++------- code/modules/pda/messenger.dm | 12 +++------ code/modules/pda/pda.dm | 3 +-- code/modules/pda/pda_tgui.dm | 3 +-- code/modules/planet/sif.dm | 6 ++--- code/modules/planet/virgo3b_vr.dm | 6 ++--- code/modules/planet/virgo4_vr.dm | 6 ++--- code/modules/planet/weather.dm | 3 +-- code/modules/power/gravitygenerator_vr.dm | 3 +-- code/modules/power/singularity/singularity.dm | 3 +-- code/modules/power/solar.dm | 3 +-- code/modules/power/tesla/energy_ball.dm | 3 +-- code/modules/projectiles/broken.dm | 9 +++---- .../guns/energy/cell_loaded_vr/cell_loaded.dm | 9 +++---- .../guns/energy/kinetic_accelerator_vr.dm | 12 +++------ code/modules/reagents/holder/distilling.dm | 9 +++---- code/modules/reagents/holder/holder.dm | 18 +++++-------- code/modules/reagents/machinery/grinder.dm | 3 +-- code/modules/reagents/reagents/vore_vr.dm | 6 ++--- code/modules/research/research.dm | 3 +-- code/modules/resleeving/infocore_records.dm | 3 +-- code/modules/rogueminer_vr/zonemaster.dm | 3 +-- .../security levels/security levels.dm | 3 +-- code/modules/shuttles/crashes.dm | 6 ++--- code/modules/shuttles/shuttle_console.dm | 3 +-- code/modules/shuttles/shuttles_web.dm | 3 +-- code/modules/tgs/v3210/commands.dm | 3 +-- code/modules/tgs/v4/api.dm | 6 ++--- code/modules/tgs/v5/api.dm | 6 ++--- .../tgui/modules/admin_shuttle_controller.dm | 3 +-- .../tgui/modules/appearance_changer.dm | 3 +-- code/modules/tgui/modules/camera.dm | 3 +-- .../modules/tgui/modules/ntos-only/cardmod.dm | 3 +-- code/modules/tgui/modules/ntos-only/uav.dm | 6 ++--- code/modules/virus2/admin.dm | 5 ++-- code/modules/virus2/effect.dm | 5 ++-- code/modules/vore/eating/belly_obj_vr.dm | 9 +++---- code/modules/vore/eating/bellymodes_vr.dm | 6 ++--- code/modules/vore/eating/living_vr.dm | 9 +++---- code/modules/vore/eating/vorepanel_vr.dm | 12 +++------ code/modules/xenoarcheaology/tools/tools.dm | 6 ++--- .../unit_tests/integrated_circuits/prefabs.dm | 3 +-- code/unit_tests/loadout_tests.dm | 3 +-- maps/tether/tether_shuttles.dm | 3 +-- 221 files changed, 483 insertions(+), 914 deletions(-) diff --git a/code/ATMOSPHERICS/pipes/he_pipes.dm b/code/ATMOSPHERICS/pipes/he_pipes.dm index 8b1b800830..89ecf1e2bb 100644 --- a/code/ATMOSPHERICS/pipes/he_pipes.dm +++ b/code/ATMOSPHERICS/pipes/he_pipes.dm @@ -104,9 +104,7 @@ parent.radiate_heat_to_space(surface, 1) if(has_buckled_mobs()) - for(var/M in buckled_mobs) - var/mob/living/L = M - + for(var/mob/living/L as anything in buckled_mobs) var/hc = pipe_air.heat_capacity() var/avg_temp = (pipe_air.temperature * hc + L.bodytemperature * 3500) / (hc + 3500) pipe_air.temperature = avg_temp diff --git a/code/ZAS/Atom.dm b/code/ZAS/Atom.dm index 1953c58e9f..06305182b3 100644 --- a/code/ZAS/Atom.dm +++ b/code/ZAS/Atom.dm @@ -93,8 +93,7 @@ return AIR_BLOCKED var/result = 0 - for(var/mm in contents) - var/atom/movable/M = mm + for(var/atom/movable/M as anything in contents) switch(M.can_atmos_pass) if(ATMOS_PASS_YES) continue diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 1f281d334a..e67d2ad3ac 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -71,8 +71,7 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin var/fuel_to_remove = used_liquid_fuel/(fuel_objs.len*LIQUIDFUEL_AMOUNT_TO_MOL) //convert back to liquid volume units - for(var/O in fuel_objs) - var/obj/effect/decal/cleanable/liquid_fuel/fuel = O + for(var/obj/effect/decal/cleanable/liquid_fuel/fuel as anything in fuel_objs) if(!istype(fuel)) fuel_objs -= fuel continue diff --git a/code/_helpers/_lists.dm b/code/_helpers/_lists.dm index d71897c466..c359227f05 100644 --- a/code/_helpers/_lists.dm +++ b/code/_helpers/_lists.dm @@ -127,22 +127,19 @@ //returns a new list with only atoms that are in typecache L /proc/typecache_filter_list(list/atoms, list/typecache) . = list() - for(var/thing in atoms) - var/atom/A = thing + for(var/atom/A as anything in atoms) if(typecache[A.type]) . += A /proc/typecache_filter_list_reverse(list/atoms, list/typecache) . = list() - for(var/thing in atoms) - var/atom/A = thing + for(var/atom/A as anything in atoms) if(!typecache[A.type]) . += A /proc/typecache_filter_multi_list_exclusion(list/atoms, list/typecache_include, list/typecache_exclude) . = list() - for(var/thing in atoms) - var/atom/A = thing + for(var/atom/A as anything in atoms) if(typecache_include[A.type] && !typecache_exclude[A.type]) . += A diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 2f172d198e..ed4734f355 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -226,8 +226,7 @@ . = list() // Returns a list of mobs who can hear any of the radios given in @radios var/list/speaker_coverage = list() - for(var/r in radios) - var/obj/item/device/radio/R = r // You better fucking be a radio. + for(var/obj/item/device/radio/R as anything in radios) var/turf/speaker = get_turf(R) if(speaker) for(var/turf/T in hear(R.canhear_range,speaker)) @@ -365,8 +364,7 @@ /proc/flick_overlay_view(image/I, atom/target, duration, gc_after) //wrapper for the above, flicks to everyone who can see the target atom var/list/viewing = list() - for(var/m in viewers(target)) - var/mob/M = m + for(var/mob/M as anything in viewers(target)) if(M.client) viewing += M.client flick_overlay(I, viewing, duration, gc_after) diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index fcb6554a5c..557348ff06 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -215,23 +215,20 @@ GLOBAL_LIST_EMPTY(mannequins) // Suit cyclers paths = subtypesof(/datum/suit_cycler_choice/department) - for(var/path in paths) - var/datum/suit_cycler_choice/SCC = path + for(var/datum/suit_cycler_choice/SCC as anything in paths) if(!initial(SCC.name)) continue - GLOB.suit_cycler_departments += new path() + GLOB.suit_cycler_departments += new SCC() paths = subtypesof(/datum/suit_cycler_choice/species) - for(var/path in paths) - var/datum/suit_cycler_choice/SCC = path + for(var/datum/suit_cycler_choice/SCC as anything in paths) if(!initial(SCC.name)) continue - GLOB.suit_cycler_species += new path() + GLOB.suit_cycler_species += new SCC() paths = subtypesof(/datum/suit_cycler_choice/department/emag) - for(var/path in paths) - var/datum/suit_cycler_choice/SCC = path + for(var/datum/suit_cycler_choice/SCC as anything in paths) if(!initial(SCC.name)) continue - GLOB.suit_cycler_emagged += new path() + GLOB.suit_cycler_emagged += new SCC() //Ores paths = subtypesof(/ore) diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm index 8e4de46935..53ad12d9b3 100644 --- a/code/_helpers/icons.dm +++ b/code/_helpers/icons.dm @@ -762,8 +762,7 @@ world // Dimensions of overlay being added var/list/add_size[4] - for(var/V in layers) - var/image/I = V + for(var/image/I as anything in layers) if(I.alpha == 0) continue @@ -897,8 +896,7 @@ world //For photo camera. /proc/build_composite_icon(atom/A) var/icon/composite = icon(A.icon, A.icon_state, A.dir, 1) - for(var/O in A.overlays) - var/image/I = O + for(var/image/I as anything in A.overlays) composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) return composite diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 62100370e1..0b258311a4 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1256,8 +1256,7 @@ var/mob/dview/dview_mob = new if(orange) turfs -= get_turf(center) . = list() - for(var/V in turfs) - var/turf/T = V + for(var/turf/T as anything in turfs) . += T . += T.contents if(areas) diff --git a/code/_helpers/visual_filters.dm b/code/_helpers/visual_filters.dm index 96f6871000..c02bbb6993 100644 --- a/code/_helpers/visual_filters.dm +++ b/code/_helpers/visual_filters.dm @@ -335,8 +335,7 @@ GLOBAL_LIST_INIT(master_filter_info, list( /obj/item/update_filters() . = ..() /* Will port this from TG - for(var/X in actions) - var/datum/action/A = X + for(var/datum/action/A as anything in actions) A.UpdateButtonIcon() */ diff --git a/code/_onclick/hud/minihud_rigmech.dm b/code/_onclick/hud/minihud_rigmech.dm index e54a733f80..b4d13f1c86 100644 --- a/code/_onclick/hud/minihud_rigmech.dm +++ b/code/_onclick/hud/minihud_rigmech.dm @@ -21,8 +21,7 @@ screenobjs += new /obj/screen/rig/deco1_f screenobjs += new /obj/screen/rig/deco2_f - for(var/scr in screenobjs) - var/obj/screen/S = scr + for(var/obj/screen/S as anything in screenobjs) S.master = owner_rig ..() @@ -71,8 +70,7 @@ screenobjs += new /obj/screen/mech/deco1_f screenobjs += new /obj/screen/mech/deco2_f - for(var/scr in screenobjs) - var/obj/screen/S = scr + for(var/obj/screen/S as anything in screenobjs) S.master = owner_mech ..() diff --git a/code/controllers/master.dm b/code/controllers/master.dm index 3f734b1cc0..ab2d2a12de 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -248,8 +248,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new var/list/tickersubsystems = list() var/list/runlevel_sorted_subsystems = list(list()) //ensure we always have at least one runlevel var/timer = world.time - for (var/thing in subsystems) - var/datum/controller/subsystem/SS = thing + for (var/datum/controller/subsystem/SS as anything in subsystems) if (SS.flags & SS_NO_FIRE) continue SS.queued_time = 0 @@ -336,8 +335,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new cached_runlevel = checking_runlevel current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel] var/stagger = world.time - for(var/I in current_runlevel_subsystems) - var/datum/controller/subsystem/SS = I + for(var/datum/controller/subsystem/SS as anything in current_runlevel_subsystems) if(SS.next_fire <= world.time) stagger += world.tick_lag * rand(1, 5) SS.next_fire = stagger @@ -550,8 +548,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new for(var/I in runlevel_SS) subsystemstocheck |= I - for (var/thing in subsystemstocheck) - var/datum/controller/subsystem/SS = thing + for (var/datum/controller/subsystem/SS as anything in subsystemstocheck) if (!SS || !istype(SS)) //list(SS) is so if a list makes it in the subsystem list, we remove the list, not the contents subsystems -= list(SS) @@ -598,8 +595,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new //disallow more than one map to load at once, multithreading it will just cause race conditions while(map_loading) stoplag() - for(var/S in subsystems) - var/datum/controller/subsystem/SS = S + for(var/datum/controller/subsystem/SS as anything in subsystems) SS.StartLoadingMap() map_loading = TRUE @@ -608,6 +604,5 @@ GLOBAL_REAL(Master, /datum/controller/master) = new if(!quiet) admin_notice("Map is finished. Unlocking.", R_DEBUG) map_loading = FALSE - for(var/S in subsystems) - var/datum/controller/subsystem/SS = S + for(var/datum/controller/subsystem/SS as anything in subsystems) SS.StopLoadingMap() diff --git a/code/controllers/subsystems/assets.dm b/code/controllers/subsystems/assets.dm index 2041104a2b..00d1693c06 100644 --- a/code/controllers/subsystems/assets.dm +++ b/code/controllers/subsystems/assets.dm @@ -6,8 +6,7 @@ SUBSYSTEM_DEF(assets) var/list/preload = list() /datum/controller/subsystem/assets/Initialize(timeofday) - for(var/type in typesof(/datum/asset)) - var/datum/asset/A = type + for(var/datum/asset/A as anything in typesof(/datum/asset)) if (type != initial(A._abstract)) get_asset_datum(type) diff --git a/code/controllers/subsystems/atoms.dm b/code/controllers/subsystems/atoms.dm index 4db490914a..a62c5265c5 100644 --- a/code/controllers/subsystems/atoms.dm +++ b/code/controllers/subsystems/atoms.dm @@ -38,11 +38,10 @@ SUBSYSTEM_DEF(atoms) if(atoms) created_atoms = list() count = atoms.len - for(var/I in atoms) - var/atom/A = I + for(var/atom/A as anything in atoms) if(!A.initialized) - if(InitAtom(I, mapload_arg)) - atoms -= I + if(InitAtom(A, mapload_arg)) + atoms -= A CHECK_TICK else count = 0 @@ -57,8 +56,7 @@ SUBSYSTEM_DEF(atoms) initialized = INITIALIZATION_INNEW_REGULAR if(late_loaders.len) - for(var/I in late_loaders) - var/atom/A = I + for(var/atom/A as anything in late_loaders) A.LateInitialize() CHECK_TICK testing("Late initialized [late_loaders.len] atoms") diff --git a/code/controllers/subsystems/chat.dm b/code/controllers/subsystems/chat.dm index 553c30d128..aece61d39e 100644 --- a/code/controllers/subsystems/chat.dm +++ b/code/controllers/subsystems/chat.dm @@ -13,8 +13,7 @@ SUBSYSTEM_DEF(chat) /datum/controller/subsystem/chat/fire() var/list/msg_queue = src.msg_queue // Local variable for sanic speed. - for(var/i in msg_queue) - var/client/C = i + for(var/client/C as anything in msg_queue) var/list/messages = msg_queue[C] msg_queue -= C if (C) diff --git a/code/controllers/subsystems/circuits.dm b/code/controllers/subsystems/circuits.dm index 8fda048c60..4d2b282171 100644 --- a/code/controllers/subsystems/circuits.dm +++ b/code/controllers/subsystems/circuits.dm @@ -23,11 +23,10 @@ SUBSYSTEM_DEF(circuit) /datum/controller/subsystem/circuit/proc/circuits_init() //Cached lists for free performance - for(var/path in typesof(/obj/item/integrated_circuit)) - var/obj/item/integrated_circuit/IC = path - var/name = initial(IC.name) - all_components[name] = path // Populating the component lists - cached_components[IC] = new path + for(var/obj/item/integrated_circuit/IC as anything in typesof(/obj/item/integrated_circuit)) + var/path = IC + all_components[initial(IC.name)] = path // Populating the component lists + cached_components[path] = new path if(!(initial(IC.spawn_flags) & (IC_SPAWN_DEFAULT | IC_SPAWN_RESEARCH))) continue @@ -38,11 +37,10 @@ SUBSYSTEM_DEF(circuit) var/list/category_list = circuit_fabricator_recipe_list[category] category_list += IC // Populating the fabricator categories - for(var/path in typesof(/obj/item/device/electronic_assembly)) - var/obj/item/device/electronic_assembly/A = path - var/name = initial(A.name) - all_assemblies[name] = path - cached_assemblies[A] = new path + for(var/obj/item/device/electronic_assembly/A as anything in typesof(/obj/item/device/electronic_assembly)) + var/path = A + all_assemblies[initial(A.name)] = path + cached_assemblies[path] = new path circuit_fabricator_recipe_list["Assemblies"] = list( diff --git a/code/controllers/subsystems/events2.dm b/code/controllers/subsystems/events2.dm index 2a73498b1d..7cf986358f 100644 --- a/code/controllers/subsystems/events2.dm +++ b/code/controllers/subsystems/events2.dm @@ -14,8 +14,7 @@ SUBSYSTEM_DEF(event_ticker) // Process active events. /datum/controller/subsystem/event_ticker/fire(resumed) - for(var/E in active_events) - var/datum/event2/event/event = E + for(var/datum/event2/event/event as anything in active_events) event.process() if(event.finished) event_finished(event) diff --git a/code/controllers/subsystems/game_master.dm b/code/controllers/subsystems/game_master.dm index 01ea086935..06a6060227 100644 --- a/code/controllers/subsystems/game_master.dm +++ b/code/controllers/subsystems/game_master.dm @@ -74,8 +74,7 @@ SUBSYSTEM_DEF(game_master) chosen_event.enabled = FALSE if(chosen_event.event_class) // Disable similar events, too. - for(var/M in available_events) - var/datum/event2/meta/meta = M + for(var/datum/event2/meta/meta as anything in available_events) if(meta.event_class == chosen_event.event_class) meta.enabled = FALSE @@ -235,8 +234,7 @@ SUBSYSTEM_DEF(game_master) dat += "Players" dat += "" - for(var/P in player_list) - var/mob/M = P + for(var/mob/M as anything in player_list) dat += "" dat += "[M] ([M.ckey])" dat += "[metric.assess_player_activity(M)]%" @@ -255,8 +253,7 @@ SUBSYSTEM_DEF(game_master) dat += "Buttons" dat += "" - for(var/E in available_events) - var/datum/event2/meta/event = E + for(var/datum/event2/meta/event as anything in available_events) dat += "" if(!event.enabled) dat += "[event.name]" @@ -285,8 +282,7 @@ SUBSYSTEM_DEF(game_master) dat += "Buttons" dat += "" - for(var/E in SSevent_ticker.active_events) - var/datum/event2/event/event = E + for(var/datum/event2/event/event as anything in SSevent_ticker.active_events) dat += "" dat += "[event.type]" dat += "[event.time_started]" @@ -309,8 +305,7 @@ SUBSYSTEM_DEF(game_master) dat += "Finish Time" dat += "" - for(var/E in SSevent_ticker.finished_events) - var/datum/event2/event/event = E + for(var/datum/event2/event/event as anything in SSevent_ticker.finished_events) dat += "" dat += "[event.type]" dat += "[event.time_started]" diff --git a/code/controllers/subsystems/garbage.dm b/code/controllers/subsystems/garbage.dm index 422fa6743f..c1fe92295d 100644 --- a/code/controllers/subsystems/garbage.dm +++ b/code/controllers/subsystems/garbage.dm @@ -172,8 +172,7 @@ SUBSYSTEM_DEF(garbage) log_world("## TESTING: GC: -- \ref[D] | [type] was unable to be GC'd --") #ifdef TESTING - for(var/c in GLOB.admins) //Using testing() here would fill the logs with ADMIN_VV garbage - var/client/admin = c + for(var/client/admin as anything in GLOB.admins) //Using testing() here would fill the logs with ADMIN_VV garbage if(!check_rights_for(admin, R_ADMIN)) continue to_chat(admin, "## TESTING: GC: -- [ADMIN_VV(D)] | [type] was unable to be GC'd --") diff --git a/code/controllers/subsystems/mapping.dm b/code/controllers/subsystems/mapping.dm index 848a5552d6..06bf16e255 100644 --- a/code/controllers/subsystems/mapping.dm +++ b/code/controllers/subsystems/mapping.dm @@ -34,11 +34,10 @@ SUBSYSTEM_DEF(mapping) ..() /datum/controller/subsystem/mapping/proc/load_map_templates() - for(var/T in subtypesof(/datum/map_template)) - var/datum/map_template/template = T + for(var/datum/map_template/template as anything in subtypesof(/datum/map_template)) if(!(initial(template.mappath))) // If it's missing the actual path its probably a base type or being used for inheritence. continue - template = new T() + template = new template() map_templates[template.name] = template return TRUE @@ -113,8 +112,7 @@ SUBSYSTEM_DEF(mapping) MT.load_new_z(centered = FALSE) /datum/controller/subsystem/mapping/proc/preloadShelterTemplates() - for(var/item in subtypesof(/datum/map_template/shelter)) - var/datum/map_template/shelter/shelter_type = item + for(var/datum/map_template/shelter/shelter_type as anything in subtypesof(/datum/map_template/shelter)) if(!(initial(shelter_type.mappath))) continue var/datum/map_template/shelter/S = new shelter_type() diff --git a/code/controllers/subsystems/persistence.dm b/code/controllers/subsystems/persistence.dm index 8168bfa6c2..f238621b3e 100644 --- a/code/controllers/subsystems/persistence.dm +++ b/code/controllers/subsystems/persistence.dm @@ -12,11 +12,10 @@ SUBSYSTEM_DEF(persistence) /datum/controller/subsystem/persistence/Initialize() . = ..() - for(var/thing in subtypesof(/datum/persistent)) - var/datum/persistent/P = thing + for(var/datum/persistent/P as anything in subtypesof(/datum/persistent)) if(initial(P.name)) P = new P - persistence_datums[thing] = P + persistence_datums[P.type] = P P.Initialize() /datum/controller/subsystem/persistence/Shutdown() diff --git a/code/controllers/subsystems/planets.dm b/code/controllers/subsystems/planets.dm index 16fbe59d3a..5486034871 100644 --- a/code/controllers/subsystems/planets.dm +++ b/code/controllers/subsystems/planets.dm @@ -111,8 +111,7 @@ SUBSYSTEM_DEF(planets) /datum/controller/subsystem/planets/proc/updateTemp(var/datum/planet/P) //Set new temperatures - for(var/W in P.planet_walls) - var/turf/unsimulated/wall/planetary/wall = W + for(var/turf/unsimulated/wall/planetary/wall as anything in P.planet_walls) wall.set_temperature(P.weather_holder.temperature) CHECK_TICK @@ -120,8 +119,7 @@ SUBSYSTEM_DEF(planets) var/count = 100000 while(count > 0) count-- - for(var/planet in planets) - var/datum/planet/P = planet + for(var/datum/planet/P as anything in planets) if(P.weather_holder) P.weather_holder.change_weather(pick(P.weather_holder.allowed_weather_types)) sleep(3) diff --git a/code/controllers/subsystems/processing/instruments.dm b/code/controllers/subsystems/processing/instruments.dm index ee0fd1ea00..3f305fb8fc 100644 --- a/code/controllers/subsystems/processing/instruments.dm +++ b/code/controllers/subsystems/processing/instruments.dm @@ -33,11 +33,10 @@ PROCESSING_SUBSYSTEM_DEF(instruments) songs -= S /datum/controller/subsystem/processing/instruments/proc/initialize_instrument_data() - for(var/path in subtypesof(/datum/instrument)) - var/datum/instrument/I = path - if(initial(I.abstract_type) == path) + for(var/datum/instrument/I as anything in subtypesof(/datum/instrument)) + if(initial(I.abstract_type) == I) continue - I = new path + I = new I I.Initialize() if(!I.id) qdel(I) diff --git a/code/controllers/subsystems/processing/projectiles.dm b/code/controllers/subsystems/processing/projectiles.dm index e4316304ce..3e5e1b2127 100644 --- a/code/controllers/subsystems/processing/projectiles.dm +++ b/code/controllers/subsystems/processing/projectiles.dm @@ -19,7 +19,6 @@ PROCESSING_SUBSYSTEM_DEF(projectiles) /datum/controller/subsystem/processing/projectiles/proc/set_pixel_speed(new_speed) global_pixel_speed = new_speed - for(var/i in processing) - var/obj/item/projectile/P = i + for(var/obj/item/projectile/P as anything in processing) if(istype(P)) //there's non projectiles on this too. P.set_pixel_speed(new_speed) diff --git a/code/controllers/subsystems/radiation.dm b/code/controllers/subsystems/radiation.dm index 50c72ddd60..8f140a5fc8 100644 --- a/code/controllers/subsystems/radiation.dm +++ b/code/controllers/subsystems/radiation.dm @@ -63,8 +63,7 @@ SUBSYSTEM_DEF(radiation) if(!istype(T)) return - for(var/value in sources) - var/datum/radiation_source/source = value + for(var/datum/radiation_source/source as anything in sources) if(source.rad_power < .) continue // Already being affected by a stronger source diff --git a/code/controllers/subsystems/shuttles.dm b/code/controllers/subsystems/shuttles.dm index 40039edceb..38ec9e5c83 100644 --- a/code/controllers/subsystems/shuttles.dm +++ b/code/controllers/subsystems/shuttles.dm @@ -119,8 +119,7 @@ SUBSYSTEM_DEF(shuttles) landmarks_still_needed[landmark_tag] = given_sector // Landmark isn't registered yet, queue it to be added once it is. var/landmarks_to_check = landmarks_awaiting_sector.Copy() - for(var/thing in landmarks_to_check) - var/obj/effect/shuttle_landmark/automatic/landmark = thing + for(var/obj/effect/shuttle_landmark/automatic/landmark as anything in landmarks_to_check) if(landmark.z in given_sector.map_z) given_sector.add_landmark(landmark, landmark.shuttle_restricted) landmarks_awaiting_sector -= landmark @@ -170,8 +169,7 @@ SUBSYSTEM_DEF(shuttles) if(overmap_halted == new_setting) return overmap_halted = !overmap_halted - for(var/ship in ships) - var/obj/effect/overmap/visitable/ship/ship_effect = ship + for(var/obj/effect/overmap/visitable/ship/ship_effect as anything in ships) overmap_halted ? ship_effect.halt() : ship_effect.unhalt() /datum/controller/subsystem/shuttles/stat_entry() diff --git a/code/controllers/subsystems/timer.dm b/code/controllers/subsystems/timer.dm index dadcd9ab95..4fadc4f599 100644 --- a/code/controllers/subsystems/timer.dm +++ b/code/controllers/subsystems/timer.dm @@ -202,8 +202,7 @@ SUBSYSTEM_DEF(timer) bucket_count -= length(spent) - for (var/i in spent) - var/datum/timedevent/qtimer = i + for(var/datum/timedevent/qtimer as anything in spent) if(QDELETED(qtimer)) bucket_count++ continue diff --git a/code/controllers/subsystems/vote.dm b/code/controllers/subsystems/vote.dm index 3623acf26c..658cff1716 100644 --- a/code/controllers/subsystems/vote.dm +++ b/code/controllers/subsystems/vote.dm @@ -35,8 +35,7 @@ SUBSYSTEM_DEF(vote) // Before doing the vote, see if anyone is playing. // If not, just do the transfer. var/players_are_in_round = FALSE - for(var/a in player_list) // Mobs with clients attached. - var/mob/living/L = a + for(var/mob/living/L as anything in player_list) // Mobs with clients attached. if(!istype(L)) // Exclude ghosts and other weird things. continue if(L.stat == DEAD) // Dead mobs aren't playing. diff --git a/code/controllers/subsystems/xenoarch.dm b/code/controllers/subsystems/xenoarch.dm index 9851c69278..a175625b1f 100644 --- a/code/controllers/subsystems/xenoarch.dm +++ b/code/controllers/subsystems/xenoarch.dm @@ -41,8 +41,7 @@ SUBSYSTEM_DEF(xenoarch) continue var/farEnough = 1 - for(var/A in digsite_spawning_turfs) - var/turf/T = A + for(var/turf/T as anything in digsite_spawning_turfs) if(T in range(5, M)) farEnough = 0 break diff --git a/code/controllers/verbs.dm b/code/controllers/verbs.dm index 7323d2cba2..da3e8e1baf 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/verbs.dm @@ -75,8 +75,7 @@ options["MC"] = Master options["Failsafe"] = Failsafe options["Configuration"] = config - for(var/i in Master.subsystems) - var/datum/controller/subsystem/S = i + for(var/datum/controller/subsystem/S as anything in Master.subsystems) if(!istype(S)) //Eh, we're a debug verb, let's have typechecking. continue var/strtype = "SS[get_end_section_of_type(S.type)]" diff --git a/code/datums/chat_message.dm b/code/datums/chat_message.dm index ae17f21e2d..982e9e098c 100644 --- a/code/datums/chat_message.dm +++ b/code/datums/chat_message.dm @@ -172,8 +172,7 @@ var/list/runechat_image_cache = list() if(owned_by.seen_messages) var/idx = 1 var/combined_height = approx_lines - for(var/msg in owned_by.seen_messages[message_loc]) - var/datum/chatmessage/m = msg + for(var/datum/chatmessage/m as anything in owned_by.seen_messages[message_loc]) animate(m.message, pixel_y = m.message.pixel_y + mheight, time = CHAT_MESSAGE_SPAWN_TIME) combined_height += m.approx_lines @@ -336,8 +335,7 @@ var/list/runechat_image_cache = list() var/list/hear = get_mobs_and_objs_in_view_fast(get_turf(src), range, remote_ghosts = FALSE) hearing_mobs = hear["mobs"] - for(var/mob in hearing_mobs) - var/mob/M = mob + for(var/mob/M as anything in hearing_mobs) if(!M.client) continue M.create_chat_message(src, message, italics, classes, audible) diff --git a/code/datums/components/_component.dm b/code/datums/components/_component.dm index c5bd07cdcb..2e177c8ff3 100644 --- a/code/datums/components/_component.dm +++ b/code/datums/components/_component.dm @@ -320,8 +320,7 @@ var/proctype = C.signal_procs[src][sigtype] return NONE | CallAsync(C, proctype, arguments) . = NONE - for(var/I in target) - var/datum/C = I + for(var/datum/C as anything in target) if(!C.signal_enabled) continue var/proctype = C.signal_procs[src][sigtype] @@ -444,8 +443,7 @@ var/list/arguments = raw_args.Copy() arguments[1] = new_comp var/make_new_component = TRUE - for(var/i in GetComponents(new_type)) - var/datum/component/C = i + for(var/datum/component/C as anything in GetComponents(new_type)) if(C.CheckDupeComponent(arglist(arguments))) make_new_component = FALSE QDEL_NULL(new_comp) diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index cc6bb53a97..c4d8bcc3d4 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -402,8 +402,7 @@ var/list/surroundings = get_surroundings(user) var/list/craftability = list() - for(var/rec in GLOB.crafting_recipes) - var/datum/crafting_recipe/R = rec + for(var/datum/crafting_recipe/R as anything in GLOB.crafting_recipes) if(!R.always_available && !(R.type in user?.mind?.learned_recipes)) //User doesn't actually know how to make this. continue @@ -420,11 +419,10 @@ var/list/data = list() var/list/crafting_recipes = list() - for(var/rec in GLOB.crafting_recipes) - var/datum/crafting_recipe/R = rec + for(var/datum/crafting_recipe/R as anything in GLOB.crafting_recipes) if(R.name == "") //This is one of the invalid parents that sneaks in - GLOB.crafting_recipes -= rec + GLOB.crafting_recipes -= R continue if(!R.always_available && !(R.type in user?.mind?.learned_recipes)) //User doesn't actually know how to make this. diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index c8f54a1f0c..86573474e6 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -99,9 +99,8 @@ /datum/component/material_container/proc/on_examine(datum/source, mob/user, list/examine_texts) SIGNAL_HANDLER - for(var/I in materials) - var/datum/material/M = I - var/amt = materials[I] + for(var/datum/material/M as anything in materials) + var/amt = materials[M] if(amt) examine_texts += "It has [amt] units of [lowertext(M.name)] stored." @@ -327,13 +326,13 @@ var/list/mats_to_remove = list() //Assoc list MAT | AMOUNT - for(var/x in mats) //Loop through all required materials - var/datum/material/req_mat = x + for(var/datum/material/req_mat as anything in mats) //Loop through all required materials + var/imat = req_mat if(!istype(req_mat)) req_mat = GET_MATERIAL_REF(req_mat) //Get the ref if necesary if(!materials[req_mat]) //Do we have the resource? return FALSE //Can't afford it - var/amount_required = mats[x] * multiplier + var/amount_required = mats[imat] * multiplier if(!(materials[req_mat] >= amount_required)) // do we have enough of the resource? return FALSE //Can't afford it mats_to_remove[req_mat] += amount_required //Add it to the assoc list of things to remove @@ -392,8 +391,8 @@ if(!mats || !mats.len) return FALSE - for(var/x in mats) //Loop through all required materials - var/datum/material/req_mat = x + for(var/datum/material/req_mat as anything in mats) //Loop through all required materials + var/imat = req_mat if(!istype(req_mat)) if(ispath(req_mat) || istext(req_mat)) //Is this an actual material, or is it a category? req_mat = GET_MATERIAL_REF(req_mat) //Get the ref @@ -404,7 +403,7 @@ // else // continue - if(!has_enough_of_material(req_mat, mats[x], multiplier))//Not a category, so just check the normal way + if(!has_enough_of_material(req_mat, mats[imat], multiplier))//Not a category, so just check the normal way return FALSE return TRUE diff --git a/code/datums/components/overlay_lighting.dm b/code/datums/components/overlay_lighting.dm index b6a812ce9a..76bd3d3c73 100644 --- a/code/datums/components/overlay_lighting.dm +++ b/code/datums/components/overlay_lighting.dm @@ -171,8 +171,7 @@ ///Clears the affected_turfs lazylist, removing from its contents the effects of being near the light. /datum/component/overlay_lighting/proc/clean_old_turfs() - for(var/t in affected_turfs) - var/turf/lit_turf = t + for(var/turf/lit_turf as anything in affected_turfs) lit_turf.dynamic_lumcount -= lum_power affected_turfs = null @@ -431,8 +430,7 @@ . = lum_power lum_power = new_lum_power var/difference = . - lum_power - for(var/t in affected_turfs) - var/turf/lit_turf = t + for(var/turf/lit_turf as anything in affected_turfs) lit_turf.dynamic_lumcount -= difference ///Moves the light directional_atom that emits our "light" based on our position and our direction diff --git a/code/datums/datum.dm b/code/datums/datum.dm index 205156e0a2..ba8ace312d 100644 --- a/code/datums/datum.dm +++ b/code/datums/datum.dm @@ -30,8 +30,7 @@ //clear timers var/list/timers = active_timers active_timers = null - for(var/thing in timers) - var/datum/timedevent/timer = thing + for(var/datum/timedevent/timer as anything in timers) if (timer.spent) continue qdel(timer) @@ -45,8 +44,7 @@ if(dc) var/all_components = dc[/datum/component] if(length(all_components)) - for(var/I in all_components) - var/datum/component/C = I + for(var/datum/component/C as anything in all_components) qdel(C, FALSE, TRUE) else var/datum/component/C = all_components @@ -58,8 +56,7 @@ for(var/sig in lookup) var/list/comps = lookup[sig] if(length(comps)) - for(var/i in comps) - var/datum/component/comp = i + for(var/datum/component/comp as anything in comps) comp.UnregisterSignal(src, sig) else var/datum/component/comp = comps diff --git a/code/datums/game_masters/default.dm b/code/datums/game_masters/default.dm index d380476df2..8f69b296af 100644 --- a/code/datums/game_masters/default.dm +++ b/code/datums/game_masters/default.dm @@ -17,8 +17,7 @@ log_game_master("Got [best_events.len] choice\s for the next event.") var/list/weighted_events = list() - for(var/E in best_events) - var/datum/event2/meta/event = E + for(var/datum/event2/meta/event as anything in best_events) var/weight = event.get_weight() if(weight <= 0) continue @@ -71,8 +70,7 @@ // If no list is passed, all the events will be returned. /datum/game_master/default/proc/filter_events_by_departments(list/departments) . = list() - for(var/E in SSgame_master.available_events) - var/datum/event2/meta/event = E + for(var/datum/event2/meta/event as anything in SSgame_master.available_events) if(!event.enabled) continue if(event.chaotic_threshold && !ignore_round_chaos) diff --git a/code/datums/game_masters/other_game_masters.dm b/code/datums/game_masters/other_game_masters.dm index f62d83cfe3..cd45483251 100644 --- a/code/datums/game_masters/other_game_masters.dm +++ b/code/datums/game_masters/other_game_masters.dm @@ -3,8 +3,7 @@ // * Does not react to danger at all. /datum/game_master/classic/choose_event() var/list/weighted_events = list() - for(var/E in SSgame_master.available_events) - var/datum/event2/meta/event = E + for(var/datum/event2/meta/event as anything in SSgame_master.available_events) if(!event.enabled) continue weighted_events[event] = event.get_weight() @@ -31,8 +30,7 @@ /datum/game_master/brutal/choose_event() var/list/weighted_events = list() - for(var/E in SSgame_master.available_events) - var/datum/event2/meta/event = E + for(var/datum/event2/meta/event as anything in SSgame_master.available_events) if(!event.enabled) continue weighted_events[event] = event.get_weight() + (event.chaos * 2) diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index 12d1fee625..c9f57c4d3f 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -45,8 +45,7 @@ GLOBAL_DATUM(revdata, /datum/getrev) return if(header) . += "The following pull requests are currently test merged:" - for(var/line in testmerge) - var/datum/tgs_revision_information/test_merge/tm = line + for(var/datum/tgs_revision_information/test_merge/tm as anything in testmerge) var/cm = tm.pull_request_commit var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext_char(cm, 1, 11)) if(details && findtext(details, "\[s\]") && (!usr || !usr.client.holder)) diff --git a/code/datums/observation/~cleanup.dm b/code/datums/observation/~cleanup.dm index 9dcc601436..da902052bd 100644 --- a/code/datums/observation/~cleanup.dm +++ b/code/datums/observation/~cleanup.dm @@ -40,8 +40,7 @@ GLOBAL_LIST_EMPTY(event_listen_count) /decl/observ/destroyed/proc/cleanup_global_listener(listener, listen_count) GLOB.global_listen_count -= listener - for(var/entry in GLOB.all_observable_events.events) - var/decl/observ/event = entry + for(var/decl/observ/event as anything in GLOB.all_observable_events.events) if(event.unregister_global(listener)) // log_debug("[event] - [listener] was deleted while still registered to global events.") // TODO: Apply axe, reimplement with datum component listeners if(!(--listen_count)) @@ -49,8 +48,7 @@ GLOBAL_LIST_EMPTY(event_listen_count) /decl/observ/destroyed/proc/cleanup_source_listeners(event_source, source_listener_count) GLOB.event_sources_count -= event_source - for(var/entry in GLOB.all_observable_events.events) - var/decl/observ/event = entry + for(var/decl/observ/event as anything in GLOB.all_observable_events.events) var/proc_owners = event.event_sources[event_source] if(proc_owners) for(var/proc_owner in proc_owners) @@ -61,8 +59,7 @@ GLOBAL_LIST_EMPTY(event_listen_count) /decl/observ/destroyed/proc/cleanup_event_listener(listener, listener_count) GLOB.event_listen_count -= listener - for(var/entry in GLOB.all_observable_events.events) - var/decl/observ/event = entry + for(var/decl/observ/event as anything in GLOB.all_observable_events.events) for(var/event_source in event.event_sources) if(event.unregister(event_source, listener)) // log_debug("[event] - [listener] was deleted while still listening to [event_source].") // TODO: Apply axe, reimplement with datum component listeners diff --git a/code/datums/orbit.dm b/code/datums/orbit.dm index 0176d7f23d..adbd166d25 100644 --- a/code/datums/orbit.dm +++ b/code/datums/orbit.dm @@ -110,8 +110,7 @@ /atom/Destroy(force = FALSE) . = ..() if (orbiters) - for (var/thing in orbiters) - var/datum/orbit/O = thing + for(var/datum/orbit/O as anything in orbiters) if (O.orbiter) O.orbiter.stop_orbit() @@ -123,8 +122,7 @@ /* /atom/movable/proc/transfer_observers_to(atom/movable/target) if(orbiters) - for(var/thing in orbiters) - var/datum/orbit/O = thing + for(var/datum/orbit/O as anything in orbiters) if(O.orbiter && isobserver(O.orbiter)) var/mob/dead/observer/D = O.orbiter D.ManualFollow(target) diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index c24dfcd922..8da8d7c000 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -51,8 +51,7 @@ animate(bar, pixel_y = shiftheight, time = 5, easing = SINE_EASING) /datum/progressbar/Destroy() - for(var/I in user.progressbars[bar.loc]) - var/datum/progressbar/P = I + for(var/datum/progressbar/P as anything in user.progressbars[bar.loc]) if(P != src && P.listindex > listindex) P.shiftDown() diff --git a/code/datums/soul_link.dm b/code/datums/soul_link.dm index 7bc652a863..d15049d924 100644 --- a/code/datums/soul_link.dm +++ b/code/datums/soul_link.dm @@ -6,13 +6,11 @@ var/list/shared_soul_links // Soul links we are a/the sharer of. /mob/living/Destroy() - for(var/s in owned_soul_links) - var/datum/soul_link/S = s + for(var/datum/soul_link/S as anything in owned_soul_links) S.owner_died(FALSE) - qdel(s) // If the owner is destroy()'d, the soullink is destroy()'d. + qdel(S) // If the owner is destroy()'d, the soullink is destroy()'d. owned_soul_links = null - for(var/s in shared_soul_links) - var/datum/soul_link/S = s + for(var/datum/soul_link/S as anything in shared_soul_links) S.sharer_died(FALSE) S.remove_soul_sharer(src) // If a sharer is destroy()'d, they are simply removed. shared_soul_links = null @@ -82,8 +80,7 @@ soul_owner = owner soul_sharers = sharers LAZYADD(owner.owned_soul_links, src) - for(var/l in sharers) - var/mob/living/L = l + for(var/mob/living/L as anything in sharers) LAZYADD(L.shared_soul_links, src) return TRUE @@ -144,8 +141,7 @@ /datum/soul_link/multi_sharer/replacement_pool/owner_died(gibbed, mob/living/owner) if(LAZYLEN(soul_sharers) && !gibbed) //let's not put them in some gibs var/list/souls = shuffle(soul_sharers.Copy()) - for(var/l in souls) - var/mob/living/L = l + for(var/mob/living/L as anything in souls) if(L.stat != DEAD && L.mind) L.mind.transfer_to(soul_owner) soul_owner.revive(TRUE, TRUE) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 5c8ff8974d..3e4b277696 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -153,8 +153,7 @@ ASSERT(callback) ASSERT(isturf(loc)) var/list/turfs = trange(range, src) - for(var/t in turfs) - var/turf/T = t + for(var/turf/T as anything in turfs) GLOB.turf_entered_event.register(T, src, callback) //Unregister from prox listening in a certain range. You should do this BEFORE you move, but if you @@ -162,8 +161,7 @@ /atom/proc/unsense_proximity(var/range = 1, var/callback, var/center) ASSERT(isturf(center) || isturf(loc)) var/list/turfs = trange(range, center ? center : src) - for(var/t in turfs) - var/turf/T = t + for(var/turf/T as anything in turfs) GLOB.turf_entered_event.unregister(T, src, callback) @@ -529,11 +527,9 @@ if(LAZYLEN(exclude_mobs)) seeing_mobs -= exclude_mobs - for(var/obj in seeing_objs) - var/obj/O = obj + for(var/obj/O as anything in seeing_objs) O.show_message(message, VISIBLE_MESSAGE, blind_message, AUDIBLE_MESSAGE) - for(var/mob in seeing_mobs) - var/mob/M = mob + for(var/mob/M as anything in seeing_mobs) if(M.see_invisible >= invisibility && MOB_CAN_SEE_PLANE(M, plane)) M.show_message(message, VISIBLE_MESSAGE, blind_message, AUDIBLE_MESSAGE) if(runemessage != -1) @@ -555,16 +551,13 @@ var/list/hearing_objs = hear["objs"] if(radio_message) - for(var/obj in hearing_objs) - var/obj/O = obj + for(var/obj/O as anything in hearing_objs) O.hear_talk(src, list(new /datum/multilingual_say_piece(GLOB.all_languages["Noise"], radio_message)), null) else - for(var/obj in hearing_objs) - var/obj/O = obj + for(var/obj/O as anything in hearing_objs) O.show_message(message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) - for(var/mob in hearing_mobs) - var/mob/M = mob + for(var/mob/M as anything in hearing_mobs) var/msg = message M.show_message(msg, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) if(runemessage != -1) diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 08b0f3e056..9dfba6c423 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -134,8 +134,7 @@ oldarea.Exited(src, newloc) // Multi-tile objects can't reach here, otherwise you'd need to avoid uncrossing yourself - for(var/i in oldloc) - var/atom/movable/thing = i + for(var/atom/movable/thing as anything in oldloc) // We don't call parent so we are calling this for byond thing.Uncrossed(src) @@ -145,8 +144,7 @@ newarea.Entered(src, oldloc) // Multi-tile objects can't reach here, otherwise you'd need to avoid uncrossing yourself - for(var/i in loc) - var/atom/movable/thing = i + for(var/atom/movable/thing as anything in loc) // We don't call parent so we are calling this for byond thing.Crossed(src, oldloc) @@ -315,8 +313,7 @@ old_area.Exited(src, destination) // Uncross everything where we left - for(var/i in oldloc) - var/atom/movable/AM = i + for(var/atom/movable/AM as anything in oldloc) if(AM == src) continue AM.Uncrossed(src) @@ -341,8 +338,7 @@ destarea.Entered(src, oldloc) // We ignore ourselves because if we're multi-tile we might be in both old and new locs - for(var/i in destination) - var/atom/movable/AM = i + for(var/atom/movable/AM as anything in destination) if(AM == src) continue AM.Crossed(src, oldloc) @@ -364,8 +360,7 @@ loc = null // Uncross everything where we left (no multitile safety like above because we are definitely not still there) - for(var/i in oldloc) - var/atom/movable/AM = i + for(var/atom/movable/AM as anything in oldloc) AM.Uncrossed(src) // Exited() our loc and area @@ -379,8 +374,7 @@ /atom/movable/proc/onTransitZ(old_z,new_z) GLOB.z_moved_event.raise_event(src, old_z, new_z) SEND_SIGNAL(src, COMSIG_MOVABLE_Z_CHANGED, old_z, new_z) - for(var/item in src) // Notify contents of Z-transition. This can be overridden IF we know the items contents do not care. - var/atom/movable/AM = item + for(var/atom/movable/AM as anything in src) // Notify contents of Z-transition. This can be overridden IF we know the items contents do not care. AM.onTransitZ(old_z,new_z) /atom/movable/proc/glide_for(movetime) diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index 3fb282d72d..8371c395a4 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -258,8 +258,7 @@ //VOREStation Add /mob/living/carbon/human/proc/force_update_organs() - for(var/organ in organs + internal_organs) - var/obj/item/organ/O = organ + for(var/obj/item/organ/O as anything in organs + internal_organs) O.species = species //VOREStation Add End diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index d54f3e6521..bd8edfcd8a 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -474,9 +474,8 @@ infected = "Gangrene Detected:" var/unknown_body = 0 - for(var/thing in e.implants) - var/obj/item/weapon/implant/I = thing - var/obj/item/device/nif/N = thing //VOREStation Add: NIFs + for(var/obj/item/weapon/implant/I as anything in e.implants) + var/obj/item/device/nif/N = I //VOREStation Add: NIFs if(istype(I) && I.known_implant) imp += "[I] implanted:" if(istype(N) && N.known_implant) //VOREStation Add: NIFs diff --git a/code/game/machinery/adv_med_vr.dm b/code/game/machinery/adv_med_vr.dm index e8ff59adc0..c4c1d93374 100644 --- a/code/game/machinery/adv_med_vr.dm +++ b/code/game/machinery/adv_med_vr.dm @@ -12,8 +12,7 @@ var/livingprey = 0 var/objectprey = 0 - for(var/belly in H.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in H.vore_organs) for(var/C in B) if(ishuman(C)) humanprey++ diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index b3d315cbad..f079485f19 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -183,9 +183,8 @@ //Check if we still have the materials. var/coeff = (making.no_scale ? 1 : mat_efficiency) //stacks are unaffected by production coefficient - for(var/MAT in making.resources) - var/datum/material/used_material = MAT - var/amount_needed = making.resources[MAT] * coeff * multiplier + for(var/datum/material/used_material as anything in making.resources) + var/amount_needed = making.resources[used_material] * coeff * multiplier materials_used[used_material] = amount_needed if(LAZYLEN(materials_used)) diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 58565ead6e..c15a9d1524 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -111,8 +111,7 @@ data["id_rank"] = modify && modify.assignment ? modify.assignment : "Unassigned" var/list/departments = list() - for(var/D in SSjob.get_all_department_datums()) - var/datum/department/dept = D + for(var/datum/department/dept as anything in SSjob.get_all_department_datums()) if(!dept.assignable) // No AI ID cards for you. continue if(dept.centcom_only && !is_centcom()) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index b7ba4a4339..19ae206605 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -373,8 +373,7 @@ hook_vr("despawn", list(to_despawn, src)) if(isliving(to_despawn)) var/mob/living/L = to_despawn - for(var/belly in L.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in L.vore_organs) for(var/mob/living/sub_L in B) despawn_occupant(sub_L) for(var/obj/item/W in B) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 2bf6285d8f..81c1e81ccf 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1220,8 +1220,7 @@ About the new airlock wires panel: use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people //if the door is unpowered then it doesn't make sense to hear the woosh of a pneumatic actuator - for(var/P in player_list) - var/mob/M = P + for(var/mob/M as anything in player_list) if(!M || !M.client) continue var/old_sounds = M.client.is_preference_enabled(/datum/client_preference/old_door_sounds) @@ -1349,8 +1348,7 @@ About the new airlock wires panel: use_power(360) //360 W seems much more appropriate for an actuator moving an industrial door capable of crushing people has_beeped = 0 - for(var/P in player_list) - var/mob/M = P + for(var/mob/M as anything in player_list) if(!M || !M.client) continue var/old_sounds = M.client.is_preference_enabled(/datum/client_preference/old_door_sounds) diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm index d2ee11fbf8..d390cb4e52 100644 --- a/code/game/machinery/frame.dm +++ b/code/game/machinery/frame.dm @@ -272,9 +272,8 @@ for(var/A in circuit.req_components) req_components[A] = circuit.req_components[A] req_component_names = circuit.req_components.Copy() - for(var/A in req_components) - var/obj/ct = A - req_component_names[A] = initial(ct.name) + for(var/obj/ct as anything in req_components) + req_component_names[ct] = initial(ct.name) /obj/structure/frame/New(var/loc, var/dir, var/building = 0, var/datum/frame/frame_types/type, mob/user as mob) ..() diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index 2df9409be0..9aaa12fbcb 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -91,8 +91,7 @@ media_start_time = 0 update_music() //VOREStation Add - for(var/rem in remotes) - var/obj/item/device/juke_remote/remote = rem + for(var/obj/item/device/juke_remote/remote as anything in remotes) remote.update_music() //VOREStation Add End diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 2da7d5342a..26766addf6 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -548,8 +548,7 @@ Class Procs: surviving_parts += new /obj/item/stack/cable_coil(null, 1) surviving_parts += new /obj/item/stack/cable_coil(null, 1) - for(var/a in surviving_parts) - var/atom/movable/A = a + for(var/atom/movable/A as anything in surviving_parts) A.forceMove(droploc) if(scatter && isturf(droploc)) var/turf/T = droploc diff --git a/code/game/machinery/partslathe_vr.dm b/code/game/machinery/partslathe_vr.dm index 6f83f6d158..232fe56f5c 100644 --- a/code/game/machinery/partslathe_vr.dm +++ b/code/game/machinery/partslathe_vr.dm @@ -265,8 +265,7 @@ if(istype(copy_board)) data["copyBoard"] = copy_board.name var/list/req_components_ui = list() - for(var/CP in (copy_board.req_components || list())) - var/obj/comp_path = CP + for(var/obj/comp_path as anything in (copy_board.req_components || list())) var/comp_amt = copy_board.req_components[comp_path] if(comp_amt && (comp_path in partslathe_recipies)) req_components_ui.Add(list(list("name" = initial(comp_path.name), "qty" = comp_amt))) diff --git a/code/game/machinery/pointdefense.dm b/code/game/machinery/pointdefense.dm index f2d301e6b1..68ac2e2a3f 100644 --- a/code/game/machinery/pointdefense.dm +++ b/code/game/machinery/pointdefense.dm @@ -22,8 +22,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense) . = ..() if(id_tag) //No more than 1 controller please. - for(var/thing in pointdefense_controllers) - var/obj/machinery/pointdefense_control/PC = thing + for(var/obj/machinery/pointdefense_control/PC as anything in pointdefense_controllers) if(PC != src && PC.id_tag == id_tag) warning("Two [src] with the same id_tag of [id_tag]") id_tag = null @@ -98,8 +97,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense) var/new_ident = input(user, "Enter a new ident tag.", "[src]", id_tag) as null|text if(new_ident && new_ident != id_tag && user.Adjacent(src) && CanInteract(user, GLOB.tgui_physical_state)) // Check for duplicate controllers with this ID - for(var/thing in pointdefense_controllers) - var/obj/machinery/pointdefense_control/PC = thing + for(var/obj/machinery/pointdefense_control/PC as anything in pointdefense_controllers) if(PC != src && PC.id_tag == id_tag) to_chat(user, "The [new_ident] network already has a controller.") return @@ -207,8 +205,7 @@ GLOBAL_LIST_BOILERPLATE(pointdefense_turrets, /obj/machinery/power/pointdefense) if(!id_tag) return null var/list/connected_z_levels = GetConnectedZlevels(get_z(src)) - for(var/thing in pointdefense_controllers) - var/obj/machinery/pointdefense_control/PDC = thing + for(var/obj/machinery/pointdefense_control/PDC as anything in pointdefense_controllers) if(PDC.id_tag == id_tag && (get_z(PDC) in connected_z_levels)) return PDC diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 70a5fb7278..359410f494 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -682,12 +682,11 @@ for(var/turf/T in oview(world.view, src)) seenturfs += T - for(var/mob in living_mob_list) - var/mob/M = mob + for(var/mob/M as anything in living_mob_list) if(M.z != z) //Skip continue if(get_turf(M) in seenturfs) - assess_and_assign(mob, targets, secondarytargets) + assess_and_assign(M, targets, secondarytargets) /* This was dumb. Why do this and then check line of sight later? for(var/mob/M in mobs_in_xray_view(world.view, src)) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index fa2af7d0af..fea80ff21c 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -176,8 +176,7 @@ return M /atom/movable/proc/handle_buckled_mob_movement(atom/old_loc, direct, movetime) - for(var/A in buckled_mobs) - var/mob/living/L = A + for(var/mob/living/L as anything in buckled_mobs) if(!L.Move(loc, direct, movetime)) L.forceMove(loc, direct, movetime) L.last_move = last_move diff --git a/code/game/objects/effects/alien/aliens.dm b/code/game/objects/effects/alien/aliens.dm index 445d6ce467..50ad6ec250 100644 --- a/code/game/objects/effects/alien/aliens.dm +++ b/code/game/objects/effects/alien/aliens.dm @@ -294,8 +294,7 @@ for(var/obj/effect/alien/weeds/W in orange(node_range, src)) nearby_weeds |= W - for(var/nbw in nearby_weeds) - var/obj/effect/alien/weeds/W = nbw + for(var/obj/effect/alien/weeds/W as anything in nearby_weeds) if(!W.linked_node) W.linked_node = src diff --git a/code/game/objects/effects/map_effects/portal.dm b/code/game/objects/effects/map_effects/portal.dm index 375bbcd336..ede5cbdaca 100644 --- a/code/game/objects/effects/map_effects/portal.dm +++ b/code/game/objects/effects/map_effects/portal.dm @@ -113,8 +113,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec var/lowest_y = 0 // First pass is for finding the top right corner. - for(var/thing in vis_contents) - var/turf/T = thing + for(var/turf/T as anything in vis_contents) if(T.x > highest_x) highest_x = T.x if(T.y > highest_y) @@ -124,8 +123,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec lowest_y = highest_y // Second one is for the bottom left corner. - for(var/thing in vis_contents) - var/turf/T = thing + for(var/turf/T as anything in vis_contents) if(T.x < lowest_x) lowest_x = T.x if(T.y < lowest_y) @@ -182,8 +180,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec // Connects both sides of a portal together. /obj/effect/map_effect/portal/master/proc/find_counterparts() - for(var/thing in GLOB.all_portal_masters) - var/obj/effect/map_effect/portal/master/M = thing + for(var/obj/effect/map_effect/portal/master/M as anything in GLOB.all_portal_masters) if(M == src) continue if(M.counterpart) @@ -205,8 +202,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec /obj/effect/map_effect/portal/master/proc/make_visuals() var/list/observed_turfs = list() - for(var/thing in portal_lines + src) - var/obj/effect/map_effect/portal/P = thing + for(var/obj/effect/map_effect/portal/P as anything in portal_lines + src) P.name = null P.icon_state = null @@ -230,8 +226,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec // Shifts the portal's pixels in order to line up properly, as BYOND offsets the sprite when it holds multiple turfs inside `vis_contents`. // This undos the shift that BYOND did. /obj/effect/map_effect/portal/master/proc/apply_offset() - for(var/thing in portal_lines + src) - var/obj/effect/map_effect/portal/P = thing + for(var/obj/effect/map_effect/portal/P as anything in portal_lines + src) P.pixel_x = WORLD_ICON_SIZE * P.portal_distance_x P.pixel_y = WORLD_ICON_SIZE * P.portal_distance_y @@ -245,8 +240,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec var/list/in_range = get_mobs_and_objs_in_view_fast(T, world.view, 0) var/list/mobs_to_relay = in_range["mobs"] - for(var/thing in mobs_to_relay) - var/mob/mob = thing + for(var/mob/mob as anything in mobs_to_relay) var/rendered = "[text]" mob.show_message(rendered) @@ -261,8 +255,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec var/list/in_range = get_mobs_and_objs_in_view_fast(T, world.view, 0) var/list/mobs_to_relay = in_range["mobs"] - for(var/thing in mobs_to_relay) - var/mob/mob = thing + for(var/mob/mob as anything in mobs_to_relay) mob.show_message(rendered) ..() @@ -275,8 +268,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec var/list/in_range = get_mobs_and_objs_in_view_fast(T, world.view, 0) var/list/mobs_to_relay = in_range["mobs"] - for(var/thing in mobs_to_relay) - var/mob/mob = thing + for(var/mob/mob as anything in mobs_to_relay) var/list/combined = mob.combine_message(message_pieces, verb, M) var/message = combined["formatted"] var/name_used = M.GetVoice() @@ -296,8 +288,7 @@ when portals are shortly lived, or when portals are made to be obvious with spec var/obj/effect/map_effect/portal/master/other_master = counterpart var/in_vis_contents = FALSE - for(var/thing in other_master.portal_lines + other_master) - var/obj/effect/map_effect/portal/P = thing + for(var/obj/effect/map_effect/portal/P as anything in other_master.portal_lines + other_master) if(P in true_turf.vis_locs) in_vis_contents = TRUE break diff --git a/code/game/objects/effects/map_effects/screen_shaker.dm b/code/game/objects/effects/map_effects/screen_shaker.dm index 29568242e5..c8f5d413bd 100644 --- a/code/game/objects/effects/map_effects/screen_shaker.dm +++ b/code/game/objects/effects/map_effects/screen_shaker.dm @@ -11,8 +11,7 @@ var/shake_strength = 1 // How much it shakes. /obj/effect/map_effect/interval/screen_shaker/trigger() - for(var/A in player_list) - var/mob/M = A + for(var/mob/M as anything in player_list) if(M.z == src.z && get_dist(src, M) <= shake_radius) shake_camera(M, shake_duration, shake_strength) ..() \ No newline at end of file diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm index 4d85b582fa..7398633fc4 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -23,8 +23,7 @@ if(light_range > 0 && light_intensity > 0) var/list/turf/line = getline(starting.return_turf(), ending.return_turf()) tracing_line: - for(var/i in line) - var/turf/T = i + for(var/turf/T as anything in line) for(var/obj/effect/projectile_lighting/PL in T) if(PL.owner == instance_key) continue tracing_line diff --git a/code/game/objects/items/devices/communicator/UI_tgui.dm b/code/game/objects/items/devices/communicator/UI_tgui.dm index 989d68078e..3759d23d4e 100644 --- a/code/game/objects/items/devices/communicator/UI_tgui.dm +++ b/code/game/objects/items/devices/communicator/UI_tgui.dm @@ -24,8 +24,7 @@ cam_plane_masters = get_tgui_plane_masters() - for(var/plane in cam_plane_masters) - var/obj/screen/instance = plane + for(var/obj/screen/instance as anything in cam_plane_masters) instance.assigned_map = map_name instance.del_on_map_removal = FALSE instance.screen_loc = "[map_name]:CENTER" diff --git a/code/game/objects/items/devices/hacktool.dm b/code/game/objects/items/devices/hacktool.dm index b221ff875c..e92c45e151 100644 --- a/code/game/objects/items/devices/hacktool.dm +++ b/code/game/objects/items/devices/hacktool.dm @@ -15,8 +15,7 @@ hack_state = new(src) /obj/item/device/multitool/hacktool/Destroy() - for(var/T in known_targets) - var/atom/target = T + for(var/atom/target as anything in known_targets) target.unregister(OBSERVER_EVENT_DESTROY, src) known_targets.Cut() qdel(hack_state) diff --git a/code/game/objects/items/devices/radio/jammer.dm b/code/game/objects/items/devices/radio/jammer.dm index ed52707904..ace17fa07d 100644 --- a/code/game/objects/items/devices/radio/jammer.dm +++ b/code/game/objects/items/devices/radio/jammer.dm @@ -4,8 +4,7 @@ var/global/list/active_radio_jammers = list() var/turf/Tr = get_turf(radio) if(!Tr) return 0 //Nullspace radios don't get jammed. - for(var/jammer in active_radio_jammers) - var/obj/item/device/radio_jammer/J = jammer + for(var/obj/item/device/radio_jammer/J as anything in active_radio_jammers) var/turf/Tj = get_turf(J) if(J.on && Tj.z == Tr.z) //If we're on the same Z, it's worth checking. diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 79f38554b8..1fac4f3226 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -133,8 +133,7 @@ HALOGEN COUNTER - Radcount on mobs var/unknown = 0 var/reagentdata[0] var/unknownreagents[0] - for(var/A in C.reagents.reagent_list) - var/datum/reagent/R = A + for(var/datum/reagent/R as anything in C.reagents.reagent_list) if(R.scannable) reagentdata["[R.id]"] = "\t[round(C.reagents.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - Overdose" : ""]
" else @@ -155,8 +154,7 @@ HALOGEN COUNTER - Radcount on mobs var/unknown = 0 var/stomachreagentdata[0] var/stomachunknownreagents[0] - for(var/B in C.ingested.reagent_list) - var/datum/reagent/R = B + for(var/datum/reagent/R as anything in C.ingested.reagent_list) if(R.scannable) stomachreagentdata["[R.id]"] = "\t[round(C.ingested.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.volume > R.overdose) ? " - Overdose" : ""]
" if (advscan == 0 || showadvscan == 0) @@ -179,8 +177,7 @@ HALOGEN COUNTER - Radcount on mobs var/unknown = 0 var/touchreagentdata[0] var/touchunknownreagents[0] - for(var/B in C.touching.reagent_list) - var/datum/reagent/R = B + for(var/datum/reagent/R as anything in C.touching.reagent_list) if(R.scannable) touchreagentdata["[R.id]"] = "\t[round(C.touching.get_reagent_amount(R.id), 1)]u [R.name][(R.overdose && R.can_overdose_touch && R.volume > R.overdose) ? " - Overdose" : ""]
" if (advscan == 0 || showadvscan == 0) diff --git a/code/game/objects/items/devices/scanners_vr.dm b/code/game/objects/items/devices/scanners_vr.dm index b0c928e5a2..1722617106 100644 --- a/code/game/objects/items/devices/scanners_vr.dm +++ b/code/game/objects/items/devices/scanners_vr.dm @@ -54,8 +54,7 @@ var/global/mob/living/carbon/human/dummy/mannequin/sleevemate_mob // Gather potential subtargets var/list/choices = list(M) if(istype(M)) - for(var/belly in M.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in M.vore_organs) for(var/mob/living/carbon/human/H in B) // I do want an istype choices += H // Subtargets diff --git a/code/game/objects/items/stacks/medical_vr.dm b/code/game/objects/items/stacks/medical_vr.dm index 4599bb43f9..9ba54cea33 100644 --- a/code/game/objects/items/stacks/medical_vr.dm +++ b/code/game/objects/items/stacks/medical_vr.dm @@ -43,16 +43,14 @@ var/clotted = 0 var/too_far_gone = 0 - for(var/org in H.organs) //'organs' is just external organs, as opposed to 'internal_organs' - var/obj/item/organ/external/affecting = org + for(var/obj/item/organ/external/affecting as anything in H.organs) //'organs' is just external organs, as opposed to 'internal_organs' // No amount of clotting is going to help you here. if(affecting.open) too_far_gone++ continue - for(var/wnd in affecting.wounds) - var/datum/wound/W = wnd + for(var/datum/wound/W as anything in affecting.wounds) // No need if(W.bandaged) continue diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 38e173e3ff..67d76a8c89 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -252,6 +252,5 @@ return TRUE /obj/structure/proc/refresh_neighbors() - for(var/thing in RANGE_TURFS(1, src)) - var/turf/T = thing + for(var/turf/T as anything in RANGE_TURFS(1, src)) T.update_icon() diff --git a/code/game/objects/structures/electricchair.dm b/code/game/objects/structures/electricchair.dm index ca515e230f..2859d55dfb 100644 --- a/code/game/objects/structures/electricchair.dm +++ b/code/game/objects/structures/electricchair.dm @@ -65,8 +65,7 @@ s.set_up(12, 1, src) s.start() if(has_buckled_mobs()) - for(var/a in buckled_mobs) - var/mob/living/L = a + for(var/mob/living/L as anything in buckled_mobs) L.burn_skin(85) to_chat(L, "You feel a deep shock course through your body!") sleep(1) diff --git a/code/game/objects/structures/janicart.dm b/code/game/objects/structures/janicart.dm index 87f568f703..46a888e55f 100644 --- a/code/game/objects/structures/janicart.dm +++ b/code/game/objects/structures/janicart.dm @@ -456,8 +456,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) ..() update_layer() if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/L = A + for(var/mob/living/L as anything in buckled_mobs) if(L.loc != loc) L.buckled = null //Temporary, so Move() succeeds. L.buckled = src //Restoring @@ -467,8 +466,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart) /obj/structure/bed/chair/janicart/proc/update_mob() if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/L = A + for(var/mob/living/L as anything in buckled_mobs) L.set_dir(dir) switch(dir) if(SOUTH) diff --git a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm index 164554652b..4a3c5b53ff 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/chairs.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/chairs.dm @@ -63,8 +63,7 @@ ..() update_layer() if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/L = A + for(var/mob/living/L as anything in buckled_mobs) L.set_dir(dir) /obj/structure/bed/chair/verb/rotate_clockwise() @@ -151,8 +150,7 @@ playsound(src, 'sound/effects/roll.ogg', 100, 1) /obj/structure/bed/chair/office/handle_buckled_mob_movement(atom/new_loc, direction, movetime) - for(var/A in buckled_mobs) - var/mob/living/occupant = A + for(var/mob/living/occupant as anything in buckled_mobs) occupant.buckled = null occupant.Move(loc, direction, movetime) occupant.buckled = src diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 461cc122bf..2521055dad 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -51,8 +51,7 @@ . = ..() if(.) if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/L = A + for(var/mob/living/L as anything in buckled_mobs) L.set_dir(dir) /obj/structure/bed/chair/wheelchair/attackby(obj/item/weapon/W as obj, mob/user as mob) @@ -95,8 +94,7 @@ var/turf/T = null //--1---Move occupant---1--// if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/L = A + for(var/mob/living/L as anything in buckled_mobs) L.buckled = null step(L, direction) L.buckled = src @@ -128,8 +126,7 @@ . = ..() playsound(src, 'sound/effects/roll.ogg', 75, 1) if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/occupant = A + for(var/mob/living/occupant as anything in buckled_mobs) if(!driving) occupant.buckled = null occupant.Move(src.loc) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 80d888f2af..17b1455b45 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -265,12 +265,11 @@ /obj/machinery/shower/process() if(!on) return - for(var/thing in loc) - var/atom/movable/AM = thing - var/mob/living/L = thing - if(istype(AM) && AM.simulated) + for(var/atom/movable/AM in loc) + if(AM.simulated) wash(AM) - if(istype(L)) + if(isliving(AM)) + var/mob/living/L = AM process_heat(L) wash_floor() reagents.add_reagent("water", reagents.get_free_space()) diff --git a/code/game/sound.dm b/code/game/sound.dm index 08685cb0a2..ce4c33d37b 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -17,8 +17,7 @@ var/list/listeners = player_list if(!ignore_walls) //these sounds don't carry through walls listeners = listeners & hearers(maxdistance,turf_source) - for(var/P in listeners) - var/mob/M = P + for(var/mob/M as anything in listeners) if(!M || !M.client) continue var/turf/T = get_turf(M) diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 3a3325daa1..2f54db4847 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -238,19 +238,17 @@ /turf/proc/AdjacentTurfs(var/check_blockage = TRUE) . = list() - for(var/t in (trange(1,src) - src)) - var/turf/T = t + for(var/turf/T as anything in (trange(1,src) - src)) if(check_blockage) if(!T.density) if(!LinkBlocked(src, T) && !TurfBlockedNonWindow(T)) - . += t + . += T else - . += t + . += T /turf/proc/CardinalTurfs(var/check_blockage = TRUE) . = list() - for(var/ad in AdjacentTurfs(check_blockage)) - var/turf/T = ad + for(var/turf/T as anything in AdjacentTurfs(check_blockage)) if(T.x == src.x || T.y == src.y) . += T diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 0d9bceb996..60542d5a05 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -238,8 +238,7 @@ Example: USING PROCCALL = BLOCKING, SELECT = FORCE_NULLS, PRIORITY = HIGH SELECT do CHECK_TICK finished = TRUE - for(var/i in running) - var/datum/SDQL2_query/query = i + for(var/datum/SDQL2_query/query as anything in running) if(QDELETED(query)) running -= query continue @@ -562,8 +561,7 @@ GLOBAL_DATUM_INIT(sdql2_vv_statobj, /obj/effect/statclick/SDQL2_VV_all, new(null location = list(location) if(type == "*") - for(var/i in location) - var/datum/d = i + for(var/datum/d as anything in location) if(d.can_vv_get() || superuser) out += d SDQL2_TICK_CHECK diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 8b62db269f..2f6cfc3a21 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -63,8 +63,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) return var/list/dat = list("[title]") dat += "Refresh

" - for(var/I in l2b) - var/datum/admin_help/AH = I + for(var/datum/admin_help/AH as anything in l2b) dat += "Ticket #[AH.id]: [AH.initiator_key_name]: [AH.name]
" usr << browse(dat.Join(), "window=ahelp_list[state];size=600x480") @@ -73,8 +72,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /datum/admin_help_tickets/proc/stat_entry() var/num_disconnected = 0 stat("Active Tickets:", astatclick.update("[active_tickets.len]")) - for(var/I in active_tickets) - var/datum/admin_help/AH = I + for(var/datum/admin_help/AH as anything in active_tickets) if(AH.initiator) stat("#[AH.id]. [AH.initiator_key_name]:", AH.statclick.update()) else @@ -100,8 +98,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) //Get a ticket given a ckey /datum/admin_help_tickets/proc/CKey2ActiveTicket(ckey) - for(var/I in active_tickets) - var/datum/admin_help/AH = I + for(var/datum/admin_help/AH as anything in active_tickets) if(AH.initiator_ckey == ckey) return AH @@ -637,8 +634,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) /proc/ircadminwho() var/list/message = list("Admins: ") var/list/admin_keys = list() - for(var/adm in GLOB.admins) - var/client/C = adm + for(var/client/C as anything in GLOB.admins) admin_keys += "[C][C.holder.fakekey ? "(Stealth)" : ""][C.is_afk() ? "(AFK)" : ""]" for(var/admin in admin_keys) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index b1ab6b9428..a581d3fb82 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -282,8 +282,7 @@ Ccomp's first proc. GLOB.respawn_timers -= target var/found_client = FALSE - for(var/c in GLOB.clients) - var/client/C = c + for(var/client/C as anything in GLOB.clients) if(C.ckey == target) found_client = C to_chat(C, "You may now respawn. You should roleplay as if you learned nothing about the round during your time with the dead.") diff --git a/code/modules/admin/view_variables/modify_variables.dm b/code/modules/admin/view_variables/modify_variables.dm index 6f354e9b63..8863e76533 100644 --- a/code/modules/admin/view_variables/modify_variables.dm +++ b/code/modules/admin/view_variables/modify_variables.dm @@ -46,8 +46,7 @@ GLOBAL_PROTECT(VVpixelmovement) var/things = get_all_of_type(type, subtypes) var/i = 0 - for(var/thing in things) - var/datum/D = thing + for(var/datum/D as anything in things) i++ //try one of 3 methods to shorten the type text: // fancy type, diff --git a/code/modules/ai/ai_holder.dm b/code/modules/ai/ai_holder.dm index edd55a4c04..78f16a96a0 100644 --- a/code/modules/ai/ai_holder.dm +++ b/code/modules/ai/ai_holder.dm @@ -175,11 +175,10 @@ var/list/choices = list() for(var/typechoice in types) var/list/found = list() - for(var/mob in searching) // Isnt't there a helper for this, maybe? I forget. - var/atom/M = mob + for(var/atom/M as anything in searching) // Isnt't there a helper for this, maybe? I forget. if(!(M.z in levels_working)) continue - if(!istype(mob,typechoice)) + if(!istype(M,typechoice)) continue found += M choices["[typechoice] ([found.len])"] = found // Prettified name for the user input below) @@ -190,8 +189,7 @@ href_list["datumrefresh"] = "\ref[src]" return var/list/selected = choices[choice] - for(var/mob in selected) - var/mob/living/L = mob + for(var/mob/living/L as anything in selected) if(!istype(L)) to_chat(usr,"Skipping incompatible mob: [L] [ADMIN_COORDJMP(L)]") continue diff --git a/code/modules/ai/ai_holder_combat.dm b/code/modules/ai/ai_holder_combat.dm index e2e1ecbdea..760031985e 100644 --- a/code/modules/ai/ai_holder_combat.dm +++ b/code/modules/ai/ai_holder_combat.dm @@ -132,8 +132,7 @@ ai_log("test_projectile_safety() : Test projectile did[!would_hit_primary_target ? " NOT " : " "]hit \the [AM]", AI_LOG_DEBUG) // Make sure we don't have a chance to shoot our friends. - for(var/a in hit_things) - var/atom/A = a + for(var/atom/A as anything in hit_things) ai_log("test_projectile_safety() : Evaluating \the [A] ([A.type]).", AI_LOG_TRACE) if(isliving(A)) // Don't shoot at our friends, even if they're behind the target, as RNG can make them get hit. var/mob/living/L = A diff --git a/code/modules/ai/ai_holder_communication.dm b/code/modules/ai/ai_holder_communication.dm index beddb68924..caafe5c8b8 100644 --- a/code/modules/ai/ai_holder_communication.dm +++ b/code/modules/ai/ai_holder_communication.dm @@ -84,8 +84,7 @@ if(rand(0,200) < speak_chance) // Check if anyone is around to 'appreciate' what we say. var/alone = TRUE - for(var/m in viewers(holder)) - var/mob/M = m + for(var/mob/M as anything in viewers(holder)) if(M.client) alone = FALSE break diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index af697777f9..66ed0c186a 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -127,8 +127,7 @@ return TRUE if("visible") visible = !visible - for(var/ibeam in i_beams) - var/obj/effect/beam/i_beam/I = ibeam + for(var/obj/effect/beam/i_beam/I as anything in i_beams) I.visible = visible CHECK_TICK return TRUE diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 005bcd05bf..f0422f4116 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -375,8 +375,7 @@ /datum/asset/spritesheet/vending/register() populate_vending_products() - for(var/k in GLOB.vending_products) - var/atom/item = k + for(var/atom/item as anything in GLOB.vending_products) if(!ispath(item, /atom)) continue diff --git a/code/modules/blob2/blobs/base_blob.dm b/code/modules/blob2/blobs/base_blob.dm index f9c9eb588d..14f7eb54c0 100644 --- a/code/modules/blob2/blobs/base_blob.dm +++ b/code/modules/blob2/blobs/base_blob.dm @@ -111,8 +111,7 @@ GLOBAL_LIST_EMPTY(all_blobs) shuffle_inplace(blobs_to_affect) - for(var/L in blobs_to_affect) - var/obj/structure/blob/B = L + for(var/obj/structure/blob/B as anything in blobs_to_affect) if(B.faction != faction) continue diff --git a/code/modules/blob2/blobs/core.dm b/code/modules/blob2/blobs/core.dm index cd4a68a308..2b5cefa89d 100644 --- a/code/modules/blob2/blobs/core.dm +++ b/code/modules/blob2/blobs/core.dm @@ -197,8 +197,7 @@ var/list/blob_cores = list() if(!difficulty_threshold) return var/list/valid_types = list() - for(var/thing in subtypesof(/datum/blob_type)) - var/datum/blob_type/BT = thing + for(var/datum/blob_type/BT as anything in subtypesof(/datum/blob_type)) if(initial(BT.difficulty) > difficulty_threshold) // Too hard. continue if(initial(BT.difficulty) < difficulty_floor) // Too easy. diff --git a/code/modules/blob2/overmind/overmind.dm b/code/modules/blob2/overmind/overmind.dm index 6df0cba629..cdfe6d766a 100644 --- a/code/modules/blob2/overmind/overmind.dm +++ b/code/modules/blob2/overmind/overmind.dm @@ -57,14 +57,12 @@ var/list/overminds = list() return ..(newloc) /mob/observer/blob/Destroy() - for(var/BL in GLOB.all_blobs) - var/obj/structure/blob/B = BL + for(var/obj/structure/blob/B as anything in GLOB.all_blobs) if(B && B.overmind == src) B.overmind = null B.update_icon() //reset anything that was ours - for(var/BLO in blob_mobs) - var/mob/living/simple_mob/blob/spore/BM = BLO + for(var/mob/living/simple_mob/blob/spore/BM as anything in blob_mobs) if(BM) BM.overmind = null BM.update_icons() diff --git a/code/modules/blob2/overmind/types/synchronous_mesh.dm b/code/modules/blob2/overmind/types/synchronous_mesh.dm index e234756b2d..acf9441b71 100644 --- a/code/modules/blob2/overmind/types/synchronous_mesh.dm +++ b/code/modules/blob2/overmind/types/synchronous_mesh.dm @@ -34,8 +34,7 @@ if(!istype(C, /obj/structure/blob/core) && !istype(C, /obj/structure/blob/node) && C.overmind && (C.overmind == B.overmind) ) //if it doesn't have the same 'ownership' or is a core or node, don't split damage to it blobs_to_hurt += C - for(var/thing in blobs_to_hurt) - var/obj/structure/blob/C = thing + for(var/obj/structure/blob/C as anything in blobs_to_hurt) if(C == B) continue // We'll damage this later. diff --git a/code/modules/catalogue/cataloguer.dm b/code/modules/catalogue/cataloguer.dm index 8f7f3152f3..92ed97f347 100644 --- a/code/modules/catalogue/cataloguer.dm +++ b/code/modules/catalogue/cataloguer.dm @@ -78,8 +78,7 @@ GLOBAL_LIST_EMPTY(all_cataloguers) if(isturf(target) && (!target.can_catalogue())) var/turf/T = target - for(var/a in T) // If we can't scan the turf, see if we can scan anything on it, to help with aiming. - var/atom/A = a + for(var/atom/A as anything in T) // If we can't scan the turf, see if we can scan anything on it, to help with aiming. if(A.can_catalogue()) target = A break @@ -149,8 +148,7 @@ GLOBAL_LIST_EMPTY(all_cataloguers) // Figure out who may have helped out. var/list/contributers = list() var/list/contributer_names = list() - for(var/thing in player_list) - var/mob/living/L = thing + for(var/mob/living/L as anything in player_list) if(L == user) continue if(!istype(L)) @@ -169,8 +167,7 @@ GLOBAL_LIST_EMPTY(all_cataloguers) if(istype(I)) var/list/discoveries = I.discover(user, list(user.name) + contributer_names) // If one discovery leads to another, the list returned will have all of them. if(LAZYLEN(discoveries)) - for(var/D in discoveries) - var/datum/category_item/catalogue/data = D + for(var/datum/category_item/catalogue/data as anything in discoveries) points_gained += data.value // Give out points. @@ -208,23 +205,20 @@ GLOBAL_LIST_EMPTY(all_cataloguers) // First, get everything able to be scanned. var/list/scannable_atoms = list() - for(var/a in view(world.view, user)) - var/atom/A = a + for(var/atom/A as anything in view(world.view, user)) if(A.can_catalogue()) // Not passing the user is intentional, so they don't get spammed. scannable_atoms += A // Highlight things able to be scanned. var/filter = filter(type = "outline", size = 1, color = "#00FF00") - for(var/a in scannable_atoms) - var/atom/A = a + for(var/atom/A as anything in scannable_atoms) A.filters += filter to_chat(user, span("notice", "\The [src] is highlighting scannable objects in green, if any exist.")) sleep(2 SECONDS) // Remove the highlights. - for(var/a in scannable_atoms) - var/atom/A = a + for(var/atom/A as anything in scannable_atoms) if(QDELETED(A)) continue A.filters -= filter @@ -271,14 +265,12 @@ GLOBAL_LIST_EMPTY(all_cataloguers) else dat += "
" - for(var/G in GLOB.catalogue_data.categories) - var/datum/category_group/group = G + for(var/datum/category_group/group as anything in GLOB.catalogue_data.categories) var/list/group_dat = list() var/show_group = FALSE group_dat += "[group.name]" - for(var/I in group.items) - var/datum/category_item/catalogue/item = I + for(var/datum/category_item/catalogue/item as anything in group.items) if(item.visible || debug) group_dat += "[item.name]" show_group = TRUE diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index fb267e3923..7a22dc451c 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -74,13 +74,12 @@ if(href_list["discord_reg"]) var/their_id = html_decode(href_list["discord_reg"]) var/sane = FALSE - for(var/item in GLOB.pending_discord_registrations) - var/list/L = item + for(var/list/L as anything in GLOB.pending_discord_registrations) if(!islist(L)) - GLOB.pending_discord_registrations -= item + GLOB.pending_discord_registrations -= L continue if(L["ckey"] == ckey && L["id"] == their_id) - GLOB.pending_discord_registrations -= list(item) + GLOB.pending_discord_registrations -= list(L) var/time = L["time"] if((world.realtime - time) > 10 MINUTES) to_chat(src, "Sorry, that link has expired. Please request another on Discord.") diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm index f213c15a8a..8f047985c7 100644 --- a/code/modules/client/preference_setup/global/02_settings.dm +++ b/code/modules/client/preference_setup/global/02_settings.dm @@ -29,8 +29,7 @@ // Arrange preferences that have never been enabled/disabled. var/list/client_preference_keys = list() - for(var/cp in get_client_preferences()) - var/datum/client_preference/client_pref = cp + for(var/datum/client_preference/client_pref as anything in get_client_preferences()) client_preference_keys += client_pref.key if((client_pref.key in pref.preferences_enabled) || (client_pref.key in pref.preferences_disabled)) continue @@ -57,8 +56,7 @@ . += "Preferences
" . += "" var/mob/pref_mob = preference_mob() - for(var/cp in get_client_preferences()) - var/datum/client_preference/client_pref = cp + for(var/datum/client_preference/client_pref as anything in get_client_preferences()) if(!client_pref.may_toggle(pref_mob)) continue diff --git a/code/modules/client/preference_setup/global/setting_datums.dm b/code/modules/client/preference_setup/global/setting_datums.dm index 25eae07ff1..5333d176f3 100644 --- a/code/modules/client/preference_setup/global/setting_datums.dm +++ b/code/modules/client/preference_setup/global/setting_datums.dm @@ -5,8 +5,7 @@ var/list/_client_preferences_by_type /proc/get_client_preferences() if(!_client_preferences) _client_preferences = list() - for(var/ct in subtypesof(/datum/client_preference)) - var/datum/client_preference/client_type = ct + for(var/datum/client_preference/client_type as anything in subtypesof(/datum/client_preference)) if(initial(client_type.description)) _client_preferences += new client_type() return _client_preferences @@ -21,16 +20,14 @@ var/list/_client_preferences_by_type /proc/get_client_preference_by_key(var/preference) if(!_client_preferences_by_key) _client_preferences_by_key = list() - for(var/ct in get_client_preferences()) - var/datum/client_preference/client_pref = ct + for(var/datum/client_preference/client_pref as anything in get_client_preferences()) _client_preferences_by_key[client_pref.key] = client_pref return _client_preferences_by_key[preference] /proc/get_client_preference_by_type(var/preference) if(!_client_preferences_by_type) _client_preferences_by_type = list() - for(var/ct in get_client_preferences()) - var/datum/client_preference/client_pref = ct + for(var/datum/client_preference/client_pref as anything in get_client_preferences()) _client_preferences_by_type[client_pref.type] = client_pref return _client_preferences_by_type[preference] diff --git a/code/modules/client/preference_setup/loadout/loadout.dm b/code/modules/client/preference_setup/loadout/loadout.dm index e582235399..299e742cfd 100644 --- a/code/modules/client/preference_setup/loadout/loadout.dm +++ b/code/modules/client/preference_setup/loadout/loadout.dm @@ -12,9 +12,8 @@ var/list/gear_datums = list() /hook/startup/proc/populate_gear_list() //create a list of gear datums to sort - for(var/geartype in typesof(/datum/gear)-/datum/gear) - var/datum/gear/G = geartype - if(initial(G.type_category) == geartype) + for(var/datum/gear/G as anything in subtypesof(/datum/gear)) + if(initial(G.type_category) == G) continue var/use_name = initial(G.display_name) var/use_category = initial(G.sort_category) @@ -32,7 +31,7 @@ var/list/gear_datums = list() if(!loadout_categories[use_category]) loadout_categories[use_category] = new /datum/loadout_category(use_category) var/datum/loadout_category/LC = loadout_categories[use_category] - gear_datums[use_name] = new geartype + gear_datums[use_name] = new G LC.gear[use_name] = gear_datums[use_name] loadout_categories = sortAssoc(loadout_categories) diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm index d367caeb40..8df33da728 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -13,8 +13,7 @@ /datum/gear/accessory/armband/New() ..() var/list/armbands = list() - for(var/armband in (typesof(/obj/item/clothing/accessory/armband) - typesof(/obj/item/clothing/accessory/armband/med/color))) - var/obj/item/clothing/accessory/armband_type = armband + for(var/obj/item/clothing/accessory/armband_type as anything in (typesof(/obj/item/clothing/accessory/armband) - typesof(/obj/item/clothing/accessory/armband/med/color))) armbands[initial(armband_type.name)] = armband_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(armbands)) @@ -71,8 +70,7 @@ /datum/gear/accessory/wcoat/New() ..() var/list/wcoats = list() - for(var/wcoat in typesof(/obj/item/clothing/accessory/wcoat)) - var/obj/item/clothing/accessory/wcoat_type = wcoat + for(var/obj/item/clothing/accessory/wcoat_type as anything in typesof(/obj/item/clothing/accessory/wcoat)) wcoats[initial(wcoat_type.name)] = wcoat_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(wcoats)) @@ -84,8 +82,7 @@ /datum/gear/accessory/holster/New() ..() var/list/holsters = list() - for(var/holster in typesof(/obj/item/clothing/accessory/holster)) - var/obj/item/clothing/accessory/holster_type = holster + for(var/obj/item/clothing/accessory/holster_type as anything in typesof(/obj/item/clothing/accessory/holster)) holsters[initial(holster_type.name)] = holster_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(holsters)) @@ -97,8 +94,7 @@ /datum/gear/accessory/tie/New() ..() var/list/ties = list() - for(var/tie in typesof(/obj/item/clothing/accessory/tie)) - var/obj/item/clothing/accessory/tie_type = tie + for(var/obj/item/clothing/accessory/tie_type as anything in typesof(/obj/item/clothing/accessory/tie)) ties[initial(tie_type.name)] = tie_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(ties)) @@ -110,8 +106,7 @@ /datum/gear/accessory/scarf/New() ..() var/list/scarfs = list() - for(var/scarf in typesof(/obj/item/clothing/accessory/scarf)) - var/obj/item/clothing/accessory/scarf_type = scarf + for(var/obj/item/clothing/accessory/scarf_type as anything in typesof(/obj/item/clothing/accessory/scarf)) scarfs[initial(scarf_type.name)] = scarf_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(scarfs)) @@ -132,8 +127,7 @@ /datum/gear/accessory/jacket/New() ..() var/list/jackets = list() - for(var/jacket in typesof(/obj/item/clothing/accessory/jacket)) - var/obj/item/clothing/accessory/jacket_type = jacket + for(var/obj/item/clothing/accessory/jacket_type as anything in typesof(/obj/item/clothing/accessory/jacket)) jackets[initial(jacket_type.name)] = jacket_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jackets)) @@ -179,8 +173,7 @@ /datum/gear/accessory/fannypack/New() ..() var/list/fannys = list() - for(var/fanny in typesof(/obj/item/weapon/storage/belt/fannypack)) - var/obj/item/weapon/storage/belt/fannypack/fanny_type = fanny + for(var/obj/item/weapon/storage/belt/fannypack/fanny_type as anything in typesof(/obj/item/weapon/storage/belt/fannypack)) fannys[initial(fanny_type.name)] = fanny_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(fannys)) @@ -280,8 +273,7 @@ /datum/gear/accessory/asym/New() ..() var/list/asyms = list() - for(var/asym in typesof(/obj/item/clothing/accessory/asymmetric)) - var/obj/item/clothing/accessory/asymmetric_type = asym + for(var/obj/item/clothing/accessory/asymmetric_type as anything in typesof(/obj/item/clothing/accessory/asymmetric)) asyms[initial(asymmetric_type.name)] = asymmetric_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(asyms)) diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm index 719eb6fcfc..5ee5ab3537 100644 --- a/code/modules/client/preference_setup/loadout/loadout_general.dm +++ b/code/modules/client/preference_setup/loadout/loadout_general.dm @@ -53,8 +53,7 @@ /datum/gear/plushie/New() ..() var/list/plushies = list() - for(var/plushie in subtypesof(/obj/item/toy/plushie/) - /obj/item/toy/plushie/therapy) - var/obj/item/toy/plushie/plushie_type = plushie + for(var/obj/item/toy/plushie/plushie_type as anything in subtypesof(/obj/item/toy/plushie/) - /obj/item/toy/plushie/therapy) plushies[initial(plushie_type.name)] = plushie_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(plushies)) @@ -66,8 +65,7 @@ /datum/gear/figure/New() ..() var/list/figures = list() - for(var/figure in typesof(/obj/item/toy/figure/) - /obj/item/toy/figure) - var/obj/item/toy/figure/figure_type = figure + for(var/obj/item/toy/figure/figure_type as anything in typesof(/obj/item/toy/figure/) - /obj/item/toy/figure) figures[initial(figure_type.name)] = figure_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(figures)) diff --git a/code/modules/client/preference_setup/loadout/loadout_general_vr.dm b/code/modules/client/preference_setup/loadout/loadout_general_vr.dm index 94739c56bb..8196032233 100644 --- a/code/modules/client/preference_setup/loadout/loadout_general_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_general_vr.dm @@ -6,8 +6,7 @@ /datum/gear/ball/New() ..() var/list/balls = list() - for(var/ball in typesof(/obj/item/toy/tennis/)) - var/obj/item/toy/tennis/ball_type = ball + for(var/obj/item/toy/tennis/ball_type as anything in typesof(/obj/item/toy/tennis/)) balls[initial(ball_type.name)] = ball_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(balls)) @@ -19,8 +18,7 @@ /datum/gear/character/New() ..() var/list/characters = list() - for(var/character in typesof(/obj/item/toy/character/) - /obj/item/toy/character) - var/obj/item/toy/character/character_type = character + for(var/obj/item/toy/character/character_type as anything in typesof(/obj/item/toy/character/) - /obj/item/toy/character) characters[initial(character_type.name)] = character_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(characters)) @@ -32,8 +30,7 @@ /datum/gear/mechtoy/New() ..() var/list/mechs = list() - for(var/mech in typesof(/obj/item/toy/mecha/) - /obj/item/toy/mecha/) - var/obj/item/toy/mecha/mech_type = mech + for(var/obj/item/toy/mecha/mech_type as anything in typesof(/obj/item/toy/mecha/) - /obj/item/toy/mecha/) mechs[initial(mech_type.name)] = mech_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(mechs)) diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index 2513757c1c..0c06774d9b 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -169,8 +169,7 @@ /datum/gear/head/pin/New() ..() var/list/pins = list() - for(var/pin in typesof(/obj/item/clothing/head/pin)) - var/obj/item/clothing/head/pin/pin_type = pin + for(var/obj/item/clothing/head/pin/pin_type as anything in typesof(/obj/item/clothing/head/pin)) pins[initial(pin_type.name)] = pin_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pins)) @@ -182,8 +181,7 @@ /datum/gear/head/hardhat/New() ..() var/list/hardhats = list() - for(var/hardhat in typesof(/obj/item/clothing/head/hardhat)) - var/obj/item/clothing/head/hardhat/hardhat_type = hardhat + for(var/obj/item/clothing/head/hardhat/hardhat_type as anything in typesof(/obj/item/clothing/head/hardhat)) hardhats[initial(hardhat_type.name)] = hardhat_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hardhats)) @@ -223,8 +221,7 @@ /datum/gear/head/santahat/New() ..() var/list/santahats = list() - for(var/santahat in typesof(/obj/item/clothing/head/santa)) - var/obj/item/clothing/head/santa/santahat_type = santahat + for(var/obj/item/clothing/head/santa/santahat_type as anything in typesof(/obj/item/clothing/head/santa)) santahats[initial(santahat_type.name)] = santahat_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(santahats)) diff --git a/code/modules/client/preference_setup/loadout/loadout_smoking.dm b/code/modules/client/preference_setup/loadout/loadout_smoking.dm index 96db8bf2fe..f9442518b2 100644 --- a/code/modules/client/preference_setup/loadout/loadout_smoking.dm +++ b/code/modules/client/preference_setup/loadout/loadout_smoking.dm @@ -48,7 +48,6 @@ /datum/gear/cigarettes/New() ..() var/list/cigarettes = list() - for(var/cigarette in (typesof(/obj/item/weapon/storage/fancy/cigarettes) - typesof(/obj/item/weapon/storage/fancy/cigarettes/killthroat))) - var/obj/item/weapon/storage/fancy/cigarettes/cigarette_brand = cigarette + for(var/obj/item/weapon/storage/fancy/cigarettes/cigarette_brand as anything in (typesof(/obj/item/weapon/storage/fancy/cigarettes) - typesof(/obj/item/weapon/storage/fancy/cigarettes/killthroat))) cigarettes[initial(cigarette_brand.name)] = cigarette_brand gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cigarettes)) diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index 4d24c2b1c6..3dcf43895f 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -16,8 +16,7 @@ /datum/gear/uniform/cheongsam/New() ..() var/list/cheongasms = list() - for(var/cheongasm in typesof(/obj/item/clothing/under/cheongsam)) - var/obj/item/clothing/under/cheongsam/cheongasm_type = cheongasm + for(var/obj/item/clothing/under/cheongsam/cheongasm_type as anything in typesof(/obj/item/clothing/under/cheongsam)) cheongasms[initial(cheongasm_type.name)] = cheongasm_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(cheongasms)) @@ -28,8 +27,7 @@ /datum/gear/uniform/croptop/New() ..() var/list/croptops = list() - for(var/croptop in typesof(/obj/item/clothing/under/croptop)) - var/obj/item/clothing/under/croptop/croptop_type = croptop + for(var/obj/item/clothing/under/croptop/croptop_type as anything in typesof(/obj/item/clothing/under/croptop)) croptops[initial(croptop_type.name)] = croptop_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(croptops)) @@ -52,8 +50,7 @@ /datum/gear/uniform/jumpsuit/New() ..() var/list/jumpclothes = list() - for(var/jump in typesof(/obj/item/clothing/under/color)) - var/obj/item/clothing/under/color/jumps = jump + for(var/obj/item/clothing/under/color/jumps as anything in typesof(/obj/item/clothing/under/color)) jumpclothes[initial(jumps.name)] = jumps gear_tweaks += new/datum/gear_tweak/path(sortAssoc(jumpclothes)) @@ -78,8 +75,7 @@ /datum/gear/uniform/pants/New() ..() var/list/pants = list() - for(var/pant in typesof(/obj/item/clothing/under/pants)) - var/obj/item/clothing/under/pants/pant_type = pant + for(var/obj/item/clothing/under/pants/pant_type as anything in typesof(/obj/item/clothing/under/pants)) pants[initial(pant_type.name)] = pant_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(pants)) @@ -90,8 +86,7 @@ /datum/gear/uniform/shorts/New() ..() var/list/shorts = list() - for(var/short in typesof(/obj/item/clothing/under/shorts)) - var/obj/item/clothing/under/pants/short_type = short + for(var/obj/item/clothing/under/pants/short_type as anything in typesof(/obj/item/clothing/under/shorts)) shorts[initial(short_type.name)] = short_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(shorts)) @@ -212,8 +207,7 @@ /datum/gear/uniform/suit/lawyer/New() ..() var/list/lsuits = list() - for(var/lsuit in typesof(/obj/item/clothing/under/lawyer)) - var/obj/item/clothing/suit/lsuit_type = lsuit + for(var/obj/item/clothing/suit/lsuit_type as anything in typesof(/obj/item/clothing/under/lawyer)) lsuits[initial(lsuit_type.name)] = lsuit_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(lsuits)) @@ -273,8 +267,7 @@ /datum/gear/uniform/scrub/New() ..() var/list/scrubs = list() - for(var/scrub in typesof(/obj/item/clothing/under/rank/medical/scrubs)) - var/obj/item/clothing/under/rank/medical/scrubs/scrub_type = scrub + for(var/obj/item/clothing/under/rank/medical/scrubs/scrub_type as anything in typesof(/obj/item/clothing/under/rank/medical/scrubs)) scrubs[initial(scrub_type.name)] = scrub_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(scrubs)) @@ -396,8 +389,7 @@ /datum/gear/uniform/dresses/maid/New() ..() var/list/maids = list() - for(var/maid in typesof(/obj/item/clothing/under/dress/maid)) - var/obj/item/clothing/under/dress/maid/maid_type = maid + for(var/obj/item/clothing/under/dress/maid/maid_type as anything in typesof(/obj/item/clothing/under/dress/maid)) maids[initial(maid_type.name)] = maid_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(maids)) diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm index 02e6057f38..18e9f2b83a 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform_vr.dm @@ -171,8 +171,7 @@ Swimsuits /datum/gear/uniform/swimsuits/New() ..() var/list/swimsuits = list() - for(var/swimsuit in typesof(/obj/item/weapon/storage/box/fluff/swimsuit)) - var/obj/item/weapon/storage/box/fluff/swimsuit/swimsuit_type = swimsuit + for(var/obj/item/weapon/storage/box/fluff/swimsuit/swimsuit_type as anything in typesof(/obj/item/weapon/storage/box/fluff/swimsuit)) swimsuits[initial(swimsuit_type.name)] = swimsuit_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(swimsuits)) diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm index 23855d851f..fb396762f5 100644 --- a/code/modules/client/preference_setup/loadout/loadout_utility.dm +++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm @@ -21,8 +21,7 @@ /datum/gear/utility/communicator/New() ..() var/list/communicators = list() - for(var/communicator in typesof(/obj/item/device/communicator) - list(/obj/item/device/communicator/integrated,/obj/item/device/communicator/commlink)) //VOREStation Edit - Remove Commlink - var/obj/item/device/communicator_type = communicator + for(var/obj/item/device/communicator_type as anything in typesof(/obj/item/device/communicator) - list(/obj/item/device/communicator/integrated,/obj/item/device/communicator/commlink)) //VOREStation Edit - Remove Commlink communicators[initial(communicator_type.name)] = communicator_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(communicators)) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index c0cde563a8..a69eee2e7f 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -24,15 +24,14 @@ . = list() var/i = 1 //in case there is a collision with both name AND icon_state - for(var/typepath in typesof(basetype) - blacklist) - var/obj/O = typepath + for(var/obj/O as anything in typesof(basetype) - blacklist) if(initial(O.icon) && initial(O.icon_state)) var/name = initial(O.name) if(name in .) name += " ([initial(O.icon_state)])" if(name in .) name += " \[[i++]\]" - .[name] = typepath + .[name] = O /obj/item/clothing/under/chameleon //starts off as black diff --git a/code/modules/clothing/clothing_accessories.dm b/code/modules/clothing/clothing_accessories.dm index d7415c4a75..c67d63e6a8 100644 --- a/code/modules/clothing/clothing_accessories.dm +++ b/code/modules/clothing/clothing_accessories.dm @@ -9,8 +9,7 @@ //Find all consumed slots var/consumed_slots = 0 - for(var/thing in accessories) - var/obj/item/clothing/accessory/AC = thing + for(var/obj/item/clothing/accessory/AC as anything in accessories) consumed_slots |= AC.slot //Mask to just consumed restricted diff --git a/code/modules/clothing/head/pilot_helmet.dm b/code/modules/clothing/head/pilot_helmet.dm index f2c3956e47..590cba4dd1 100644 --- a/code/modules/clothing/head/pilot_helmet.dm +++ b/code/modules/clothing/head/pilot_helmet.dm @@ -166,8 +166,7 @@ I.color = newcolor /obj/item/clothing/head/pilot/Destroy() - for(var/img in raw_images) - var/image/I = img + for(var/image/I as anything in raw_images) I.loc = null shuttle_comp = null qdel(pilot_hud) diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index 2003fac6d6..7516be2eff 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -194,8 +194,7 @@ var/list/m_viewers = in_range["mobs"] var/list/o_viewers = in_range["objs"] - for(var/mob in m_viewers) - var/mob/M = mob + for(var/mob/M as anything in m_viewers) spawn(0) // It's possible that it could be deleted in the meantime, or that it runtimes. if(M) if(isobserver(M)) @@ -203,8 +202,7 @@ M.show_message(message, m_type) M.create_chat_message(src, "[runemessage]", FALSE, list("emote"), (m_type == AUDIBLE_MESSAGE)) - for(var/obj in o_viewers) - var/obj/O = obj + for(var/obj/O as anything in o_viewers) spawn(0) if(O) O.see_emote(src, message, m_type) diff --git a/code/modules/entopics_vr/alternate_appearance.dm b/code/modules/entopics_vr/alternate_appearance.dm index 4fd7d31ed0..42b6d697f9 100644 --- a/code/modules/entopics_vr/alternate_appearance.dm +++ b/code/modules/entopics_vr/alternate_appearance.dm @@ -24,8 +24,7 @@ /datum/alternate_appearance/proc/display_to(list/displayTo) if(!displayTo || !displayTo.len) return - for(var/m in displayTo) - var/mob/M = m + for(var/mob/M as anything in displayTo) if(!M.viewing_alternate_appearances) M.viewing_alternate_appearances = list() viewers |= M @@ -42,8 +41,7 @@ if(hideFrom) hiding = hideFrom - for(var/m in hiding) - var/mob/M = m + for(var/mob/M as anything in hiding) if(M.client) M.client.images -= img if(M.viewing_alternate_appearances && M.viewing_alternate_appearances.len) diff --git a/code/modules/entopics_vr/entopics.dm b/code/modules/entopics_vr/entopics.dm index 1e146e0c05..a3ea9e35ab 100644 --- a/code/modules/entopics_vr/entopics.dm +++ b/code/modules/entopics_vr/entopics.dm @@ -77,8 +77,7 @@ var/global/list/alt_farmanimals = list() registered = TRUE entopic_images += my_image - for(var/m in entopic_users) - var/mob/M = m + for(var/mob/M as anything in entopic_users) if(M.client) M.client.images += my_image @@ -88,8 +87,7 @@ var/global/list/alt_farmanimals = list() registered = FALSE entopic_images -= my_image - for(var/m in entopic_users) - var/mob/M = m + for(var/mob/M as anything in entopic_users) if(M.client) M.client.images -= my_image diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm index f573614666..d4fb6faa97 100644 --- a/code/modules/events/carp_migration.dm +++ b/code/modules/events/carp_migration.dm @@ -76,8 +76,7 @@ // Counts living carp spawned by this event. /datum/event/carp_migration/proc/count_spawned_carps() . = 0 - for(var/I in spawned_carp) - var/mob/living/simple_mob/animal/M = I + for(var/mob/living/simple_mob/animal/M as anything in spawned_carp) if(!QDELETED(M) && M.stat != DEAD) . += 1 diff --git a/code/modules/events/grubinfestation_vr.dm b/code/modules/events/grubinfestation_vr.dm index 45ca8bd6a7..fa87a1c58d 100644 --- a/code/modules/events/grubinfestation_vr.dm +++ b/code/modules/events/grubinfestation_vr.dm @@ -30,8 +30,7 @@ /datum/event/grub_infestation/end() var/list/area_names = list() - for(var/grub in existing_solargrubs) - var/mob/living/G = grub + for(var/mob/living/G as anything in existing_solargrubs) if(!G || G.stat == DEAD) continue var/area/grub_area = get_area(G) diff --git a/code/modules/food/food/lunch.dm b/code/modules/food/food/lunch.dm index 6bbd434e43..81e75fa254 100644 --- a/code/modules/food/food/lunch.dm +++ b/code/modules/food/food/lunch.dm @@ -106,9 +106,8 @@ var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit, /proc/init_lunchable_list(var/list/lunches) . = list() - for(var/lunch in lunches) - var/obj/O = lunch - .[initial(O.name)] = lunch + for(var/obj/O as anything in lunches) + .[initial(O.name)] = O return sortAssoc(.) /proc/init_lunchable_reagent_list(var/list/banned_reagents, var/reagent_types) diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 61679424bd..2e2ae2912f 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -4149,8 +4149,7 @@ //Calculate the reagents of the coating needed var/req = 0 - for (var/r in reagents.reagent_list) - var/datum/reagent/R = r + for(var/datum/reagent/R as anything in reagents.reagent_list) if (istype(R, /datum/reagent/nutriment)) req += R.volume * 0.2 else @@ -4232,8 +4231,7 @@ if (do_coating_prefix == 1) name = "[coating.coated_adj] [name]" - for (var/r in reagents.reagent_list) - var/datum/reagent/R = r + for(var/datum/reagent/R as anything in reagents.reagent_list) if (istype(R, /datum/reagent/nutriment/coating)) var/datum/reagent/nutriment/coating/C = R C.data["cooked"] = 1 diff --git a/code/modules/food/kitchen/cooking_machines/_appliance.dm b/code/modules/food/kitchen/cooking_machines/_appliance.dm index db3025f961..8847e99580 100644 --- a/code/modules/food/kitchen/cooking_machines/_appliance.dm +++ b/code/modules/food/kitchen/cooking_machines/_appliance.dm @@ -53,14 +53,12 @@ if (!available_recipes) available_recipes = new - for(var/type in subtypesof(/datum/recipe)) - var/datum/recipe/test = type + for(var/datum/recipe/test as anything in subtypesof(/datum/recipe)) if((appliancetype & initial(test.appliance))) available_recipes += new test /obj/machinery/appliance/Destroy() - for (var/a in cooking_objs) - var/datum/cooking_item/CI = a + for(var/datum/cooking_item/CI as anything in cooking_objs) qdel(CI.container)//Food is fragile, it probably doesnt survive the destruction of the machine cooking_objs -= CI qdel(CI) @@ -74,8 +72,7 @@ /obj/machinery/appliance/proc/list_contents(var/mob/user) if (cooking_objs.len) var/string = "Contains..." - for (var/a in cooking_objs) - var/datum/cooking_item/CI = a + for(var/datum/cooking_item/CI as anything in cooking_objs) string += "-\a [CI.container.label(null, CI.combine_target)], [report_progress(CI)]
" return string else @@ -343,8 +340,7 @@ for (var/obj/item/J in CI.container) cookwork_by_item(J, CI) - for (var/r in CI.container.reagents.reagent_list) - var/datum/reagent/R = r + for(var/datum/reagent/R as anything in CI.container.reagents.reagent_list) if (istype(R, /datum/reagent/nutriment)) CI.max_cookwork += R.volume *2//Added reagents contribute less than those in food items due to granular form @@ -373,8 +369,7 @@ var/work = 0 if (istype(S)) if (S.reagents) - for (var/r in S.reagents.reagent_list) - var/datum/reagent/R = r + for(var/datum/reagent/R as anything in S.reagents.reagent_list) if (istype(R, /datum/reagent/nutriment)) work += R.volume *3//Core nutrients contribute much more than peripheral chemicals @@ -463,8 +458,7 @@ results += TR - for (var/r in results) - var/obj/item/weapon/reagent_containers/food/snacks/R = r + for(var/obj/item/weapon/reagent_containers/food/snacks/R as anything in results) R.forceMove(C) //Move everything from the buffer back to the container R.cooked |= cook_type @@ -608,8 +602,7 @@ /obj/machinery/appliance/proc/removal_menu(var/mob/user) if (can_remove_items(user)) var/list/menuoptions = list() - for (var/a in cooking_objs) - var/datum/cooking_item/CI = a + for(var/datum/cooking_item/CI as anything in cooking_objs) if (CI.container) menuoptions[CI.container.label(menuoptions.len)] = CI diff --git a/code/modules/food/kitchen/cooking_machines/_mixer.dm b/code/modules/food/kitchen/cooking_machines/_mixer.dm index 24b0371cfd..7d18865167 100644 --- a/code/modules/food/kitchen/cooking_machines/_mixer.dm +++ b/code/modules/food/kitchen/cooking_machines/_mixer.dm @@ -80,8 +80,7 @@ fundamental differences /obj/machinery/appliance/mixer/removal_menu(var/mob/user) if (can_remove_items(user)) var/list/menuoptions = list() - for (var/a in cooking_objs) - var/datum/cooking_item/CI = a + for(var/datum/cooking_item/CI as anything in cooking_objs) if (CI.container) if (!CI.container.check_contents()) to_chat(user, "There's nothing in [src] you can remove!") diff --git a/code/modules/food/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm index bb9ef2a255..1611f9ac77 100644 --- a/code/modules/food/kitchen/microwave.dm +++ b/code/modules/food/kitchen/microwave.dm @@ -43,8 +43,7 @@ if(!available_recipes) available_recipes = new - for(var/T in (typesof(/datum/recipe)-/datum/recipe)) - var/datum/recipe/type = T + for(var/datum/recipe/type as anything in (typesof(/datum/recipe)-/datum/recipe)) if((initial(type.appliance) & appliancetype)) available_recipes += new type @@ -423,8 +422,7 @@ valid = 1 sleep(2) - for(var/r in cooked_items) - var/atom/movable/R = r + for(var/atom/movable/R as anything in cooked_items) R.forceMove(src) //Move everything from the buffer back to the container QDEL_NULL(temp)//Delete buffer object diff --git a/code/modules/gamemaster/event2/event.dm b/code/modules/gamemaster/event2/event.dm index 4432be40ab..b9f1d92648 100644 --- a/code/modules/gamemaster/event2/event.dm +++ b/code/modules/gamemaster/event2/event.dm @@ -88,8 +88,7 @@ This allows for events that have their announcement happen after the end itself. if(!LAZYLEN(grand_list_of_areas)) return list() - for(var/thing in grand_list_of_areas) - var/list/A = thing + for(var/list/A as anything in grand_list_of_areas) var/list/turfs = list() for(var/turf/T in A) if(!T.check_density()) @@ -107,8 +106,7 @@ This allows for events that have their announcement happen after the end itself. var/list/area/grand_list_of_areas = get_all_existing_areas_of_types(specific_areas) . = list() - for(var/thing in shuffle(grand_list_of_areas)) - var/area/A = thing + for(var/area/A as anything in shuffle(grand_list_of_areas)) if(A.forbid_events) continue if(!(A.z in get_location_z_levels())) diff --git a/code/modules/gamemaster/event2/events/engineering/blob.dm b/code/modules/gamemaster/event2/events/engineering/blob.dm index 3ace8f0894..f3b8a16f8d 100644 --- a/code/modules/gamemaster/event2/events/engineering/blob.dm +++ b/code/modules/gamemaster/event2/events/engineering/blob.dm @@ -111,16 +111,14 @@ log_debug("Spawned [new_blob.overmind.blob_type.name] blob at [get_area(new_blob)].") /datum/event2/event/blob/should_end() - for(var/WR in blobs) - var/weakref/weakref = WR + for(var/weakref/weakref as anything in blobs) if(weakref.resolve()) // If the weakref is resolvable, that means the blob hasn't been deleted yet. return FALSE return TRUE // Only end if all blobs die. // Normally this does nothing, but is useful if aborted by an admin. /datum/event2/event/blob/end() - for(var/WR in blobs) - var/weakref/weakref = WR + for(var/weakref/weakref as anything in blobs) var/obj/structure/blob/core/B = weakref.resolve() if(istype(B)) qdel(B) @@ -130,8 +128,7 @@ var/danger_level = 0 var/list/blob_type_names = list() var/multiblob = FALSE - for(var/WR in blobs) - var/weakref/weakref = WR + for(var/weakref/weakref as anything in blobs) var/obj/structure/blob/core/B = weakref.resolve() if(!istype(B)) continue diff --git a/code/modules/gamemaster/event2/events/engineering/grid_check.dm b/code/modules/gamemaster/event2/events/engineering/grid_check.dm index 8b081f29e2..b4ae7976b6 100644 --- a/code/modules/gamemaster/event2/events/engineering/grid_check.dm +++ b/code/modules/gamemaster/event2/events/engineering/grid_check.dm @@ -15,8 +15,7 @@ // Having the turbines be way over their rated limit makes grid checks more likely. /datum/event2/meta/grid_check/proc/get_overpower() var/highest_overpower = 0 - for(var/T in GLOB.all_turbines) - var/obj/machinery/power/generator/turbine = T + for(var/obj/machinery/power/generator/turbine as anything in GLOB.all_turbines) var/overpower = max((turbine.effective_gen / turbine.max_power) - 1, 0) if(overpower > highest_overpower) highest_overpower = overpower @@ -35,8 +34,7 @@ /datum/event2/event/grid_check/set_up() // Find the turbine being pushed the most. var/obj/machinery/power/generator/most_stressed_turbine = null - for(var/T in GLOB.all_turbines) - var/obj/machinery/power/generator/turbine = T + for(var/obj/machinery/power/generator/turbine as anything in GLOB.all_turbines) if(!most_stressed_turbine) most_stressed_turbine = turbine else if(turbine.effective_gen > most_stressed_turbine.effective_gen) diff --git a/code/modules/gamemaster/event2/events/mob_spawning.dm b/code/modules/gamemaster/event2/events/mob_spawning.dm index 78b1eac69c..4f3bcffa02 100644 --- a/code/modules/gamemaster/event2/events/mob_spawning.dm +++ b/code/modules/gamemaster/event2/events/mob_spawning.dm @@ -66,10 +66,9 @@ // In the future, a new AI stance that handles long distance travel using getline() could work. var/max_distance = 8 var/turf/spawn_turf = null - for(var/P in space_line) - var/turf/point = P + for(var/turf/point as anything in space_line) if(get_dist(point, edge_of_station) <= max_distance) - spawn_turf = P + spawn_turf = point break if(spawn_turf) @@ -88,8 +87,7 @@ // Counts living simple_mobs spawned by this event. /datum/event2/event/mob_spawning/proc/count_spawned_mobs() . = 0 - for(var/I in spawned_mobs) - var/mob/living/simple_mob/M = I + for(var/mob/living/simple_mob/M as anything in spawned_mobs) if(!QDELETED(M) && M.stat != DEAD) . += 1 diff --git a/code/modules/holomap/mapper.dm b/code/modules/holomap/mapper.dm index b99d2928c1..40a8f433bb 100644 --- a/code/modules/holomap/mapper.dm +++ b/code/modules/holomap/mapper.dm @@ -280,8 +280,7 @@ extras_holder.pixel_y = bgmap.pixel_y = -1*T_y + offset_y // Populate other mapper icons - for(var/hc in mapping_units) - var/obj/item/device/mapping_unit/HC = hc + for(var/obj/item/device/mapping_unit/HC as anything in mapping_units) if(HC.mapper_filter != mapper_filter) continue var/mob_indicator = HOLOMAP_ERROR @@ -340,8 +339,7 @@ extras += mark // Marker beacon items - for(var/hb in mapping_beacons) - var/obj/item/device/holomap_beacon/HB = hb + for(var/obj/item/device/holomap_beacon/HB as anything in mapping_beacons) if(HB.mapper_filter != mapper_filter) continue diff --git a/code/modules/hydroponics/spreading/spreading_growth.dm b/code/modules/hydroponics/spreading/spreading_growth.dm index 5f2b432c09..eebcbc9389 100644 --- a/code/modules/hydroponics/spreading/spreading_growth.dm +++ b/code/modules/hydroponics/spreading/spreading_growth.dm @@ -74,8 +74,7 @@ plant.layer = layer + 0.1 if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/L = A + for(var/mob/living/L as anything in buckled_mobs) seed.do_sting(L,src) if(seed.get_trait(TRAIT_CARNIVOROUS)) seed.do_thorns(L,src) diff --git a/code/modules/hydroponics/spreading/spreading_response.dm b/code/modules/hydroponics/spreading/spreading_response.dm index ab22ae15df..b9e64b8d32 100644 --- a/code/modules/hydroponics/spreading/spreading_response.dm +++ b/code/modules/hydroponics/spreading/spreading_response.dm @@ -49,8 +49,7 @@ /obj/effect/plant/proc/unbuckle() if(has_buckled_mobs()) - for(var/A in buckled_mobs) - var/mob/living/L = A + for(var/mob/living/L as anything in buckled_mobs) if(L.buckled == src) L.buckled = null L.anchored = initial(L.anchored) @@ -64,8 +63,7 @@ if(seed) chance = round(100/(20*seed.get_trait(TRAIT_POTENCY)/100)) if(prob(chance)) - for(var/A in buckled_mobs) - var/mob/living/L = A + for(var/mob/living/L as anything in buckled_mobs) if(!(user in buckled_mobs)) L.visible_message(\ "\The [user] frees \the [L] from \the [src].",\ diff --git a/code/modules/identification/identification.dm b/code/modules/identification/identification.dm index 6ddcdbb075..99ed8bc633 100644 --- a/code/modules/identification/identification.dm +++ b/code/modules/identification/identification.dm @@ -97,8 +97,7 @@ return "unidentified object" var/list/new_name = list() - for(var/i in naming_lists) - var/list/current_list = i + for(var/list/current_list as anything in naming_lists) new_name += pick(current_list) return new_name.Join(" ") diff --git a/code/modules/instruments/instrument_data/_instrument_data.dm b/code/modules/instruments/instrument_data/_instrument_data.dm index 39d16e499f..7cede360a2 100644 --- a/code/modules/instruments/instrument_data/_instrument_data.dm +++ b/code/modules/instruments/instrument_data/_instrument_data.dm @@ -70,8 +70,7 @@ /datum/instrument/Destroy() SSinstruments.instrument_data -= id - for(var/i in songs_using) - var/datum/song/S = i + for(var/datum/song/S as anything in songs_using) S.set_instrument(null) real_samples = null samples = null diff --git a/code/modules/instruments/items.dm b/code/modules/instruments/items.dm index 455c10e5cb..31d4c396cc 100644 --- a/code/modules/instruments/items.dm +++ b/code/modules/instruments/items.dm @@ -296,8 +296,7 @@ /obj/item/instrument/harmonica, /obj/item/instrument/piano_synth/headphones ) - for(var/V in templist) - var/atom/A = V + for(var/atom/A as anything in templist) instruments[initial(A.name)] = A return instruments */ diff --git a/code/modules/instruments/songs/play_legacy.dm b/code/modules/instruments/songs/play_legacy.dm index e8666f7867..9d7ba493d4 100644 --- a/code/modules/instruments/songs/play_legacy.dm +++ b/code/modules/instruments/songs/play_legacy.dm @@ -80,8 +80,7 @@ if((world.time - MUSICIAN_HEARCHECK_MINDELAY) > last_hearcheck) do_hearcheck() var/sound/music_played = sound(soundfile) - for(var/i in hearing_mobs) - var/mob/M = i + for(var/mob/M as anything in hearing_mobs) /* Would be nice if(user && HAS_TRAIT(user, TRAIT_MUSICIAN) && isliving(M)) var/mob/living/L = M diff --git a/code/modules/instruments/songs/play_synthesized.dm b/code/modules/instruments/songs/play_synthesized.dm index d8b10654d5..63369228aa 100644 --- a/code/modules/instruments/songs/play_synthesized.dm +++ b/code/modules/instruments/songs/play_synthesized.dm @@ -61,8 +61,7 @@ channels_playing[channel_text] = 100 last_channel_played = channel_text var/turf/source = get_turf(parent) - for(var/i in hearing_mobs) - var/mob/M = i + for(var/mob/M as anything in hearing_mobs) /* Maybe someday if(user && HAS_TRAIT(user, TRAIT_MUSICIAN) && isliving(M)) var/mob/living/L = M @@ -142,10 +141,8 @@ if(dead) channels_playing -= channel channels_idle += channel - for(var/i in hearing_mobs) - var/mob/M = i + for(var/mob/M as anything in hearing_mobs) M.stop_sound_channel(channelnumber) else - for(var/i in hearing_mobs) - var/mob/M = i + for(var/mob/M as anything in hearing_mobs) M.set_sound_channel_volume(channelnumber, (current_volume * 0.01) * volume * using_instrument.volume_multiplier) diff --git a/code/modules/looking_glass/lg_area.dm b/code/modules/looking_glass/lg_area.dm index b17c67449f..25d3bd7a3d 100644 --- a/code/modules/looking_glass/lg_area.dm +++ b/code/modules/looking_glass/lg_area.dm @@ -38,8 +38,7 @@ /area/looking_glass/proc/begin_program(var/image/newimage) if(!active) - for(var/trf in our_turfs) - var/turf/simulated/floor/looking_glass/lgt = trf + for(var/turf/simulated/floor/looking_glass/lgt as anything in our_turfs) lgt.activate() our_landmark.take_image(newimage) @@ -47,8 +46,7 @@ /area/looking_glass/proc/end_program() if(active) - for(var/trf in our_turfs) - var/turf/simulated/floor/looking_glass/lgt = trf + for(var/turf/simulated/floor/looking_glass/lgt as anything in our_turfs) lgt.deactivate() active = FALSE @@ -57,8 +55,7 @@ our_landmark.drop_image() /area/looking_glass/proc/toggle_optional(var/transparent) - for(var/trf in our_optional_turfs) - var/turf/simulated/floor/looking_glass/lgt = trf + for(var/turf/simulated/floor/looking_glass/lgt as anything in our_optional_turfs) lgt.center = !transparent if(active) lgt.deactivate() diff --git a/code/modules/maps/tg/map_template.dm b/code/modules/maps/tg/map_template.dm index 8cc742c508..3e530206a4 100644 --- a/code/modules/maps/tg/map_template.dm +++ b/code/modules/maps/tg/map_template.dm @@ -49,8 +49,7 @@ var/list/obj/machinery/atmospherics/atmos_machines = list() var/list/turf/turfs = block(locate(bounds[MAP_MINX], bounds[MAP_MINY], bounds[MAP_MINZ]), locate(bounds[MAP_MAXX], bounds[MAP_MAXY], bounds[MAP_MAXZ])) - for(var/L in turfs) - var/turf/B = L + for(var/turf/B as anything in turfs) atoms += B areas |= B.loc for(var/A in B) @@ -71,8 +70,7 @@ SSmachines.setup_powernets_for_cables(cables) // Ensure all machines in loaded areas get notified of power status - for(var/I in areas) - var/area/A = I + for(var/area/A as anything in areas) A.power_change() if(machinery_was_awake) diff --git a/code/modules/media/media_machinery.dm b/code/modules/media/media_machinery.dm index 3957ff9005..bbde62a347 100644 --- a/code/modules/media/media_machinery.dm +++ b/code/modules/media/media_machinery.dm @@ -48,8 +48,7 @@ // Update Media Source. A.media_source = null // Clients - for(var/m in mobs_in_area(A)) - var/mob/M = m + for(var/mob/M as anything in mobs_in_area(A)) M.update_music() master_area = null diff --git a/code/modules/mining/fulton.dm b/code/modules/mining/fulton.dm index f5c74a2f8b..c5c939b2f1 100644 --- a/code/modules/mining/fulton.dm +++ b/code/modules/mining/fulton.dm @@ -18,8 +18,7 @@ var/global/list/total_extraction_beacons = list() /obj/item/extraction_pack/attack_self(mob/user) var/list/possible_beacons = list() - for(var/B in global.total_extraction_beacons) - var/obj/structure/extraction_point/EP = B + for(var/obj/structure/extraction_point/EP as anything in global.total_extraction_beacons) if(EP.beacon_network in beacon_networks) possible_beacons += EP diff --git a/code/modules/mining/machinery/machine_stacking.dm b/code/modules/mining/machinery/machine_stacking.dm index 030c52f764..b0b2a7890e 100644 --- a/code/modules/mining/machinery/machine_stacking.dm +++ b/code/modules/mining/machinery/machine_stacking.dm @@ -89,11 +89,10 @@ /obj/machinery/mineral/stacking_machine/New() ..() - for(var/stacktype in (subtypesof(/obj/item/stack/material) - typesof(/obj/item/stack/material/cyborg))) - var/obj/item/stack/material/S = stacktype + for(var/obj/item/stack/material/S as anything in (subtypesof(/obj/item/stack/material) - typesof(/obj/item/stack/material/cyborg))) var/s_matname = initial(S.default_type) stack_storage[s_matname] = 0 - stack_paths[s_matname] = stacktype + stack_paths[s_matname] = S spawn( 5 ) for (var/dir in cardinal) diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm index 9b9ce3957f..fe64242795 100644 --- a/code/modules/mob/animations.dm +++ b/code/modules/mob/animations.dm @@ -237,8 +237,7 @@ note dizziness decrements automatically in the mob's Life() proc. //Check for clients with pref enabled var/list/viewing = list() - for(var/m in viewers(A)) - var/mob/M = m + for(var/mob/M as anything in viewers(A)) var/client/C = M.client if(C && C.is_preference_enabled(/datum/client_preference/attack_icons)) viewing += M.client diff --git a/code/modules/mob/freelook/ai/chunk.dm b/code/modules/mob/freelook/ai/chunk.dm index 2a689c1473..ebd68a6206 100644 --- a/code/modules/mob/freelook/ai/chunk.dm +++ b/code/modules/mob/freelook/ai/chunk.dm @@ -7,8 +7,7 @@ var/list/cameras = list() /datum/chunk/camera/acquireVisibleTurfs(var/list/visible) - for(var/camera in cameras) - var/obj/machinery/camera/c = camera + for(var/obj/machinery/camera/c as anything in cameras) if(!istype(c)) cameras -= c diff --git a/code/modules/mob/freelook/chunk.dm b/code/modules/mob/freelook/chunk.dm index da2d84701c..4ae5d3a590 100644 --- a/code/modules/mob/freelook/chunk.dm +++ b/code/modules/mob/freelook/chunk.dm @@ -86,20 +86,17 @@ visibleTurfs = newVisibleTurfs obscuredTurfs = turfs - newVisibleTurfs - for(var/turf in visAdded) - var/turf/t = turf + for(var/turf/t as anything in visAdded) if(LAZYLEN(t.obfuscations) && t.obfuscations[obfuscation.type]) obscured -= t.obfuscations[obfuscation.type] - for(var/eye in seenby) - var/mob/observer/eye/m = eye + for(var/mob/observer/eye/m as anything in seenby) if(!m) continue var/client/client = m.GetViewerClient() if(client) client.images -= t.obfuscations[obfuscation.type] - for(var/turf in visRemoved) - var/turf/t = turf + for(var/turf/t as anything in visRemoved) if(obscuredTurfs[t]) LAZYINITLIST(t.obfuscations) if(!t.obfuscations[obfuscation.type]) @@ -108,8 +105,7 @@ t.obfuscations[obfuscation.type] = ob_image obscured += t.obfuscations[obfuscation.type] - for(var/eye in seenby) - var/mob/observer/eye/m = eye + for(var/mob/observer/eye/m as anything in seenby) if(!m) seenby -= m continue @@ -142,8 +138,7 @@ obscuredTurfs = turfs - visibleTurfs - for(var/turf in obscuredTurfs) - var/turf/t = turf + for(var/turf/t as anything in obscuredTurfs) LAZYINITLIST(t.obfuscations) if(!t.obfuscations[obfuscation.type]) var/image/ob_image = image(obfuscation.icon, t, obfuscation.icon_state, OBFUSCATION_LAYER) diff --git a/code/modules/mob/freelook/visualnet.dm b/code/modules/mob/freelook/visualnet.dm index 44cd9278cc..1508a30133 100644 --- a/code/modules/mob/freelook/visualnet.dm +++ b/code/modules/mob/freelook/visualnet.dm @@ -49,8 +49,7 @@ var/list/chunks_pre_seen = list() var/list/chunks_post_seen = list() - for(var/V in moved_eyes) - var/mob/observer/eye/eye = V + for(var/mob/observer/eye/eye as anything in moved_eyes) if(C) chunks_pre_seen |= eye.visibleChunks // 0xf = 15 @@ -69,31 +68,26 @@ var/list/remove = eye.visibleChunks - visibleChunks var/list/add = visibleChunks - eye.visibleChunks - for(var/chunk in remove) - var/datum/chunk/c = chunk + for(var/datum/chunk/c as anything in remove) c.remove(eye, FALSE) - for(var/chunk in add) - var/datum/chunk/c = chunk + for(var/datum/chunk/c as anything in add) c.add(eye, FALSE) if(C) chunks_post_seen |= eye.visibleChunks if(C) - for(var/V in other_eyes) - var/mob/observer/eye/eye = V + for(var/mob/observer/eye/eye as anything in other_eyes) chunks_post_seen |= eye.visibleChunks var/list/remove = chunks_pre_seen - chunks_post_seen var/list/add = chunks_post_seen - chunks_pre_seen - for(var/chunk in remove) - var/datum/chunk/c = chunk + for(var/datum/chunk/c as anything in remove) C.images -= c.obscured - for(var/chunk in add) - var/datum/chunk/c = chunk + for(var/datum/chunk/c as anything in add) C.images += c.obscured // Updates the chunks that the turf is located in. Use this when obstacles are destroyed or when doors open. diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 62fef2744d..e43a1de6b6 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -135,8 +135,7 @@ emp_act siemens_coefficient *= C.siemens_coefficient // Modifiers. - for(var/thing in modifiers) - var/datum/modifier/M = thing + for(var/datum/modifier/M as anything in modifiers) if(!isnull(M.siemens_coefficient)) siemens_coefficient *= M.siemens_coefficient @@ -181,8 +180,7 @@ emp_act for(var/obj/item/clothing/gear in protective_gear) protection += gear.armor[type] - for(var/thing in modifiers) - var/datum/modifier/M = thing + for(var/datum/modifier/M as anything in modifiers) var/modifier_armor = LAZYACCESS(M.armor_percent, type) if(modifier_armor) protection += modifier_armor @@ -197,8 +195,7 @@ emp_act for(var/obj/item/clothing/gear in protective_gear) soaked += gear.armorsoak[type] - for(var/thing in modifiers) - var/datum/modifier/M = thing + for(var/datum/modifier/M as anything in modifiers) var/modifier_armor = LAZYACCESS(M.armor_flat, type) if(modifier_armor) soaked += modifier_armor diff --git a/code/modules/mob/living/carbon/human/human_modular_limbs.dm b/code/modules/mob/living/carbon/human/human_modular_limbs.dm index 14bc1a2024..c38bf4ebd6 100644 --- a/code/modules/mob/living/carbon/human/human_modular_limbs.dm +++ b/code/modules/mob/living/carbon/human/human_modular_limbs.dm @@ -58,8 +58,7 @@ // Checks the organ list for limbs meeting a predicate. Way overengineered for such a limited use // case but I can see it being expanded in the future if meat limbs or doona limbs use it. /mob/living/carbon/human/proc/get_modular_limbs(var/return_first_found = FALSE, var/validate_proc) - for(var/bp in organs) - var/obj/item/organ/external/E = bp + for(var/obj/item/organ/external/E as anything in organs) if(!validate_proc || call(E, validate_proc)(src) > MODULAR_BODYPART_INVALID) LAZYADD(., E) if(return_first_found) @@ -67,8 +66,7 @@ // Prune children so we can't remove every individual component of an entire prosthetic arm // piece by piece. Technically a circular dependency here would remove the limb entirely but // if there's a parent whose child is also its parent, there's something wrong regardless. - for(var/bp in .) - var/obj/item/organ/external/E = bp + for(var/obj/item/organ/external/E as anything in .) if(length(E.children)) . -= E.children diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 8041937f26..91a30f0b42 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -846,8 +846,7 @@ . = 1 - . // Invert from 1 = immunity to 0 = immunity. // Doing it this way makes multiplicative stacking not get out of hand, so two modifiers that give 0.5 protection will be combined to 0.75 in the end. - for(var/thing in modifiers) - var/datum/modifier/M = thing + for(var/datum/modifier/M as anything in modifiers) if(!isnull(M.heat_protection)) . *= 1 - M.heat_protection @@ -866,8 +865,7 @@ . = 1 - . // Invert from 1 = immunity to 0 = immunity. // Doing it this way makes multiplicative stacking not get out of hand, so two modifiers that give 0.5 protection will be combined to 0.75 in the end. - for(var/thing in modifiers) - var/datum/modifier/M = thing + for(var/datum/modifier/M as anything in modifiers) if(!isnull(M.cold_protection)) // Invert the modifier values so they align with the current working value. . *= 1 - M.cold_protection diff --git a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm index 1aa8454b70..8f22ca4907 100644 --- a/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm +++ b/code/modules/mob/living/carbon/human/species/shadekin/shadekin_abilities.dm @@ -89,8 +89,7 @@ ability_flags &= ~AB_PHASE_SHIFTED mouse_opacity = 1 name = real_name - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.escapable = initial(B.escapable) //cut_overlays() @@ -138,8 +137,7 @@ custom_emote(1,"phases out!") name = "Something" - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.escapable = FALSE var/obj/effect/temp_visual/shadekin/phase_out/phaseanim = new /obj/effect/temp_visual/shadekin/phase_out(src.loc) diff --git a/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm b/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm index aab6fdd40b..fbd1921c55 100644 --- a/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_shapeshift_vr.dm @@ -171,8 +171,7 @@ last_special = world.time + 50 - for(var/limb in src.organs) - var/obj/item/organ/external/L = limb + for(var/obj/item/organ/external/L as anything in src.organs) L.transparent = !L.transparent visible_message("\The [src]'s interal composition seems to change.") update_icons_body() diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm index c1f3a82101..efd164e358 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm @@ -385,8 +385,7 @@ var/global/list/disallowed_protean_accessories = list( //Transfer vore organs blob.vore_organs = vore_organs blob.vore_selected = vore_selected - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.forceMove(blob) B.owner = blob @@ -456,8 +455,7 @@ var/global/list/disallowed_protean_accessories = list( //Transfer vore organs vore_selected = blob.vore_selected - for(var/belly in blob.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in blob.vore_organs) B.forceMove(src) B.owner = src diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm index 8241e376db..71d48f0fc8 100755 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_species.dm @@ -223,8 +223,7 @@ stat(null, "- -- --- REFACTORY ERROR! --- -- -") stat(null, "- -- --- Abilities (Shift+LMB Examines) --- -- -") - for(var/ability in abilities) - var/obj/effect/protean_ability/A = ability + for(var/obj/effect/protean_ability/A as anything in abilities) stat("[A.ability_name]",A.atom_button_text()) // Various modifiers @@ -315,8 +314,7 @@ holder.adjustBruteLoss(-1,include_robo = TRUE) //Modified by species resistances holder.adjustFireLoss(-0.5,include_robo = TRUE) //Modified by species resistances var/mob/living/carbon/human/H = holder - for(var/organ in H.internal_organs) - var/obj/item/organ/O = organ + for(var/obj/item/organ/O as anything in H.internal_organs) // Fix internal damage if(O.damage > 0) O.damage = max(0,O.damage-0.1) diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm index b33a5d3945..94776d570e 100644 --- a/code/modules/mob/living/death.dm +++ b/code/modules/mob/living/death.dm @@ -17,11 +17,9 @@ //VOREStation Edit End nest = null - for(var/s in owned_soul_links) - var/datum/soul_link/S = s + for(var/datum/soul_link/S as anything in owned_soul_links) S.owner_died(gibbed) - for(var/s in shared_soul_links) - var/datum/soul_link/S = s + for(var/datum/soul_link/S as anything in shared_soul_links) S.sharer_died(gibbed) . = ..() diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index 1bfdc5a4d4..4cfed34ba8 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -868,9 +868,8 @@ update_transform() //VOREStation Add if(lying && LAZYLEN(buckled_mobs)) - for(var/rider in buckled_mobs) - var/mob/living/L = rider - if(buckled_mobs[rider] != "riding") + for(var/mob/living/L as anything in buckled_mobs) + if(buckled_mobs[L] != "riding") continue // Only boot off riders if(riding_datum) riding_datum.force_dismount(L) diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 139397aa29..21f0e7df2c 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -382,11 +382,9 @@ var/list/channel_to_radio_key = new //Remove all those images. At least it's just ONE spawn this time. spawn(30) - for(var/img in images_to_clients) - var/image/I = img + for(var/image/I as anything in images_to_clients) var/list/clients_from_image = images_to_clients[I] - for(var/client in clients_from_image) - var/client/C = client + for(var/client/C as anything in clients_from_image) if(C) //Could have disconnected after message sent, before removing bubble. C.images -= I qdel(I) @@ -411,12 +409,10 @@ var/list/channel_to_radio_key = new else var/list/potentials = get_mobs_and_objs_in_view_fast(T, world.view) var/list/mobs = potentials["mobs"] - for(var/hearer in mobs) - var/mob/M = hearer + for(var/mob/M as anything in mobs) M.hear_signlang(message, verb, language, src) var/list/objs = potentials["objs"] - for(var/hearer in objs) - var/obj/O = hearer + for(var/obj/O as anything in objs) O.hear_signlang(message, verb, language, src) return 1 diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 2a0a307818..38f59adbc5 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -32,8 +32,7 @@ var/list/ai_verbs_default = list( /proc/AutoUpdateAI(obj/subject) var/is_in_use = 0 if (subject!=null) - for(var/A in ai_list) - var/mob/living/silicon/ai/M = A + for(var/mob/living/silicon/ai/M as anything in ai_list) if ((M.client && M.machine == subject)) is_in_use = 1 subject.attack_ai(M) diff --git a/code/modules/mob/living/silicon/ai/ai_remote_control.dm b/code/modules/mob/living/silicon/ai/ai_remote_control.dm index 768aba02f5..ac092ed693 100644 --- a/code/modules/mob/living/silicon/ai/ai_remote_control.dm +++ b/code/modules/mob/living/silicon/ai/ai_remote_control.dm @@ -25,8 +25,7 @@ var/list/possible = list() - for(var/borgie in GLOB.available_ai_shells) - var/mob/living/silicon/robot/R = borgie + for(var/mob/living/silicon/robot/R as anything in GLOB.available_ai_shells) if(R.shell && !R.deployed && (R.stat != DEAD) && (!R.connected_ai || (R.connected_ai == src) ) && !(using_map.ai_shell_restricted && !(R.z in using_map.ai_shell_allowed_levels)) ) //VOREStation Edit: shell restrictions possible += R diff --git a/code/modules/mob/living/silicon/ai/multicam.dm b/code/modules/mob/living/silicon/ai/multicam.dm index 7f84eebf6e..1a69c5f5f3 100644 --- a/code/modules/mob/living/silicon/ai/multicam.dm +++ b/code/modules/mob/living/silicon/ai/multicam.dm @@ -202,10 +202,8 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) var/list/obj/machinery/camera/add = list() var/list/obj/machinery/camera/remove = list() var/list/obj/machinery/camera/visible = list() - for(var/VV in visibleChunks) - var/datum/chunk/camera/CC = VV - for(var/V in CC.cameras) - var/obj/machinery/camera/C = V + for(var/datum/chunk/camera/CC as anything in visibleChunks) + for(var/obj/machinery/camera/C as anything in CC.cameras) if (!C.can_use() || (get_dist(C, src) > telegraph_range)) continue visible |= C @@ -213,15 +211,13 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) add = visible - cameras_telegraphed remove = cameras_telegraphed - visible - for(var/V in remove) - var/obj/machinery/camera/C = V + for(var/obj/machinery/camera/C as anything in remove) if(QDELETED(C)) continue cameras_telegraphed -= C C.in_use_lights-- C.update_icon() - for(var/V in add) - var/obj/machinery/camera/C = V + for(var/obj/machinery/camera/C as anything in add) if(QDELETED(C)) continue cameras_telegraphed |= C @@ -230,8 +226,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) /mob/observer/eye/aiEye/pic_in_pic/proc/disable_camera_telegraphing() telegraph_cameras = FALSE - for(var/V in cameras_telegraphed) - var/obj/machinery/camera/C = V + for(var/obj/machinery/camera/C as anything in cameras_telegraphed) if(QDELETED(C)) continue C.in_use_lights-- @@ -291,8 +286,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) /mob/living/silicon/ai/proc/refresh_multicam() reset_view(GLOB.ai_camera_room_landmark) if(client) - for(var/V in multicam_screens) - var/obj/screen/movable/pic_in_pic/P = V + for(var/obj/screen/movable/pic_in_pic/P as anything in multicam_screens) P.show_to(client) /mob/living/silicon/ai/proc/end_multicam() @@ -301,8 +295,7 @@ GLOBAL_DATUM(ai_camera_room_landmark, /obj/effect/landmark/ai_multicam_room) multicam_on = FALSE select_main_multicam_window(null) if(client) - for(var/V in multicam_screens) - var/obj/screen/movable/pic_in_pic/P = V + for(var/obj/screen/movable/pic_in_pic/P as anything in multicam_screens) P.unshow_to(client) reset_view() to_chat(src, "Multiple-camera viewing mode deactivated.") diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm index 59a0fad74d..c8ab1d7e07 100644 --- a/code/modules/mob/living/silicon/pai/pai_vr.dm +++ b/code/modules/mob/living/silicon/pai/pai_vr.dm @@ -17,8 +17,7 @@ /mob/living/silicon/pai/proc/update_fullness_pai() //Determines if they have something in their stomach. Copied and slightly modified. var/new_people_eaten = 0 - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) for(var/mob/living/M in B) new_people_eaten += M.size_multiplier people_eaten = min(1, new_people_eaten) diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index 59089b3982..129f832dba 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -567,8 +567,7 @@ 'sound/vore/death10.ogg') playsound(src, deathsound, vol = 100, vary = 1, falloff = 0.1, ignore_walls = TRUE, preference = /datum/client_preference/digestion_noises) if(is_vore_predator(T)) - for(var/belly in T.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in T.vore_organs) for(var/atom/movable/thing in B) thing.forceMove(src) if(ismob(thing)) diff --git a/code/modules/mob/living/silicon/robot/examine_vr.dm b/code/modules/mob/living/silicon/robot/examine_vr.dm index 2bebab2665..84b960050d 100644 --- a/code/modules/mob/living/silicon/robot/examine_vr.dm +++ b/code/modules/mob/living/silicon/robot/examine_vr.dm @@ -1,8 +1,7 @@ /mob/living/silicon/robot/proc/examine_bellies_borg() var/list/message_list = list() - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) var/bellymessage = B.get_examine_msg() if(bellymessage) message_list += bellymessage bellymessage = B.get_examine_msg_absorbed() diff --git a/code/modules/mob/living/simple_mob/defense.dm b/code/modules/mob/living/simple_mob/defense.dm index b0d622cb20..67954d4d9a 100644 --- a/code/modules/mob/living/simple_mob/defense.dm +++ b/code/modules/mob/living/simple_mob/defense.dm @@ -144,8 +144,7 @@ . = 1 - . // Invert from 1 = immunity to 0 = immunity. // Doing it this way makes multiplicative stacking not get out of hand, so two modifiers that give 0.5 protection will be combined to 0.75 in the end. - for(var/thing in modifiers) - var/datum/modifier/M = thing + for(var/datum/modifier/M as anything in modifiers) if(!isnull(M.cold_protection)) . *= 1 - M.cold_protection @@ -169,8 +168,7 @@ . = 1 - . // Invert from 1 = immunity to 0 = immunity. // Doing it this way makes multiplicative stacking not get out of hand, so two modifiers that give 0.5 protection will be combined to 0.75 in the end. - for(var/thing in modifiers) - var/datum/modifier/M = thing + for(var/datum/modifier/M as anything in modifiers) if(!isnull(M.heat_protection)) . *= 1 - M.heat_protection @@ -196,8 +194,7 @@ . = 1 - . // Invert from 1 = immunity to 0 = immunity. // Doing it this way makes multiplicative stacking not get out of hand, so two modifiers that give 0.5 protection will be combined to 0.75 in the end. - for(var/thing in modifiers) - var/datum/modifier/M = thing + for(var/datum/modifier/M as anything in modifiers) if(!isnull(M.siemens_coefficient)) . *= M.siemens_coefficient @@ -254,8 +251,7 @@ if(isnull(armorval)) armorval = 0 - for(var/thing in modifiers) - var/datum/modifier/M = thing + for(var/datum/modifier/M as anything in modifiers) var/modifier_armor = LAZYACCESS(M.armor_percent, attack_flag) if(modifier_armor) armorval += modifier_armor @@ -267,8 +263,7 @@ if(isnull(armorval)) armorval = 0 - for(var/thing in modifiers) - var/datum/modifier/M = thing + for(var/datum/modifier/M as anything in modifiers) var/modifier_armor = LAZYACCESS(M.armor_flat, attack_flag) if(modifier_armor) armorval += modifier_armor diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm index 749def3e84..fdbe5b6b68 100644 --- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm +++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm @@ -65,8 +65,7 @@ // Update fullness based on size & quantity of belly contents /mob/living/simple_mob/proc/update_fullness() var/new_fullness = 0 - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) for(var/mob/living/M in B) new_fullness += M.size_multiplier new_fullness = new_fullness / size_multiplier //Divided by pred's size so a macro mob won't get macro belly from a regular prey. diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/nurse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/nurse.dm index 3d8401b76d..8035fb2d80 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/nurse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/giant_spider/nurse.dm @@ -240,8 +240,7 @@ var/static/alternative_targets = typecacheof(list(/obj/item, /obj/structure)) - for(var/AT in typecache_filter_list(range(vision_range, holder), alternative_targets)) - var/obj/O = AT + for(var/obj/O as anything in typecache_filter_list(range(vision_range, holder), alternative_targets)) if(can_see(holder, O, vision_range) && !O.anchored) . += O diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_abilities.dm b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_abilities.dm index 56214bf58c..e6c84387c8 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_abilities.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/demon/demon_abilities.dm @@ -32,8 +32,7 @@ if(shifted_out) shifted_out = FALSE name = real_name - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.escapable = initial(B.escapable) cut_overlays() @@ -89,8 +88,7 @@ name = "Something" health = maxHealth //Fullheal - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.escapable = FALSE cut_overlays() @@ -145,8 +143,7 @@ real_name = name name = "Something" - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.escapable = FALSE cut_overlays() @@ -166,8 +163,7 @@ spawn(300) shifted_out = FALSE name = real_name - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.escapable = initial(B.escapable) cut_overlays() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm index c2e984864c..fbd0f938af 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/lamia.dm @@ -54,8 +54,7 @@ /mob/living/simple_mob/vore/lamia/update_fullness() var/new_fullness = 0 // We only want to count our upper_stomach towards capacity - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) if(B.name == "upper stomach") for(var/mob/living/M in B) new_fullness += M.size_multiplier @@ -76,8 +75,7 @@ var/upper_shows = FALSE var/tail_shows = FALSE - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) if(!(B.name in list("upper stomach", "tail stomach"))) continue var/belly_fullness = 0 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm index 208030125d..ec1161630a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/ability_procs.dm @@ -21,8 +21,7 @@ ability_flags &= ~AB_PHASE_SHIFTED mouse_opacity = 1 name = real_name - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.escapable = initial(B.escapable) cut_overlays() @@ -76,8 +75,7 @@ real_name = name name = "Something" - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.escapable = FALSE cut_overlays() diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm index 2f275db0f1..371fc8d241 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/shadekin/shadekin.dm @@ -215,8 +215,7 @@ abilities_stat() /mob/living/simple_mob/shadekin/proc/abilities_stat() - for(var/A in shadekin_abilities) - var/obj/effect/shadekin_ability/ability = A + for(var/obj/effect/shadekin_ability/ability as anything in shadekin_abilities) stat("[ability.ability_name]",ability.atom_button_text()) //They phase back to the dark when killed diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm index 72e2532792..f3c200410b 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/solargrub_larva.dm @@ -205,8 +205,7 @@ var/global/list/grub_machine_overlays = list() var/static/potential_targets = typecacheof(list(/obj/machinery)) var/list/actual_targets = list() - for(var/AT in typecache_filter_list(range(vision_range, holder), potential_targets)) - var/obj/machinery/M = AT + for(var/obj/machinery/M as anything in typecache_filter_list(range(vision_range, holder), potential_targets)) if(istype(M, /obj/machinery/atmospherics/unary/vent_pump)) var/obj/machinery/atmospherics/unary/vent_pump/V = M if(!V.welded && prob(50)) diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm b/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm index 5d6c88cc92..6ff23f2e94 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/zz_vore_overrides.dm @@ -269,14 +269,12 @@ /mob/living/simple_mob/animal/space/carp/holographic/init_vore() . = ..() var/safe = (faction == "neutral") - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.digest_mode = safe ? DM_HOLD : vore_default_mode /mob/living/simple_mob/animal/space/carp/holographic/set_safety(var/safe) . = ..() - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.digest_mode = safe ? DM_HOLD : vore_default_mode /mob/living/simple_mob/animal/passive/mouse diff --git a/code/modules/mob/living/status_indicators.dm b/code/modules/mob/living/status_indicators.dm index a3f386b9e6..4f61b7ad34 100644 --- a/code/modules/mob/living/status_indicators.dm +++ b/code/modules/mob/living/status_indicators.dm @@ -67,8 +67,7 @@ current_x_position -= (icon_expected_width / 2) * (get_icon_scale_y() - 1) // Now the indicator row can actually be built. - for(var/thing in status_indicators) - var/image/I = thing + for(var/image/I as anything in status_indicators) // This is a semi-HUD element, in a similar manner as medHUDs, in that they're 'above' everything else in the world, // but don't pierce obfuscation layers such as blindness or darkness, unlike actual HUD elements like inventory slots. diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 0473becc57..1d37a22e13 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -114,16 +114,13 @@ runemessage = -1 // Symmetry with mob/audible_message, despite the fact this one doesn't call parent. Maybe it should! if(radio_message) - for(var/obj in hearing_objs) - var/obj/O = obj + for(var/obj/O as anything in hearing_objs) O.hear_talk(src, list(new /datum/multilingual_say_piece(GLOB.all_languages["Noise"], radio_message)), null) else - for(var/obj in hearing_objs) - var/obj/O = obj + for(var/obj/O as anything in hearing_objs) O.show_message(message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE) - for(var/mob in hearing_mobs) - var/mob/M = mob + for(var/mob/M as anything in hearing_mobs) var/msg = message if(self_message && M==src) msg = self_message @@ -652,8 +649,7 @@ if(length(GLOB.sdql2_queries)) if(statpanel("SDQL2")) stat("Access Global SDQL2 List", GLOB.sdql2_vv_statobj) - for(var/i in GLOB.sdql2_queries) - var/datum/SDQL2_query/Q = i + for(var/datum/SDQL2_query/Q as anything in GLOB.sdql2_queries) Q.generate_stat() if(listed_turf && client) diff --git a/code/modules/mob/say_vr.dm b/code/modules/mob/say_vr.dm index 64f65adfbb..8b06163590 100644 --- a/code/modules/mob/say_vr.dm +++ b/code/modules/mob/say_vr.dm @@ -49,8 +49,7 @@ var/list/vis_mobs = vis["mobs"] var/list/vis_objs = vis["objs"] - for(var/vismob in vis_mobs) - var/mob/M = vismob + for(var/mob/M as anything in vis_mobs) if(isobserver(M) && !is_preference_enabled(/datum/client_preference/whisubtle_vis) && !M.client?.holder) spawn(0) M.show_message(undisplayed_message, 2) @@ -58,8 +57,7 @@ spawn(0) M.show_message(message, 2) - for(var/visobj in vis_objs) - var/obj/O = visobj + for(var/obj/O as anything in vis_objs) spawn(0) O.see_emote(src, message, 2) diff --git a/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm index f2466213f3..a9a1e3456d 100644 --- a/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm @@ -83,8 +83,7 @@ return TRUE var/mob/living/user = usr if(can_run(user, TRUE, access_network)) - for(var/C in ntnet_global.chat_channels) - var/datum/ntnet_conversation/chan = C + for(var/datum/ntnet_conversation/chan as anything in ntnet_global.chat_channels) chan.remove_client(src) netadmin_mode = TRUE return TRUE @@ -92,8 +91,7 @@ var/newname = sanitize(params["new_name"]) if(!newname) return - for(var/C in ntnet_global.chat_channels) - var/datum/ntnet_conversation/chan = C + for(var/datum/ntnet_conversation/chan as anything in ntnet_global.chat_channels) if(src in chan.clients) chan.add_status_message("[username] is now known as [newname].") username = newname @@ -163,8 +161,7 @@ ui_header = "ntnrc_idle.gif" /datum/computer_file/program/chatclient/kill_program(forced = FALSE) - for(var/C in ntnet_global.chat_channels) - var/datum/ntnet_conversation/channel = C + for(var/datum/ntnet_conversation/channel as anything in ntnet_global.chat_channels) channel.remove_client(src) ..() @@ -180,8 +177,7 @@ var/list/data = get_header_data() var/list/all_channels = list() - for(var/C in ntnet_global.chat_channels) - var/datum/ntnet_conversation/conv = C + for(var/datum/ntnet_conversation/conv as anything in ntnet_global.chat_channels) if(conv && conv.title) all_channels.Add(list(list( "chan" = conv.title, diff --git a/code/modules/modular_computers/hardware/network_card.dm b/code/modules/modular_computers/hardware/network_card.dm index 86af5d9ba0..7a3a4da632 100644 --- a/code/modules/modular_computers/hardware/network_card.dm +++ b/code/modules/modular_computers/hardware/network_card.dm @@ -106,8 +106,7 @@ var/global/ntnet_card_uid = 1 var/list/zlevels_in_range = using_map.get_map_levels(holderz, FALSE) var/list/zlevels_in_long_range = using_map.get_map_levels(holderz, TRUE, om_range = DEFAULT_OVERMAP_RANGE) - zlevels_in_range var/best = 0 - for(var/relay in ntnet_global.relays) - var/obj/machinery/ntnet_relay/R = relay + for(var/obj/machinery/ntnet_relay/R as anything in ntnet_global.relays) //Relay is down if(!R.operable()) continue diff --git a/code/modules/nifsoft/nif.dm b/code/modules/nifsoft/nif.dm index aa2d1a99f5..117267d2b4 100644 --- a/code/modules/nifsoft/nif.dm +++ b/code/modules/nifsoft/nif.dm @@ -339,8 +339,7 @@ You can also set the stat of a NIF to NIF_TEMPFAIL without any issues to disable //nif_hud.process_hud(human,1) //TODO VIS //Process all the ones that want that - for(var/S in nifsofts_life) - var/datum/nifsoft/nifsoft = S + for(var/datum/nifsoft/nifsoft as anything in nifsofts_life) nifsoft.life(human) if(NIF_POWFAIL) diff --git a/code/modules/nifsoft/nif_softshop.dm b/code/modules/nifsoft/nif_softshop.dm index 9ba72f215e..3fb2f43684 100644 --- a/code/modules/nifsoft/nif_softshop.dm +++ b/code/modules/nifsoft/nif_softshop.dm @@ -60,8 +60,7 @@ if(!starting_legal_nifsoft) starting_legal_nifsoft = list() starting_illegal_nifsoft = list() - for(var/P in (subtypesof(/datum/nifsoft) - typesof(/datum/nifsoft/package))) - var/datum/nifsoft/NS = P + for(var/datum/nifsoft/NS as anything in (subtypesof(/datum/nifsoft) - typesof(/datum/nifsoft/package))) if(initial(NS.vended)) switch(initial(NS.illegal)) if(TRUE) @@ -80,8 +79,7 @@ for(var/current_list in all_products) var/category = current_list[CAT_HIDDEN] - for(var/entry in current_list[CAT_NORMAL]) - var/datum/nifsoft/NS = entry + for(var/datum/nifsoft/NS as anything in current_list[CAT_NORMAL]) var/applies_to = initial(NS.applies_to) var/context = "" if(!(applies_to & NIF_SYNTHETIC)) @@ -89,7 +87,7 @@ else if(!(applies_to & NIF_ORGANIC)) context = " (Syn Only)" var/name = "[initial(NS.name)][context]" - var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, entry, name) + var/datum/stored_item/vending_product/product = new/datum/stored_item/vending_product(src, NS, name) product.price = initial(NS.cost) product.amount = 10 diff --git a/code/modules/nifsoft/software/05_health.dm b/code/modules/nifsoft/software/05_health.dm index f19a652748..1e0c12c32c 100644 --- a/code/modules/nifsoft/software/05_health.dm +++ b/code/modules/nifsoft/software/05_health.dm @@ -107,10 +107,8 @@ nif.notify("User Status: DAMAGED. Medichines performing minor repairs.",TRUE) activate() - for(var/eo in nif.human.bad_external_organs) - var/obj/item/organ/external/EO = eo - for(var/w in EO.wounds) - var/datum/wound/W = w + for(var/obj/item/organ/external/EO as anything in nif.human.bad_external_organs) + for(var/datum/wound/W as anything in EO.wounds) if(W.damage <= 5) W.heal_damage(0.1) EO.update_damages() diff --git a/code/modules/nifsoft/software/13_soulcatcher.dm b/code/modules/nifsoft/software/13_soulcatcher.dm index 6bb9536426..750f1b7df2 100644 --- a/code/modules/nifsoft/software/13_soulcatcher.dm +++ b/code/modules/nifsoft/software/13_soulcatcher.dm @@ -75,10 +75,9 @@ to_chat(nif.human,"\[[bicon(nif.big_icon)]NIF\]Soulcatcher displays, \"[message]\"") nif.human << sound - for(var/brainmob in brainmobs) - var/mob/living/carbon/brain/caught_soul/CS = brainmob + for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) to_chat(CS,"\[[bicon(nif.big_icon)]NIF\]Soulcatcher displays, \"[message]\"") - brainmob << sound + CS << sound /datum/nifsoft/soulcatcher/proc/say_into(var/message, var/mob/living/sender, var/mob/eyeobj) var/sender_name = eyeobj ? eyeobj.name : sender.name @@ -90,8 +89,7 @@ //Not AR Projecting else to_chat(nif.human,"\[[bicon(nif.big_icon)]NIF\] [sender_name] speaks, \"[message]\"") - for(var/brainmob in brainmobs) - var/mob/living/carbon/brain/caught_soul/CS = brainmob + for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) to_chat(CS,"\[[bicon(nif.big_icon)]NIF\] [sender_name] speaks, \"[message]\"") log_nsay(message,nif.human.real_name,sender) @@ -106,8 +104,7 @@ //Not AR Projecting else to_chat(nif.human,"\[[bicon(nif.big_icon)]NIF\] [sender_name] [message]") - for(var/brainmob in brainmobs) - var/mob/living/carbon/brain/caught_soul/CS = brainmob + for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) to_chat(CS,"\[[bicon(nif.big_icon)]NIF\] [sender_name] [message]") log_nme(message,nif.human.real_name,sender) @@ -135,8 +132,7 @@ new_flavor = sanitize(new_flavor, MAX_MESSAGE_LEN*2) inside_flavor = new_flavor nif.notify("Updating VR environment...") - for(var/brain in brainmobs) - var/mob/living/carbon/brain/caught_soul/CS = brain + for(var/mob/living/carbon/brain/caught_soul/CS as anything in brainmobs) to_chat(CS,"Your surroundings change to...\n[inside_flavor]") save_settings() return TRUE @@ -179,24 +175,20 @@ nif.clear_flag(NIF_O_SCOTHERS,NIF_FLAGS_OTHER) if(NIF_SC_ALLOW_EARS) if(setting_flags & NIF_SC_ALLOW_EARS) - for(var/brain in brainmobs) - var/mob/living/carbon/brain/caught_soul/brainmob = brain + for(var/mob/living/carbon/brain/caught_soul/brainmob as anything in brainmobs) brainmob.ext_deaf = FALSE notify_message = "External audio input enabled." else - for(var/brain in brainmobs) - var/mob/living/carbon/brain/caught_soul/brainmob = brain + for(var/mob/living/carbon/brain/caught_soul/brainmob as anything in brainmobs) brainmob.ext_deaf = TRUE notify_message = "External audio input disabled." if(NIF_SC_ALLOW_EYES) if(setting_flags & NIF_SC_ALLOW_EYES) - for(var/brain in brainmobs) - var/mob/living/carbon/brain/caught_soul/brainmob = brain + for(var/mob/living/carbon/brain/caught_soul/brainmob as anything in brainmobs) brainmob.ext_blind = FALSE notify_message = "External video input enabled." else - for(var/brain in brainmobs) - var/mob/living/carbon/brain/caught_soul/brainmob = brain + for(var/mob/living/carbon/brain/caught_soul/brainmob as anything in brainmobs) brainmob.ext_blind = TRUE notify_message = "External video input disabled." diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index f82d65275f..363353c2ec 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -105,8 +105,7 @@ while(null in owner.organs) owner.organs -= null - for(var/imp in implants) - var/obj/item/weapon/implant/I = imp + for(var/obj/item/weapon/implant/I as anything in implants) if(!istype(I)) continue I.imp_in = I.part = null diff --git a/code/modules/overmap/events/event_handler.dm b/code/modules/overmap/events/event_handler.dm index 67785e95ac..2d9c2badda 100644 --- a/code/modules/overmap/events/event_handler.dm +++ b/code/modules/overmap/events/event_handler.dm @@ -14,8 +14,7 @@ GLOBAL_DATUM_INIT(overmap_event_handler, /decl/overmap_event_handler, new) // Acquire the list of not-yet utilized overmap turfs on this Z-level var/list/overmap_turfs = block(locate(OVERMAP_EDGE, OVERMAP_EDGE, z_level), locate(overmap_size - OVERMAP_EDGE, overmap_size - OVERMAP_EDGE, z_level)) var/list/candidate_turfs = list() - for(var/Trf in overmap_turfs) - var/turf/T = Trf + for(var/turf/T as anything in overmap_turfs) if(!(locate(/obj/effect/overmap/visitable) in T)) candidate_turfs += T diff --git a/code/modules/overmap/sectors.dm b/code/modules/overmap/sectors.dm index 1b422c01d3..1e4cc23634 100644 --- a/code/modules/overmap/sectors.dm +++ b/code/modules/overmap/sectors.dm @@ -240,8 +240,7 @@ testing("Putting overmap on [global.using_map.overmap_z]") var/area/overmap/A = new - for (var/square in block(locate(1,1,global.using_map.overmap_z), locate(global.using_map.overmap_size,global.using_map.overmap_size,global.using_map.overmap_z))) - var/turf/T = square + for(var/turf/T as anything in block(locate(1,1,global.using_map.overmap_z), locate(global.using_map.overmap_size,global.using_map.overmap_size,global.using_map.overmap_z))) if(T.x == 1 || T.y == 1 || T.x == global.using_map.overmap_size || T.y == global.using_map.overmap_size) T = T.ChangeTurf(/turf/unsimulated/map/edge) else diff --git a/code/modules/overmap/ships/engines/gas_thruster.dm b/code/modules/overmap/ships/engines/gas_thruster.dm index 773ed97a64..5510a803de 100644 --- a/code/modules/overmap/ships/engines/gas_thruster.dm +++ b/code/modules/overmap/ships/engines/gas_thruster.dm @@ -86,8 +86,7 @@ controller = new(src) update_nearby_tiles(need_rebuild=1) - for(var/ship in SSshuttles.ships) - var/obj/effect/overmap/visitable/ship/S = ship + for(var/obj/effect/overmap/visitable/ship/S as anything in SSshuttles.ships) if(S.check_ownership(src)) S.engines |= controller if(dir != S.fore_dir) diff --git a/code/modules/overmap/ships/panicbutton.dm b/code/modules/overmap/ships/panicbutton.dm index 4e819db642..dcbcbf500f 100644 --- a/code/modules/overmap/ships/panicbutton.dm +++ b/code/modules/overmap/ships/panicbutton.dm @@ -66,8 +66,7 @@ var/turf/us = get_turf(src) for(var/hz in hear_z) - for(var/m in GLOB.players_by_zlevel[hz]) - var/mob/M = m + for(var/mob/M as anything in GLOB.players_by_zlevel[hz]) var/sound/SND = sound('sound/misc/emergency_beacon_launched.ogg') // Inside the loop because playsound_local modifies it for each person, so, need separate instances var/turf/them = get_turf(M) var/volume = max(0.20, 1-(get_dist(us,them) / mapsize*0.8))*100 diff --git a/code/modules/paperwork/paperplane.dm b/code/modules/paperwork/paperplane.dm index 65c3bff6bf..a8cb28b873 100644 --- a/code/modules/paperwork/paperplane.dm +++ b/code/modules/paperwork/paperplane.dm @@ -40,8 +40,7 @@ if(!stamped) stamped = new else if(stamped) - for(var/S in stamped) - var/obj/item/weapon/stamp/ = S + for(var/obj/item/weapon/stamp/stamp as anything in stamped) var/image/stampoverlay = image('icons/obj/bureaucracy.dmi', "paperplane_[initial(stamp.icon_state)]") add_overlay(stampoverlay) diff --git a/code/modules/pda/cart.dm b/code/modules/pda/cart.dm index d391419d91..596486f3df 100644 --- a/code/modules/pda/cart.dm +++ b/code/modules/pda/cart.dm @@ -69,11 +69,9 @@ var/list/civilian_cartridges = list( return ..() /obj/item/weapon/cartridge/proc/update_programs(obj/item/device/pda/pda) - for(var/A in programs) - var/datum/data/pda/P = A + for(var/datum/data/pda/P as anything in programs) P.pda = pda - for(var/A in messenger_plugins) - var/datum/data/pda/messenger_plugin/P = A + for(var/datum/data/pda/messenger_plugin/P as anything in messenger_plugins) P.pda = pda /obj/item/weapon/cartridge/engineering diff --git a/code/modules/pda/cart_apps.dm b/code/modules/pda/cart_apps.dm index f5eef7b046..c0f24ed9df 100644 --- a/code/modules/pda/cart_apps.dm +++ b/code/modules/pda/cart_apps.dm @@ -136,8 +136,7 @@ records["general"] = general_records.fields return records else - for(var/A in sortRecord(data_core.general)) - var/datum/data/record/R = A + for(var/datum/data/record/R as anything in sortRecord(data_core.general)) if(R) records += list(list(Name = R.fields["name"], "ref" = "\ref[R]")) data["recordsList"] = records @@ -182,8 +181,7 @@ /datum/data/pda/app/crew_records/medical/load_records(datum/data/record/R) ..(R) - for(var/A in data_core.medical) - var/datum/data/record/E = A + for(var/datum/data/record/E as anything in data_core.medical) if(E && (E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) medical_records = E break @@ -208,8 +206,7 @@ /datum/data/pda/app/crew_records/security/load_records(datum/data/record/R) ..(R) - for(var/A in data_core.security) - var/datum/data/record/E = A + for(var/datum/data/record/E as anything in data_core.security) if(E && (E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) security_records = E break @@ -229,8 +226,7 @@ supplyData["shuttle_loc"] = shuttle.at_station() ? "Station" : "Dock" var/supplyOrderCount = 0 var/supplyOrderData[0] - for(var/S in SSsupply.shoppinglist) - var/datum/supply_order/SO = S + for(var/datum/supply_order/SO as anything in SSsupply.shoppinglist) supplyOrderCount++ supplyOrderData[++supplyOrderData.len] = list("Number" = SO.ordernum, "Name" = html_encode(SO.object.name), "ApprovedBy" = SO.ordered_by, "Comment" = html_encode(SO.comment)) @@ -240,8 +236,7 @@ var/requestCount = 0 var/requestData[0] - for(var/S in SSsupply.order_history) - var/datum/supply_order/SO = S + for(var/datum/supply_order/SO as anything in SSsupply.order_history) if(SO.status != SUP_ORDER_REQUESTED) continue diff --git a/code/modules/pda/messenger.dm b/code/modules/pda/messenger.dm index efb87577d5..03996dc35c 100644 --- a/code/modules/pda/messenger.dm +++ b/code/modules/pda/messenger.dm @@ -33,8 +33,7 @@ else var/convopdas[0] var/pdas[0] - for(var/A in PDAs) - var/obj/item/device/pda/P = A + for(var/obj/item/device/pda/P as anything in PDAs) var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) if(!P.owner || PM.toff || P == pda || PM.m_hidden) @@ -49,8 +48,7 @@ var/list/plugins = list() if(pda.cartridge) - for(var/A in pda.cartridge.messenger_plugins) - var/datum/data/pda/messenger_plugin/P = A + for(var/datum/data/pda/messenger_plugin/P as anything in pda.cartridge.messenger_plugins) plugins += list(list(name = P.name, icon = P.icon, ref = "\ref[P]")) data["plugins"] = plugins @@ -148,8 +146,7 @@ //var/telecomms_intact = telecomms_process(P.owner, owner, t) var/obj/machinery/message_server/useMS = null if(message_servers) - for(var/A in message_servers) - var/obj/machinery/message_server/MS = A + for(var/obj/machinery/message_server/MS as anything in message_servers) //PDAs are now dependent on the Message Server. if(MS.active) useMS = MS @@ -194,8 +191,7 @@ to_chat(usr, "Turn on your receiver in order to send messages.") return - for(var/A in PDAs) - var/obj/item/device/pda/P = A + for(var/obj/item/device/pda/P as anything in PDAs) var/datum/data/pda/app/messenger/PM = P.find_program(/datum/data/pda/app/messenger) if(!P.owner || !PM || PM.hidden || P == pda || PM.toff) diff --git a/code/modules/pda/pda.dm b/code/modules/pda/pda.dm index 274a27857a..a237436974 100644 --- a/code/modules/pda/pda.dm +++ b/code/modules/pda/pda.dm @@ -197,8 +197,7 @@ var/global/list/obj/item/device/pda/PDAs = list() shortcut_cache.Cut() /obj/item/device/pda/proc/update_programs() - for(var/A in programs) - var/datum/data/pda/P = A + for(var/datum/data/pda/P as anything in programs) P.pda = src /obj/item/device/pda/proc/detonate_act(var/obj/item/device/pda/P) diff --git a/code/modules/pda/pda_tgui.dm b/code/modules/pda/pda_tgui.dm index 6d57a6c25e..036ec1fbe4 100644 --- a/code/modules/pda/pda_tgui.dm +++ b/code/modules/pda/pda_tgui.dm @@ -22,8 +22,7 @@ if(cartridge) prog_list |= cartridge.programs - for(var/A in prog_list) - var/datum/data/pda/P = A + for(var/datum/data/pda/P as anything in prog_list) if(P.hidden) continue diff --git a/code/modules/planet/sif.dm b/code/modules/planet/sif.dm index af6f632bdc..1d2e4b0af0 100644 --- a/code/modules/planet/sif.dm +++ b/code/modules/planet/sif.dm @@ -499,8 +499,7 @@ var/datum/planet/sif/planet_sif = null /datum/weather/sif/ash_storm/process_effects() ..() - for(var/thing in living_mob_list) - var/mob/living/L = thing + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) if(!T.outdoors) @@ -536,8 +535,7 @@ var/datum/planet/sif/planet_sif = null /datum/weather/sif/fallout/process_effects() ..() - for(var/thing in living_mob_list) - var/mob/living/L = thing + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) irradiate_nearby_turf(L) var/turf/T = get_turf(L) diff --git a/code/modules/planet/virgo3b_vr.dm b/code/modules/planet/virgo3b_vr.dm index ea441b6f38..d2faf2315d 100644 --- a/code/modules/planet/virgo3b_vr.dm +++ b/code/modules/planet/virgo3b_vr.dm @@ -471,8 +471,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null /datum/weather/virgo3b/ash_storm/process_effects() ..() - for(var/thing in living_mob_list) - var/mob/living/L = thing + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) if(!T.outdoors) @@ -508,8 +507,7 @@ var/datum/planet/virgo3b/planet_virgo3b = null /datum/weather/virgo3b/fallout/process_effects() ..() - for(var/thing in living_mob_list) - var/mob/living/L = thing + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) irradiate_nearby_turf(L) var/turf/T = get_turf(L) diff --git a/code/modules/planet/virgo4_vr.dm b/code/modules/planet/virgo4_vr.dm index 6ac748f421..18f4298aa1 100644 --- a/code/modules/planet/virgo4_vr.dm +++ b/code/modules/planet/virgo4_vr.dm @@ -444,8 +444,7 @@ var/datum/planet/virgo4/planet_virgo4 = null /datum/weather/virgo4/ash_storm/process_effects() ..() - for(var/thing in living_mob_list) - var/mob/living/L = thing + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) var/turf/T = get_turf(L) if(!T.outdoors) @@ -481,8 +480,7 @@ var/datum/planet/virgo4/planet_virgo4 = null /datum/weather/virgo4/fallout/process_effects() ..() - for(var/thing in living_mob_list) - var/mob/living/L = thing + for(var/mob/living/L as anything in living_mob_list) if(L.z in holder.our_planet.expected_z_levels) irradiate_nearby_turf(L) var/turf/T = get_turf(L) diff --git a/code/modules/planet/weather.dm b/code/modules/planet/weather.dm index 48953a97f1..bbe2318a27 100644 --- a/code/modules/planet/weather.dm +++ b/code/modules/planet/weather.dm @@ -202,8 +202,7 @@ return for(var/z_level in 1 to world.maxz) - for(var/a in GLOB.players_by_zlevel[z_level]) - var/mob/M = a + for(var/mob/M as anything in GLOB.players_by_zlevel[z_level]) // Check if the mob left the z-levels we control. If so, make the sounds stop for them. if(!(z_level in holder.our_planet.expected_z_levels)) diff --git a/code/modules/power/gravitygenerator_vr.dm b/code/modules/power/gravitygenerator_vr.dm index cce22b705a..ae282b41ca 100644 --- a/code/modules/power/gravitygenerator_vr.dm +++ b/code/modules/power/gravitygenerator_vr.dm @@ -389,8 +389,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // Shake everyone on the z level to let them know that gravity was enagaged/disenagaged. /obj/machinery/gravity_generator/main/proc/shake_everyone() var/sound/alert_sound = sound('sound/effects/alert.ogg') - for(var/i in player_list) - var/mob/M = i + for(var/mob/M as anything in player_list) if(!(M.z in levels)) continue M.update_gravity(M.mob_has_gravity()) diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index 3225030581..39d413677d 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -265,8 +265,7 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity) return 1 /obj/singularity/proc/eat() - for(var/T in orange(grav_pull, src)) - var/atom/X = T + for(var/atom/X as anything in orange(grav_pull, src)) if(!X.simulated) continue var/dist = get_dist(X, src) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 8a20c9e685..17bf6a400a 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -314,8 +314,7 @@ GLOBAL_LIST_EMPTY(solars_list) // This would use LateInitialize(), however the powernet does not appear to exist during that time. /hook/roundstart/proc/auto_start_solars() - for(var/a in GLOB.solars_list) - var/obj/machinery/power/solar_control/SC = a + for(var/obj/machinery/power/solar_control/SC as anything in GLOB.solars_list) SC.auto_start() return TRUE diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 9ec2d2e4ab..6163b3a8a1 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -40,8 +40,7 @@ var/obj/singularity/energy_ball/EB = orbiting.orbiting EB.orbiting_balls -= src - for(var/ball in orbiting_balls) - var/obj/singularity/energy_ball/EB = ball + for(var/obj/singularity/energy_ball/EB as anything in orbiting_balls) qdel(EB) . = ..() diff --git a/code/modules/projectiles/broken.dm b/code/modules/projectiles/broken.dm index f46f7f34e5..57809fdbd1 100644 --- a/code/modules/projectiles/broken.dm +++ b/code/modules/projectiles/broken.dm @@ -31,20 +31,19 @@ if(do_after(user, 5 SECONDS)) to_chat(user, "\The [src] can possibly be restored with:") - for(var/resource in material_needs) - var/obj/item/res = resource - if(material_needs[resource] > 0) + for(var/obj/item/res as anything in material_needs) + if(material_needs[res] > 0) var/res_name = "" if(ispath(res,/obj/item/stack/material)) var/obj/item/stack/material/mat_stack = res var/datum/material/mat = get_material_by_name("[initial(mat_stack.default_type)]") - if(material_needs[resource]>1) + if(material_needs[res]>1) res_name = "[mat.use_name] [mat.sheet_plural_name]" else res_name = "[mat.use_name] [mat.sheet_singular_name]" else res_name = initial(res.name) - to_chat(user, "- x [material_needs[resource]] [res_name]") + to_chat(user, "- x [material_needs[res]] [res_name]") /obj/item/weapon/broken_gun/proc/setup_gun(var/obj/item/weapon/gun/path) if(ispath(path)) diff --git a/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm b/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm index b5d6f8172b..e7edc8418d 100644 --- a/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm +++ b/code/modules/projectiles/guns/energy/cell_loaded_vr/cell_loaded.dm @@ -33,8 +33,7 @@ if(batt.shots_left) return new chambered.projectile_type() else - for(var/B in ammo_magazine.stored_ammo) - var/obj/item/ammo_casing/microbattery/other_batt = B + for(var/obj/item/ammo_casing/microbattery/other_batt as anything in ammo_magazine.stored_ammo) if(istype(other_batt,chambered.type) && other_batt.shots_left) switch_to(other_batt) return new chambered.projectile_type() @@ -53,8 +52,7 @@ charge_left = batt.shots_left max_charge = initial(batt.shots_left) if(ammo_magazine) //Crawl to find more - for(var/B in ammo_magazine.stored_ammo) - var/obj/item/ammo_casing/microbattery/bullet = B + for(var/obj/item/ammo_casing/microbattery/bullet as anything in ammo_magazine.stored_ammo) if(istype(bullet,batt.type)) charge_left += bullet.shots_left max_charge += initial(bullet.shots_left) @@ -178,8 +176,7 @@ return //Why bother var/current = 0 - for(var/B in stored_ammo) - var/obj/item/ammo_casing/microbattery/batt = B + for(var/obj/item/ammo_casing/microbattery/batt as anything in stored_ammo) var/image/cap = image(icon, icon_state = "[capname]_cap") cap.color = batt.type_color cap.pixel_x = current * x_offset //Caps don't need a pixel_y offset diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm index 4f3a35c763..3d656b4466 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator_vr.dm @@ -25,8 +25,7 @@ . = ..() if(Adjacent(user) && max_mod_capacity) . += "[get_remaining_mod_capacity()]% mod capacity remaining." - for(var/A in get_modkits()) - var/obj/item/borg/upgrade/modkit/M = A + for(var/obj/item/borg/upgrade/modkit/M as anything in get_modkits()) . += "There is a [M.name] mod installed, using [M.cost]% capacity." /obj/item/weapon/gun/energy/kinetic_accelerator/attackby(obj/item/A, mob/user) @@ -46,8 +45,7 @@ /obj/item/weapon/gun/energy/kinetic_accelerator/proc/get_remaining_mod_capacity() var/current_capacity_used = 0 - for(var/A in get_modkits()) - var/obj/item/borg/upgrade/modkit/M = A + for(var/obj/item/borg/upgrade/modkit/M as anything in get_modkits()) current_capacity_used += M.cost return max_mod_capacity - current_capacity_used @@ -57,8 +55,7 @@ . += A /obj/item/weapon/gun/energy/kinetic_accelerator/proc/modify_projectile(obj/item/projectile/kinetic/K) - for(var/A in get_modkits()) - var/obj/item/borg/upgrade/modkit/M = A + for(var/obj/item/borg/upgrade/modkit/M as anything in get_modkits()) M.modify_projectile(K) /obj/item/weapon/gun/energy/kinetic_accelerator/consume_next_projectile() @@ -185,8 +182,7 @@ . = TRUE if(denied_type) var/number_of_denied = 0 - for(var/A in KA.get_modkits()) - var/obj/item/borg/upgrade/modkit/M = A + for(var/obj/item/borg/upgrade/modkit/M as anything in KA.get_modkits()) if(istype(M, denied_type)) number_of_denied++ if(number_of_denied >= maximum_of_type) diff --git a/code/modules/reagents/holder/distilling.dm b/code/modules/reagents/holder/distilling.dm index 1599f395d9..9fb4867901 100644 --- a/code/modules/reagents/holder/distilling.dm +++ b/code/modules/reagents/holder/distilling.dm @@ -8,19 +8,16 @@ var/list/effect_reactions = list() do reaction_occurred = FALSE - for(var/i in reagent_list) - var/datum/reagent/R = i + for(var/datum/reagent/R as anything in reagent_list) if(SSchemistry.distilled_reactions_by_reagent[R.id]) eligible_reactions |= SSchemistry.distilled_reactions_by_reagent[R.id] - for(var/i in eligible_reactions) - var/decl/chemical_reaction/C = i + for(var/decl/chemical_reaction/C as anything in eligible_reactions) if(C.can_happen(src) && C.process(src)) effect_reactions |= C reaction_occurred = TRUE eligible_reactions.len = 0 while(reaction_occurred) - for(var/i in effect_reactions) - var/decl/chemical_reaction/C = i + for(var/decl/chemical_reaction/C as anything in effect_reactions) C.post_reaction(src) update_total() \ No newline at end of file diff --git a/code/modules/reagents/holder/holder.dm b/code/modules/reagents/holder/holder.dm index cfad19554e..28f133c840 100644 --- a/code/modules/reagents/holder/holder.dm +++ b/code/modules/reagents/holder/holder.dm @@ -85,20 +85,17 @@ var/list/effect_reactions = list() do reaction_occurred = FALSE - for(var/i in reagent_list) - var/datum/reagent/R = i + for(var/datum/reagent/R as anything in reagent_list) if(SSchemistry.instant_reactions_by_reagent[R.id]) eligible_reactions |= SSchemistry.instant_reactions_by_reagent[R.id] - for(var/i in eligible_reactions) - var/decl/chemical_reaction/C = i + for(var/decl/chemical_reaction/C as anything in eligible_reactions) if(C.can_happen(src) && C.process(src)) effect_reactions |= C reaction_occurred = TRUE eligible_reactions.len = 0 while(reaction_occurred) - for(var/i in effect_reactions) - var/decl/chemical_reaction/C = i + for(var/decl/chemical_reaction/C as anything in effect_reactions) C.post_reaction(src) update_total() @@ -145,8 +142,7 @@ return 0 /datum/reagents/proc/isolate_reagent(reagent) - for(var/A in reagent_list) - var/datum/reagent/R = A + for(var/datum/reagent/R as anything in reagent_list) if(R.id != reagent) del_reagent(R.id) update_total() @@ -484,14 +480,12 @@ objs += O if (objs.len) var/objportion = (amount * 0.2) / objs.len - for (var/o in objs) - var/obj/O = o + for(var/obj/O as anything in objs) trans_to(O, objportion, multiplier, copy) amount = min(amount, total_volume) if (mobs.len) var/mobportion = (amount * 0.5) / mobs.len - for (var/m in mobs) - var/mob/M = m + for(var/mob/M as anything in mobs) trans_to(M, mobportion, multiplier, copy) trans_to(T, total_volume, multiplier, copy) if (total_volume <= 0) diff --git a/code/modules/reagents/machinery/grinder.dm b/code/modules/reagents/machinery/grinder.dm index 014305a8f1..3b5ea9e4fd 100644 --- a/code/modules/reagents/machinery/grinder.dm +++ b/code/modules/reagents/machinery/grinder.dm @@ -56,8 +56,7 @@ . += "\The [src] contains:" if(beaker) . += "- \A [beaker]." - for(var/i in holdingitems) - var/obj/item/O = i + for(var/obj/item/O as anything in holdingitems) . += "- \A [O.name]." if(!(stat & (NOPOWER|BROKEN))) diff --git a/code/modules/reagents/reagents/vore_vr.dm b/code/modules/reagents/reagents/vore_vr.dm index a86c755c3d..4da668883e 100644 --- a/code/modules/reagents/reagents/vore_vr.dm +++ b/code/modules/reagents/reagents/vore_vr.dm @@ -76,8 +76,7 @@ M.make_dizzy(1) M.adjustHalLoss(2) - for(var/belly in M.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in M.vore_organs) for(var/atom/movable/A in B) if(isliving(A)) var/mob/living/P = A @@ -102,8 +101,7 @@ M.confused = max(M.confused, 20) M.hallucination += 15 - for(var/belly in M.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in M.vore_organs) if(B.digest_mode == DM_ABSORB) //Turn off absorbing on bellies B.digest_mode = DM_HOLD diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index e8ad090e10..2fa527f9ca 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -120,8 +120,7 @@ GLOBAL_LIST_INIT(design_datums, list()) // A simple helper proc to find the name of a tech with a given ID. /proc/CallTechName(var/ID) - for(var/T in subtypesof(/datum/tech)) - var/datum/tech/check_tech = T + for(var/datum/tech/check_tech as anything in subtypesof(/datum/tech)) if(initial(check_tech.id) == ID) return initial(check_tech.name) diff --git a/code/modules/resleeving/infocore_records.dm b/code/modules/resleeving/infocore_records.dm index 5f3cb027c5..0f16a2b3b7 100644 --- a/code/modules/resleeving/infocore_records.dm +++ b/code/modules/resleeving/infocore_records.dm @@ -182,8 +182,7 @@ organ_data[org] = I.robotic //Genetic modifiers - for(var/modifier in M.modifiers) - var/datum/modifier/mod = modifier + for(var/datum/modifier/mod as anything in M.modifiers) if(mod.flags & MODIFIER_GENETIC) genetic_modifiers.Add(mod.type) diff --git a/code/modules/rogueminer_vr/zonemaster.dm b/code/modules/rogueminer_vr/zonemaster.dm index 2b1f3728f5..15d1887803 100644 --- a/code/modules/rogueminer_vr/zonemaster.dm +++ b/code/modules/rogueminer_vr/zonemaster.dm @@ -191,8 +191,7 @@ return var/farEnough = 1 - for(var/A in SSxenoarch.digsite_spawning_turfs) - var/turf/T = A + for(var/turf/T as anything in SSxenoarch.digsite_spawning_turfs) if(T in range(5, M)) farEnough = 0 break diff --git a/code/modules/security levels/security levels.dm b/code/modules/security levels/security levels.dm index 0c8baca51f..e9876c7566 100644 --- a/code/modules/security levels/security levels.dm +++ b/code/modules/security levels/security levels.dm @@ -76,8 +76,7 @@ if(FA.z in using_map.contact_levels) FA.on_alert_changed(newlevel) //VOREStation Add - for(var/hp in GLOB.holoposters) - var/obj/machinery/holoposter/HP = hp + for(var/obj/machinery/holoposter/HP as anything in GLOB.holoposters) HP.update_icon() //VOREStation Add End diff --git a/code/modules/shuttles/crashes.dm b/code/modules/shuttles/crashes.dm index 6f6c66e177..a71ab5e07e 100644 --- a/code/modules/shuttles/crashes.dm +++ b/code/modules/shuttles/crashes.dm @@ -52,8 +52,7 @@ return // Lucky! // Hide people - for(var/living in victims) - var/mob/living/L = living + for(var/mob/living/L as anything in victims) victims[L] = get_turf(L) L.Sleeping(rand(10,20)) L.Life() @@ -70,8 +69,7 @@ command_announcement.Announce("[crash_message]", "Shuttle Alert") // Put people back - for(var/living in victims) - var/mob/living/L = living + for(var/mob/living/L as anything in victims) L.loc = victims[L] L.adjustBruteLoss(5) L.adjustBruteLoss(10) diff --git a/code/modules/shuttles/shuttle_console.dm b/code/modules/shuttles/shuttle_console.dm index a263267f5a..53f8c1b734 100644 --- a/code/modules/shuttles/shuttle_console.dm +++ b/code/modules/shuttles/shuttle_console.dm @@ -151,8 +151,7 @@ GLOBAL_LIST_BOILERPLATE(papers_dockingcode, /obj/item/weapon/paper/dockingcodes) /hook/roundstart/proc/populate_dockingcodes() - for(var/paper in global.papers_dockingcode) - var/obj/item/weapon/paper/dockingcodes/dcp = paper + for(var/obj/item/weapon/paper/dockingcodes/dcp as anything in global.papers_dockingcode) dcp.populate_info() return TRUE diff --git a/code/modules/shuttles/shuttles_web.dm b/code/modules/shuttles/shuttles_web.dm index f871f49bdd..935b47ca72 100644 --- a/code/modules/shuttles/shuttles_web.dm +++ b/code/modules/shuttles/shuttles_web.dm @@ -112,8 +112,7 @@ web_master.process_autopath() /datum/shuttle/autodock/web_shuttle/proc/update_helmets() - for(var/helm in helmets) - var/obj/item/clothing/head/pilot/H = helm + for(var/obj/item/clothing/head/pilot/H as anything in helmets) if(QDELETED(H)) helmets -= H continue diff --git a/code/modules/tgs/v3210/commands.dm b/code/modules/tgs/v3210/commands.dm index 5046631981..6cced05cb1 100644 --- a/code/modules/tgs/v3210/commands.dm +++ b/code/modules/tgs/v3210/commands.dm @@ -32,8 +32,7 @@ /datum/tgs_api/v3210/proc/HandleServiceCustomCommand(command, sender, params) if(!cached_custom_tgs_chat_commands) cached_custom_tgs_chat_commands = list() - for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) - var/datum/tgs_chat_command/stc = I + for(var/datum/tgs_chat_command/stc as anything in subtypesof(/datum/tgs_chat_command)) cached_custom_tgs_chat_commands[lowertext(initial(stc.name))] = stc var/command_type = cached_custom_tgs_chat_commands[command] diff --git a/code/modules/tgs/v4/api.dm b/code/modules/tgs/v4/api.dm index ba18aab688..c0e71cf351 100644 --- a/code/modules/tgs/v4/api.dm +++ b/code/modules/tgs/v4/api.dm @@ -263,8 +263,7 @@ var/list/ids if(length(channels)) ids = list() - for(var/I in channels) - var/datum/tgs_chat_channel/channel = I + for(var/datum/tgs_chat_channel/channel as anything in channels) ids += channel.id message = list("message" = message, "channelIds" = ids) if(intercepted_message_queue) @@ -274,8 +273,7 @@ /datum/tgs_api/v4/ChatTargetedBroadcast(message, admin_only) var/list/channels = list() - for(var/I in ChatChannelInfo()) - var/datum/tgs_chat_channel/channel = I + for(var/datum/tgs_chat_channel/channel as anything in ChatChannelInfo()) if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) channels += channel.id message = list("message" = message, "channelIds" = channels) diff --git a/code/modules/tgs/v5/api.dm b/code/modules/tgs/v5/api.dm index d0d6f2d081..b3d2622d54 100644 --- a/code/modules/tgs/v5/api.dm +++ b/code/modules/tgs/v5/api.dm @@ -291,8 +291,7 @@ channels = ChatChannelInfo() var/list/ids = list() - for(var/I in channels) - var/datum/tgs_chat_channel/channel = I + for(var/datum/tgs_chat_channel/channel as anything in channels) ids += channel.id message = list(DMAPI5_CHAT_MESSAGE_TEXT = message, DMAPI5_CHAT_MESSAGE_CHANNEL_IDS = ids) @@ -303,8 +302,7 @@ /datum/tgs_api/v5/ChatTargetedBroadcast(message, admin_only) var/list/channels = list() - for(var/I in ChatChannelInfo()) - var/datum/tgs_chat_channel/channel = I + for(var/datum/tgs_chat_channel/channel as anything in ChatChannelInfo()) if (!channel.is_private_channel && ((channel.is_admin_channel && admin_only) || (!channel.is_admin_channel && !admin_only))) channels += channel.id message = list(DMAPI5_CHAT_MESSAGE_TEXT = message, DMAPI5_CHAT_MESSAGE_CHANNEL_IDS = channels) diff --git a/code/modules/tgui/modules/admin_shuttle_controller.dm b/code/modules/tgui/modules/admin_shuttle_controller.dm index a40dec8fca..d03e78b32d 100644 --- a/code/modules/tgui/modules/admin_shuttle_controller.dm +++ b/code/modules/tgui/modules/admin_shuttle_controller.dm @@ -19,8 +19,7 @@ data["shuttles"] = shuttles var/list/overmap_ships = list() - for(var/ship in SSshuttles.ships) - var/obj/effect/overmap/visitable/ship/S = ship + for(var/obj/effect/overmap/visitable/ship/S as anything in SSshuttles.ships) overmap_ships.Add(list(list( "name" = S.name, "ref" = REF(S), diff --git a/code/modules/tgui/modules/appearance_changer.dm b/code/modules/tgui/modules/appearance_changer.dm index 3b84e95d53..fe7bb95440 100644 --- a/code/modules/tgui/modules/appearance_changer.dm +++ b/code/modules/tgui/modules/appearance_changer.dm @@ -45,8 +45,7 @@ cam_plane_masters = get_tgui_plane_masters() - for(var/plane in cam_plane_masters) - var/obj/screen/instance = plane + for(var/obj/screen/instance as anything in cam_plane_masters) instance.assigned_map = map_name instance.del_on_map_removal = FALSE instance.screen_loc = "[map_name]:CENTER" diff --git a/code/modules/tgui/modules/camera.dm b/code/modules/tgui/modules/camera.dm index abfef14be1..fa67030d55 100644 --- a/code/modules/tgui/modules/camera.dm +++ b/code/modules/tgui/modules/camera.dm @@ -37,8 +37,7 @@ cam_plane_masters = get_tgui_plane_masters() - for(var/plane in cam_plane_masters) - var/obj/screen/instance = plane + for(var/obj/screen/instance as anything in cam_plane_masters) instance.assigned_map = map_name instance.del_on_map_removal = FALSE instance.screen_loc = "[map_name]:CENTER" diff --git a/code/modules/tgui/modules/ntos-only/cardmod.dm b/code/modules/tgui/modules/ntos-only/cardmod.dm index fc77417996..8a8ace688f 100644 --- a/code/modules/tgui/modules/ntos-only/cardmod.dm +++ b/code/modules/tgui/modules/ntos-only/cardmod.dm @@ -49,8 +49,7 @@ data["target_name"] = id_card ? id_card.name : "-----" var/list/departments = list() - for(var/D in SSjob.get_all_department_datums()) - var/datum/department/dept = D + for(var/datum/department/dept as anything in SSjob.get_all_department_datums()) if(!dept.assignable) // No AI ID cards for you. continue if(dept.centcom_only && !is_centcom) diff --git a/code/modules/tgui/modules/ntos-only/uav.dm b/code/modules/tgui/modules/ntos-only/uav.dm index b9288457e5..54dcda1675 100644 --- a/code/modules/tgui/modules/ntos-only/uav.dm +++ b/code/modules/tgui/modules/ntos-only/uav.dm @@ -30,8 +30,7 @@ var/list/paired_map = list() var/obj/item/modular_computer/mc_host = tgui_host() if(istype(mc_host)) - for(var/puav in mc_host.paired_uavs) - var/weakref/wr = puav + for(var/weakref/wr as anything in mc_host.paired_uavs) var/obj/item/device/uav/U = wr.resolve() paired_map.Add(list(list("name" = "[U ? U.nickname : "!!Missing!!"]", "uavref" = "\ref[U]"))) @@ -148,8 +147,7 @@ var/list/zlevels_in_long_range = using_map.get_map_levels(their_z, TRUE, om_range = DEFAULT_OVERMAP_RANGE) - zlevels_in_range var/their_signal = 0 // Measure z-distance between the AM passed in and the nearest relay - for(var/relay in ntnet_global.relays) - var/obj/machinery/ntnet_relay/R = relay + for(var/obj/machinery/ntnet_relay/R as anything in ntnet_global.relays) if(!R.operable()) continue if(R.z == their_z) diff --git a/code/modules/virus2/admin.dm b/code/modules/virus2/admin.dm index b0e92139b4..dd9ae7ead7 100644 --- a/code/modules/virus2/admin.dm +++ b/code/modules/virus2/admin.dm @@ -57,10 +57,9 @@ var/list/L = list() - for(var/e in (typesof(/datum/disease2/effect) - /datum/disease2/effect)) - var/datum/disease2/effect/f = e + for(var/datum/disease2/effect/f as anything in subtypesof(/datum/disease2/effect)) if(initial(f.stage) <= stage) - L[initial(f.name)] = e + L[initial(f.name)] = f var/datum/disease2/effect/Eff = s[stage] diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index dd19e5e3f4..5e3e955574 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -15,9 +15,8 @@ /datum/disease2/effectholder/proc/getrandomeffect(var/badness = 1, exclude_types=list()) var/list/datum/disease2/effect/list = list() - for(var/e in (typesof(/datum/disease2/effect) - /datum/disease2/effect)) - var/datum/disease2/effect/f = e - if(e in exclude_types) + for(var/datum/disease2/effect/f as anything in subtypesof(/datum/disease2/effect)) + if(f in exclude_types) continue if(initial(f.badness) > badness) //we don't want such strong effects continue diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 940f5731d9..54c0079ce5 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -263,8 +263,7 @@ var/count = 0 //Iterate over contents and move them all - for(var/thing in contents) - var/atom/movable/AM = thing + for(var/atom/movable/AM as anything in contents) if(isliving(AM)) var/mob/living/L = AM if(L.absorbed && !include_absorbed) @@ -576,8 +575,7 @@ //This in particular will recurse oddly because if there is absorbed prey of prey of prey... //it will just move them up one belly. This should never happen though since... when they were //absobred, they should have been absorbed as well! - for(var/belly in M.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in M.vore_organs) for(var/mob/living/Mm in B) if(Mm.absorbed) absorb_living(Mm) @@ -714,8 +712,7 @@ else if(prob(transferchance) && transferlocation) //Next, let's have it see if they end up getting into an even bigger mess then when they started. var/obj/belly/dest_belly - for(var/belly in owner.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in owner.vore_organs) if(B.name == transferlocation) dest_belly = B break diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 3866d1cfc4..41b0bfae1e 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -84,11 +84,11 @@ ///////////////////// Time to actually process mobs ///////////////////// - for(var/target in touchable_mobs) - var/mob/living/L = target + for(var/mob/living/L as anything in touchable_mobs) if(!istype(L)) + stack_trace("Touchable mobs had a nonmob: [L]") continue - var/list/returns = DM.process_mob(src, target) + var/list/returns = DM.process_mob(src, L) if(istype(returns) && returns["to_update"]) to_update = TRUE if(istype(returns) && returns["soundToPlay"] && !play_sound) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 07022d283b..4a24d8d84c 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -239,8 +239,7 @@ P.pickup_pref = src.pickup_pref var/list/serialized = list() - for(var/belly in src.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in src.vore_organs) serialized += list(B.serialize()) //Can't add a list as an object to another list in Byond. Thanks. P.belly_prefs = serialized @@ -286,8 +285,7 @@ // Release everything in every vore organ // /mob/living/proc/release_vore_contents(var/include_absorbed = TRUE, var/silent = FALSE) - for(var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) B.release_all_contents(include_absorbed, silent) // @@ -298,8 +296,7 @@ return list() var/list/message_list = list() - for (var/belly in vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in vore_organs) var/bellymessage = B.get_examine_msg() if(bellymessage) message_list += bellymessage diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index a4f89f4b04..a3e5e0f356 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -126,8 +126,7 @@ data["inside"] = inside var/list/our_bellies = list() - for(var/belly in host.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in host.vore_organs) our_bellies.Add(list(list( "selected" = (B == host.vore_selected), "name" = B.name, @@ -268,8 +267,7 @@ failure_msg = "Entered belly name length invalid (must be longer than [BELLIES_NAME_MIN], no more than than [BELLIES_NAME_MAX])." // else if(whatever) //Next test here. else - for(var/belly in host.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in host.vore_organs) if(lowertext(new_name) == lowertext(B.name)) failure_msg = "No duplicate belly names, please." break @@ -610,8 +608,7 @@ failure_msg = "Entered belly name length invalid (must be longer than [BELLIES_NAME_MIN], no more than than [BELLIES_NAME_MAX])." // else if(whatever) //Next test here. else - for(var/belly in host.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in host.vore_organs) if(lowertext(new_name) == lowertext(B.name)) failure_msg = "No duplicate belly names, please." break @@ -943,8 +940,7 @@ var/failure_msg = "" var/dest_for //Check to see if it's the destination of another vore organ. - for(var/belly in host.vore_organs) - var/obj/belly/B = belly + for(var/obj/belly/B as anything in host.vore_organs) if(B.transferlocation == host.vore_selected) dest_for = B.name failure_msg += "This is the destiantion for at least '[dest_for]' belly transfers. Remove it as the destination from any bellies before deleting it. " diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm index cde8d83d31..9945c8a200 100644 --- a/code/modules/xenoarcheaology/tools/tools.dm +++ b/code/modules/xenoarcheaology/tools/tools.dm @@ -58,8 +58,7 @@ var/turf/cur_turf = get_turf(src) if(SSxenoarch) //Sanity check due to runtimes ~Z - for(var/A in SSxenoarch.artifact_spawning_turfs) - var/turf/simulated/mineral/T = A + for(var/turf/simulated/mineral/T as anything in SSxenoarch.artifact_spawning_turfs) if(T.density && T.artifact_find) if(T.z == cur_turf.z) var/cur_dist = get_dist(cur_turf, T) * 2 @@ -69,8 +68,7 @@ else SSxenoarch.artifact_spawning_turfs.Remove(T) - for(var/A in SSxenoarch.digsite_spawning_turfs) - var/turf/simulated/mineral/T = A + for(var/turf/simulated/mineral/T as anything in SSxenoarch.digsite_spawning_turfs) if(T.density && T.finds && T.finds.len) if(T.z == cur_turf.z) var/cur_dist = get_dist(cur_turf, T) * 2 diff --git a/code/unit_tests/integrated_circuits/prefabs.dm b/code/unit_tests/integrated_circuits/prefabs.dm index 04b3136640..1436e7d097 100644 --- a/code/unit_tests/integrated_circuits/prefabs.dm +++ b/code/unit_tests/integrated_circuits/prefabs.dm @@ -10,8 +10,7 @@ var/available_size = initial(assembly.max_components) var/available_complexity = initial(assembly.max_complexity) - for(var/ic in prefab.integrated_circuits) - var/datum/ic_assembly_integrated_circuits/iaic = ic + for(var/datum/ic_assembly_integrated_circuits/iaic as anything in prefab.integrated_circuits) var/obj/item/integrated_circuit/circuit = iaic.circuit_type available_size -= initial(circuit.size) available_complexity -= initial(circuit.complexity) diff --git a/code/unit_tests/loadout_tests.dm b/code/unit_tests/loadout_tests.dm index aba7184229..f6bfd19d5a 100644 --- a/code/unit_tests/loadout_tests.dm +++ b/code/unit_tests/loadout_tests.dm @@ -3,8 +3,7 @@ /datum/unit_test/loadout_test_shall_have_name_cost_path/start_test() var/failed = 0 - for(var/geartype in typesof(/datum/gear) - /datum/gear) - var/datum/gear/G = geartype + for(var/datum/gear/G as anything in subtypesof(/datum/gear)) if(!initial(G.display_name)) log_unit_test("[G]: Loadout - Missing display name.") diff --git a/maps/tether/tether_shuttles.dm b/maps/tether/tether_shuttles.dm index 0481ba9741..f8e126d024 100644 --- a/maps/tether/tether_shuttles.dm +++ b/maps/tether/tether_shuttles.dm @@ -94,8 +94,7 @@ /datum/shuttle/ferry/tether_backup/process_longjump(var/area/origin, var/area/intended_destination) var/failures = engines.len - for(var/engine in engines) - var/obj/structure/shuttle/engine/E = engine + for(var/obj/structure/shuttle/engine/E as anything in engines) failures -= E.jump() #define MOVE_PER(x) move_time*(x/100) SECONDS From 669d23322c7b73ca3ca58428a87785d382d860b4 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 20 Jul 2021 12:54:59 -0400 Subject: [PATCH 11/23] Change various things to subtypesof() --- code/_helpers/global_lists.dm | 2 +- code/_helpers/global_lists_vr.dm | 6 +++--- code/controllers/configuration.dm | 2 +- code/controllers/subsystems/events.dm | 2 +- code/controllers/subsystems/plants.dm | 2 +- code/game/antagonist/_antagonist_setup.dm | 2 +- code/game/antagonist/mutiny/mutineer.dm | 2 +- code/game/gamemodes/changeling/modularchangling.dm | 2 +- code/game/gamemodes/sandbox/h_sandbox.dm | 2 +- code/game/gamemodes/technomancer/catalog.dm | 8 ++++---- code/game/machinery/frame.dm | 2 +- code/game/machinery/partslathe_vr.dm | 2 +- code/game/periodic_news.dm | 2 +- code/modules/admin/admin_secrets.dm | 2 +- code/modules/admin/admin_verbs.dm | 2 +- code/modules/awaymissions/loot_vr.dm | 2 +- code/modules/busy_space/loremaster.dm | 2 +- code/modules/busy_space_vr/loremaster.dm | 2 +- .../client/preference_setup/loadout/loadout_general.dm | 4 ++-- .../client/preference_setup/loadout/loadout_general_vr.dm | 4 ++-- code/modules/client/preferences_spawnpoints.dm | 2 +- code/modules/economy/economy_misc.dm | 2 +- code/modules/events/supply_demand_vr.dm | 6 +++--- code/modules/food/kitchen/microwave.dm | 2 +- code/modules/food/recipe_dump.dm | 2 +- code/modules/genetics/side_effects.dm | 2 +- code/modules/mining/abandonedcrates.dm | 4 ++-- .../modules/mob/living/carbon/human/MedicalSideEffects.dm | 2 +- code/modules/mob/living/carbon/human/chem_side_effects.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 4 ++-- code/modules/mob/living/silicon/pai/software.dm | 2 +- code/modules/mob/new_player/skill.dm | 2 +- code/modules/power/fusion/fusion_reactions.dm | 3 ++- code/modules/random_map/drop/droppod.dm | 2 +- code/modules/random_map/drop/supply.dm | 4 ++-- code/modules/random_map/noise/desert.dm | 4 ++-- code/modules/random_map/random_map_verbs.dm | 2 +- code/modules/reagents/reactions/instant/instant_vr.dm | 3 ++- code/modules/research/research.dm | 4 ++-- code/modules/resleeving/infomorph.dm | 2 +- code/modules/shuttles/web_datums.dm | 2 +- code/modules/tgs/v3210/commands.dm | 2 +- code/modules/tgs/v4/commands.dm | 2 +- code/modules/tgs/v5/commands.dm | 2 +- code/modules/xenoarcheaology/artifacts/artifact.dm | 8 ++++---- code/modules/xenobio2/mob/slime/slime.dm | 2 +- code/modules/xgm/xgm_gas_data.dm | 2 +- code/unit_tests/research_tests.dm | 2 +- maps/~map_system/maps.dm | 2 +- 49 files changed, 68 insertions(+), 66 deletions(-) diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 557348ff06..1a482e6d24 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -270,7 +270,7 @@ GLOBAL_LIST_EMPTY(mannequins) /* // Custom species traits - paths = subtypesof(/datum/trait) - /datum/trait + paths = subtypesof(/datum/trait) for(var/path in paths) var/datum/trait/instance = new path() if(!instance.name) diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index 87cd24a36f..1f5b6d41ae 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -510,7 +510,7 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, var/paths // Custom Hair Accessories - paths = typesof(/datum/sprite_accessory/hair_accessory) - /datum/sprite_accessory/hair_accessory + paths = subtypesof(/datum/sprite_accessory/hair_accessory) for(var/path in paths) var/datum/sprite_accessory/hair_accessory/instance = new path() hair_accesories_list[path] = instance @@ -544,14 +544,14 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN, // Weaver recipe stuff - paths = typesof(/datum/weaver_recipe/structure) - /datum/weaver_recipe/structure + paths = subtypesof(/datum/weaver_recipe/structure) for(var/path in paths) var/datum/weaver_recipe/instance = new path() if(!instance.title) continue //A prototype or something weavable_structures[instance.title] = instance - paths = typesof(/datum/weaver_recipe/item) - /datum/weaver_recipe/item + paths = subtypesof(/datum/weaver_recipe/item) for(var/path in paths) var/datum/weaver_recipe/instance = new path() if(!instance.title) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 84eb483b29..21acf2c577 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -298,7 +298,7 @@ var/list/gamemode_cache = list() var/static/list/jukebox_track_files /datum/configuration/New() - var/list/L = typesof(/datum/game_mode) - /datum/game_mode + var/list/L = subtypesof(/datum/game_mode) for (var/T in L) // I wish I didn't have to instance the game modes in order to look up // their information, but it is the only way (at least that I know of). diff --git a/code/controllers/subsystems/events.dm b/code/controllers/subsystems/events.dm index 5b613775e4..83ab2fa00c 100644 --- a/code/controllers/subsystems/events.dm +++ b/code/controllers/subsystems/events.dm @@ -13,7 +13,7 @@ SUBSYSTEM_DEF(events) var/datum/event_meta/new_event = new /datum/controller/subsystem/events/Initialize() - allEvents = typesof(/datum/event) - /datum/event + allEvents = subtypesof(/datum/event) event_containers = list( EVENT_LEVEL_MUNDANE = new/datum/event_container/mundane, EVENT_LEVEL_MODERATE = new/datum/event_container/moderate, diff --git a/code/controllers/subsystems/plants.dm b/code/controllers/subsystems/plants.dm index 1959709174..072f261a01 100644 --- a/code/controllers/subsystems/plants.dm +++ b/code/controllers/subsystems/plants.dm @@ -62,7 +62,7 @@ SUBSYSTEM_DEF(plants) accessible_product_sprites |= base // Populate the global seed datum list. - for(var/type in typesof(/datum/seed)-/datum/seed) + for(var/type in subtypesof(/datum/seed)) var/datum/seed/S = new type seeds[S.name] = S S.uid = "[seeds.len]" diff --git a/code/game/antagonist/_antagonist_setup.dm b/code/game/antagonist/_antagonist_setup.dm index 6f514b9413..c1e5002e74 100644 --- a/code/game/antagonist/_antagonist_setup.dm +++ b/code/game/antagonist/_antagonist_setup.dm @@ -46,7 +46,7 @@ var/global/list/antag_names_to_ids = list() antag.update_all_icons() /proc/populate_antag_type_list() - for(var/antag_type in typesof(/datum/antagonist)-/datum/antagonist) + for(var/antag_type in subtypesof(/datum/antagonist)) var/datum/antagonist/A = new antag_type all_antag_types[A.id] = A all_antag_spawnpoints[A.landmark_id] = list() diff --git a/code/game/antagonist/mutiny/mutineer.dm b/code/game/antagonist/mutiny/mutineer.dm index 480fc83c70..85aecd71ea 100644 --- a/code/game/antagonist/mutiny/mutineer.dm +++ b/code/game/antagonist/mutiny/mutineer.dm @@ -54,7 +54,7 @@ var/datum/antagonist/mutineer/mutineers proc/get_directive_candidates() var/list/candidates[0] - for(var/T in typesof(/datum/directive) - /datum/directive) + for(var/T in subtypesof(/datum/directive)) var/datum/directive/D = new T(src) if (D.meets_prerequisites()) candidates.Add(D) diff --git a/code/game/gamemodes/changeling/modularchangling.dm b/code/game/gamemodes/changeling/modularchangling.dm index c6af89ad75..5563d4f01b 100644 --- a/code/game/gamemodes/changeling/modularchangling.dm +++ b/code/game/gamemodes/changeling/modularchangling.dm @@ -2,7 +2,7 @@ //Ling power's evolution menu entry datum should be contained alongside the mob proc for the actual power, in their own file. -var/list/powers = typesof(/datum/power/changeling) - /datum/power/changeling //needed for the badmin verb for now +var/list/powers = subtypesof(/datum/power/changeling) //needed for the badmin verb for now var/list/datum/power/changeling/powerinstances = list() /datum/power //Could be used by other antags too diff --git a/code/game/gamemodes/sandbox/h_sandbox.dm b/code/game/gamemodes/sandbox/h_sandbox.dm index 74f590a848..b95ddde1ab 100644 --- a/code/game/gamemodes/sandbox/h_sandbox.dm +++ b/code/game/gamemodes/sandbox/h_sandbox.dm @@ -107,7 +107,7 @@ mob hsb.loc = usr.loc to_chat(usr, "Sandbox: Created an airlock.") if("hsbcanister") - var/list/hsbcanisters = typesof(/obj/machinery/portable_atmospherics/canister/) - /obj/machinery/portable_atmospherics/canister/ + var/list/hsbcanisters = subtypesof(/obj/machinery/portable_atmospherics/canister) var/hsbcanister = tgui_input_list(usr, "Choose a canister to spawn:", "Sandbox", hsbcanisters) if(hsbcanister) new hsbcanister(usr.loc) diff --git a/code/game/gamemodes/technomancer/catalog.dm b/code/game/gamemodes/technomancer/catalog.dm index 7d0ddc6c2e..5dd0d64310 100644 --- a/code/game/gamemodes/technomancer/catalog.dm +++ b/code/game/gamemodes/technomancer/catalog.dm @@ -4,10 +4,10 @@ #define UTILITY_SPELLS "Utility" #define SUPPORT_SPELLS "Support" -var/list/all_technomancer_spells = typesof(/datum/technomancer/spell) - /datum/technomancer/spell -var/list/all_technomancer_equipment = typesof(/datum/technomancer/equipment) - /datum/technomancer/equipment -var/list/all_technomancer_consumables = typesof(/datum/technomancer/consumable) - /datum/technomancer/consumable -var/list/all_technomancer_assistance = typesof(/datum/technomancer/assistance) - /datum/technomancer/assistance +var/list/all_technomancer_spells = subtypesof(/datum/technomancer/spell) +var/list/all_technomancer_equipment = subtypesof(/datum/technomancer/equipment) +var/list/all_technomancer_consumables = subtypesof(/datum/technomancer/consumable) +var/list/all_technomancer_assistance = subtypesof(/datum/technomancer/assistance) /datum/technomancer var/name = "technomancer thing" diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm index d390cb4e52..6a593ab554 100644 --- a/code/game/machinery/frame.dm +++ b/code/game/machinery/frame.dm @@ -5,7 +5,7 @@ //Create global frame type list if it hasn't been made already. construction_frame_wall = list() construction_frame_floor = list() - for(var/R in typesof(/datum/frame/frame_types) - /datum/frame/frame_types) + for(var/R in subtypesof(/datum/frame/frame_types)) var/datum/frame/frame_types/type = new R if(type.frame_style == FRAME_STYLE_WALL) construction_frame_wall += type diff --git a/code/game/machinery/partslathe_vr.dm b/code/game/machinery/partslathe_vr.dm index 232fe56f5c..77eefb94c9 100644 --- a/code/game/machinery/partslathe_vr.dm +++ b/code/game/machinery/partslathe_vr.dm @@ -354,7 +354,7 @@ /obj/machinery/partslathe/proc/update_recipe_list() if(!partslathe_recipies) partslathe_recipies = list() - var/list/paths = typesof(/obj/item/weapon/stock_parts)-/obj/item/weapon/stock_parts + var/list/paths = subtypesof(/obj/item/weapon/stock_parts) for(var/type in paths) var/obj/item/weapon/stock_parts/I = new type() if(getHighestOriginTechLevel(I) > 1) diff --git a/code/game/periodic_news.dm b/code/game/periodic_news.dm index a3d89313c5..a5eb2042be 100644 --- a/code/game/periodic_news.dm +++ b/code/game/periodic_news.dm @@ -109,7 +109,7 @@ var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluesp var/global/tmp/announced_news_types = list() /proc/check_for_newscaster_updates(type) - for(var/subtype in typesof(type)-type) + for(var/subtype in subtypesof(type)) var/datum/news_announcement/news = new subtype() if(news.round_time * 10 <= world.time && !(subtype in announced_news_types)) announced_news_types += subtype diff --git a/code/modules/admin/admin_secrets.dm b/code/modules/admin/admin_secrets.dm index 89f032071c..e8ab89101c 100644 --- a/code/modules/admin/admin_secrets.dm +++ b/code/modules/admin/admin_secrets.dm @@ -12,7 +12,7 @@ var/datum/admin_secrets/admin_secrets = new() for(var/datum/admin_secret_category/category in categories) category_assoc[category.type] = category - for(var/item_type in (typesof(/datum/admin_secret_item) - /datum/admin_secret_item)) + for(var/item_type in subtypesof(/datum/admin_secret_item)) var/datum/admin_secret_item/secret_item = item_type if(!initial(secret_item.name)) continue diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index fd11766653..e9d63621b0 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -302,7 +302,7 @@ to_chat(usr, "Looks like you didn't select a mob.") return - var/list/possible_modifiers = typesof(/datum/modifier) - /datum/modifier + var/list/possible_modifiers = subtypesof(/datum/modifier) var/new_modifier_type = tgui_input_list(usr, "What modifier should we add to [L]?", "Modifier Type", possible_modifiers) if(!new_modifier_type) diff --git a/code/modules/awaymissions/loot_vr.dm b/code/modules/awaymissions/loot_vr.dm index 4f3b19aaca..7f4eeaf3a1 100644 --- a/code/modules/awaymissions/loot_vr.dm +++ b/code/modules/awaymissions/loot_vr.dm @@ -63,7 +63,7 @@ //credits var/amount = rand(2,6) var/list/possible_spawns = list() - for(var/cash_type in typesof(/obj/item/weapon/spacecash) - /obj/item/weapon/spacecash) + for(var/cash_type in subtypesof(/obj/item/weapon/spacecash)) possible_spawns += cash_type var/cash_type = pick(possible_spawns) diff --git a/code/modules/busy_space/loremaster.dm b/code/modules/busy_space/loremaster.dm index 28dca0055b..9c2f0f55b4 100644 --- a/code/modules/busy_space/loremaster.dm +++ b/code/modules/busy_space/loremaster.dm @@ -7,7 +7,7 @@ var/datum/lore/loremaster/loremaster = new/datum/lore/loremaster /datum/lore/loremaster/New() - var/list/paths = typesof(/datum/lore/organization) - /datum/lore/organization + var/list/paths = subtypesof(/datum/lore/organization) for(var/path in paths) // Some intermediate paths are not real organizations (ex. /datum/lore/organization/mil). Only do ones with names var/datum/lore/organization/instance = path diff --git a/code/modules/busy_space_vr/loremaster.dm b/code/modules/busy_space_vr/loremaster.dm index 28dca0055b..9c2f0f55b4 100644 --- a/code/modules/busy_space_vr/loremaster.dm +++ b/code/modules/busy_space_vr/loremaster.dm @@ -7,7 +7,7 @@ var/datum/lore/loremaster/loremaster = new/datum/lore/loremaster /datum/lore/loremaster/New() - var/list/paths = typesof(/datum/lore/organization) - /datum/lore/organization + var/list/paths = subtypesof(/datum/lore/organization) for(var/path in paths) // Some intermediate paths are not real organizations (ex. /datum/lore/organization/mil). Only do ones with names var/datum/lore/organization/instance = path diff --git a/code/modules/client/preference_setup/loadout/loadout_general.dm b/code/modules/client/preference_setup/loadout/loadout_general.dm index 5ee5ab3537..8b566fe3c9 100644 --- a/code/modules/client/preference_setup/loadout/loadout_general.dm +++ b/code/modules/client/preference_setup/loadout/loadout_general.dm @@ -53,7 +53,7 @@ /datum/gear/plushie/New() ..() var/list/plushies = list() - for(var/obj/item/toy/plushie/plushie_type as anything in subtypesof(/obj/item/toy/plushie/) - /obj/item/toy/plushie/therapy) + for(var/obj/item/toy/plushie/plushie_type as anything in subtypesof(/obj/item/toy/plushie) - /obj/item/toy/plushie/therapy) plushies[initial(plushie_type.name)] = plushie_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(plushies)) @@ -65,7 +65,7 @@ /datum/gear/figure/New() ..() var/list/figures = list() - for(var/obj/item/toy/figure/figure_type as anything in typesof(/obj/item/toy/figure/) - /obj/item/toy/figure) + for(var/obj/item/toy/figure/figure_type as anything in subtypesof(/obj/item/toy/figure)) figures[initial(figure_type.name)] = figure_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(figures)) diff --git a/code/modules/client/preference_setup/loadout/loadout_general_vr.dm b/code/modules/client/preference_setup/loadout/loadout_general_vr.dm index 8196032233..9b72d27aba 100644 --- a/code/modules/client/preference_setup/loadout/loadout_general_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_general_vr.dm @@ -18,7 +18,7 @@ /datum/gear/character/New() ..() var/list/characters = list() - for(var/obj/item/toy/character/character_type as anything in typesof(/obj/item/toy/character/) - /obj/item/toy/character) + for(var/obj/item/toy/character/character_type as anything in subtypesof(/obj/item/toy/character)) characters[initial(character_type.name)] = character_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(characters)) @@ -30,7 +30,7 @@ /datum/gear/mechtoy/New() ..() var/list/mechs = list() - for(var/obj/item/toy/mecha/mech_type as anything in typesof(/obj/item/toy/mecha/) - /obj/item/toy/mecha/) + for(var/obj/item/toy/mecha/mech_type as anything in subtypesof(/obj/item/toy/mecha)) mechs[initial(mech_type.name)] = mech_type gear_tweaks += new/datum/gear_tweak/path(sortAssoc(mechs)) diff --git a/code/modules/client/preferences_spawnpoints.dm b/code/modules/client/preferences_spawnpoints.dm index 06f7aa5e06..455be8a8b8 100644 --- a/code/modules/client/preferences_spawnpoints.dm +++ b/code/modules/client/preferences_spawnpoints.dm @@ -2,7 +2,7 @@ var/list/spawntypes = list() /proc/populate_spawn_points() spawntypes = list() - for(var/type in typesof(/datum/spawnpoint)-/datum/spawnpoint) + for(var/type in subtypesof(/datum/spawnpoint)) var/datum/spawnpoint/S = new type() spawntypes[S.display_name] = S diff --git a/code/modules/economy/economy_misc.dm b/code/modules/economy/economy_misc.dm index a44c7c03fd..1b029ac74a 100644 --- a/code/modules/economy/economy_misc.dm +++ b/code/modules/economy/economy_misc.dm @@ -60,7 +60,7 @@ var/global/economy_init = 0 news_network.CreateFeedChannel("The Gibson Gazette", "Editor Mike Hammers", 1, 1) news_network.CreateFeedChannel("Oculum Content Aggregator", "Oculus v6rev7", 1, 1) - for(var/loc_type in typesof(/datum/trade_destination) - /datum/trade_destination) + for(var/loc_type in subtypesof(/datum/trade_destination)) var/datum/trade_destination/D = new loc_type weighted_randomevent_locations[D] = D.viable_random_events.len weighted_mundaneevent_locations[D] = D.mundane_probability diff --git a/code/modules/events/supply_demand_vr.dm b/code/modules/events/supply_demand_vr.dm index 64d402c443..6e229e1b48 100644 --- a/code/modules/events/supply_demand_vr.dm +++ b/code/modules/events/supply_demand_vr.dm @@ -252,7 +252,7 @@ // /datum/event/supply_demand/proc/choose_food_items(var/differentTypes) - var/list/types = typesof(/datum/recipe) - /datum/recipe + var/list/types = subtypesof(/datum/recipe) for(var/i in 1 to differentTypes) var/datum/recipe/R = pick(types) types -= R // Don't pick the same thing twice @@ -262,7 +262,7 @@ return /datum/event/supply_demand/proc/choose_research_items(var/differentTypes) - var/list/types = typesof(/datum/design) - /datum/design + var/list/types = subtypesof(/datum/design) for(var/i in 1 to differentTypes) var/datum/design/D = pick(types) types -= D // Don't pick the same thing twice @@ -327,7 +327,7 @@ return /datum/event/supply_demand/proc/choose_alloy_items(var/differentTypes) - var/list/types = typesof(/datum/alloy) - /datum/alloy + var/list/types = subtypesof(/datum/alloy) for(var/i in 1 to differentTypes) var/datum/alloy/A = pick(types) types -= A // Don't pick the same thing twice diff --git a/code/modules/food/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm index 1611f9ac77..b781c4473b 100644 --- a/code/modules/food/kitchen/microwave.dm +++ b/code/modules/food/kitchen/microwave.dm @@ -43,7 +43,7 @@ if(!available_recipes) available_recipes = new - for(var/datum/recipe/type as anything in (typesof(/datum/recipe)-/datum/recipe)) + for(var/datum/recipe/type as anything in subtypesof(/datum/recipe)) if((initial(type.appliance) & appliancetype)) available_recipes += new type diff --git a/code/modules/food/recipe_dump.dm b/code/modules/food/recipe_dump.dm index 63dc510eb9..dffce315e4 100644 --- a/code/modules/food/recipe_dump.dm +++ b/code/modules/food/recipe_dump.dm @@ -15,7 +15,7 @@ "Catalysts" = CR.catalysts) //////////////////////// FOOD - var/list/food_recipes = typesof(/datum/recipe) - /datum/recipe + var/list/food_recipes = subtypesof(/datum/recipe) //Build a useful list for(var/Rp in food_recipes) //Lists don't work with datum-stealing no-instance initial() so we have to. diff --git a/code/modules/genetics/side_effects.dm b/code/modules/genetics/side_effects.dm index 498aff20d0..958f05d5ac 100644 --- a/code/modules/genetics/side_effects.dm +++ b/code/modules/genetics/side_effects.dm @@ -67,7 +67,7 @@ /proc/trigger_side_effect(mob/living/carbon/human/H) spawn if(!istype(H)) return - var/tp = pick(typesof(/datum/genetics/side_effect) - /datum/genetics/side_effect) + var/tp = pick(subtypesof(/datum/genetics/side_effect)) var/datum/genetics/side_effect/S = new tp S.start(H) diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 199b1ed0d0..2896f7feea 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -58,7 +58,7 @@ if(53 to 54) new/obj/item/latexballon(src) if(55 to 56) - var/newitem = pick(typesof(/obj/item/toy/mecha) - /obj/item/toy/mecha) + var/newitem = pick(subtypesof(/obj/item/toy/mecha)) new newitem(src) if(57 to 58) new/obj/item/toy/syndicateballoon(src) @@ -77,7 +77,7 @@ if(67 to 68) var/t = rand(4,7) for(var/i = 0, i < t, ++i) - var/newitem = pick(typesof(/obj/item/weapon/stock_parts) - /obj/item/weapon/stock_parts - /obj/item/weapon/stock_parts/subspace) + var/newitem = pick(subtypesof(/obj/item/weapon/stock_parts) - /obj/item/weapon/stock_parts/subspace) new newitem(src) if(69 to 70) new/obj/item/weapon/pickaxe/silver(src) diff --git a/code/modules/mob/living/carbon/human/MedicalSideEffects.dm b/code/modules/mob/living/carbon/human/MedicalSideEffects.dm index 9af2957074..6946f26a80 100644 --- a/code/modules/mob/living/carbon/human/MedicalSideEffects.dm +++ b/code/modules/mob/living/carbon/human/MedicalSideEffects.dm @@ -56,7 +56,7 @@ if(life_tick % 15 != 0) return 0 - var/list/L = typesof(/datum/medical_effect)-/datum/medical_effect + var/list/L = subtypesof(/datum/medical_effect) for(var/T in L) var/datum/medical_effect/M = new T if (M.manifest(src)) diff --git a/code/modules/mob/living/carbon/human/chem_side_effects.dm b/code/modules/mob/living/carbon/human/chem_side_effects.dm index 9af2957074..6946f26a80 100644 --- a/code/modules/mob/living/carbon/human/chem_side_effects.dm +++ b/code/modules/mob/living/carbon/human/chem_side_effects.dm @@ -56,7 +56,7 @@ if(life_tick % 15 != 0) return 0 - var/list/L = typesof(/datum/medical_effect)-/datum/medical_effect + var/list/L = subtypesof(/datum/medical_effect) for(var/T in L) var/datum/medical_effect/M = new T if (M.manifest(src)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 54544145f1..5c3cfef731 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -751,7 +751,7 @@ update_eyes() // hair - var/list/all_hairs = typesof(/datum/sprite_accessory/hair) - /datum/sprite_accessory/hair + var/list/all_hairs = subtypesof(/datum/sprite_accessory/hair) var/list/hairs = list() // loop through potential hairs @@ -767,7 +767,7 @@ h_style = new_style // facial hair - var/list/all_fhairs = typesof(/datum/sprite_accessory/facial_hair) - /datum/sprite_accessory/facial_hair + var/list/all_fhairs = subtypesof(/datum/sprite_accessory/facial_hair) var/list/fhairs = list() for(var/x in all_fhairs) diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm index cad5229097..3a98a5bea3 100644 --- a/code/modules/mob/living/silicon/pai/software.dm +++ b/code/modules/mob/living/silicon/pai/software.dm @@ -21,7 +21,7 @@ var/global/list/pai_software_by_key = list() var/global/list/default_pai_software = list() /hook/startup/proc/populate_pai_software_list() var/r = 1 // I would use ., but it'd sacrifice runtime detection - for(var/type in typesof(/datum/pai_software) - /datum/pai_software) + for(var/type in subtypesof(/datum/pai_software)) var/datum/pai_software/P = new type() if(pai_software_by_key[P.id]) var/datum/pai_software/O = pai_software_by_key[P.id] diff --git a/code/modules/mob/new_player/skill.dm b/code/modules/mob/new_player/skill.dm index a24da0e4ba..e1a0b50b7f 100644 --- a/code/modules/mob/new_player/skill.dm +++ b/code/modules/mob/new_player/skill.dm @@ -159,7 +159,7 @@ var/global/list/SKILL_PRE = list("Engineer" = SKILL_ENGINEER, "Roboticist" = SKI /proc/setup_skills() if(SKILLS == null) SKILLS = list() - for(var/T in (typesof(/datum/skill)-/datum/skill)) + for(var/T in subtypesof(/datum/skill)) var/datum/skill/S = new T if(S.ID != "none") if(!SKILLS.Find(S.field)) diff --git a/code/modules/power/fusion/fusion_reactions.dm b/code/modules/power/fusion/fusion_reactions.dm index b49fa564bc..54d72b11e8 100644 --- a/code/modules/power/fusion/fusion_reactions.dm +++ b/code/modules/power/fusion/fusion_reactions.dm @@ -17,7 +17,8 @@ var/list/fusion_reactions /proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy) if(!fusion_reactions) fusion_reactions = list() - for(var/rtype in typesof(/decl/fusion_reaction) - /decl/fusion_reaction) + for(var/rtype in subtypesof(/decl/fusion_reaction) + ) var/decl/fusion_reaction/cur_reaction = new rtype() if(!fusion_reactions[cur_reaction.p_react]) fusion_reactions[cur_reaction.p_react] = list() diff --git a/code/modules/random_map/drop/droppod.dm b/code/modules/random_map/drop/droppod.dm index e63c31b1a5..31a575212c 100644 --- a/code/modules/random_map/drop/droppod.dm +++ b/code/modules/random_map/drop/droppod.dm @@ -158,7 +158,7 @@ var/mob/living/spawned_mob var/list/spawned_mobs = list() - var/spawn_path = tgui_input_list(usr, "Select a mob type.", "Drop Pod Selection", typesof(/mob/living)-/mob/living) + var/spawn_path = tgui_input_list(usr, "Select a mob type.", "Drop Pod Selection", subtypesof(/mob/living)) if(!spawn_path) return diff --git a/code/modules/random_map/drop/supply.dm b/code/modules/random_map/drop/supply.dm index 912542d654..d1cc04211d 100644 --- a/code/modules/random_map/drop/supply.dm +++ b/code/modules/random_map/drop/supply.dm @@ -55,14 +55,14 @@ choice = tgui_alert(usr, "Do you wish to add structures or machines?","Supply Drop",list("No","Yes")) if(choice == "Yes") while(1) - var/adding_loot_type = tgui_input_list(usr, "Select a new loot path. Cancel to finish.", "Loot Selection", typesof(/obj) - typesof(/obj/item)) + var/adding_loot_type = tgui_input_list(usr, "Select a new loot path. Cancel to finish.", "Loot Selection", subtypesof(/obj)) if(!adding_loot_type) break chosen_loot_types |= adding_loot_type choice = tgui_alert(usr, "Do you wish to add any non-weapon items?","Supply Drop",list("No","Yes")) if(choice == "Yes") while(1) - var/adding_loot_type = tgui_input_list(usr, "Select a new loot path. Cancel to finish.", "Loot Selection", typesof(/obj/item) - typesof(/obj/item/weapon)) + var/adding_loot_type = tgui_input_list(usr, "Select a new loot path. Cancel to finish.", "Loot Selection", subtypesof(/obj/item)) if(!adding_loot_type) break chosen_loot_types |= adding_loot_type diff --git a/code/modules/random_map/noise/desert.dm b/code/modules/random_map/noise/desert.dm index 0264d2a781..ccb768ce3a 100644 --- a/code/modules/random_map/noise/desert.dm +++ b/code/modules/random_map/noise/desert.dm @@ -24,14 +24,14 @@ switch(val) if(2 to 3) if(prob(60)) - var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass) + var/grass_path = pick(subtypesof(/obj/structure/flora/grass)) new grass_path(T) if(prob(5)) var/mob_type = pick(list(/mob/living/simple_mob/animal/passive/lizard, /mob/living/simple_mob/animal/passive/mouse)) new mob_type(T) if(5 to 6) if(prob(20)) - var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass) + var/grass_path = pick(subtypesof(/obj/structure/flora/grass)) new grass_path(T) if(7 to 9) if(prob(60)) diff --git a/code/modules/random_map/random_map_verbs.dm b/code/modules/random_map/random_map_verbs.dm index c4d572d23f..ff93b73b09 100644 --- a/code/modules/random_map/random_map_verbs.dm +++ b/code/modules/random_map/random_map_verbs.dm @@ -36,7 +36,7 @@ if(!holder) return - var/map_datum = tgui_input_list(usr, "Choose a map to create.", "Map Choice", typesof(/datum/random_map)-/datum/random_map) + var/map_datum = tgui_input_list(usr, "Choose a map to create.", "Map Choice", subtypesof(/datum/random_map)) if(!map_datum) return diff --git a/code/modules/reagents/reactions/instant/instant_vr.dm b/code/modules/reagents/reactions/instant/instant_vr.dm index 31e5fb7bc2..a1ea2aee0c 100644 --- a/code/modules/reagents/reactions/instant/instant_vr.dm +++ b/code/modules/reagents/reactions/instant/instant_vr.dm @@ -208,7 +208,8 @@ result_amount = 1 /decl/chemical_reaction/instant/slime_food/on_reaction(var/datum/reagents/holder) - var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks // BORK BORK BORK + var/list/borks = subtypesof(/obj/item/weapon/reagent_containers/food/snacks) + playsound(holder.my_atom, 'sound/effects/phasein.ogg', 100, 1) diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm index 2fa527f9ca..81ee392a8b 100644 --- a/code/modules/research/research.dm +++ b/code/modules/research/research.dm @@ -52,12 +52,12 @@ GLOBAL_LIST_INIT(design_datums, list()) /datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated. if(!LAZYLEN(GLOB.design_datums)) - for(var/T in typesof(/datum/design) - /datum/design) + for(var/T in subtypesof(/datum/design)) GLOB.design_datums += new T possible_designs = GLOB.design_datums if(!LAZYLEN(known_tech)) - for(var/T in typesof(/datum/tech) - /datum/tech) + for(var/T in subtypesof(/datum/tech)) known_tech += new T RefreshResearch() diff --git a/code/modules/resleeving/infomorph.dm b/code/modules/resleeving/infomorph.dm index 7ba0858334..584ea22aac 100644 --- a/code/modules/resleeving/infomorph.dm +++ b/code/modules/resleeving/infomorph.dm @@ -447,7 +447,7 @@ var/global/list/infomorph_software_by_key = list() var/global/list/default_infomorph_software = list() /hook/startup/proc/populate_infomorph_software_list() var/r = 1 // I would use ., but it'd sacrifice runtime detection - for(var/type in typesof(/datum/infomorph_software) - /datum/infomorph_software) + for(var/type in subtypesof(/datum/infomorph_software)) var/datum/infomorph_software/P = new type() if(infomorph_software_by_key[P.id]) var/datum/infomorph_software/O = infomorph_software_by_key[P.id] diff --git a/code/modules/shuttles/web_datums.dm b/code/modules/shuttles/web_datums.dm index 6e34d3750b..d061ebe397 100644 --- a/code/modules/shuttles/web_datums.dm +++ b/code/modules/shuttles/web_datums.dm @@ -193,7 +193,7 @@ /datum/shuttle_web_master/proc/build_destinations() // First, instantiate all the destination subtypes relevant to this datum. - var/list/destination_types = typesof(destination_class) - destination_class + var/list/destination_types = subtypesof(destination_class) for(var/new_type in destination_types) var/datum/shuttle_destination/D = new_type if(initial(D.skip_me)) diff --git a/code/modules/tgs/v3210/commands.dm b/code/modules/tgs/v3210/commands.dm index 6cced05cb1..fe33018c13 100644 --- a/code/modules/tgs/v3210/commands.dm +++ b/code/modules/tgs/v3210/commands.dm @@ -8,7 +8,7 @@ var/list/command_name_types = list() var/list/warned_command_names = warnings_only ? list() : null var/warned_about_the_dangers_of_robutussin = !warnings_only - for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) + for(var/I in subtypesof(/datum/tgs_chat_command)) if(!warned_about_the_dangers_of_robutussin) TGS_ERROR_LOG("Custom chat commands in [ApiVersion()] lacks the /datum/tgs_chat_user/sender.channel field!") warned_about_the_dangers_of_robutussin = TRUE diff --git a/code/modules/tgs/v4/commands.dm b/code/modules/tgs/v4/commands.dm index 1d9951bc04..8d283b4cd5 100644 --- a/code/modules/tgs/v4/commands.dm +++ b/code/modules/tgs/v4/commands.dm @@ -1,7 +1,7 @@ /datum/tgs_api/v4/proc/ListCustomCommands() var/results = list() custom_commands = list() - for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) + for(var/I in subtypesof(/datum/tgs_chat_command)) var/datum/tgs_chat_command/stc = new I var/command_name = stc.name if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) diff --git a/code/modules/tgs/v5/commands.dm b/code/modules/tgs/v5/commands.dm index 2775157656..70db4333dd 100644 --- a/code/modules/tgs/v5/commands.dm +++ b/code/modules/tgs/v5/commands.dm @@ -1,7 +1,7 @@ /datum/tgs_api/v5/proc/ListCustomCommands() var/results = list() custom_commands = list() - for(var/I in typesof(/datum/tgs_chat_command) - /datum/tgs_chat_command) + for(var/I in subtypesof(/datum/tgs_chat_command)) var/datum/tgs_chat_command/stc = new I var/command_name = stc.name if(!command_name || findtext(command_name, " ") || findtext(command_name, "'") || findtext(command_name, "\"")) diff --git a/code/modules/xenoarcheaology/artifacts/artifact.dm b/code/modules/xenoarcheaology/artifacts/artifact.dm index bbf54ed469..e723561a73 100644 --- a/code/modules/xenoarcheaology/artifacts/artifact.dm +++ b/code/modules/xenoarcheaology/artifacts/artifact.dm @@ -33,11 +33,11 @@ secondary_effect.ToggleActivate(0) else - var/effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect) + var/effecttype = pick(subtypesof(/datum/artifact_effect)) my_effect = new effecttype(src) if(prob(75)) - effecttype = pick(typesof(/datum/artifact_effect) - /datum/artifact_effect) + effecttype = pick(subtypesof(/datum/artifact_effect)) secondary_effect = new effecttype(src) if(prob(75)) secondary_effect.ToggleActivate(0) @@ -85,11 +85,11 @@ secondary_effect.trigger = predefined_trig_secondary /obj/machinery/artifact/proc/choose_effect() - var/effect_type = tgui_input_list(usr, "What type do you want?", "Effect Type", typesof(/datum/artifact_effect) - /datum/artifact_effect) + var/effect_type = tgui_input_list(usr, "What type do you want?", "Effect Type", subtypesof(/datum/artifact_effect)) if(effect_type) my_effect = new effect_type(src) if(tgui_alert(usr, "Do you want a secondary effect?", "Second Effect", list("No", "Yes")) == "Yes") - var/second_effect_type = tgui_input_list(usr, "What type do you want as well?", "Second Effect Type", typesof(/datum/artifact_effect) - list(/datum/artifact_effect, effect_type)) + var/second_effect_type = tgui_input_list(usr, "What type do you want as well?", "Second Effect Type", subtypesof(/datum/artifact_effect) - effect_type) secondary_effect = new second_effect_type(src) else secondary_effect = null diff --git a/code/modules/xenobio2/mob/slime/slime.dm b/code/modules/xenobio2/mob/slime/slime.dm index 3d52c053d8..a3fca442d5 100644 --- a/code/modules/xenobio2/mob/slime/slime.dm +++ b/code/modules/xenobio2/mob/slime/slime.dm @@ -82,7 +82,7 @@ Slime definitions, Life and New live here. /mob/living/simple_mob/xeno/slime/New() ..() - for(var/datum/language/L in (typesof(/datum/language) - /datum/language)) + for(var/datum/language/L in subtypesof(/datum/language)) languages += L speak += "[station_name()]?" traitdat.source = "Slime" diff --git a/code/modules/xgm/xgm_gas_data.dm b/code/modules/xgm/xgm_gas_data.dm index 4ee3e1c501..42c508c4f6 100644 --- a/code/modules/xgm/xgm_gas_data.dm +++ b/code/modules/xgm/xgm_gas_data.dm @@ -29,7 +29,7 @@ /hook/startup/proc/generateGasData() gas_data = new - for(var/p in (typesof(/decl/xgm_gas) - /decl/xgm_gas)) + for(var/p in subtypesof(/decl/xgm_gas)) var/decl/xgm_gas/gas = new p //avoid initial() because of potential New() actions if(gas.id in gas_data.gases) diff --git a/code/unit_tests/research_tests.dm b/code/unit_tests/research_tests.dm index 9d0174cabe..09de5aaca6 100644 --- a/code/unit_tests/research_tests.dm +++ b/code/unit_tests/research_tests.dm @@ -47,7 +47,7 @@ /datum/unit_test/research_designs_have_valid_materials/start_test() var/number_of_issues = 0 - for(var/design_type in typesof(/datum/design) - /datum/design) + for(var/design_type in subtypesof(/datum/design)) var/datum/design/design = design_type if(initial(design.id) == "id") continue diff --git a/maps/~map_system/maps.dm b/maps/~map_system/maps.dm index ce1dedc801..7eb677df5e 100644 --- a/maps/~map_system/maps.dm +++ b/maps/~map_system/maps.dm @@ -3,7 +3,7 @@ var/datum/map/using_map = new USING_MAP_DATUM var/list/all_maps = list() /hook/startup/proc/initialise_map_list() - for(var/type in typesof(/datum/map) - /datum/map) + for(var/type in subtypesof(/datum/map)) var/datum/map/M if(type == using_map.type) M = using_map From 6e28044517e7974f2aeeee89a96314becd3aadf7 Mon Sep 17 00:00:00 2001 From: VerySoft Date: Tue, 20 Jul 2021 13:12:40 -0400 Subject: [PATCH 12/23] Update gateways Hide them! --- maps/gateway_vr/carpfarm.dmm | 6 +++++- maps/gateway_vr/listeningpost.dmm | 6 +++++- maps/gateway_vr/snowfield.dmm | 10 +++++++++- maps/gateway_vr/variable/arynthilake_a.dmm | 6 +++++- maps/gateway_vr/variable/arynthilake_b.dmm | 6 +++++- maps/gateway_vr/variable/arynthilakeunderground_a.dmm | 6 +++++- maps/gateway_vr/variable/arynthilakeunderground_b.dmm | 6 +++++- maps/gateway_vr/variable/honlethhighlands_a.dmm | 8 +++++++- maps/gateway_vr/variable/honlethhighlands_b.dmm | 8 +++++++- maps/gateway_vr/wildwest.dmm | 6 +++++- 10 files changed, 58 insertions(+), 10 deletions(-) diff --git a/maps/gateway_vr/carpfarm.dmm b/maps/gateway_vr/carpfarm.dmm index 51a3348abf..34feaf87d4 100644 --- a/maps/gateway_vr/carpfarm.dmm +++ b/maps/gateway_vr/carpfarm.dmm @@ -749,6 +749,10 @@ /obj/effect/overmap/visitable/sector/tether_gateway/carpfarm, /turf/space, /area/space) +"Ia" = ( +/obj/effect/landmark/hidden_level, +/turf/space, +/area/space) "Zb" = ( /obj/effect/shuttle_landmark{ base_area = /area/space; @@ -1182,7 +1186,7 @@ aa aa aa aa -aa +Ia aa "} (4,1,1) = {" diff --git a/maps/gateway_vr/listeningpost.dmm b/maps/gateway_vr/listeningpost.dmm index ef039b722b..8f451550f0 100644 --- a/maps/gateway_vr/listeningpost.dmm +++ b/maps/gateway_vr/listeningpost.dmm @@ -416,6 +416,10 @@ /obj/effect/floor_decal/rust, /turf/simulated/floor/airless, /area/awaymission/listeningpost) +"Hp" = ( +/obj/effect/landmark/hidden_level, +/turf/space, +/area/space) (1,1,1) = {" aa @@ -840,7 +844,7 @@ aa aa aa aa -aa +Hp aa "} (4,1,1) = {" diff --git a/maps/gateway_vr/snowfield.dmm b/maps/gateway_vr/snowfield.dmm index 2d09b9b2b3..1189687dff 100644 --- a/maps/gateway_vr/snowfield.dmm +++ b/maps/gateway_vr/snowfield.dmm @@ -1634,6 +1634,14 @@ temperature = 243.15 }, /area/awaymission/snowfield/base) +"no" = ( +/obj/effect/landmark/hidden_level, +/turf/simulated/floor/outdoors/snow{ + nitrogen = 93.7835; + oxygen = 20.7263; + temperature = 243.15 + }, +/area/awaymission/snowfield/restricted) "Bw" = ( /obj/effect/overmap/visitable/sector/tether_gateway/snowfield, /turf/simulated/floor/outdoors/snow{ @@ -2066,7 +2074,7 @@ ab ab ab ab -ab +no aa "} (4,1,1) = {" diff --git a/maps/gateway_vr/variable/arynthilake_a.dmm b/maps/gateway_vr/variable/arynthilake_a.dmm index 2c982bab65..6da233bf6c 100644 --- a/maps/gateway_vr/variable/arynthilake_a.dmm +++ b/maps/gateway_vr/variable/arynthilake_a.dmm @@ -2068,6 +2068,10 @@ }, /turf/simulated/floor/tiled/eris/white/brown_platform, /area/gateway/arynthilake/dome) +"Or" = ( +/obj/effect/landmark/hidden_level, +/turf/simulated/mineral/ignore_cavegen, +/area/gateway/arynthilake/caves) "OC" = ( /turf/simulated/floor/carpet/blucarpet{ outdoors = 1 @@ -3052,7 +3056,7 @@ Qr Qr Qr Qr -Qr +Or aa "} (5,1,1) = {" diff --git a/maps/gateway_vr/variable/arynthilake_b.dmm b/maps/gateway_vr/variable/arynthilake_b.dmm index a56a67f1b3..5ed87dc765 100644 --- a/maps/gateway_vr/variable/arynthilake_b.dmm +++ b/maps/gateway_vr/variable/arynthilake_b.dmm @@ -2022,6 +2022,10 @@ }, /turf/simulated/floor/tiled/eris/steel/gray_platform, /area/gateway/arynthilake/dome) +"Ry" = ( +/obj/effect/landmark/hidden_level, +/turf/simulated/mineral/ignore_cavegen, +/area/gateway/arynthilake/caves) "RK" = ( /obj/structure/table/fancyblack, /obj/effect/landmark/mcguffin_spawner, @@ -3022,7 +3026,7 @@ ek ek ek ek -ek +Ry nF "} (5,1,1) = {" diff --git a/maps/gateway_vr/variable/arynthilakeunderground_a.dmm b/maps/gateway_vr/variable/arynthilakeunderground_a.dmm index d7282a8095..121b0fac96 100644 --- a/maps/gateway_vr/variable/arynthilakeunderground_a.dmm +++ b/maps/gateway_vr/variable/arynthilakeunderground_a.dmm @@ -121,6 +121,10 @@ /obj/random/awayloot, /turf/simulated/floor/tiled/eris/steel/techfloor, /area/gateway/arynthilake/engine) +"nD" = ( +/obj/effect/landmark/hidden_level, +/turf/simulated/mineral/ignore_cavegen, +/area/gateway/arynthilake/underground) "nO" = ( /turf/simulated/mineral/floor/ignore_cavegen, /area/gateway/arynthilake/underground) @@ -670,7 +674,7 @@ gh gh gh gh -gh +nD Ft "} (3,1,1) = {" diff --git a/maps/gateway_vr/variable/arynthilakeunderground_b.dmm b/maps/gateway_vr/variable/arynthilakeunderground_b.dmm index 8755d3a2a5..75fa807ad5 100644 --- a/maps/gateway_vr/variable/arynthilakeunderground_b.dmm +++ b/maps/gateway_vr/variable/arynthilakeunderground_b.dmm @@ -103,6 +103,10 @@ /obj/random/awayloot, /turf/simulated/floor/tiled/eris/techmaint, /area/gateway/arynthilake/engine) +"jX" = ( +/obj/effect/landmark/hidden_level, +/turf/simulated/mineral/ignore_cavegen, +/area/gateway/arynthilake/underground) "kb" = ( /turf/simulated/wall/r_wall, /area/gateway/arynthilake/engine) @@ -723,7 +727,7 @@ bL bL bL bL -bL +jX bX "} (3,1,1) = {" diff --git a/maps/gateway_vr/variable/honlethhighlands_a.dmm b/maps/gateway_vr/variable/honlethhighlands_a.dmm index e80e463c65..19eebf89a3 100644 --- a/maps/gateway_vr/variable/honlethhighlands_a.dmm +++ b/maps/gateway_vr/variable/honlethhighlands_a.dmm @@ -1984,6 +1984,12 @@ /obj/item/weapon/stool/padded, /turf/simulated/floor/lino, /area/gateway/honlethhighlands/town/bar) +"Ey" = ( +/obj/effect/landmark/hidden_level, +/turf/simulated/floor/water/deep{ + temperature = 253.15 + }, +/area/gateway/honlethhighlands/beach) "EP" = ( /obj/structure/table/glass, /obj/item/weapon/paper_bin, @@ -3504,7 +3510,7 @@ bm bm bm bm -bm +Ey aa "} (5,1,1) = {" diff --git a/maps/gateway_vr/variable/honlethhighlands_b.dmm b/maps/gateway_vr/variable/honlethhighlands_b.dmm index 482c65dc67..1e46fe78df 100644 --- a/maps/gateway_vr/variable/honlethhighlands_b.dmm +++ b/maps/gateway_vr/variable/honlethhighlands_b.dmm @@ -2048,6 +2048,12 @@ }, /turf/simulated/floor/wood, /area/gateway/honlethhighlands) +"Gm" = ( +/obj/effect/landmark/hidden_level, +/turf/simulated/floor/water/deep{ + temperature = 253.15 + }, +/area/gateway/honlethhighlands/beach) "Gn" = ( /obj/structure/cable/pink{ d1 = 2; @@ -3543,7 +3549,7 @@ bm bm bm bm -bm +Gm aa "} (5,1,1) = {" diff --git a/maps/gateway_vr/wildwest.dmm b/maps/gateway_vr/wildwest.dmm index 02354f8abf..16e6a42d3f 100644 --- a/maps/gateway_vr/wildwest.dmm +++ b/maps/gateway_vr/wildwest.dmm @@ -1983,6 +1983,10 @@ /obj/effect/floor_decal/corner/paleblue/diagonal, /turf/simulated/floor/tiled/white, /area/awaymission/wwmines) +"RC" = ( +/obj/effect/landmark/hidden_level, +/turf/space, +/area/space) "RP" = ( /obj/structure/bed/padded, /obj/item/weapon/bedsheet/blue, @@ -2468,7 +2472,7 @@ ia ia ia ia -ia +RC aa "} (3,1,1) = {" From 4d3773edee4926461618914c7977beffbd4ddc09 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 20 Jul 2021 13:31:05 -0400 Subject: [PATCH 13/23] Add art possibility to v2 outpost --- code/game/objects/structures/artstuff.dm | 6 ++++ maps/expedition_vr/aerostat/surface.dmm | 36 ++++++++++++++++++++---- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 2e2f4052b8..cbb95e955f 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -375,6 +375,12 @@ persistence_id = "library_private" req_one_access = list(access_library) +/obj/structure/sign/painting/away_areas // for very hard-to-get-to areas + name = "\improper Remote Painting Exhibit mounting" + desc = "For art pieces made in the depths of space." + desc_with_canvas = "A painting hung where only the determined can reach it." + persistence_id = "away_area" + /obj/structure/sign/painting/Initialize(mapload, dir, building) . = ..() if(persistence_id) diff --git a/maps/expedition_vr/aerostat/surface.dmm b/maps/expedition_vr/aerostat/surface.dmm index 6b519879a9..b60deeb4de 100644 --- a/maps/expedition_vr/aerostat/surface.dmm +++ b/maps/expedition_vr/aerostat/surface.dmm @@ -421,6 +421,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled/eris/dark, /area/tether_away/aerostat/surface/outpost/cafe) +"nx" = ( +/obj/structure/sign/painting/away_areas{ + pixel_x = -32 + }, +/turf/simulated/floor/tiled/eris/bcircuit, +/area/tether_away/aerostat/surface/outpost/hallway) "nI" = ( /obj/structure/cable/cyan{ icon_state = "1-2" @@ -550,6 +556,13 @@ }, /turf/simulated/floor/plating/eris/under, /area/tether_away/aerostat/surface/outpost/powerroom) +"ru" = ( +/obj/structure/table/woodentable, +/obj/structure/sign/painting/away_areas{ + pixel_x = 32 + }, +/turf/simulated/floor/tiled/eris/dark, +/area/tether_away/aerostat/surface/outpost/cafe) "rA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -1116,6 +1129,13 @@ /obj/structure/medical_stand/anesthetic, /turf/simulated/floor/tiled/eris/bcircuit, /area/tether_away/aerostat/surface/outpost/backroom) +"GH" = ( +/obj/structure/table/woodentable, +/obj/structure/sign/painting/away_areas{ + pixel_x = 32 + }, +/turf/simulated/floor/wood, +/area/tether_away/aerostat/surface/outpost/barracks) "Ha" = ( /obj/structure/cable/cyan{ icon_state = "1-2" @@ -1402,6 +1422,8 @@ "ON" = ( /obj/structure/table/rack/shelf/steel, /obj/item/weapon/storage/box/glasses, +/obj/item/paint_brush, +/obj/item/paint_palette, /turf/simulated/floor/tiled/eris/dark/monofloor, /area/tether_away/aerostat/surface/outpost/cafe) "OT" = ( @@ -1550,6 +1572,8 @@ "Ur" = ( /obj/structure/table/rack/shelf/steel, /obj/item/weapon/storage/box/glasses/pint, +/obj/item/canvas/twentyfour_twentyfour, +/obj/item/canvas/nineteen_nineteen, /turf/simulated/floor/tiled/eris/dark/monofloor, /area/tether_away/aerostat/surface/outpost/cafe) "UC" = ( @@ -2602,9 +2626,9 @@ Ge QJ Zb br -zN -zN -zN +nx +nx +nx br zN dE @@ -5308,9 +5332,9 @@ gq dE zr WC +ru Ra -Ra -Ra +ru iu WF Oi @@ -6301,7 +6325,7 @@ Rw Bs sA nK -nK +GH tG gx gx From e78f6021fbf3d4136f77b887a4f8420e5bb8686f Mon Sep 17 00:00:00 2001 From: VerySoft Date: Tue, 20 Jul 2021 13:34:53 -0400 Subject: [PATCH 14/23] fix a UI thingy too --- code/modules/mob/dead/observer/observer.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 350eef1967..25620281fc 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -360,7 +360,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return mobs -/mob/observer/dead/verb/dead_tele(areaname as null|anything in jumpable_areas()) +/mob/observer/dead/verb/dead_tele(areaname as anything in jumpable_areas()) set name = "Teleport" set category = "Ghost" set desc = "Teleport to a location." @@ -387,7 +387,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp usr.forceMove(pick(get_area_turfs(A || jumpable_areas()[areaname]))) usr.on_mob_jump() -/mob/observer/dead/verb/follow(mobname as null|anything in jumpable_mobs()) +/mob/observer/dead/verb/follow(mobname as anything in jumpable_mobs()) set name = "Follow" set category = "Ghost" set desc = "Follow and haunt a mob." From 837bdf4c94e6649c325140a3e3e339fe34421ebe Mon Sep 17 00:00:00 2001 From: VerySoft Date: Tue, 20 Jul 2021 13:43:19 -0400 Subject: [PATCH 15/23] Hopefully also make the this one pick one randomly??? --- maps/tether/tether_defines.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/maps/tether/tether_defines.dm b/maps/tether/tether_defines.dm index 89aeb37bea..992a8c5267 100644 --- a/maps/tether/tether_defines.dm +++ b/maps/tether/tether_defines.dm @@ -167,8 +167,7 @@ list("Carp Farm"), list("Snow Field"), list("Listening Post"), - list("Honleth Highlands A"), - list("Honleth Highlands B"), + list(list("Honleth Highlands A", "Honleth Highlands B")), list("Arynthi Lake Underground A","Arynthi Lake A"), list("Arynthi Lake Underground B","Arynthi Lake B"), list("Eggnog Town Underground","Eggnog Town"), From 49ffaefa1400db55df7c05c265b557a3cf6b180e Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 20 Jul 2021 14:39:44 -0400 Subject: [PATCH 16/23] Add code to trace recursive buckle issue Also prevents it in the meantime. --- code/game/objects/buckling.dm | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/game/objects/buckling.dm b/code/game/objects/buckling.dm index fa2af7d0af..145d4af268 100644 --- a/code/game/objects/buckling.dm +++ b/code/game/objects/buckling.dm @@ -54,6 +54,10 @@ if(!can_buckle_check(M, forced)) return FALSE + if(M == src) + stack_trace("Recursive buckle warning: [M] being buckled to self.") + return + M.buckled = src M.facing_dir = null M.set_dir(buckle_dir ? buckle_dir : dir) From f3452f32884d9123779f4255891b05c76c3fc172 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 20 Jul 2021 14:55:03 -0400 Subject: [PATCH 17/23] Fixes #11167 --- icons/mob/pai_vr.dmi | Bin 157362 -> 166129 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/pai_vr.dmi b/icons/mob/pai_vr.dmi index 45ee85a06628f75e6a2e3be9d1712a0d008bcef2..0b8b985ff7c54a9b8aabe28d622755e628333ce0 100644 GIT binary patch literal 166129 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 literal 157362 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⩔ncUsXWp4oBe&a3H_7VEJlXz{y~bn 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 K&*U07hW!`tY}teW From c8697ec4d9e032e9dd4edb08cd57c979abafed25 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 20 Jul 2021 15:43:38 -0400 Subject: [PATCH 18/23] Fixes #11003 --- .../carbon/human/species/station/protean_vr/protean_blob.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm index c1f3a82101..65692d14ac 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm @@ -82,6 +82,12 @@ healing.expire() return ..() +/mob/living/simple_mob/protean_blob/say_understands(var/mob/other, var/datum/language/speaking = null) + // The parent of this proc and its parent are SHAMS and should be rewritten, but I'm not up to it right now. + if(!speaking) + return TRUE // can understand common, they're like, a normal person thing + return ..() + /mob/living/simple_mob/protean_blob/speech_bubble_appearance() return "synthetic" From cc21b64b8f096fbca7d36358b16fa048c91c6cc8 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 20 Jul 2021 15:59:32 -0400 Subject: [PATCH 19/23] Proteans are synthetic, yeah --- .../carbon/human/species/station/protean_vr/protean_blob.dm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm index c1f3a82101..143eeb61c2 100644 --- a/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm +++ b/code/modules/mob/living/carbon/human/species/station/protean_vr/protean_blob.dm @@ -91,6 +91,9 @@ /mob/living/simple_mob/protean_blob/init_vore() return //Don't make a random belly, don't waste your time +/mob/living/simple_mob/protean_blob/isSynthetic() + return TRUE // yup + /mob/living/simple_mob/protean_blob/Stat() ..() if(humanform) From 4505403a11cb5eee2e9c1f47bf236f76d99b56d0 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 20 Jul 2021 17:07:02 -0400 Subject: [PATCH 20/23] Tweak cat PR --- code/game/objects/items/devices/text_to_speech.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/devices/text_to_speech.dm b/code/game/objects/items/devices/text_to_speech.dm index 58c1490a64..54510fb9a4 100644 --- a/code/game/objects/items/devices/text_to_speech.dm +++ b/code/game/objects/items/devices/text_to_speech.dm @@ -7,7 +7,7 @@ var/named /obj/item/device/text_to_speech/attack_self(mob/user as mob) - if(user.incapacitated(INCAPACITATION_KNOCKDOWN) || user.incapacitated(INCAPACITATION_DISABLED)) // EDIT: We can use the device only if we are not in certain types of incapacitation. We don't want chairs stopping us from texting!! + if(user.incapacitated(INCAPACITATION_KNOCKDOWN|INCAPACITATION_DISABLED)) // EDIT: We can use the device only if we are not in certain types of incapacitation. We don't want chairs stopping us from texting!! to_chat(user, "You cannot activate the device in your state.") return @@ -29,4 +29,4 @@ loc.audible_message("", runemessage = "\[TTS Voice\] [message]") /obj/item/device/text_to_speech/AltClick(mob/user) // QOL Change - attack_self(user) \ No newline at end of file + attack_self(user) From e0f2f5db91f2045ca3042a700e2cbdb420da1122 Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 20 Jul 2021 18:22:03 -0400 Subject: [PATCH 21/23] Remove tons of pointless helpers --- code/_helpers/icons.dm | 552 +----------------- code/_helpers/icons_vr.dm | 6 +- .../subtypes/converters.dm | 2 +- .../human/species/species_shapeshift.dm | 3 +- .../mob/living/carbon/human/update_icons.dm | 11 +- 5 files changed, 15 insertions(+), 559 deletions(-) diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm index 53ad12d9b3..74607efe05 100644 --- a/code/_helpers/icons.dm +++ b/code/_helpers/icons.dm @@ -1,218 +1,3 @@ -/* -IconProcs README - -A BYOND library for manipulating icons and colors - -by Lummox JR - -version 1.0 - -The IconProcs library was made to make a lot of common icon operations much easier. BYOND's icon manipulation -routines are very capable but some of the advanced capabilities like using alpha transparency can be unintuitive to beginners. - -CHANGING ICONS - -Several new procs have been added to the /icon datum to simplify working with icons. To use them, -remember you first need to setup an /icon var like so: - -var/icon/my_icon = new('iconfile.dmi') - -icon/ChangeOpacity(amount = 1) - A very common operation in DM is to try to make an icon more or less transparent. Making an icon more - transparent is usually much easier than making it less so, however. This proc basically is a frontend - for MapColors() which can change opacity any way you like, in much the same way that SetIntensity() - can make an icon lighter or darker. If amount is 0.5, the opacity of the icon will be cut in half. - If amount is 2, opacity is doubled and anything more than half-opaque will become fully opaque. -icon/GrayScale() - Converts the icon to grayscale instead of a fully colored icon. Alpha values are left intact. -icon/ColorTone(tone) - Similar to GrayScale(), this proc converts the icon to a range of black -> tone -> white, where tone is an - RGB color (its alpha is ignored). This can be used to create a sepia tone or similar effect. - See also the global ColorTone() proc. -icon/MinColors(icon) - The icon is blended with a second icon where the minimum of each RGB pixel is the result. - Transparency may increase, as if the icons were blended with ICON_ADD. You may supply a color in place of an icon. -icon/MaxColors(icon) - The icon is blended with a second icon where the maximum of each RGB pixel is the result. - Opacity may increase, as if the icons were blended with ICON_OR. You may supply a color in place of an icon. -icon/Opaque(background = "#000000") - All alpha values are set to 255 throughout the icon. Transparent pixels become black, or whatever background color you specify. -icon/BecomeAlphaMask() - You can convert a simple grayscale icon into an alpha mask to use with other icons very easily with this proc. - The black parts become transparent, the white parts stay white, and anything in between becomes a translucent shade of white. -icon/AddAlphaMask(mask) - The alpha values of the mask icon will be blended with the current icon. Anywhere the mask is opaque, - the current icon is untouched. Anywhere the mask is transparent, the current icon becomes transparent. - Where the mask is translucent, the current icon becomes more transparent. -icon/UseAlphaMask(mask, mode) - Sometimes you may want to take the alpha values from one icon and use them on a different icon. - This proc will do that. Just supply the icon whose alpha mask you want to use, and src will change - so it has the same colors as before but uses the mask for opacity. - -COLOR MANAGEMENT AND HSV - -RGB isn't the only way to represent color. Sometimes it's more useful to work with a model called HSV, which stands for hue, saturation, and value. - - * The hue of a color describes where it is along the color wheel. It goes from red to yellow to green to - cyan to blue to magenta and back to red. - * The saturation of a color is how much color is in it. A color with low saturation will be more gray, - and with no saturation at all it is a shade of gray. - * The value of a color determines how bright it is. A high-value color is vivid, moderate value is dark, - and no value at all is black. - -Just as BYOND uses "#rrggbb" to represent RGB values, a similar format is used for HSV: "#hhhssvv". The hue is three -hex digits because it ranges from 0 to 0x5FF. - - * 0 to 0xFF - red to yellow - * 0x100 to 0x1FF - yellow to green - * 0x200 to 0x2FF - green to cyan - * 0x300 to 0x3FF - cyan to blue - * 0x400 to 0x4FF - blue to magenta - * 0x500 to 0x5FF - magenta to red - -Knowing this, you can figure out that red is "#000ffff" in HSV format, which is hue 0 (red), saturation 255 (as colorful as possible), -value 255 (as bright as possible). Green is "#200ffff" and blue is "#400ffff". - -More than one HSV color can match the same RGB color. - -Here are some procs you can use for color management: - -ReadRGB(rgb) - Takes an RGB string like "#ffaa55" and converts it to a list such as list(255,170,85). If an RGBA format is used - that includes alpha, the list will have a fourth item for the alpha value. -hsv(hue, sat, val, apha) - Counterpart to rgb(), this takes the values you input and converts them to a string in "#hhhssvv" or "#hhhssvvaa" - format. Alpha is not included in the result if null. -ReadHSV(rgb) - Takes an HSV string like "#100FF80" and converts it to a list such as list(256,255,128). If an HSVA format is used that - includes alpha, the list will have a fourth item for the alpha value. -RGBtoHSV(rgb) - Takes an RGB or RGBA string like "#ffaa55" and converts it into an HSV or HSVA color such as "#080aaff". -HSVtoRGB(hsv) - Takes an HSV or HSVA string like "#080aaff" and converts it into an RGB or RGBA color such as "#ff55aa". -BlendRGB(rgb1, rgb2, amount) - Blends between two RGB or RGBA colors using regular RGB blending. If amount is 0, the first color is the result; - if 1, the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an RGB or RGBA color. -BlendHSV(hsv1, hsv2, amount) - Blends between two HSV or HSVA colors using HSV blending, which tends to produce nicer results than regular RGB - blending because the brightness of the color is left intact. If amount is 0, the first color is the result; if 1, - the second color is the result. 0.5 produces an average of the two. Values outside the 0 to 1 range are allowed as well. - The returned value is an HSV or HSVA color. -BlendRGBasHSV(rgb1, rgb2, amount) - Like BlendHSV(), but the colors used and the return value are RGB or RGBA colors. The blending is done in HSV form. -HueToAngle(hue) - Converts a hue to an angle range of 0 to 360. Angle 0 is red, 120 is green, and 240 is blue. -AngleToHue(hue) - Converts an angle to a hue in the valid range. -RotateHue(hsv, angle) - Takes an HSV or HSVA value and rotates the hue forward through red, green, and blue by an angle from 0 to 360. - (Rotating red by 60deg produces yellow.) The result is another HSV or HSVA color with the same saturation and value - as the original, but a different hue. -GrayScale(rgb) - Takes an RGB or RGBA color and converts it to grayscale. Returns an RGB or RGBA string. -ColorTone(rgb, tone) - Similar to GrayScale(), this proc converts an RGB or RGBA color to a range of black -> tone -> white instead of - using strict shades of gray. The tone value is an RGB color; any alpha value is ignored. -*/ - -/* -Get Flat Icon DEMO by DarkCampainger - -This is a test for the get flat icon proc, modified approprietly for icons and their states. -Probably not a good idea to run this unless you want to see how the proc works in detail. -mob - icon = 'old_or_unused.dmi' - icon_state = "green" - - Login() - // Testing image underlays - underlays += image(icon='old_or_unused.dmi',icon_state="red") - underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = 32) - underlays += image(icon='old_or_unused.dmi',icon_state="red", pixel_x = -32) - - // Testing image overlays - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = -32) - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = 32, pixel_y = 32) - overlays += image(icon='old_or_unused.dmi',icon_state="green", pixel_x = -32, pixel_y = -32) - - // Testing icon file overlays (defaults to mob's state) - overlays += '_flat_demoIcons2.dmi' - - // Testing icon_state overlays (defaults to mob's icon) - overlays += "white" - - // Testing dynamic icon overlays - var/icon/I = icon('old_or_unused.dmi', icon_state="aqua") - I.Shift(NORTH,16,1) - overlays+=I - - // Testing dynamic image overlays - I=image(icon=I,pixel_x = -32, pixel_y = 32) - overlays+=I - - // Testing object types (and layers) - overlays+=/obj/effect/overlayTest - - loc = locate (10,10,1) - verb - Browse_Icon() - set name = "1. Browse Icon" - // Give it a name for the cache - var/iconName = "[ckey(src.name)]_flattened.dmi" - // Send the icon to src's local cache - src<

") - - Output_Icon() - set name = "2. Output Icon" - to_chat(src, "Icon is: [bicon(getFlatIcon(src))]") - - Label_Icon() - set name = "3. Label Icon" - // Give it a name for the cache - var/iconName = "[ckey(src.name)]_flattened.dmi" - // Copy the file to the rsc manually - var/icon/I = fcopy_rsc(getFlatIcon(src)) - // Send the icon to src's local cache - src< 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102) break - ++digits - if(digits == 8) break - - var/single = digits < 6 - if(digits != 3 && digits != 4 && digits != 6 && digits != 8) return - if(digits == 4 || digits == 8) usealpha = 1 - for(i=start, digits>0, ++i) - ch = text2ascii(rgb, i) - if(ch >= 48 && ch <= 57) ch -= 48 - else if(ch >= 65 && ch <= 70) ch -= 55 - else if(ch >= 97 && ch <= 102) ch -= 87 - else break - --digits - switch(which) - if(0) - r = (r << 4) | ch - if(single) - r |= r << 4 - ++which - else if(!(digits & 1)) ++which - if(1) - g = (g << 4) | ch - if(single) - g |= g << 4 - ++which - else if(!(digits & 1)) ++which - if(2) - b = (b << 4) | ch - if(single) - b |= b << 4 - ++which - else if(!(digits & 1)) ++which - if(3) - alpha = (alpha << 4) | ch - if(single) alpha |= alpha << 4 - - . = list(r, g, b) - if(usealpha) . += alpha - -/proc/RGBdec2hex(var/list/values) - var/string = "" - while(values.len) - string = "[num2text(values[values.len], 2, 16)][string]" - values.len-- - return "#[string]" - -/proc/ReadHSV(hsv) - if(!hsv) return - - // interpret the HSV or HSVA value - var/i=1,start=1 - if(text2ascii(hsv) == 35) ++start // skip opening # - var/ch,which=0,hue=0,sat=0,val=0,alpha=0,usealpha - var/digits=0 - for(i=start, i<=length(hsv), ++i) - ch = text2ascii(hsv, i) - if(ch < 48 || (ch > 57 && ch < 65) || (ch > 70 && ch < 97) || ch > 102) break - ++digits - if(digits == 9) break - if(digits > 7) usealpha = 1 - if(digits <= 4) ++which - if(digits <= 2) ++which - for(i=start, digits>0, ++i) - ch = text2ascii(hsv, i) - if(ch >= 48 && ch <= 57) ch -= 48 - else if(ch >= 65 && ch <= 70) ch -= 55 - else if(ch >= 97 && ch <= 102) ch -= 87 - else break - --digits - switch(which) - if(0) - hue = (hue << 4) | ch - if(digits == (usealpha ? 6 : 4)) ++which - if(1) - sat = (sat << 4) | ch - if(digits == (usealpha ? 4 : 2)) ++which - if(2) - val = (val << 4) | ch - if(digits == (usealpha ? 2 : 0)) ++which - if(3) - alpha = (alpha << 4) | ch - - . = list(hue, sat, val) - if(usealpha) . += alpha - -/proc/HSVtoRGB(hsv) - if(!hsv) return "#000000" - var/list/HSV = ReadHSV(hsv) - if(!HSV) return "#000000" - - var/hue = HSV[1] - var/sat = HSV[2] - var/val = HSV[3] - - // Compress hue into easier-to-manage range - hue -= hue >> 8 - if(hue >= 0x5fa) hue -= 0x5fa - - var/hi,mid,lo,r,g,b - hi = val - lo = round((255 - sat) * val / 255, 1) - mid = lo + round(abs(round(hue, 510) - hue) * (hi - lo) / 255, 1) - if(hue >= 765) - if(hue >= 1275) {r=hi; g=lo; b=mid} - else if(hue >= 1020) {r=mid; g=lo; b=hi } - else {r=lo; g=mid; b=hi } - else - if(hue >= 510) {r=lo; g=hi; b=mid} - else if(hue >= 255) {r=mid; g=hi; b=lo } - else {r=hi; g=mid; b=lo } - - return (HSV.len > 3) ? rgb(r,g,b,HSV[4]) : rgb(r,g,b) - -/proc/RGBtoHSV(rgb) - if(!rgb) return "#0000000" - var/list/RGB = ReadRGB(rgb) - if(!RGB) return "#0000000" - - var/r = RGB[1] - var/g = RGB[2] - var/b = RGB[3] - var/hi = max(r,g,b) - var/lo = min(r,g,b) - - var/val = hi - var/sat = hi ? round((hi-lo) * 255 / hi, 1) : 0 - var/hue = 0 - - if(sat) - var/dir - var/mid - if(hi == r) - if(lo == b) {hue=0; dir=1; mid=g} - else {hue=1535; dir=-1; mid=b} - else if(hi == g) - if(lo == r) {hue=512; dir=1; mid=b} - else {hue=511; dir=-1; mid=r} - else if(hi == b) - if(lo == g) {hue=1024; dir=1; mid=r} - else {hue=1023; dir=-1; mid=g} - hue += dir * round((mid-lo) * 255 / (hi-lo), 1) - - return hsv(hue, sat, val, (RGB.len>3 ? RGB[4] : null)) - -/proc/hsv(hue, sat, val, alpha) - if(hue < 0 || hue >= 1536) hue %= 1536 - if(hue < 0) hue += 1536 - if((hue & 0xFF) == 0xFF) - ++hue - if(hue >= 1536) hue = 0 - if(sat < 0) sat = 0 - if(sat > 255) sat = 255 - if(val < 0) val = 0 - if(val > 255) val = 255 - . = "#" - . += TO_HEX_DIGIT(hue >> 8) - . += TO_HEX_DIGIT(hue >> 4) - . += TO_HEX_DIGIT(hue) - . += TO_HEX_DIGIT(sat >> 4) - . += TO_HEX_DIGIT(sat) - . += TO_HEX_DIGIT(val >> 4) - . += TO_HEX_DIGIT(val) - if(!isnull(alpha)) - if(alpha < 0) alpha = 0 - if(alpha > 255) alpha = 255 - . += TO_HEX_DIGIT(alpha >> 4) - . += TO_HEX_DIGIT(alpha) - -/* - Smooth blend between HSV colors - - amount=0 is the first color - amount=1 is the second color - amount=0.5 is directly between the two colors - - amount<0 or amount>1 are allowed - */ -/proc/BlendHSV(hsv1, hsv2, amount) - var/list/HSV1 = ReadHSV(hsv1) - var/list/HSV2 = ReadHSV(hsv2) - - // add missing alpha if needed - if(HSV1.len < HSV2.len) HSV1 += 255 - else if(HSV2.len < HSV1.len) HSV2 += 255 - var/usealpha = HSV1.len > 3 - - // normalize hsv values in case anything is screwy - if(HSV1[1] > 1536) HSV1[1] %= 1536 - if(HSV2[1] > 1536) HSV2[1] %= 1536 - if(HSV1[1] < 0) HSV1[1] += 1536 - if(HSV2[1] < 0) HSV2[1] += 1536 - if(!HSV1[3]) {HSV1[1] = 0; HSV1[2] = 0} - if(!HSV2[3]) {HSV2[1] = 0; HSV2[2] = 0} - - // no value for one color means don't change saturation - if(!HSV1[3]) HSV1[2] = HSV2[2] - if(!HSV2[3]) HSV2[2] = HSV1[2] - // no saturation for one color means don't change hues - if(!HSV1[2]) HSV1[1] = HSV2[1] - if(!HSV2[2]) HSV2[1] = HSV1[1] - - // Compress hues into easier-to-manage range - HSV1[1] -= HSV1[1] >> 8 - HSV2[1] -= HSV2[1] >> 8 - - var/hue_diff = HSV2[1] - HSV1[1] - if(hue_diff > 765) hue_diff -= 1530 - else if(hue_diff <= -765) hue_diff += 1530 - - var/hue = round(HSV1[1] + hue_diff * amount, 1) - var/sat = round(HSV1[2] + (HSV2[2] - HSV1[2]) * amount, 1) - var/val = round(HSV1[3] + (HSV2[3] - HSV1[3]) * amount, 1) - var/alpha = usealpha ? round(HSV1[4] + (HSV2[4] - HSV1[4]) * amount, 1) : null - - // normalize hue - if(hue < 0 || hue >= 1530) hue %= 1530 - if(hue < 0) hue += 1530 - // decompress hue - hue += round(hue / 255) - - return hsv(hue, sat, val, alpha) - -/* - Smooth blend between RGB colors - - amount=0 is the first color - amount=1 is the second color - amount=0.5 is directly between the two colors - - amount<0 or amount>1 are allowed - */ /proc/BlendRGB(rgb1, rgb2, amount) - var/list/RGB1 = ReadRGB(rgb1) - var/list/RGB2 = ReadRGB(rgb2) + var/list/RGB1 = rgb2num(rgb1) + var/list/RGB2 = rgb2num(rgb2) // add missing alpha if needed if(RGB1.len < RGB2.len) RGB1 += 255 @@ -574,65 +95,6 @@ world return isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha) -/proc/BlendRGBasHSV(rgb1, rgb2, amount) - return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount) - -/proc/HueToAngle(hue) - // normalize hsv in case anything is screwy - if(hue < 0 || hue >= 1536) hue %= 1536 - if(hue < 0) hue += 1536 - // Compress hue into easier-to-manage range - hue -= hue >> 8 - return hue / (1530/360) - -/proc/AngleToHue(angle) - // normalize hsv in case anything is screwy - if(angle < 0 || angle >= 360) angle -= 360 * round(angle / 360) - var/hue = angle * (1530/360) - // Decompress hue - hue += round(hue / 255) - return hue - - -// positive angle rotates forward through red->green->blue -/proc/RotateHue(hsv, angle) - var/list/HSV = ReadHSV(hsv) - - // normalize hsv in case anything is screwy - if(HSV[1] >= 1536) HSV[1] %= 1536 - if(HSV[1] < 0) HSV[1] += 1536 - - // Compress hue into easier-to-manage range - HSV[1] -= HSV[1] >> 8 - - if(angle < 0 || angle >= 360) angle -= 360 * round(angle / 360) - HSV[1] = round(HSV[1] + angle * (1530/360), 1) - - // normalize hue - if(HSV[1] < 0 || HSV[1] >= 1530) HSV[1] %= 1530 - if(HSV[1] < 0) HSV[1] += 1530 - // decompress hue - HSV[1] += round(HSV[1] / 255) - - return hsv(HSV[1], HSV[2], HSV[3], (HSV.len > 3 ? HSV[4] : null)) - -// Convert an rgb color to grayscale -/proc/GrayScale(rgb) - var/list/RGB = ReadRGB(rgb) - var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 - return (RGB.len > 3) ? rgb(gray, gray, gray, RGB[4]) : rgb(gray, gray, gray) - -// Change grayscale color to black->tone->white range -/proc/ColorTone(rgb, tone) - var/list/RGB = ReadRGB(rgb) - var/list/TONE = ReadRGB(tone) - - var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 - var/tone_gray = TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11 - - if(gray <= tone_gray) return BlendRGB("#000000", tone, gray/(tone_gray || 1)) - else return BlendRGB(tone, "#ffffff", (gray-tone_gray)/((255-tone_gray) || 1)) - // Ported from /tg/station // Creates a single icon from a given /atom or /image. Only the first argument is required. /proc/getFlatIcon(image/A, defdir, deficon, defstate, defblend, start = TRUE, no_anim = FALSE) @@ -762,7 +224,8 @@ world // Dimensions of overlay being added var/list/add_size[4] - for(var/image/I as anything in layers) + for(var/V in layers) + var/image/I = V if(I.alpha == 0) continue @@ -896,7 +359,8 @@ world //For photo camera. /proc/build_composite_icon(atom/A) var/icon/composite = icon(A.icon, A.icon_state, A.dir, 1) - for(var/image/I as anything in A.overlays) + for(var/O in A.overlays) + var/image/I = O composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) return composite @@ -935,7 +399,7 @@ GLOBAL_LIST_EMPTY(cached_examine_icons) if (!color) return "#FFFFFF" if (!value) return color - var/list/RGB = ReadRGB(color) + var/list/RGB = rgb2num(color) RGB[1] = CLAMP(RGB[1]+value,0,255) RGB[2] = CLAMP(RGB[2]+value,0,255) RGB[3] = CLAMP(RGB[3]+value,0,255) diff --git a/code/_helpers/icons_vr.dm b/code/_helpers/icons_vr.dm index 1b500862b6..1afbeb21f1 100644 --- a/code/_helpers/icons_vr.dm +++ b/code/_helpers/icons_vr.dm @@ -12,14 +12,14 @@ var/final_average if (accurate) //keeping it legible for(var/i = 1 to total) - RGB = ReadRGB(colors[i]) + RGB = rgb2num(colors[i]) colorsum[1] += RGB[1]*RGB[1] colorsum[2] += RGB[2]*RGB[2] colorsum[3] += RGB[3]*RGB[3] final_average = rgb(sqrt(colorsum[1]/total), sqrt(colorsum[2]/total), sqrt(colorsum[3]/total)) else for(var/i = 1 to total) - RGB = ReadRGB(colors[i]) + RGB = rgb2num(colors[i]) colorsum[1] += RGB[1] colorsum[2] += RGB[2] colorsum[3] += RGB[3] @@ -32,7 +32,7 @@ for(var/y_pixel = 1 to I.Height()) var/this_color = I.GetPixel(x_pixel, y_pixel) if(this_color) - if (ignoreGreyscale && ReadHSV(RGBtoHSV(this_color))[2] == 0) //If saturation is 0, must be greyscale + if (ignoreGreyscale && rgb2num(this_color, COLORSPACE_HSV)[2] == 0) //If saturation is 0, must be greyscale continue colors.Add(this_color) return colors diff --git a/code/modules/integrated_electronics/subtypes/converters.dm b/code/modules/integrated_electronics/subtypes/converters.dm index 316742e488..ada8eadbc6 100644 --- a/code/modules/integrated_electronics/subtypes/converters.dm +++ b/code/modules/integrated_electronics/subtypes/converters.dm @@ -361,7 +361,7 @@ var/saturation = get_pin_data(IC_INPUT, 2) var/value = get_pin_data(IC_INPUT, 3) if(isnum(hue) && isnum(saturation) && isnum(value)) - result = HSVtoRGB(hsv(AngleToHue(hue),saturation,value)) + result = rgb(h = hue, s = saturation, v = value, space = COLORSPACE_HSV) set_pin_data(IC_OUTPUT, 1, result) push_data() diff --git a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm index 9f3a928b9b..503fb45d8c 100644 --- a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm +++ b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm @@ -177,8 +177,7 @@ var/list/wrapped_species_by_ref = list() last_special = world.time + 50 - var/current = RGBdec2hex(list(r_skin, g_skin, b_skin)) - var/new_skin = input(usr, "Please select a new body color.", "Shapeshifter Colour", current) as null|color + var/new_skin = input(usr, "Please select a new body color.", "Shapeshifter Colour", rgb(r_skin, g_skin, b_skin)) as null|color if(!new_skin) return shapeshifter_set_colour(new_skin) diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index e596eb51b4..0406a77307 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -348,7 +348,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() if(husk) base_icon.ColorTone(husk_color_mod) else if(hulk) - var/list/tone = ReadRGB(hulk_color_mod) + var/list/tone = rgb2num(hulk_color_mod) base_icon.MapColors(rgb(tone[1],0,0),rgb(0,tone[2],0),rgb(0,0,tone[3])) //Handle husk overlay. @@ -1168,13 +1168,6 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() return working /mob/living/carbon/human/proc/get_ears_overlay() - //If you are FBP with ear style and didn't set a custom one - var/datum/robolimb/model = isSynthetic() - if(istype(model) && model.includes_ears && !ear_style) - var/icon/ears_s = new/icon("icon" = synthetic.icon, "icon_state" = "ears") - ears_s.Blend(rgb(src.r_ears, src.g_ears, src.b_ears), species.color_mult ? ICON_MULTIPLY : ICON_ADD) - return ears_s - if(ear_style && !(head && (head.flags_inv & BLOCKHEADHAIR))) var/icon/ears_s = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.icon_state) if(ear_style.do_colouration) @@ -1196,7 +1189,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon() /mob/living/carbon/human/proc/get_tail_image() //If you are FBP with tail style and didn't set a custom one var/datum/robolimb/model = isSynthetic() - if(istype(model) && model.includes_tail && !tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) + if(istype(model) && model.includes_tail && !tail_style) var/icon/tail_s = new/icon("icon" = synthetic.icon, "icon_state" = "tail") tail_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) return image(tail_s) From cc5b17a55a8b1455de60681b86f65b425a7726ac Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 20 Jul 2021 18:51:01 -0400 Subject: [PATCH 22/23] Add trifireblade to protean whitelist https://forum.vore-station.net/viewtopic.php?f=46&t=1988 --- config/alienwhitelist.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt index 8f38b1ae70..ac0a80f2d3 100644 --- a/config/alienwhitelist.txt +++ b/config/alienwhitelist.txt @@ -92,6 +92,7 @@ terrestris - Common Skrellian terrestris - High Skrellian timidvi - Diona thedavestdave - Protean +trifireblade - Protean trikonei - Protean umbrenos - Black-Eyed Shadekin varonis - Xenochimera From 274d30e2c5c8e0dfe320fcf4b0b00245d3a5fcaf Mon Sep 17 00:00:00 2001 From: Aronai Sieyes Date: Tue, 20 Jul 2021 21:23:18 -0400 Subject: [PATCH 23/23] These might be bad --- code/controllers/subsystems/assets.dm | 8 ++++---- code/modules/food/kitchen/microwave.dm | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/code/controllers/subsystems/assets.dm b/code/controllers/subsystems/assets.dm index 00d1693c06..75c23ff10f 100644 --- a/code/controllers/subsystems/assets.dm +++ b/code/controllers/subsystems/assets.dm @@ -6,10 +6,10 @@ SUBSYSTEM_DEF(assets) var/list/preload = list() /datum/controller/subsystem/assets/Initialize(timeofday) - for(var/datum/asset/A as anything in typesof(/datum/asset)) - if (type != initial(A._abstract)) - get_asset_datum(type) - + for(var/typepath in typesof(/datum/asset)) + var/datum/asset/A = typepath + if (typepath != initial(A._abstract)) + get_asset_datum(typepath) preload = cache.Copy() //don't preload assets generated during the round diff --git a/code/modules/food/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm index b781c4473b..aa04d7499e 100644 --- a/code/modules/food/kitchen/microwave.dm +++ b/code/modules/food/kitchen/microwave.dm @@ -43,9 +43,9 @@ if(!available_recipes) available_recipes = new - for(var/datum/recipe/type as anything in subtypesof(/datum/recipe)) - if((initial(type.appliance) & appliancetype)) - available_recipes += new type + for(var/datum/recipe/typepath as anything in subtypesof(/datum/recipe)) + if((initial(typepath.appliance) & appliancetype)) + available_recipes += new typepath acceptable_items = new acceptable_reagents = new