diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 39960e46b8..7af9bf2280 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -77,7 +77,7 @@
/proc/alone_in_area(area/the_area, mob/must_be_alone, check_type = /mob/living/carbon)
var/area/our_area = get_area(the_area)
- for(var/C in GLOB.living_mob_list)
+ for(var/C in GLOB.alive_mob_list)
if(!istype(C, check_type))
continue
if(C == must_be_alone)
@@ -318,7 +318,8 @@
break
/proc/get_mob_by_key(key)
- for(var/mob/M in GLOB.mob_list)
+ for(var/i in GLOB.player_list)
+ var/mob/M = i
if(M.ckey == lowertext(key))
return M
return null
diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm
index 3622c6abbf..41ee61f780 100644
--- a/code/__HELPERS/unsorted.dm
+++ b/code/__HELPERS/unsorted.dm
@@ -232,7 +232,7 @@ Turf and target are separate in case you want to teleport some distance from a t
//Returns a list of unslaved cyborgs
/proc/active_free_borgs()
. = list()
- for(var/mob/living/silicon/robot/R in GLOB.living_mob_list)
+ for(var/mob/living/silicon/robot/R in GLOB.alive_mob_list)
if(R.connected_ai || R.shell)
continue
if(R.stat == DEAD)
@@ -244,7 +244,7 @@ Turf and target are separate in case you want to teleport some distance from a t
//Returns a list of AI's
/proc/active_ais(check_mind=0)
. = list()
- for(var/mob/living/silicon/ai/A in GLOB.living_mob_list)
+ for(var/mob/living/silicon/ai/A in GLOB.alive_mob_list)
if(A.stat == DEAD)
continue
if(A.control_disabled == 1)
@@ -920,7 +920,7 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list(
/proc/living_player_count()
var/living_player_count = 0
for(var/mob in GLOB.player_list)
- if(mob in GLOB.living_mob_list)
+ if(mob in GLOB.alive_mob_list)
living_player_count += 1
return living_player_count
@@ -1357,6 +1357,9 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
anchored = TRUE
var/ready_to_die = FALSE
+/mob/dview/Initialize() //Properly prevents this mob from gaining huds or joining any global lists
+ return
+
/mob/dview/Destroy(force = FALSE)
if(!ready_to_die)
stack_trace("ALRIGHT WHICH FUCKER TRIED TO DELETE *MY* DVIEW?")
diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm
index 644eaf1d65..a9ffde59e3 100644
--- a/code/_globalvars/lists/mobs.dm
+++ b/code/_globalvars/lists/mobs.dm
@@ -12,11 +12,13 @@ GLOBAL_LIST_EMPTY(stealthminID) //reference list with IDs that store ckeys,
GLOBAL_LIST_EMPTY(player_list) //all mobs **with clients attached**. Excludes /mob/dead/new_player
GLOBAL_LIST_EMPTY(mob_list) //all mobs, including clientless
GLOBAL_LIST_EMPTY(mob_directory) //mob_id -> mob
-GLOBAL_LIST_EMPTY(living_mob_list) //all alive mobs, including clientless. Excludes /mob/dead/new_player
+GLOBAL_LIST_EMPTY(alive_mob_list) //all alive mobs, including clientless. Excludes /mob/dead/new_player
GLOBAL_LIST_EMPTY(drones_list)
GLOBAL_LIST_EMPTY(dead_mob_list) //all dead mobs, including clientless. Excludes /mob/dead/new_player
GLOBAL_LIST_EMPTY(joined_player_list) //all clients that have joined the game at round-start or as a latejoin.
GLOBAL_LIST_EMPTY(silicon_mobs) //all silicon mobs
+GLOBAL_LIST_EMPTY(mob_living_list) //all instances of /mob/living and subtypes
+GLOBAL_LIST_EMPTY(carbon_list) //all instances of /mob/living/carbon and subtypes, notably does not contain brains or simple animals
GLOBAL_LIST_EMPTY(ai_list)
GLOBAL_LIST_EMPTY(pai_list)
GLOBAL_LIST_EMPTY(available_ai_shells)
diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm
index 93383c2c49..da2fae9882 100644
--- a/code/_onclick/hud/alert.dm
+++ b/code/_onclick/hud/alert.dm
@@ -390,7 +390,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
var/servants = 0
var/validservants = 0
var/list/textlist
- for(var/mob/living/L in GLOB.living_mob_list)
+ for(var/mob/living/L in GLOB.alive_mob_list)
if(is_servant_of_ratvar(L))
servants++
if(ishuman(L) || issilicon(L))
diff --git a/code/citadel/crew_objectives/cit_crewobjectives_science.dm b/code/citadel/crew_objectives/cit_crewobjectives_science.dm
index f04f97b174..1fcba91e46 100644
--- a/code/citadel/crew_objectives/cit_crewobjectives_science.dm
+++ b/code/citadel/crew_objectives/cit_crewobjectives_science.dm
@@ -15,7 +15,7 @@
/datum/objective/crew/cyborgs/check_completion()
var/borgcount = target_amount
- for(var/mob/living/silicon/robot/R in GLOB.living_mob_list)
+ for(var/mob/living/silicon/robot/R in GLOB.alive_mob_list)
if(!(R.stat == DEAD))
borgcount--
if(borgcount <= 0)
@@ -42,4 +42,4 @@
if(S && S.files && S.files.known_designs)
if(targetdesign in S.files.known_designs)
return TRUE
- return FALSE
\ No newline at end of file
+ return FALSE
diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm
index f87b672ae0..1e914c657d 100644
--- a/code/controllers/subsystem/job.dm
+++ b/code/controllers/subsystem/job.dm
@@ -576,7 +576,7 @@ SUBSYSTEM_DEF(job)
///////////////////////////////////
/datum/controller/subsystem/job/proc/get_living_heads()
. = list()
- for(var/mob/living/carbon/human/player in GLOB.mob_list)
+ for(var/mob/living/carbon/human/player in GLOB.alive_mob_list)
if(player.stat != DEAD && player.mind && (player.mind.assigned_role in GLOB.command_positions))
. |= player.mind
@@ -586,7 +586,8 @@ SUBSYSTEM_DEF(job)
////////////////////////////
/datum/controller/subsystem/job/proc/get_all_heads()
. = list()
- for(var/mob/player in GLOB.mob_list)
+ for(var/i in GLOB.mob_list)
+ var/mob/player = i
if(player.mind && (player.mind.assigned_role in GLOB.command_positions))
. |= player.mind
@@ -595,7 +596,7 @@ SUBSYSTEM_DEF(job)
//////////////////////////////////////////////
/datum/controller/subsystem/job/proc/get_living_sec()
. = list()
- for(var/mob/living/carbon/human/player in GLOB.mob_list)
+ for(var/mob/living/carbon/human/player in GLOB.carbon_list)
if(player.stat != DEAD && player.mind && (player.mind.assigned_role in GLOB.security_positions))
. |= player.mind
@@ -604,6 +605,6 @@ SUBSYSTEM_DEF(job)
////////////////////////////////////////
/datum/controller/subsystem/job/proc/get_all_sec()
. = list()
- for(var/mob/living/carbon/human/player in GLOB.mob_list)
+ for(var/mob/living/carbon/human/player in GLOB.carbon_list)
if(player.mind && (player.mind.assigned_role in GLOB.security_positions))
- . |= player.mind
\ No newline at end of file
+ . |= player.mind
diff --git a/code/controllers/subsystem/mobs.dm b/code/controllers/subsystem/mobs.dm
index cbe9d5c245..1311ca1589 100644
--- a/code/controllers/subsystem/mobs.dm
+++ b/code/controllers/subsystem/mobs.dm
@@ -7,13 +7,15 @@ SUBSYSTEM_DEF(mobs)
var/list/currentrun = list()
/datum/controller/subsystem/mobs/stat_entry()
- ..("P:[GLOB.mob_list.len]")
+ ..("P:[GLOB.mob_living_list.len]")
/datum/controller/subsystem/mobs/fire(resumed = 0)
var/seconds = wait * 0.1
if (!resumed)
- src.currentrun = GLOB.mob_list.Copy()
+ src.currentrun = GLOB.mob_living_list.Copy()
+ if (GLOB.overminds.len) // blob cameras need to Life()
+ src.currentrun += GLOB.overminds
//cache for sanic speed (lists are references anyways)
var/list/currentrun = src.currentrun
@@ -24,6 +26,6 @@ SUBSYSTEM_DEF(mobs)
if(M)
M.Life(seconds, times_fired)
else
- GLOB.mob_list.Remove(M)
+ GLOB.mob_living_list.Remove(M)
if (MC_TICK_CHECK)
return
diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm
index 6230bd2b3d..d310f46d2a 100644
--- a/code/controllers/subsystem/persistence.dm
+++ b/code/controllers/subsystem/persistence.dm
@@ -73,7 +73,7 @@ SUBSYSTEM_DEF(persistence)
break
/datum/controller/subsystem/persistence/proc/LoadPoly()
- for(var/mob/living/simple_animal/parrot/Poly/P in GLOB.living_mob_list)
+ for(var/mob/living/simple_animal/parrot/Poly/P in GLOB.alive_mob_list)
twitterize(P.speech_buffer, "polytalk")
break //Who's been duping the bird?!
diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm
index 08c7484c44..cbc338f995 100755
--- a/code/controllers/subsystem/ticker.dm
+++ b/code/controllers/subsystem/ticker.dm
@@ -416,7 +416,8 @@ SUBSYSTEM_DEF(ticker)
C.playtitlemusic(40)*/
//Player status report
- for(var/mob/Player in GLOB.mob_list)
+ for(var/i in GLOB.mob_list)
+ var/mob/Player = i
if(Player.mind && !isnewplayer(Player))
if(Player.stat != DEAD && !isbrain(Player))
num_survivors++
@@ -462,7 +463,8 @@ SUBSYSTEM_DEF(ticker)
CHECK_TICK
//Silicon laws report
- for (var/mob/living/silicon/ai/aiPlayer in GLOB.mob_list)
+ for (var/i in GLOB.ai_list)
+ var/mob/living/silicon/ai/aiPlayer = i
if (aiPlayer.stat != DEAD && aiPlayer.mind)
to_chat(world, "[aiPlayer.name] (Played by: [aiPlayer.mind.key])'s laws at the end of the round were:")
aiPlayer.show_laws(1)
@@ -481,7 +483,7 @@ SUBSYSTEM_DEF(ticker)
CHECK_TICK
- for (var/mob/living/silicon/robot/robo in GLOB.mob_list)
+ for (var/mob/living/silicon/robot/robo in GLOB.silicon_mobs)
if (!robo.connected_ai && robo.mind)
if (robo.stat != DEAD)
to_chat(world, "[robo.name] (Played by: [robo.mind.key]) survived as an AI-less borg! Its laws were:")
diff --git a/code/controllers/subsystem/weather.dm b/code/controllers/subsystem/weather.dm
index e66fd4ffeb..2909d1c70a 100644
--- a/code/controllers/subsystem/weather.dm
+++ b/code/controllers/subsystem/weather.dm
@@ -13,7 +13,8 @@ SUBSYSTEM_DEF(weather)
var/datum/weather/W = V
if(W.aesthetic)
continue
- for(var/mob/living/L in GLOB.mob_list)
+ for(var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
if(W.can_weather_act(L))
W.weather_act(L)
for(var/Z in eligible_zlevels)
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index 98ec542749..e41666008c 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -537,6 +537,11 @@
admin_delete(D)
href_list["datumrefresh"] = href_list["delete"]
+ else if(href_list["osay"])
+ if(!check_rights(R_FUN, 0))
+ return
+ usr.client.object_say(locate(href_list["osay"]))
+
else if(href_list["regenerateicons"])
if(!check_rights(0))
return
diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm
index 1070039f0c..bbe98ff18d 100644
--- a/code/datums/diseases/advance/advance.dm
+++ b/code/datums/diseases/advance/advance.dm
@@ -416,7 +416,7 @@
for(var/datum/disease/advance/AD in SSdisease.active_diseases)
AD.Refresh()
- for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list))
+ for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list))
if(!(H.z in GLOB.station_z_levels))
continue
if(!H.HasDisease(D))
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index bd5742ad36..04b3ee31b7 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -944,7 +944,7 @@
log_admin("[key_name(usr)] has rev'ed [current].")
else
return
-
+
if("headrev")
if(has_antag_datum(/datum/antagonist/rev))
var/datum/antagonist/rev/rev = has_antag_datum(/datum/antagonist/rev)
@@ -1046,7 +1046,7 @@
log_admin("[key_name(usr)] has de-changeling'ed [current].")
if("changeling")
var/datum/antagonist/changeling/C = make_Changling()
- to_chat(current, "Your powers are awoken. A flash of memory returns to us...we are [C.changelingID], a changeling!")
+ to_chat(current, "Our powers have awoken. A flash of memory returns to us...we are [C.changelingID], a changeling!")
message_admins("[key_name_admin(usr)] has changeling'ed [current].")
log_admin("[key_name(usr)] has changeling'ed [current].")
if("autoobjectives")
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index ff33f8e32a..17f75fc336 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -326,7 +326,8 @@ GLOBAL_LIST_EMPTY(teleportlocs)
var/obj/machinery/camera/C = item
cameras += C
- for (var/mob/living/silicon/SILICON in GLOB.player_list)
+ for (var/i in GLOB.silicon_mobs)
+ var/mob/living/silicon/SILICON = i
if(SILICON.triggerAlarm("Burglar", src, cameras, trigger))
//Cancel silicon alert after 1 minute
addtimer(CALLBACK(SILICON, /mob/living/silicon.proc/cancelAlarm,"Burglar",src,trigger), 600)
diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm
index 44775ae976..4f26563da1 100644
--- a/code/game/gamemodes/blob/overmind.dm
+++ b/code/game/gamemodes/blob/overmind.dm
@@ -79,7 +79,8 @@ GLOBAL_LIST_EMPTY(blob_nodes)
/mob/camera/blob/proc/victory()
sound_to_playing_players('sound/machines/alarm.ogg')
sleep(100)
- for(var/mob/living/L in GLOB.mob_list)
+ for(var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
var/turf/T = get_turf(L)
if(!T || !(T.z in GLOB.station_z_levels))
continue
diff --git a/code/game/gamemodes/changeling/powers/linglink.dm b/code/game/gamemodes/changeling/powers/linglink.dm
index f5143f1d04..d6ceb4edd0 100644
--- a/code/game/gamemodes/changeling/powers/linglink.dm
+++ b/code/game/gamemodes/changeling/powers/linglink.dm
@@ -48,7 +48,8 @@
if(3)
to_chat(user, "We mold the [target]'s mind like clay, granting [target.p_them()] the ability to speak in the hivemind!")
to_chat(target, "A migraine throbs behind your eyes, you hear yourself screaming - but your mouth has not opened!")
- for(var/mob/M in GLOB.mob_list)
+ for(var/mi in GLOB.mob_list)
+ var/mob/M = mi
if(M.lingcheck() == 2)
to_chat(M, "We can sense a foreign presence in the hivemind...")
target.mind.linglink = 1
diff --git a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm
index 731a8e1d7a..cbfe5d043c 100644
--- a/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm
+++ b/code/game/gamemodes/clock_cult/clock_effects/spatial_gateway.dm
@@ -162,7 +162,7 @@
var/locname = initial(A.name)
possible_targets[avoid_assoc_duplicate_keys("[locname] [O.name]", teleportnames)] = O
- for(var/mob/living/L in GLOB.living_mob_list)
+ for(var/mob/living/L in GLOB.alive_mob_list)
if(!L.stat && is_servant_of_ratvar(L) && !L.Adjacent(invoker) && (L.z <= ZLEVEL_SPACEMAX)) //People right next to the invoker can't be portaled to, for obvious reasons
possible_targets[avoid_assoc_duplicate_keys("[L.name] ([L.real_name])", teleportnames)] = L
diff --git a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm
index 16a6f3ffd7..a172f4ca41 100644
--- a/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm
+++ b/code/game/gamemodes/clock_cult/clock_scriptures/scripture_scripts.dm
@@ -322,7 +322,7 @@
to_chat(invoker, "You must not be inside an object to use this scripture!")
return FALSE
var/other_servants = 0
- for(var/mob/living/L in GLOB.living_mob_list)
+ for(var/mob/living/L in GLOB.alive_mob_list)
if(is_servant_of_ratvar(L) && !L.stat && L != invoker)
other_servants++
for(var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/O in GLOB.all_clockwork_objects)
diff --git a/code/game/gamemodes/clock_cult/clock_structures/heralds_beacon.dm b/code/game/gamemodes/clock_cult/clock_structures/heralds_beacon.dm
index a1c75ed3da..9f18ff1669 100644
--- a/code/game/gamemodes/clock_cult/clock_structures/heralds_beacon.dm
+++ b/code/game/gamemodes/clock_cult/clock_structures/heralds_beacon.dm
@@ -100,7 +100,7 @@
continue
C.update_values()
to_chat(C, C.empower_string)
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
if(is_servant_of_ratvar(H))
to_chat(H, "The beacon's power warps your body into a clockwork form! You are now immune to many hazards, and your body is more robust against damage!")
H.set_species(/datum/species/golem/clockwork/no_scrap)
diff --git a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm
index 4850b904c8..b069e55454 100644
--- a/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm
+++ b/code/game/gamemodes/clock_cult/clock_structures/ratvar_the_clockwork_justicar.dm
@@ -67,7 +67,7 @@
T.ratvar_act(TRUE)
var/dir_to_step_in = pick(GLOB.cardinals)
var/list/meals = list()
- for(var/mob/living/L in GLOB.living_mob_list) //we want to know who's alive so we don't lose and retarget a single person
+ for(var/mob/living/L in GLOB.alive_mob_list) //we want to know who's alive so we don't lose and retarget a single person
if(L.z == z && !is_servant_of_ratvar(L) && L.mind)
meals += L
if(GLOB.cult_narsie && GLOB.cult_narsie.z == z)
diff --git a/code/game/gamemodes/cult/cult_comms.dm b/code/game/gamemodes/cult/cult_comms.dm
index b8cbed5051..530b6ebb20 100644
--- a/code/game/gamemodes/cult/cult_comms.dm
+++ b/code/game/gamemodes/cult/cult_comms.dm
@@ -40,7 +40,8 @@
else if(!ishuman(user))
title = "Construct"
my_message = "[title] [findtextEx(user.name, user.real_name) ? user.name : "[user.real_name] (as [user.name])"]: [message]"
- for(var/mob/M in GLOB.mob_list)
+ for(var/i in GLOB.player_list)
+ var/mob/M = i
if(iscultist(M))
to_chat(M, my_message)
else if(M in GLOB.dead_mob_list)
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 50bde92f9e..803e73b9e0 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -217,7 +217,7 @@
if(living_antag_player && living_antag_player.mind && isliving(living_antag_player) && living_antag_player.stat != DEAD && !isnewplayer(living_antag_player) &&!isbrain(living_antag_player))
return 0 //A resource saver: once we find someone who has to die for all antags to be dead, we can just keep checking them, cycling over everyone only when we lose our mark.
- for(var/mob/Player in GLOB.living_mob_list)
+ for(var/mob/Player in GLOB.alive_mob_list)
if(Player.mind && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player) && Player.client)
if(Player.mind.special_role || LAZYLEN(Player.mind.antag_datums)) //Someone's still antaging!
living_antag_player = Player
@@ -408,16 +408,11 @@
//////////////////////////
/proc/display_roundstart_logout_report()
var/msg = "Roundstart logout report\n\n"
- for(var/mob/living/L in GLOB.mob_list)
+ for(var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
- if(L.ckey)
- var/found = 0
- for(var/client/C in GLOB.clients)
- if(C.ckey == L.ckey)
- found = 1
- break
- if(!found)
- msg += "[L.name] ([L.ckey]), the [L.job] (Disconnected)\n"
+ if(L.ckey && !GLOB.directory[L.ckey])
+ msg += "[L.name] ([L.ckey]), the [L.job] (Disconnected)\n"
if(L.ckey && L.client)
@@ -453,10 +448,8 @@
continue //Ghosted while alive
-
- for(var/mob/M in GLOB.mob_list)
- if(M.client && M.client.holder)
- to_chat(M, msg)
+ for (var/C in GLOB.admins)
+ to_chat(C, msg)
/datum/game_mode/proc/printplayer(datum/mind/ply, fleecheck)
var/text = "
[ply.key] was [ply.name] the [ply.assigned_role] and"
@@ -536,4 +529,4 @@
//By default nuke just ends the round
/datum/game_mode/proc/OnNukeExplosion(off_station)
if(off_station < 2)
- station_was_nuked = TRUE //Will end the round on next check.
\ No newline at end of file
+ station_was_nuked = TRUE //Will end the round on next check.
diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm
index 154d0f1206..9be9e59cab 100644
--- a/code/game/gamemodes/malfunction/Malf_Modules.dm
+++ b/code/game/gamemodes/malfunction/Malf_Modules.dm
@@ -375,7 +375,8 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
/obj/machinery/doomsday_device/proc/detonate(z_level = ZLEVEL_STATION_PRIMARY)
sound_to_playing_players('sound/machines/alarm.ogg')
sleep(100)
- for(var/mob/living/L in GLOB.mob_list)
+ for(var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
var/turf/T = get_turf(L)
if(!T || !(T.z in GLOB.station_z_levels))
continue
diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
index c125f7648d..e4e4205db8 100644
--- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
+++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm
@@ -654,7 +654,8 @@
/mob/living/simple_animal/hostile/swarmer/proc/swarmer_chat(msg)
var/rendered = "Swarm communication - [src] [say_quote(msg, get_spans())]"
- for(var/mob/M in GLOB.mob_list)
+ for(var/i in GLOB.mob_list)
+ var/mob/M = i
if(isswarmer(M))
to_chat(M, rendered)
if(isobserver(M))
diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm
index f422dcfcc5..ff426ab625 100644
--- a/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm
+++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer_event.dm
@@ -21,7 +21,8 @@
print_command_report(swarmer_report, announce=TRUE)
/datum/round_event/spawn_swarmer/proc/find_swarmer()
- for(var/mob/living/M in GLOB.mob_list)
- if(istype(M, /mob/living/simple_animal/hostile/swarmer) && M.client) //If there is a swarmer with an active client, we've found our swarmer
+ for(var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
+ if(istype(L, /mob/living/simple_animal/hostile/swarmer) && L.client) //If there is a swarmer with an active client, we've found our swarmer
return 1
return 0
diff --git a/code/game/gamemodes/miniantags/monkey/monkey.dm b/code/game/gamemodes/miniantags/monkey/monkey.dm
index e53313bbd3..379031dce9 100644
--- a/code/game/gamemodes/miniantags/monkey/monkey.dm
+++ b/code/game/gamemodes/miniantags/monkey/monkey.dm
@@ -76,7 +76,7 @@
return 0
var/datum/disease/D = new /datum/disease/transformation/jungle_fever() //ugly but unfortunately needed
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
if(H.mind && H.stat != DEAD)
if(H.HasDisease(D))
return 0
@@ -87,7 +87,7 @@
if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME)
return 0
var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
- for(var/mob/living/carbon/monkey/M in GLOB.living_mob_list)
+ for(var/mob/living/carbon/monkey/M in GLOB.alive_mob_list)
if (M.HasDisease(D))
if(M.onCentCom() || M.onSyndieBase())
escaped_monkeys++
diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm
index c2ce2a2d78..4fa9532b42 100644
--- a/code/game/gamemodes/revolution/revolution.dm
+++ b/code/game/gamemodes/revolution/revolution.dm
@@ -194,7 +194,7 @@
if(headrevs.len)
var/num_revs = 0
var/num_survivors = 0
- for(var/mob/living/carbon/survivor in GLOB.living_mob_list)
+ for(var/mob/living/carbon/survivor in GLOB.alive_mob_list)
if(survivor.ckey)
num_survivors++
if(survivor.mind)
diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm
index ced6ebbd35..3007ec51ba 100644
--- a/code/game/gamemodes/wizard/artefact.dm
+++ b/code/game/gamemodes/wizard/artefact.dm
@@ -288,7 +288,7 @@
possible = list()
if(!link)
return
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
if(md5(H.dna.uni_identity) in link.fingerprints)
possible |= H
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 93b2904606..23bfc72f87 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -97,11 +97,12 @@
GLOB.cameranet.addCamera(src)
emped = 0 //Resets the consecutive EMP count
addtimer(CALLBACK(src, .proc/cancelCameraAlarm), 100)
- for(var/mob/O in GLOB.mob_list)
- if (O.client && O.client.eye == src)
- O.unset_machine()
- O.reset_perspective(null)
- to_chat(O, "The screen bursts into static.")
+ for(var/i in GLOB.player_list)
+ var/mob/M = i
+ if (M.client.eye == src)
+ M.unset_machine()
+ M.reset_perspective(null)
+ to_chat(M, "The screen bursts into static.")
..()
/obj/machinery/camera/tesla_act(var/power)//EMP proof upgrade also makes it tesla immune
diff --git a/code/game/machinery/camera/motion.dm b/code/game/machinery/camera/motion.dm
index e3104c71e6..d9a93a6578 100644
--- a/code/game/machinery/camera/motion.dm
+++ b/code/game/machinery/camera/motion.dm
@@ -50,7 +50,8 @@
/obj/machinery/camera/proc/cancelAlarm()
if (detectTime == -1)
- for (var/mob/living/silicon/aiPlayer in GLOB.player_list)
+ for (var/i in GLOB.silicon_mobs)
+ var/mob/living/silicon/aiPlayer = i
if (status)
aiPlayer.cancelAlarm("Motion", get_area(src), src)
detectTime = 0
@@ -69,4 +70,4 @@
// Motion cameras outside of an "ai monitored" area will use this to detect stuff.
if (!area_motion)
if(isliving(AM))
- newTarget(AM)
\ No newline at end of file
+ newTarget(AM)
diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm
index 036b6f1f61..6a5d8eb9bc 100644
--- a/code/game/machinery/camera/tracking.dm
+++ b/code/game/machinery/camera/tracking.dm
@@ -1,172 +1,168 @@
-/mob/living/silicon/ai/proc/get_camera_list()
-
- track.cameras.Cut()
-
- if(src.stat == DEAD)
- return
-
- var/list/L = list()
- for (var/obj/machinery/camera/C in GLOB.cameranet.cameras)
- L.Add(C)
-
- camera_sort(L)
-
- var/list/T = list()
-
- for (var/obj/machinery/camera/C in L)
- var/list/tempnetwork = C.network&src.network
- if (tempnetwork.len)
- T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C
-
- track.cameras = T
- return T
-
-
-/mob/living/silicon/ai/proc/ai_camera_list(camera)
- if (!camera)
- return 0
-
- var/obj/machinery/camera/C = track.cameras[camera]
- src.eyeobj.setLoc(C)
-
- return
-
-/datum/trackable
- var/list/names = list()
- var/list/namecounts = list()
- var/list/humans = list()
- var/list/others = list()
- var/list/cameras = list()
-
-/mob/living/silicon/ai/proc/trackable_mobs()
-
- track.names.Cut()
- track.namecounts.Cut()
- track.humans.Cut()
- track.others.Cut()
-
- if(usr.stat == DEAD)
- return list()
-
- for(var/mob/living/M in GLOB.mob_list)
- if(!M.can_track(usr))
- continue
-
- // Human check
- var/human = 0
- if(ishuman(M))
- human = 1
-
- var/name = M.name
- while(name in track.names)
- track.namecounts[name]++
- name = text("[] ([])", name, track.namecounts[name])
- track.names.Add(name)
- track.namecounts[name] = 1
-
- if(human)
- track.humans[name] = M
- else
- track.others[name] = M
-
- var/list/targets = sortList(track.humans) + sortList(track.others)
-
- return targets
-
-/mob/living/silicon/ai/verb/ai_camera_track(target_name in trackable_mobs())
- set name = "track"
- set hidden = 1 //Don't display it on the verb lists. This verb exists purely so you can type "track Oldman Robustin" and follow his ass
-
- if(!target_name)
- return
-
- var/mob/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name])
-
- ai_actual_track(target)
-
-/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target)
- if(!istype(target))
- return
- var/mob/living/silicon/ai/U = usr
-
- U.cameraFollow = target
- U.tracking = 1
-
- if(!target || !target.can_track(usr))
- to_chat(U, "Target is not near any active cameras.")
- U.cameraFollow = null
- return
-
- to_chat(U, "Now tracking [target.get_visible_name()] on camera.")
-
- var/cameraticks = 0
- spawn(0)
- while(U.cameraFollow == target)
- if(U.cameraFollow == null)
- return
-
- if(!target.can_track(usr))
- U.tracking = 1
- if(!cameraticks)
- to_chat(U, "Target is not near any active cameras. Attempting to reacquire...")
- cameraticks++
- if(cameraticks > 9)
- U.cameraFollow = null
- to_chat(U, "Unable to reacquire, cancelling track...")
- tracking = 0
- return
- else
- sleep(10)
- continue
-
- else
- cameraticks = 0
- U.tracking = 0
-
- if(U.eyeobj)
- U.eyeobj.setLoc(get_turf(target))
-
- else
- view_core()
- U.cameraFollow = null
- return
-
- sleep(10)
-
-/proc/near_camera(mob/living/M)
- if (!isturf(M.loc))
- return 0
- if(issilicon(M))
- var/mob/living/silicon/S = M
- if((!QDELETED(S.builtInCamera) || !S.builtInCamera.can_use()) && !GLOB.cameranet.checkCameraVis(M))
- return 0
- else if(!GLOB.cameranet.checkCameraVis(M))
- return 0
- return 1
-
-/obj/machinery/camera/attack_ai(mob/living/silicon/ai/user)
- if (!istype(user))
- return
- if (!src.can_use())
- return
- user.eyeobj.setLoc(get_turf(src))
-
-
-/mob/living/silicon/ai/attack_ai(mob/user)
- ai_camera_list()
-
-/proc/camera_sort(list/L)
- var/obj/machinery/camera/a
- var/obj/machinery/camera/b
-
- for (var/i = L.len, i > 0, i--)
- for (var/j = 1 to i - 1)
- a = L[j]
- b = L[j + 1]
- if (a.c_tag_order != b.c_tag_order)
- if (a.c_tag_order > b.c_tag_order)
- L.Swap(j, j + 1)
- else
- if (sorttext(a.c_tag, b.c_tag) < 0)
- L.Swap(j, j + 1)
- return L
+/mob/living/silicon/ai/proc/get_camera_list()
+
+ track.cameras.Cut()
+
+ if(src.stat == DEAD)
+ return
+
+ var/list/L = list()
+ for (var/obj/machinery/camera/C in GLOB.cameranet.cameras)
+ L.Add(C)
+
+ camera_sort(L)
+
+ var/list/T = list()
+
+ for (var/obj/machinery/camera/C in L)
+ var/list/tempnetwork = C.network&src.network
+ if (tempnetwork.len)
+ T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C
+
+ track.cameras = T
+ return T
+
+
+/mob/living/silicon/ai/proc/ai_camera_list(camera)
+ if (!camera)
+ return 0
+
+ var/obj/machinery/camera/C = track.cameras[camera]
+ src.eyeobj.setLoc(C)
+
+ return
+
+/datum/trackable
+ var/list/names = list()
+ var/list/namecounts = list()
+ var/list/humans = list()
+ var/list/others = list()
+ var/list/cameras = list()
+
+/mob/living/silicon/ai/proc/trackable_mobs()
+
+ track.names.Cut()
+ track.namecounts.Cut()
+ track.humans.Cut()
+ track.others.Cut()
+
+ if(usr.stat == DEAD)
+ return list()
+
+ for(var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
+ if(!L.can_track(usr))
+ continue
+
+ var/name = L.name
+ while(name in track.names)
+ track.namecounts[name]++
+ name = text("[] ([])", name, track.namecounts[name])
+ track.names.Add(name)
+ track.namecounts[name] = 1
+
+ if(ishuman(L))
+ track.humans[name] = L
+ else
+ track.others[name] = L
+
+ var/list/targets = sortList(track.humans) + sortList(track.others)
+
+ return targets
+
+/mob/living/silicon/ai/verb/ai_camera_track(target_name in trackable_mobs())
+ set name = "track"
+ set hidden = 1 //Don't display it on the verb lists. This verb exists purely so you can type "track Oldman Robustin" and follow his ass
+
+ if(!target_name)
+ return
+
+ var/mob/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name])
+
+ ai_actual_track(target)
+
+/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target)
+ if(!istype(target))
+ return
+ var/mob/living/silicon/ai/U = usr
+
+ U.cameraFollow = target
+ U.tracking = 1
+
+ if(!target || !target.can_track(usr))
+ to_chat(U, "Target is not near any active cameras.")
+ U.cameraFollow = null
+ return
+
+ to_chat(U, "Now tracking [target.get_visible_name()] on camera.")
+
+ var/cameraticks = 0
+ spawn(0)
+ while(U.cameraFollow == target)
+ if(U.cameraFollow == null)
+ return
+
+ if(!target.can_track(usr))
+ U.tracking = 1
+ if(!cameraticks)
+ to_chat(U, "Target is not near any active cameras. Attempting to reacquire...")
+ cameraticks++
+ if(cameraticks > 9)
+ U.cameraFollow = null
+ to_chat(U, "Unable to reacquire, cancelling track...")
+ tracking = 0
+ return
+ else
+ sleep(10)
+ continue
+
+ else
+ cameraticks = 0
+ U.tracking = 0
+
+ if(U.eyeobj)
+ U.eyeobj.setLoc(get_turf(target))
+
+ else
+ view_core()
+ U.cameraFollow = null
+ return
+
+ sleep(10)
+
+/proc/near_camera(mob/living/M)
+ if (!isturf(M.loc))
+ return 0
+ if(issilicon(M))
+ var/mob/living/silicon/S = M
+ if((!QDELETED(S.builtInCamera) || !S.builtInCamera.can_use()) && !GLOB.cameranet.checkCameraVis(M))
+ return 0
+ else if(!GLOB.cameranet.checkCameraVis(M))
+ return 0
+ return 1
+
+/obj/machinery/camera/attack_ai(mob/living/silicon/ai/user)
+ if (!istype(user))
+ return
+ if (!src.can_use())
+ return
+ user.eyeobj.setLoc(get_turf(src))
+
+
+/mob/living/silicon/ai/attack_ai(mob/user)
+ ai_camera_list()
+
+/proc/camera_sort(list/L)
+ var/obj/machinery/camera/a
+ var/obj/machinery/camera/b
+
+ for (var/i = L.len, i > 0, i--)
+ for (var/j = 1 to i - 1)
+ a = L[j]
+ b = L[j + 1]
+ if (a.c_tag_order != b.c_tag_order)
+ if (a.c_tag_order > b.c_tag_order)
+ L.Swap(j, j + 1)
+ else
+ if (sorttext(a.c_tag, b.c_tag) < 0)
+ L.Swap(j, j + 1)
+ return L
diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm
index ea808171cc..c308d4335b 100644
--- a/code/game/machinery/computer/crew.dm
+++ b/code/game/machinery/computer/crew.dm
@@ -150,7 +150,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
var/pos_y
var/life_status
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
// Check if their z-level is correct and if they are wearing a uniform.
// Accept H.z==0 as well in case the mob is inside an object.
if ((H.z == 0 || H.z == z) && istype(H.w_uniform, /obj/item/clothing/under))
diff --git a/code/game/machinery/computer/medical.dm b/code/game/machinery/computer/medical.dm
index e413d204a2..9e51d9125b 100644
--- a/code/game/machinery/computer/medical.dm
+++ b/code/game/machinery/computer/medical.dm
@@ -173,7 +173,7 @@
dat += "Back"
dat += "
Medical Robots:"
var/bdat = null
- for(var/mob/living/simple_animal/bot/medbot/M in GLOB.living_mob_list)
+ for(var/mob/living/simple_animal/bot/medbot/M in GLOB.alive_mob_list)
if(M.z != src.z)
continue //only find medibots on the same z-level as the computer
var/turf/bl = get_turf(M)
diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm
index ada4610e4b..51188989f1 100644
--- a/code/game/machinery/computer/robot.dm
+++ b/code/game/machinery/computer/robot.dm
@@ -37,7 +37,7 @@
user.set_machine(src)
var/dat
var/robots = 0
- for(var/mob/living/silicon/robot/R in GLOB.mob_list)
+ for(var/mob/living/silicon/robot/R in GLOB.silicon_mobs)
if(!can_control(user, R))
continue
robots++
@@ -75,7 +75,7 @@
dat += "
"
var/drones = 0
- for(var/mob/living/simple_animal/drone/D in GLOB.mob_list)
+ for(var/mob/living/simple_animal/drone/D in GLOB.drones_list)
if(D.hacked)
continue
drones++
diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm
index 13f12c6d3f..7e73ef0c64 100644
--- a/code/game/machinery/computer/security.dm
+++ b/code/game/machinery/computer/security.dm
@@ -699,7 +699,7 @@ What a mess.*/
if("released")
active2.fields["criminal"] = "Discharged"
investigate_log("[active1.fields["name"]] has been set from [old_field] to [active2.fields["criminal"]] by [usr.name] ([usr.key]).", INVESTIGATE_RECORDS)
- for(var/mob/living/carbon/human/H in GLOB.mob_list) //thanks for forcing me to do this, whoever wrote this shitty records system
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
H.sec_hud_set_security_status()
if("Delete Record (Security) Execute")
investigate_log("[usr.name] ([usr.key]) has deleted the security records for [active1.fields["name"]].", INVESTIGATE_RECORDS)
diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm
index 45bf5ab1c8..b77e909575 100644
--- a/code/game/machinery/vending.dm
+++ b/code/game/machinery/vending.dm
@@ -1124,7 +1124,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
/obj/item/clothing/head/beanie/purple=1, /obj/item/clothing/head/beanie/yellow=1, /obj/item/clothing/head/beanie/orange=1, /obj/item/clothing/head/beanie/cyan=1, /obj/item/clothing/head/beanie/christmas=1,
/obj/item/clothing/head/beanie/striped=1, /obj/item/clothing/head/beanie/stripedred=1, /obj/item/clothing/head/beanie/stripedblue=1, /obj/item/clothing/head/beanie/stripedgreen=1,
/obj/item/clothing/suit/jacket/letterman_red=1,
- /obj/item/clothing/ears/headphones = 10)
+ /obj/item/clothing/ears/headphones = 10, /obj/item/clothing/suit/apron/purple_bartender=2, /obj/item/clothing/under/rank/bartender/purple=2)
contraband = list(/obj/item/clothing/under/syndicate/tacticool=1, /obj/item/clothing/mask/balaclava=1, /obj/item/clothing/head/ushanka=1, /obj/item/clothing/under/soviet=1, /obj/item/storage/belt/fannypack/black=2, /obj/item/clothing/suit/jacket/letterman_syndie=1, /obj/item/clothing/under/jabroni=1, /obj/item/clothing/suit/vapeshirt=1, /obj/item/clothing/under/geisha=1)
premium = list(/obj/item/clothing/under/suit_jacket/checkered=1, /obj/item/clothing/head/mailman=1, /obj/item/clothing/under/rank/mailman=1, /obj/item/clothing/suit/jacket/leather=1, /obj/item/clothing/suit/jacket/leather/overcoat=1, /obj/item/clothing/under/pants/mustangjeans=1, /obj/item/clothing/neck/necklace/dope=3, /obj/item/clothing/suit/jacket/letterman_nanotrasen=1)
refill_canister = /obj/item/vending_refill/clothing
diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm
index b5916753ed..c18c60c5f3 100644
--- a/code/game/objects/effects/landmarks.dm
+++ b/code/game/objects/effects/landmarks.dm
@@ -178,21 +178,18 @@
GLOB.nukeop_leader_start += loc
return INITIALIZE_HINT_QDEL
+// Must be immediate because players will
+// join before SSatom initializes everything.
+INITIALIZE_IMMEDIATE(/obj/effect/landmark/start/new_player)
+
/obj/effect/landmark/start/new_player
name = "New Player"
-// Must be on New() rather than Initialize, because players will
-// join before SSatom initializes everything.
-/obj/effect/landmark/start/new_player/New(loc)
+/obj/effect/landmark/start/new_player/Initialize()
..()
GLOB.newplayer_start += loc
-
-/obj/effect/landmark/start/new_player/Initialize(mapload)
- ..()
return INITIALIZE_HINT_QDEL
-
-
/obj/effect/landmark/latejoin
name = "JoinLate"
diff --git a/code/game/objects/effects/manifest.dm b/code/game/objects/effects/manifest.dm
index 96f8c26707..2082f2b495 100644
--- a/code/game/objects/effects/manifest.dm
+++ b/code/game/objects/effects/manifest.dm
@@ -1,17 +1,17 @@
-/obj/effect/manifest
- name = "manifest"
- icon = 'icons/mob/screen_gen.dmi'
- icon_state = "x"
-
-/obj/effect/manifest/New()
- src.invisibility = INVISIBILITY_ABSTRACT
-
-/obj/effect/manifest/proc/manifest()
- var/dat = "Crew Manifest:
"
- for(var/mob/living/carbon/human/M in GLOB.mob_list)
- dat += text(" [] - []
", M.name, M.get_assignment())
- var/obj/item/paper/P = new /obj/item/paper( src.loc )
- P.info = dat
- P.name = "paper- 'Crew Manifest'"
- //SN src = null
- qdel(src)
+/obj/effect/manifest
+ name = "manifest"
+ icon = 'icons/mob/screen_gen.dmi'
+ icon_state = "x"
+
+/obj/effect/manifest/New()
+ src.invisibility = INVISIBILITY_ABSTRACT
+
+/obj/effect/manifest/proc/manifest()
+ var/dat = "Crew Manifest:
"
+ for(var/mob/living/carbon/human/M in GLOB.carbon_list)
+ dat += text(" [] - []
", M.name, M.get_assignment())
+ var/obj/item/paper/P = new /obj/item/paper( src.loc )
+ P.info = dat
+ P.name = "paper- 'Crew Manifest'"
+ //SN src = null
+ qdel(src)
diff --git a/code/game/objects/items/devices/PDA/cart.dm b/code/game/objects/items/devices/PDA/cart.dm
index d2156beec6..1e2d00706f 100644
--- a/code/game/objects/items/devices/PDA/cart.dm
+++ b/code/game/objects/items/devices/PDA/cart.dm
@@ -505,7 +505,7 @@ Code:
menu += "
Located Cleanbots:
"
ldat = null
- for (var/mob/living/simple_animal/bot/cleanbot/B in GLOB.living_mob_list)
+ for (var/mob/living/simple_animal/bot/cleanbot/B in GLOB.alive_mob_list)
var/turf/bl = get_turf(B)
if(bl)
@@ -715,7 +715,7 @@ Code:
var/turf/current_turf = get_turf(src)
var/zlevel = current_turf.z
var/botcount = 0
- for(Bot in GLOB.living_mob_list) //Git da botz
+ for(Bot in GLOB.alive_mob_list) //Git da botz
if(!Bot.on || Bot.z != zlevel || Bot.remote_disabled || !(bot_access_flags & Bot.bot_type)) //Only non-emagged bots on the same Z-level are detected!
continue //Also, the PDA must have access to the bot type.
menu += "[Bot.name] ([Bot.get_mode()])
"
diff --git a/code/game/objects/items/pinpointer.dm b/code/game/objects/items/pinpointer.dm
index 28488a231f..d291a7ca7d 100644
--- a/code/game/objects/items/pinpointer.dm
+++ b/code/game/objects/items/pinpointer.dm
@@ -103,7 +103,7 @@
var/list/name_counts = list()
var/list/names = list()
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
if(!trackable(H))
continue
@@ -147,4 +147,3 @@
return PROCESS_KILL
scan_for_target()
update_icon()
-
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index 6e865ff3bd..18ad4eb769 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -201,6 +201,7 @@
/obj/vv_get_dropdown()
. = ..()
.["Delete all of type"] = "?_src_=vars;[HrefToken()];delall=[REF(src)]"
+ .["Osay"] = "?_src_=vars;[HrefToken()];osay[REF(src)]"
/obj/examine(mob/user)
..()
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 3ee99900de..230a77b223 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -701,7 +701,8 @@
/datum/admins/proc/output_ai_laws()
var/ai_number = 0
- for(var/mob/living/silicon/S in GLOB.mob_list)
+ for(var/i in GLOB.silicon_mobs)
+ var/mob/living/silicon/S = i
ai_number++
if(isAI(S))
to_chat(usr, "AI [key_name(S, usr)]'s laws:")
diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm
index 4bcdb91925..79b6554fec 100644
--- a/code/modules/admin/secrets.dm
+++ b/code/modules/admin/secrets.dm
@@ -253,7 +253,7 @@
return
var/dat = "Showing DNA from blood.
"
dat += "| Name | DNA | Blood Type |
"
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
if(H.ckey)
dat += "| [H] | [H.dna.unique_enzymes] | [H.dna.blood_type] |
"
dat += "
"
@@ -263,7 +263,7 @@
return
var/dat = "Showing Fingerprints.
"
dat += "| Name | Fingerprints |
"
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
if(H.ckey)
dat += "| [H] | [md5(H.dna.uni_identity)] |
"
dat += "
"
@@ -273,7 +273,7 @@
if(!check_rights(R_FUN))
return
SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Monkeyize All Humans")
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
spawn(0)
H.monkeyize()
ok = 1
@@ -287,7 +287,7 @@
log_admin("[key_name(usr)] turned all humans into [result]", 1)
message_admins("\blue [key_name_admin(usr)] turned all humans into [result]")
var/newtype = GLOB.species_list[result]
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
H.set_species(newtype)
if("tripleAI")
@@ -380,7 +380,7 @@
return
SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Chinese Cartoons")
message_admins("[key_name_admin(usr)] made everything kawaii.")
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
SEND_SOUND(H, sound('sound/ai/animes.ogg'))
if(H.dna.species.id == "human")
@@ -505,7 +505,7 @@
if(!check_rights(R_FUN))
return
SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Dwarf Beards")
- for(var/mob/living/carbon/human/B in GLOB.mob_list)
+ for(var/mob/living/carbon/human/B in GLOB.carbon_list)
B.facial_hair_style = "Dward Beard"
B.update_hair()
message_admins("[key_name_admin(usr)] activated dorf mode")
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 9abefefc3f..5b9fc0f499 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -741,7 +741,7 @@ GLOBAL_PROTECT(LastAdminCalledProc)
if("Mobs")
to_chat(usr, jointext(GLOB.mob_list,","))
if("Living Mobs")
- to_chat(usr, jointext(GLOB.living_mob_list,","))
+ to_chat(usr, jointext(GLOB.alive_mob_list,","))
if("Dead Mobs")
to_chat(usr, jointext(GLOB.dead_mob_list,","))
if("Clients")
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index 96f49ab8c6..e911350a95 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -1006,7 +1006,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
if(confirm != "Yes")
return
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
new /obj/item/organ/zombie_infection(H)
message_admins("[key_name_admin(usr)] added a latent zombie infection to all humans.")
@@ -1043,7 +1043,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
if(confirm != "Yes")
return
- var/list/mobs = shuffle(GLOB.living_mob_list.Copy()) // might change while iterating
+ var/list/mobs = shuffle(GLOB.alive_mob_list.Copy()) // might change while iterating
var/who_did_it = key_name_admin(usr)
message_admins("[key_name_admin(usr)] started polymorphed all living mobs.")
diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm
index dc5cc63ec3..3031936d43 100644
--- a/code/modules/awaymissions/mission_code/wildwest.dm
+++ b/code/modules/awaymissions/mission_code/wildwest.dm
@@ -32,7 +32,7 @@
////////// wildwest papers
-
+
/obj/item/paper/fluff/awaymissions/wildwest/grinder
info = "meat grinder requires sacri"
@@ -124,7 +124,7 @@
if("Peace")
to_chat(user, "Whatever alien sentience that the Wish Granter possesses is satisfied with your wish. There is a distant wailing as the last of the Faithless begin to die, then silence.")
to_chat(user, "You feel as if you just narrowly avoided a terrible fate...")
- for(var/mob/living/simple_animal/hostile/faithless/F in GLOB.mob_list)
+ for(var/mob/living/simple_animal/hostile/faithless/F in GLOB.mob_living_list)
F.death()
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 8edf1e4ee2..1f8c37fe6d 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -80,6 +80,12 @@
item_state = "overalls"
body_parts_covered = CHEST|GROIN|LEGS
+/obj/item/clothing/suit/apron/purple_bartender
+ name = "purple bartender apron"
+ desc = "A fancy purple apron for a stylish person."
+ icon_state = "purplebartenderapron"
+ item_state = "purplebartenderapron"
+ body_parts_covered = CHEST|GROIN|LEGS
/obj/item/clothing/suit/syndicatefake
name = "black and red space suit replica"
diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm
index 5210034af9..a9542c90e0 100644
--- a/code/modules/clothing/under/jobs/civilian.dm
+++ b/code/modules/clothing/under/jobs/civilian.dm
@@ -8,6 +8,13 @@
item_color = "barman"
alt_covers_chest = 1
+/obj/item/clothing/under/rank/bartender/purple
+ desc = "It looks like it has lots of flair!"
+ name = "purple bartender's uniform"
+ icon_state = "purplebartender"
+ item_state = "purplebartender"
+ alt_covers_chest = 1
+
/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define.
desc = "It's a blue jumpsuit with some gold markings denoting the rank of \"Captain\"."
name = "captain's jumpsuit"
diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm
index 30efcc9751..eb7625e08c 100644
--- a/code/modules/events/disease_outbreak.dm
+++ b/code/modules/events/disease_outbreak.dm
@@ -21,7 +21,7 @@
if(!virus_type)
virus_type = pick(/datum/disease/dnaspread, /datum/disease/advance/flu, /datum/disease/advance/cold, /datum/disease/brainrot, /datum/disease/magnitis)
- for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list))
+ for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list))
var/turf/T = get_turf(H)
if(!T)
continue
diff --git a/code/modules/events/holiday/halloween.dm b/code/modules/events/holiday/halloween.dm
index 48328028b7..f6144b412d 100644
--- a/code/modules/events/holiday/halloween.dm
+++ b/code/modules/events/holiday/halloween.dm
@@ -8,14 +8,14 @@
/datum/round_event/spooky/start()
..()
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
var/obj/item/storage/backpack/b = locate() in H.contents
if(b)
new /obj/item/storage/spooky(b)
- for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_list)
+ for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list)
Ian.place_on_head(new /obj/item/bedsheet(Ian))
- for(var/mob/living/simple_animal/parrot/Poly/Poly in GLOB.mob_list)
+ for(var/mob/living/simple_animal/parrot/Poly/Poly in GLOB.mob_living_list)
new /mob/living/simple_animal/parrot/Poly/ghost(Poly.loc)
qdel(Poly)
diff --git a/code/modules/events/holiday/vday.dm b/code/modules/events/holiday/vday.dm
index 52ba826101..41ff90407d 100644
--- a/code/modules/events/holiday/vday.dm
+++ b/code/modules/events/holiday/vday.dm
@@ -14,7 +14,7 @@
/datum/round_event/valentines/start()
..()
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
H.put_in_hands(new /obj/item/valentine)
var/obj/item/storage/backpack/b = locate() in H.contents
new /obj/item/reagent_containers/food/snacks/candyheart(b)
diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm
index 412616f800..2f5618714d 100644
--- a/code/modules/events/holiday/xmas.dm
+++ b/code/modules/events/holiday/xmas.dm
@@ -30,7 +30,7 @@
for(var/turf/open/floor/T in orange(1,xmas))
for(var/i=1,i<=rand(1,5),i++)
new /obj/item/a_gift(T)
- for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_list)
+ for(var/mob/living/simple_animal/pet/dog/corgi/Ian/Ian in GLOB.mob_living_list)
Ian.place_on_head(new /obj/item/clothing/head/helmet/space/santahat(Ian))
for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines)
Monitor.icon_state = "entertainment_xmas"
diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm
index 2bd64f4760..3b55a794f1 100644
--- a/code/modules/events/ion_storm.dm
+++ b/code/modules/events/ion_storm.dm
@@ -32,7 +32,7 @@
/datum/round_event/ion_storm/start()
//AI laws
- for(var/mob/living/silicon/ai/M in GLOB.living_mob_list)
+ for(var/mob/living/silicon/ai/M in GLOB.alive_mob_list)
M.laws_sanity_check()
if(M.stat != DEAD && M.see_in_dark != 0)
if(prob(replaceLawsetChance))
@@ -55,7 +55,7 @@
M.post_lawchange()
if(botEmagChance)
- for(var/mob/living/simple_animal/bot/bot in GLOB.living_mob_list)
+ for(var/mob/living/simple_animal/bot/bot in GLOB.alive_mob_list)
if(prob(botEmagChance))
bot.emag_act()
diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm
index 09ef6a2b01..88fe218a22 100644
--- a/code/modules/events/mass_hallucination.dm
+++ b/code/modules/events/mass_hallucination.dm
@@ -9,5 +9,5 @@
fakeable = FALSE
/datum/round_event/mass_hallucination/start()
- for(var/mob/living/carbon/C in GLOB.living_mob_list)
+ for(var/mob/living/carbon/C in GLOB.alive_mob_list)
C.hallucination += rand(20, 50)
diff --git a/code/modules/events/sentience.dm b/code/modules/events/sentience.dm
index 8f1196b3de..bd08743aaf 100644
--- a/code/modules/events/sentience.dm
+++ b/code/modules/events/sentience.dm
@@ -28,7 +28,7 @@
// find our chosen mob to breathe life into
// Mobs have to be simple animals, mindless and on station
var/list/potential = list()
- for(var/mob/living/simple_animal/L in GLOB.living_mob_list)
+ for(var/mob/living/simple_animal/L in GLOB.alive_mob_list)
var/turf/T = get_turf(L)
if(!(T.z in GLOB.station_z_levels))
continue
diff --git a/code/modules/events/spontaneous_appendicitis.dm b/code/modules/events/spontaneous_appendicitis.dm
index c4a37165ad..46bb254703 100644
--- a/code/modules/events/spontaneous_appendicitis.dm
+++ b/code/modules/events/spontaneous_appendicitis.dm
@@ -10,7 +10,7 @@
fakeable = FALSE
/datum/round_event/spontaneous_appendicitis/start()
- for(var/mob/living/carbon/human/H in shuffle(GLOB.living_mob_list))
+ for(var/mob/living/carbon/human/H in shuffle(GLOB.alive_mob_list))
if(!H.client)
continue
if(H.stat == DEAD)
diff --git a/code/modules/events/wizard/aid.dm b/code/modules/events/wizard/aid.dm
index 37ab62161d..e00e7da4be 100644
--- a/code/modules/events/wizard/aid.dm
+++ b/code/modules/events/wizard/aid.dm
@@ -9,7 +9,8 @@
/datum/round_event/wizard/robelesscasting/start()
- for(var/mob/living/L in GLOB.mob_list) //Hey if a corgi has magic missle he should get the same benifit as anyone
+ for(var/i in GLOB.mob_living_list) //Hey if a corgi has magic missle he should get the same benifit as anyone
+ var/mob/living/L = i
if(L.mind && L.mind.spell_list.len != 0)
var/spell_improved = FALSE
for(var/obj/effect/proc_holder/spell/S in L.mind.spell_list)
@@ -29,7 +30,8 @@
earliest_start = 0
/datum/round_event/wizard/improvedcasting/start()
- for(var/mob/living/L in GLOB.mob_list)
+ for(var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
if(L.mind && L.mind.spell_list.len != 0)
for(var/obj/effect/proc_holder/spell/S in L.mind.spell_list)
S.name = initial(S.name)
diff --git a/code/modules/events/wizard/curseditems.dm b/code/modules/events/wizard/curseditems.dm
index 30a4377839..121a0e5083 100644
--- a/code/modules/events/wizard/curseditems.dm
+++ b/code/modules/events/wizard/curseditems.dm
@@ -37,7 +37,7 @@
ruins_spaceworthiness = 1
ruins_wizard_loadout = 1
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
if(ruins_spaceworthiness && !(H.z in GLOB.station_z_levels) || isspaceturf(H.loc) || isplasmaman(H))
continue //#savetheminers
if(ruins_wizard_loadout && iswizard(H))
@@ -54,7 +54,7 @@
I.flags_1 |= NODROP_1
I.name = "cursed " + I.name
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(0, H.loc)
smoke.start()
diff --git a/code/modules/events/wizard/departmentrevolt.dm b/code/modules/events/wizard/departmentrevolt.dm
index a22913038f..618c746a65 100644
--- a/code/modules/events/wizard/departmentrevolt.dm
+++ b/code/modules/events/wizard/departmentrevolt.dm
@@ -35,7 +35,7 @@
nation += pick("stan", "topia", "land", "nia", "ca", "tova", "dor", "ador", "tia", "sia", "ano", "tica", "tide", "cis", "marea", "co", "taoide", "slavia", "stotzka")
- for(var/mob/living/carbon/human/H in GLOB.mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list)
if(H.mind)
var/datum/mind/M = H.mind
if(M.assigned_role && !(M in SSticker.mode.traitors))
diff --git a/code/modules/events/wizard/greentext.dm b/code/modules/events/wizard/greentext.dm
index cde451405c..6ee000249b 100644
--- a/code/modules/events/wizard/greentext.dm
+++ b/code/modules/events/wizard/greentext.dm
@@ -83,7 +83,8 @@
. = ..()
GLOB.poi_list.Remove(src)
- for(var/mob/M in GLOB.mob_list)
+ for(var/i in GLOB.player_list)
+ var/mob/M = i
var/message = "A dark temptation has passed from this world"
if(M in color_altered_mobs)
message += " and you're finally able to forgive yourself"
diff --git a/code/modules/events/wizard/invincible.dm b/code/modules/events/wizard/invincible.dm
index adb0a107b2..ff5d574541 100644
--- a/code/modules/events/wizard/invincible.dm
+++ b/code/modules/events/wizard/invincible.dm
@@ -7,6 +7,6 @@
/datum/round_event/wizard/invincible/start()
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
H.reagents.add_reagent("adminordrazine", 40) //100 ticks of absolute invinciblity (barring gibs)
to_chat(H, "You feel invincible, nothing can hurt you!")
\ No newline at end of file
diff --git a/code/modules/events/wizard/petsplosion.dm b/code/modules/events/wizard/petsplosion.dm
index 5654cbfe04..3459c80318 100644
--- a/code/modules/events/wizard/petsplosion.dm
+++ b/code/modules/events/wizard/petsplosion.dm
@@ -7,7 +7,7 @@
var/mobs_to_dupe = 0
/datum/round_event_control/wizard/petsplosion/preRunEvent()
- for(var/mob/living/simple_animal/F in GLOB.living_mob_list)
+ for(var/mob/living/simple_animal/F in GLOB.alive_mob_list)
if(!ishostile(F) && (F.z in GLOB.station_z_levels))
mobs_to_dupe++
if(mobs_to_dupe > 100 || !mobs_to_dupe)
@@ -23,7 +23,7 @@
/datum/round_event/wizard/petsplosion/tick()
if(activeFor >= 30 * countdown) // 0 seconds : 2 animals | 30 seconds : 4 animals | 1 minute : 8 animals
countdown += 1
- for(var/mob/living/simple_animal/F in GLOB.living_mob_list) //If you cull the heard before the next replication, things will be easier for you
+ for(var/mob/living/simple_animal/F in GLOB.alive_mob_list) //If you cull the heard before the next replication, things will be easier for you
if(!ishostile(F) && (F.z in GLOB.station_z_levels))
new F.type(F.loc)
mobs_duped++
diff --git a/code/modules/events/wizard/race.dm b/code/modules/events/wizard/race.dm
index 298d92dd3c..e054be9b08 100644
--- a/code/modules/events/wizard/race.dm
+++ b/code/modules/events/wizard/race.dm
@@ -20,7 +20,7 @@
if(prob(50))
all_the_same = 1
- for(var/mob/living/carbon/human/H in GLOB.mob_list) //yes, even the dead
+ for(var/mob/living/carbon/human/H in GLOB.carbon_list) //yes, even the dead
H.set_species(new_species)
H.real_name = new_species.random_name(H.gender,1)
H.dna.unique_enzymes = H.dna.generate_unique_enzymes()
diff --git a/code/modules/events/wizard/shuffle.dm b/code/modules/events/wizard/shuffle.dm
index 2f525d2098..d622f10c97 100644
--- a/code/modules/events/wizard/shuffle.dm
+++ b/code/modules/events/wizard/shuffle.dm
@@ -12,7 +12,7 @@
var/list/moblocs = list()
var/list/mobs = list()
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
if(!(H.z in GLOB.station_z_levels))
continue //lets not try to strand people in space or stuck in the wizards den
moblocs += H.loc
@@ -30,7 +30,7 @@
do_teleport(H, moblocs[moblocs.len])
moblocs.len -= 1
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(0, H.loc)
smoke.start()
@@ -48,7 +48,7 @@
var/list/mobnames = list()
var/list/mobs = list()
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
mobnames += H.real_name
mobs += H
@@ -64,7 +64,7 @@
H.real_name = mobnames[mobnames.len]
mobnames.len -= 1
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(0, H.loc)
smoke.start()
@@ -81,7 +81,7 @@
/datum/round_event/wizard/shuffleminds/start()
var/list/mobs = list()
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
if(H.stat || !H.mind || iswizard(H))
continue //the wizard(s) are spared on this one
mobs += H
@@ -98,7 +98,7 @@
swapper.cast(list(H), mobs[mobs.len], 1)
mobs -= mobs[mobs.len]
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
var/datum/effect_system/smoke_spread/smoke = new
smoke.set_up(0, H.loc)
smoke.start()
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index eed00add65..749b98c09a 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -460,7 +460,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list(
var/image/A = null
var/kind = force_kind ? force_kind : pick("monkey","corgi","carp","skeleton","demon","zombie")
feedback_details += "Type: [kind]"
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
if(H == target)
continue
if(skip_nearby && (H in view(target)))
@@ -538,7 +538,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list(
var/mob/living/carbon/human/clone = null
var/clone_weapon = null
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
if(H.stat || H.lying)
continue
clone = H
@@ -769,7 +769,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list(
target.client.images.Remove(speech_overlay)
else // Radio talk
var/list/humans = list()
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
humans += H
person = pick(humans)
var/message = target.compose_message(person,understood_language,pick(radio_messages),"1459",person.get_spans(),face_name = TRUE)
diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm
index c774e4574a..9eafcec71b 100644
--- a/code/modules/hydroponics/hydroponics.dm
+++ b/code/modules/hydroponics/hydroponics.dm
@@ -527,8 +527,8 @@
// You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial
if(S.has_reagent("fluorine", 1))
adjustHealth(-round(S.get_reagent_amount("fluorine") * 2))
- adjustToxic(round(S.get_reagent_amount("flourine") * 2.5))
- adjustWater(-round(S.get_reagent_amount("flourine") * 0.5))
+ adjustToxic(round(S.get_reagent_amount("fluorine") * 2.5))
+ adjustWater(-round(S.get_reagent_amount("fluorine") * 0.5))
adjustWeeds(-rand(1,4))
// You're an idiot for thinking that one of the most corrosive and deadly gasses would be beneficial
diff --git a/code/modules/integrated_electronics/passive/power.dm b/code/modules/integrated_electronics/passive/power.dm
index f99912a149..eb929f23ee 100644
--- a/code/modules/integrated_electronics/passive/power.dm
+++ b/code/modules/integrated_electronics/passive/power.dm
@@ -56,13 +56,13 @@
name = "tesla power relay"
desc = "A seemingly enigmatic device which connects to nearby APCs wirelessly and draws power from them."
w_class = WEIGHT_CLASS_SMALL
- extended_desc = "The siphon generates 250W of energy, so long as an APC is in the same room, with a cell that has energy. It will always drain \
+ extended_desc = "The siphon generates 50 W of energy, so long as an APC is in the same room, with a cell that has energy. It will always drain \
from the 'equipment' power channel."
icon_state = "power_relay"
complexity = 7
origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 3, TECH_DATA = 2)
spawn_flags = IC_SPAWN_RESEARCH
- var/power_amount = 150
+ var/power_amount = 50
//fuel cell
/obj/item/integrated_circuit/passive/power/chemical_cell
@@ -108,7 +108,7 @@
name = "large tesla power relay"
desc = "A seemingly enigmatic device which connects to nearby APCs wirelessly and draws power from them, now in industiral size!"
w_class = WEIGHT_CLASS_BULKY
- extended_desc = "The siphon generates 2 kW of energy, so long as an APC is in the same room, with a cell that has energy. It will always drain \
+ extended_desc = "The siphon generates 1 kW of energy, so long as an APC is in the same room, with a cell that has energy. It will always drain \
from the 'equipment' power channel."
icon_state = "power_relay"
complexity = 15
diff --git a/code/modules/integrated_electronics/subtypes/manipulation.dm b/code/modules/integrated_electronics/subtypes/manipulation.dm
index f8eda5982c..bd8f0d1c73 100644
--- a/code/modules/integrated_electronics/subtypes/manipulation.dm
+++ b/code/modules/integrated_electronics/subtypes/manipulation.dm
@@ -238,41 +238,6 @@
origin_tech = list(TECH_ENGINEERING = 3, TECH_DATA = 3, TECH_COMBAT = 10)
spawn_flags = null // Used for world initializing, see the #defines above.
*/
-/obj/item/integrated_circuit/manipulation/shocker
- name = "shocker circuit"
- desc = "Used to shock adjacent creatures with electricity."
- icon_state = "shocker"
- extended_desc = "The circuit accepts a reference to creature,who needs to be shocked. It can shock target on adjacent tiles. \
- Severity determines hardness of shock and it's power consumption. It's given between 0 and 60."
- w_class = WEIGHT_CLASS_TINY
- complexity = 10
- inputs = list("target" = IC_PINTYPE_REF,"severity" = IC_PINTYPE_NUMBER)
- outputs = list()
- activators = list("shock" = IC_PINTYPE_PULSE_IN)
- spawn_flags = IC_SPAWN_RESEARCH
- power_draw_per_use = 0
-
-/obj/item/integrated_circuit/manipulation/shocker/on_data_written()
- var/s = get_pin_data(IC_INPUT, 2)
- power_draw_per_use = Clamp(s,0,60)*1200/60
-
-/obj/item/integrated_circuit/manipulation/shocker/do_work()
- ..()
- var/turf/T = get_turf(src)
- var/atom/movable/AM = get_pin_data_as_type(IC_INPUT, 1, /mob/living)
- if(!istype(AM,/mob/living)) //Invalid input
- return
- var/mob/living/M = AM
- if(!M.Adjacent(T))
- return //Can't reach
- to_chat(M, "You feel a sharp shock!")
- var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread
- s.set_up(12, 1, src)
- s.start()
- var/stf=Clamp(get_pin_data(IC_INPUT, 2),0,60)
- M.Knockdown(stf)
- M.apply_effect(STUTTER, stf)
-
/obj/item/integrated_circuit/manipulation/plant_module
name = "plant manipulation module"
desc = "Used to uproot weeds or harvest plants in trays."
@@ -440,4 +405,4 @@
var/_y = Clamp(T.y + target_y.data, 0, world.maxy)
A.forceMove(drop_location())
- A.throw_at(locate(_x, _y, T.z), round(Clamp(sqrt(target_x.data*target_x.data+target_y.data*target_y.data),0,8),1), 3)
\ No newline at end of file
+ A.throw_at(locate(_x, _y, T.z), round(Clamp(sqrt(target_x.data*target_x.data+target_y.data*target_y.data),0,8),1), 3)
diff --git a/code/modules/mob/dead/new_player/sprite_accessories.dm b/code/modules/mob/dead/new_player/sprite_accessories.dm
index e92f4306d9..674f44bcd2 100644
--- a/code/modules/mob/dead/new_player/sprite_accessories.dm
+++ b/code/modules/mob/dead/new_player/sprite_accessories.dm
@@ -480,6 +480,10 @@
name = "Long Hair 2"
icon_state = "hair_long2"
+/datum/sprite_accessory/hair/long3
+ name = "Long Hair 3"
+ icon_state = "hair_long3"
+
/datum/sprite_accessory/hair/pixie
name = "Pixie Cut"
icon_state = "hair_pixie"
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index cf950af86e..ca6b504294 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -566,7 +566,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set desc= "Take over the body of a mindless creature!"
var/list/possessible = list()
- for(var/mob/living/L in GLOB.living_mob_list)
+ for(var/mob/living/L in GLOB.alive_mob_list)
if(!(L in GLOB.player_list) && !L.mind)
possessible += L
diff --git a/code/modules/mob/living/brain/MMI.dm b/code/modules/mob/living/brain/MMI.dm
index 5be7b507f1..0ee21336d4 100644
--- a/code/modules/mob/living/brain/MMI.dm
+++ b/code/modules/mob/living/brain/MMI.dm
@@ -63,7 +63,7 @@
if(!newbrain.damaged_brain) // the brain organ hasn't been beaten to death.
brainmob.stat = CONSCIOUS //we manually revive the brain mob
GLOB.dead_mob_list -= brainmob
- GLOB.living_mob_list += brainmob
+ GLOB.alive_mob_list += brainmob
brainmob.reset_perspective()
brain = newbrain
@@ -95,7 +95,7 @@
brainmob.stat = DEAD
brainmob.emp_damage = 0
brainmob.reset_perspective() //so the brainmob follows the brain organ instead of the mmi. And to update our vision
- GLOB.living_mob_list -= brainmob //Get outta here
+ GLOB.alive_mob_list -= brainmob //Get outta here
GLOB.dead_mob_list += brainmob
brain.brainmob = brainmob //Set the brain to use the brainmob
brainmob = null //Set mmi brainmob var to null
diff --git a/code/modules/mob/living/brain/posibrain.dm b/code/modules/mob/living/brain/posibrain.dm
index 90f42a9dda..3bf0525996 100644
--- a/code/modules/mob/living/brain/posibrain.dm
+++ b/code/modules/mob/living/brain/posibrain.dm
@@ -126,7 +126,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
brainmob.mind.assigned_role = new_role
brainmob.stat = CONSCIOUS
GLOB.dead_mob_list -= brainmob
- GLOB.living_mob_list += brainmob
+ GLOB.alive_mob_list += brainmob
visible_message(new_mob_message)
check_success()
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index 170cf57d95..557137b24d 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -110,11 +110,12 @@ Des: Gives the client of the alien an image on each infected mob.
----------------------------------------*/
/mob/living/carbon/alien/proc/AddInfectionImages()
if (client)
- for (var/mob/living/C in GLOB.mob_list)
- if(C.status_flags & XENO_HOST)
- var/obj/item/organ/body_egg/alien_embryo/A = C.getorgan(/obj/item/organ/body_egg/alien_embryo)
+ for (var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
+ if(L.status_flags & XENO_HOST)
+ var/obj/item/organ/body_egg/alien_embryo/A = L.getorgan(/obj/item/organ/body_egg/alien_embryo)
if(A)
- var/I = image('icons/mob/alien.dmi', loc = C, icon_state = "infected[A.stage]")
+ var/I = image('icons/mob/alien.dmi', loc = L, icon_state = "infected[A.stage]")
client.images += I
return
diff --git a/code/modules/mob/living/carbon/alien/humanoid/death.dm b/code/modules/mob/living/carbon/alien/humanoid/death.dm
index 0587433b80..5d85ace4a6 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/death.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/death.dm
@@ -1,23 +1,23 @@
-/mob/living/carbon/alien/humanoid/death(gibbed)
- if(stat == DEAD)
- return
-
- . = ..()
-
- update_canmove()
- update_icons()
- status_flags |= CANPUSH
-
-//When the alien queen dies, all others must pay the price for letting her die.
-/mob/living/carbon/alien/humanoid/royal/queen/death(gibbed)
- if(stat == DEAD)
- return
-
- for(var/mob/living/carbon/C in GLOB.living_mob_list)
- if(C == src) //Make sure not to proc it on ourselves.
- continue
- var/obj/item/organ/alien/hivenode/node = C.getorgan(/obj/item/organ/alien/hivenode)
- if(istype(node)) // just in case someone would ever add a diffirent node to hivenode slot
- node.queen_death()
-
- return ..()
\ No newline at end of file
+/mob/living/carbon/alien/humanoid/death(gibbed)
+ if(stat == DEAD)
+ return
+
+ . = ..()
+
+ update_canmove()
+ update_icons()
+ status_flags |= CANPUSH
+
+//When the alien queen dies, all others must pay the price for letting her die.
+/mob/living/carbon/alien/humanoid/royal/queen/death(gibbed)
+ if(stat == DEAD)
+ return
+
+ for(var/mob/living/carbon/C in GLOB.alive_mob_list)
+ if(C == src) //Make sure not to proc it on ourselves.
+ continue
+ var/obj/item/organ/alien/hivenode/node = C.getorgan(/obj/item/organ/alien/hivenode)
+ if(istype(node)) // just in case someone would ever add a diffirent node to hivenode slot
+ node.queen_death()
+
+ return ..()
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index d9ce6b904d..fdca497bc3 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -111,7 +111,7 @@
//For alien evolution/promotion/queen finder procs. Checks for an active alien of that type
/proc/get_alien_type(var/alienpath)
- for(var/mob/living/carbon/alien/humanoid/A in GLOB.living_mob_list)
+ for(var/mob/living/carbon/alien/humanoid/A in GLOB.alive_mob_list)
if(!istype(A, alienpath))
continue
if(!A.key || A.stat == DEAD) //Only living aliens with a ckey are valid.
diff --git a/code/modules/mob/living/carbon/alien/humanoid/queen.dm b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
index 51ab4bdde8..4f79ed7d25 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/queen.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/queen.dm
@@ -46,7 +46,7 @@
/mob/living/carbon/alien/humanoid/royal/queen/Initialize()
//there should only be one queen
- for(var/mob/living/carbon/alien/humanoid/royal/queen/Q in GLOB.living_mob_list)
+ for(var/mob/living/carbon/alien/humanoid/royal/queen/Q in GLOB.carbon_list)
if(Q == src)
continue
if(Q.stat == DEAD)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 95a134d38f..ff815776f5 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -2,9 +2,10 @@
blood_volume = BLOOD_VOLUME_NORMAL
/mob/living/carbon/Initialize()
+ . = ..()
create_reagents(1000)
update_body_parts() //to update the carbon's new bodyparts appearance
- ..()
+ GLOB.carbon_list += src
/mob/living/carbon/Destroy()
//This must be done first, so the mob ghosts correctly before DNA etc is nulled
@@ -16,6 +17,7 @@
QDEL_LIST(implants)
remove_from_all_data_huds()
QDEL_NULL(dna)
+ GLOB.carbon_list -= src
/mob/living/carbon/relaymove(mob/user, direction)
if(user in src.stomach_contents)
diff --git a/code/modules/mob/living/death.dm b/code/modules/mob/living/death.dm
index 5a3d10ac12..5f50b7adee 100644
--- a/code/modules/mob/living/death.dm
+++ b/code/modules/mob/living/death.dm
@@ -57,7 +57,7 @@
deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE)
if(mind)
mind.store_memory("Time of death: [tod]", 0)
- GLOB.living_mob_list -= src
+ GLOB.alive_mob_list -= src
if(!gibbed)
GLOB.dead_mob_list += src
set_drugginess(0)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 589ebb0385..5abe664328 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -16,6 +16,7 @@
var/datum/atom_hud/data/human/medical/advanced/medhud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
medhud.add_to_hud(src)
faction += "[REF(src)]"
+ GLOB.mob_living_list += src
/mob/living/prepare_huds()
@@ -47,6 +48,7 @@
qdel(I)
staticOverlays.len = 0
remove_from_all_data_huds()
+ GLOB.mob_living_list -= src
return ..()
@@ -368,7 +370,7 @@
fully_heal(admin_revive)
if(stat == DEAD && can_be_revived()) //in some cases you can't revive (e.g. no brain)
GLOB.dead_mob_list -= src
- GLOB.living_mob_list += src
+ GLOB.alive_mob_list += src
suiciding = 0
stat = UNCONSCIOUS //the mob starts unconscious,
blind_eyes(1)
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 4068d3c2e9..36bd1893e2 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -404,14 +404,14 @@
if(call_bot_cooldown > world.time)
to_chat(src, "Error: Your last call bot command is still processing, please wait for the bot to finish calculating a route.")
return
- Bot = locate(href_list["callbot"]) in GLOB.living_mob_list
+ Bot = locate(href_list["callbot"]) in GLOB.alive_mob_list
if(!Bot || Bot.remote_disabled || src.control_disabled)
return //True if there is no bot found, the bot is manually emagged, or the AI is carded with wireless off.
waypoint_mode = 1
to_chat(src, "Set your waypoint by clicking on a valid location free of obstructions.")
return
if(href_list["interface"]) //Remotely connect to a bot!
- Bot = locate(href_list["interface"]) in GLOB.living_mob_list
+ Bot = locate(href_list["interface"]) in GLOB.alive_mob_list
if(!Bot || Bot.remote_disabled || src.control_disabled)
return
Bot.attack_ai(src)
@@ -468,7 +468,7 @@
d += "Query network status
"
d += "Name | Status | Location | Control |
"
- for (Bot in GLOB.living_mob_list)
+ for (Bot in GLOB.alive_mob_list)
if(Bot.z == ai_Zlevel && !Bot.remote_disabled) //Only non-emagged bots on the same Z-level are detected!
bot_area = get_area(Bot)
var/bot_mode = Bot.get_mode()
diff --git a/code/modules/mob/living/silicon/pai/death.dm b/code/modules/mob/living/silicon/pai/death.dm
index 0526db2a78..a75089ed68 100644
--- a/code/modules/mob/living/silicon/pai/death.dm
+++ b/code/modules/mob/living/silicon/pai/death.dm
@@ -9,6 +9,6 @@
clear_fullscreens()
//New pAI's get a brand new mind to prevent meta stuff from their previous life. This new mind causes problems down the line if it's not deleted here.
- GLOB.living_mob_list -= src
+ GLOB.alive_mob_list -= src
ghostize()
qdel(src)
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 48e2a52801..72dc341276 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -172,7 +172,7 @@
if(mmi.brainmob.stat == DEAD)
mmi.brainmob.stat = CONSCIOUS
GLOB.dead_mob_list -= mmi.brainmob
- GLOB.living_mob_list += mmi.brainmob
+ GLOB.alive_mob_list += mmi.brainmob
mind.transfer_to(mmi.brainmob)
mmi.update_icon()
else
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/say.dm b/code/modules/mob/living/simple_animal/friendly/drone/say.dm
index bbf3fdc63f..fb0c0c0614 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/say.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/say.dm
@@ -18,17 +18,19 @@
//Base proc for anything to call
/proc/_alert_drones(msg, dead_can_hear = 0, atom/source, mob/living/faction_checked_mob, exact_faction_match)
- for(var/W in GLOB.mob_list)
- var/mob/living/simple_animal/drone/M = W
- if(istype(M) && M.stat != DEAD)
- if(faction_checked_mob)
- if(M.faction_check_mob(faction_checked_mob, exact_faction_match))
- to_chat(M, msg)
- else
- to_chat(M, msg)
- if(dead_can_hear && source && (M in GLOB.dead_mob_list))
+ if (dead_can_hear && source)
+ for (var/mob/M in GLOB.dead_mob_list)
var/link = FOLLOW_LINK(M, source)
to_chat(M, "[link] [msg]")
+ for(var/i in GLOB.drones_list)
+ var/mob/living/simple_animal/drone/D = i
+ if(istype(D) && D.stat != DEAD)
+ if(faction_checked_mob)
+ if(D.faction_check_mob(faction_checked_mob, exact_faction_match))
+ to_chat(D, msg)
+ else
+ to_chat(D, msg)
+
//Wrapper for drones to handle factions
diff --git a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
index 325b971171..8a7953a140 100644
--- a/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
+++ b/code/modules/mob/living/simple_animal/friendly/drone/visuals_icons.dm
@@ -150,7 +150,8 @@
staticOverlays.len = 0
if(seeStatic)
- for(var/mob/living/L in GLOB.mob_list)
+ for(var/i in GLOB.mob_living_list)
+ var/mob/living/L = i
if(isdrone(L))
continue
var/image/chosen
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
index 6e6237aab5..a977338008 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm
@@ -106,7 +106,7 @@ Difficulty: Hard
/mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize()
. = ..()
- for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_list)
+ for(var/mob/living/simple_animal/hostile/megafauna/bubblegum/B in GLOB.mob_living_list)
if(B != src)
return INITIALIZE_HINT_QDEL //There can be only one
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
index ee0c16a768..0380234396 100644
--- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
+++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm
@@ -129,7 +129,7 @@ Difficulty: Medium
visible_message("[src] splits in twain!")
else
var/last_legion = TRUE
- for(var/mob/living/simple_animal/hostile/megafauna/legion/other in GLOB.mob_list)
+ for(var/mob/living/simple_animal/hostile/megafauna/legion/other in GLOB.mob_living_list)
if(other != src)
last_legion = FALSE
break
diff --git a/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm b/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm
index d5d116d678..b579437796 100644
--- a/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm
+++ b/code/modules/mob/living/simple_animal/hostile/mining_mobs/necropolis_tendril.dm
@@ -50,7 +50,7 @@
#define MEDAL_PREFIX "Tendril"
/mob/living/simple_animal/hostile/spawner/lavaland/death()
var/last_tendril = TRUE
- for(var/mob/living/simple_animal/hostile/spawner/lavaland/other in GLOB.mob_list)
+ for(var/mob/living/simple_animal/hostile/spawner/lavaland/other in GLOB.mob_living_list)
if(other != src)
last_tendril = FALSE
break
diff --git a/code/modules/mob/living/simple_animal/hostile/statue.dm b/code/modules/mob/living/simple_animal/hostile/statue.dm
index 8fc327702b..e5aa946b00 100644
--- a/code/modules/mob/living/simple_animal/hostile/statue.dm
+++ b/code/modules/mob/living/simple_animal/hostile/statue.dm
@@ -185,7 +185,7 @@
range = 10
/obj/effect/proc_holder/spell/aoe_turf/blindness/cast(list/targets,mob/user = usr)
- for(var/mob/living/L in GLOB.living_mob_list)
+ for(var/mob/living/L in GLOB.alive_mob_list)
var/turf/T = get_turf(L.loc)
if(T && T in targets)
L.blind_eyes(4)
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index fed9be6d75..df80302743 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -4,7 +4,7 @@
/mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game.
GLOB.mob_list -= src
GLOB.dead_mob_list -= src
- GLOB.living_mob_list -= src
+ GLOB.alive_mob_list -= src
GLOB.all_clockwork_mobs -= src
GLOB.mob_directory -= tag
for (var/alert in alerts)
@@ -29,7 +29,7 @@
if(stat == DEAD)
GLOB.dead_mob_list += src
else
- GLOB.living_mob_list += src
+ GLOB.alive_mob_list += src
prepare_huds()
for(var/v in GLOB.active_alternate_appearances)
if(!v)
@@ -926,9 +926,9 @@
if("stat")
if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life
GLOB.dead_mob_list -= src
- GLOB.living_mob_list += src
+ GLOB.alive_mob_list += src
if((stat < DEAD) && (var_value == DEAD))//Kill he
- GLOB.living_mob_list -= src
+ GLOB.alive_mob_list -= src
GLOB.dead_mob_list += src
. = ..()
switch(var_name)
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 30bdaa6716..3dc56c936b 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -274,7 +274,8 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
/proc/findname(msg)
if(!istext(msg))
msg = "[msg]"
- for(var/mob/M in GLOB.mob_list)
+ for(var/i in GLOB.mob_list)
+ var/mob/M = i
if(M.real_name == msg)
return M
return 0
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index e19f152a75..65e6d4c0e4 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -369,7 +369,8 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
/obj/machinery/gravity_generator/main/proc/shake_everyone()
var/turf/T = get_turf(src)
var/sound/alert_sound = sound('sound/effects/alert.ogg')
- for(var/mob/M in GLOB.mob_list)
+ for(var/i in GLOB.mob_list)
+ var/mob/M = i
if(M.z != z)
continue
M.update_gravity(M.mob_has_gravity())
diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm
index 81dcd573f5..22712e970d 100644
--- a/code/modules/power/singularity/narsie.dm
+++ b/code/modules/power/singularity/narsie.dm
@@ -140,7 +140,7 @@
acquire(enemy)
return
- for(var/mob/living/carbon/food in GLOB.living_mob_list) //we don't care about constructs or cult-Ians or whatever. cult-monkeys are fair game i guess
+ for(var/mob/living/carbon/food in GLOB.alive_mob_list) //we don't care about constructs or cult-Ians or whatever. cult-monkeys are fair game i guess
var/turf/pos = get_turf(food)
if(!pos || (pos.z != z))
continue
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index 9c5dde8654..de67f837f4 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -229,7 +229,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
/obj/machinery/power/supermatter_shard/proc/explode()
var/turf/T = get_turf(src)
- for(var/mob/M in GLOB.mob_list)
+ for(var/mob/M in GLOB.player_list)
if(M.z == z)
SEND_SOUND(M, 'sound/magic/charge.ogg')
to_chat(M, "You feel reality distort for a moment...")
@@ -427,7 +427,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
radio.talk_into(src, "Warning: Critical coolant mass reached.", engineering_channel, get_spans(), get_default_language())
if(damage > explosion_point)
- for(var/mob in GLOB.living_mob_list)
+ for(var/mob in GLOB.alive_mob_list)
var/mob/living/L = mob
if(istype(L) && L.z == z)
if(ishuman(mob))
@@ -466,7 +466,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
investigate_log("Supermatter shard consumed by singularity.", INVESTIGATE_SINGULO)
message_admins("Singularity has consumed a supermatter shard and can now become stage six.")
visible_message("[src] is consumed by the singularity!")
- for(var/mob/M in GLOB.mob_list)
+ for(var/mob/M in GLOB.player_list)
if(M.z == z)
SEND_SOUND(M, 'sound/effects/supermatter.ogg') //everyone goan know bout this
to_chat(M, "A horrible screeching fills your ears, and a wave of dread washes over you...")
diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm
index 4cf711bbee..1f2a3bb472 100644
--- a/code/modules/research/experimentor.dm
+++ b/code/modules/research/experimentor.dm
@@ -86,8 +86,8 @@
/obj/machinery/r_n_d/experimentor/Initialize()
. = ..()
- trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_list
- trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in GLOB.mob_list
+ trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) in GLOB.mob_living_list
+ trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in GLOB.mob_living_list
SetTypeReactions()
/obj/machinery/r_n_d/experimentor/RefreshParts()
diff --git a/code/modules/shuttle/arrivals.dm b/code/modules/shuttle/arrivals.dm
index e88f6b204d..dd5a60ace7 100644
--- a/code/modules/shuttle/arrivals.dm
+++ b/code/modules/shuttle/arrivals.dm
@@ -117,7 +117,7 @@
return FALSE
/obj/docking_port/mobile/arrivals/proc/PersonCheck()
- for(var/M in (GLOB.living_mob_list & GLOB.player_list))
+ for(var/M in (GLOB.alive_mob_list & GLOB.player_list))
var/mob/living/L = M
if((get_area(M) in areas) && L.stat != DEAD)
return TRUE
diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm
index 6420d8610e..a8d6e7840a 100644
--- a/code/modules/surgery/organs/tongue.dm
+++ b/code/modules/surgery/organs/tongue.dm
@@ -82,7 +82,7 @@
//Hacks
var/mob/living/carbon/human/user = usr
var/rendered = "[user.name]: [message]"
- for(var/mob/living/carbon/human/H in GLOB.living_mob_list)
+ for(var/mob/living/carbon/human/H in GLOB.alive_mob_list)
var/obj/item/organ/tongue/T = H.getorganslot(ORGAN_SLOT_TONGUE)
if(!T || T.type != type)
continue
diff --git a/html/changelogs/AutoChangeLog-pr-3980.yml b/html/changelogs/AutoChangeLog-pr-3980.yml
new file mode 100644
index 0000000000..09e3ebe5ef
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3980.yml
@@ -0,0 +1,4 @@
+author: "MMMiracles"
+delete-after: True
+changes:
+ - balance: "Power regen on the regular tesla relay has been reduced to 50, from 150."
diff --git a/html/changelogs/AutoChangeLog-pr-3983.yml b/html/changelogs/AutoChangeLog-pr-3983.yml
new file mode 100644
index 0000000000..0e3a681757
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3983.yml
@@ -0,0 +1,4 @@
+author: "oranges"
+delete-after: True
+changes:
+ - rscdel: "Removed the shocker circuit"
diff --git a/html/changelogs/AutoChangeLog-pr-3988.yml b/html/changelogs/AutoChangeLog-pr-3988.yml
new file mode 100644
index 0000000000..743551eaaa
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3988.yml
@@ -0,0 +1,4 @@
+author: "DaxDupont"
+delete-after: True
+changes:
+ - bugfix: "Plant trays will now properly process fluorine and adjust toxins and water contents."
diff --git a/html/changelogs/AutoChangeLog-pr-3993.yml b/html/changelogs/AutoChangeLog-pr-3993.yml
new file mode 100644
index 0000000000..14c4d31514
--- /dev/null
+++ b/html/changelogs/AutoChangeLog-pr-3993.yml
@@ -0,0 +1,5 @@
+author: "CitadelStationBot"
+delete-after: True
+changes:
+ - rscadd: "purple bartender suit and apron added to clothesmates!"
+ - rscadd: "long hair 3 added, check it out. both have sprites from okand!"
diff --git a/icons/mob/hair_extensions.dmi b/icons/mob/hair_extensions.dmi
index f5591b3d71..a14799c4f2 100644
Binary files a/icons/mob/hair_extensions.dmi and b/icons/mob/hair_extensions.dmi differ
diff --git a/icons/mob/human_face.dmi b/icons/mob/human_face.dmi
index 5c61706c70..bd4fcf9447 100644
Binary files a/icons/mob/human_face.dmi and b/icons/mob/human_face.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 94b370c6fb..241db46d08 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 82cb69f052..be23fa9f13 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 3d5d66c1bf..f44fc29f7c 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index 13f3a433d6..3635744b6f 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/tgui/install_dependencies.bat b/tgui/install_dependencies.bat
index ad09693f49..d0e517b054 100644
--- a/tgui/install_dependencies.bat
+++ b/tgui/install_dependencies.bat
@@ -3,10 +3,12 @@ echo node.js 5.3.0 or newer must be installed for this script to work.
echo If this script fails, try closing editors and running it again first.
echo Any warnings about optional dependencies can be safely ignored.
pause
+REM Install npm-cache
+cmd /c npm install npm-cache -g
REM Install Gulp
cmd /c npm install gulp-cli -g
REM Install tgui dependencies
-cmd /c npm install
+cmd /c npm-cache install npm
REM Flatten dependency tree
cmd /c npm dedupe
REM Clean dependency tree
diff --git a/tgui/reload.bat b/tgui/reload.bat
index 55b769e2d7..3113036e62 100644
--- a/tgui/reload.bat
+++ b/tgui/reload.bat
@@ -3,7 +3,7 @@ REM Get the documents folder from the registry.
for /f "tokens=3* delims= " %%a in (
'reg query "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders" /v "Personal"'
) do (
- set documents=%%a
+ set documents=%%a %%b
)
REM Copy assets to the BYOND cache
cmd /c copy assets\* "%documents%\BYOND\cache" /y
diff --git a/tools/WebhookProcessor/github_webhook_processor.php b/tools/WebhookProcessor/github_webhook_processor.php
index 8dad9f02ec..a97b9db1c2 100644
--- a/tools/WebhookProcessor/github_webhook_processor.php
+++ b/tools/WebhookProcessor/github_webhook_processor.php
@@ -365,7 +365,7 @@ function handle_pr($payload) {
set_labels($payload, $labels, $remove);
if($no_changelog)
check_dismiss_changelog_review($payload);
- if(get_pr_code_friendliness($payload) < 0){
+ if(get_pr_code_friendliness($payload) <= 0){
$balances = pr_balances();
$author = $payload['pull_request']['user']['login'];
if(isset($balances[$author]) && $balances[$author] < 0 && !is_maintainer($payload, $author))