mirror of
https://github.com/SPLURT-Station/S.P.L.U.R.T-Station-13.git
synced 2025-12-10 18:02:57 +00:00
Merge pull request #3971 from Citadel-Station-13/upstream-merge-32786
[MIRROR] Replaces a bunch of mob loops with hopefully better ones
This commit is contained in:
@@ -77,7 +77,7 @@
|
|||||||
|
|
||||||
/proc/alone_in_area(area/the_area, mob/must_be_alone, check_type = /mob/living/carbon)
|
/proc/alone_in_area(area/the_area, mob/must_be_alone, check_type = /mob/living/carbon)
|
||||||
var/area/our_area = get_area(the_area)
|
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))
|
if(!istype(C, check_type))
|
||||||
continue
|
continue
|
||||||
if(C == must_be_alone)
|
if(C == must_be_alone)
|
||||||
@@ -318,7 +318,8 @@
|
|||||||
break
|
break
|
||||||
|
|
||||||
/proc/get_mob_by_key(key)
|
/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))
|
if(M.ckey == lowertext(key))
|
||||||
return M
|
return M
|
||||||
return null
|
return null
|
||||||
|
|||||||
@@ -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
|
//Returns a list of unslaved cyborgs
|
||||||
/proc/active_free_borgs()
|
/proc/active_free_borgs()
|
||||||
. = list()
|
. = 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)
|
if(R.connected_ai || R.shell)
|
||||||
continue
|
continue
|
||||||
if(R.stat == DEAD)
|
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
|
//Returns a list of AI's
|
||||||
/proc/active_ais(check_mind=0)
|
/proc/active_ais(check_mind=0)
|
||||||
. = list()
|
. = 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)
|
if(A.stat == DEAD)
|
||||||
continue
|
continue
|
||||||
if(A.control_disabled == 1)
|
if(A.control_disabled == 1)
|
||||||
@@ -920,7 +920,7 @@ GLOBAL_LIST_INIT(WALLITEMS_INVERSE, typecacheof(list(
|
|||||||
/proc/living_player_count()
|
/proc/living_player_count()
|
||||||
var/living_player_count = 0
|
var/living_player_count = 0
|
||||||
for(var/mob in GLOB.player_list)
|
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
|
living_player_count += 1
|
||||||
return living_player_count
|
return living_player_count
|
||||||
|
|
||||||
@@ -1357,6 +1357,9 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
|||||||
anchored = TRUE
|
anchored = TRUE
|
||||||
var/ready_to_die = FALSE
|
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)
|
/mob/dview/Destroy(force = FALSE)
|
||||||
if(!ready_to_die)
|
if(!ready_to_die)
|
||||||
stack_trace("ALRIGHT WHICH FUCKER TRIED TO DELETE *MY* DVIEW?")
|
stack_trace("ALRIGHT WHICH FUCKER TRIED TO DELETE *MY* DVIEW?")
|
||||||
|
|||||||
@@ -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(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_list) //all mobs, including clientless
|
||||||
GLOBAL_LIST_EMPTY(mob_directory) //mob_id -> mob
|
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(drones_list)
|
||||||
GLOBAL_LIST_EMPTY(dead_mob_list) //all dead mobs, including clientless. Excludes /mob/dead/new_player
|
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(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(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(ai_list)
|
||||||
GLOBAL_LIST_EMPTY(pai_list)
|
GLOBAL_LIST_EMPTY(pai_list)
|
||||||
GLOBAL_LIST_EMPTY(available_ai_shells)
|
GLOBAL_LIST_EMPTY(available_ai_shells)
|
||||||
|
|||||||
@@ -390,7 +390,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion."
|
|||||||
var/servants = 0
|
var/servants = 0
|
||||||
var/validservants = 0
|
var/validservants = 0
|
||||||
var/list/textlist
|
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))
|
if(is_servant_of_ratvar(L))
|
||||||
servants++
|
servants++
|
||||||
if(ishuman(L) || issilicon(L))
|
if(ishuman(L) || issilicon(L))
|
||||||
|
|||||||
@@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
/datum/objective/crew/cyborgs/check_completion()
|
/datum/objective/crew/cyborgs/check_completion()
|
||||||
var/borgcount = target_amount
|
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))
|
if(!(R.stat == DEAD))
|
||||||
borgcount--
|
borgcount--
|
||||||
if(borgcount <= 0)
|
if(borgcount <= 0)
|
||||||
|
|||||||
@@ -575,7 +575,7 @@ SUBSYSTEM_DEF(job)
|
|||||||
///////////////////////////////////
|
///////////////////////////////////
|
||||||
/datum/controller/subsystem/job/proc/get_living_heads()
|
/datum/controller/subsystem/job/proc/get_living_heads()
|
||||||
. = list()
|
. = 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))
|
if(player.stat != DEAD && player.mind && (player.mind.assigned_role in GLOB.command_positions))
|
||||||
. |= player.mind
|
. |= player.mind
|
||||||
|
|
||||||
@@ -585,7 +585,8 @@ SUBSYSTEM_DEF(job)
|
|||||||
////////////////////////////
|
////////////////////////////
|
||||||
/datum/controller/subsystem/job/proc/get_all_heads()
|
/datum/controller/subsystem/job/proc/get_all_heads()
|
||||||
. = list()
|
. = 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))
|
if(player.mind && (player.mind.assigned_role in GLOB.command_positions))
|
||||||
. |= player.mind
|
. |= player.mind
|
||||||
|
|
||||||
@@ -594,7 +595,7 @@ SUBSYSTEM_DEF(job)
|
|||||||
//////////////////////////////////////////////
|
//////////////////////////////////////////////
|
||||||
/datum/controller/subsystem/job/proc/get_living_sec()
|
/datum/controller/subsystem/job/proc/get_living_sec()
|
||||||
. = list()
|
. = 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))
|
if(player.stat != DEAD && player.mind && (player.mind.assigned_role in GLOB.security_positions))
|
||||||
. |= player.mind
|
. |= player.mind
|
||||||
|
|
||||||
@@ -603,6 +604,6 @@ SUBSYSTEM_DEF(job)
|
|||||||
////////////////////////////////////////
|
////////////////////////////////////////
|
||||||
/datum/controller/subsystem/job/proc/get_all_sec()
|
/datum/controller/subsystem/job/proc/get_all_sec()
|
||||||
. = list()
|
. = 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))
|
if(player.mind && (player.mind.assigned_role in GLOB.security_positions))
|
||||||
. |= player.mind
|
. |= player.mind
|
||||||
|
|||||||
@@ -7,13 +7,15 @@ SUBSYSTEM_DEF(mobs)
|
|||||||
var/list/currentrun = list()
|
var/list/currentrun = list()
|
||||||
|
|
||||||
/datum/controller/subsystem/mobs/stat_entry()
|
/datum/controller/subsystem/mobs/stat_entry()
|
||||||
..("P:[GLOB.mob_list.len]")
|
..("P:[GLOB.mob_living_list.len]")
|
||||||
|
|
||||||
|
|
||||||
/datum/controller/subsystem/mobs/fire(resumed = 0)
|
/datum/controller/subsystem/mobs/fire(resumed = 0)
|
||||||
var/seconds = wait * 0.1
|
var/seconds = wait * 0.1
|
||||||
if (!resumed)
|
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)
|
//cache for sanic speed (lists are references anyways)
|
||||||
var/list/currentrun = src.currentrun
|
var/list/currentrun = src.currentrun
|
||||||
@@ -24,6 +26,6 @@ SUBSYSTEM_DEF(mobs)
|
|||||||
if(M)
|
if(M)
|
||||||
M.Life(seconds, times_fired)
|
M.Life(seconds, times_fired)
|
||||||
else
|
else
|
||||||
GLOB.mob_list.Remove(M)
|
GLOB.mob_living_list.Remove(M)
|
||||||
if (MC_TICK_CHECK)
|
if (MC_TICK_CHECK)
|
||||||
return
|
return
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ SUBSYSTEM_DEF(persistence)
|
|||||||
break
|
break
|
||||||
|
|
||||||
/datum/controller/subsystem/persistence/proc/LoadPoly()
|
/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")
|
twitterize(P.speech_buffer, "polytalk")
|
||||||
break //Who's been duping the bird?!
|
break //Who's been duping the bird?!
|
||||||
|
|
||||||
|
|||||||
@@ -416,7 +416,8 @@ SUBSYSTEM_DEF(ticker)
|
|||||||
C.playtitlemusic(40)*/
|
C.playtitlemusic(40)*/
|
||||||
|
|
||||||
//Player status report
|
//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.mind && !isnewplayer(Player))
|
||||||
if(Player.stat != DEAD && !isbrain(Player))
|
if(Player.stat != DEAD && !isbrain(Player))
|
||||||
num_survivors++
|
num_survivors++
|
||||||
@@ -462,7 +463,8 @@ SUBSYSTEM_DEF(ticker)
|
|||||||
CHECK_TICK
|
CHECK_TICK
|
||||||
|
|
||||||
//Silicon laws report
|
//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)
|
if (aiPlayer.stat != DEAD && aiPlayer.mind)
|
||||||
to_chat(world, "<b>[aiPlayer.name] (Played by: [aiPlayer.mind.key])'s laws at the end of the round were:</b>")
|
to_chat(world, "<b>[aiPlayer.name] (Played by: [aiPlayer.mind.key])'s laws at the end of the round were:</b>")
|
||||||
aiPlayer.show_laws(1)
|
aiPlayer.show_laws(1)
|
||||||
@@ -481,7 +483,7 @@ SUBSYSTEM_DEF(ticker)
|
|||||||
|
|
||||||
CHECK_TICK
|
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.connected_ai && robo.mind)
|
||||||
if (robo.stat != DEAD)
|
if (robo.stat != DEAD)
|
||||||
to_chat(world, "<b>[robo.name] (Played by: [robo.mind.key]) survived as an AI-less borg! Its laws were:</b>")
|
to_chat(world, "<b>[robo.name] (Played by: [robo.mind.key]) survived as an AI-less borg! Its laws were:</b>")
|
||||||
|
|||||||
@@ -13,7 +13,8 @@ SUBSYSTEM_DEF(weather)
|
|||||||
var/datum/weather/W = V
|
var/datum/weather/W = V
|
||||||
if(W.aesthetic)
|
if(W.aesthetic)
|
||||||
continue
|
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))
|
if(W.can_weather_act(L))
|
||||||
W.weather_act(L)
|
W.weather_act(L)
|
||||||
for(var/Z in eligible_zlevels)
|
for(var/Z in eligible_zlevels)
|
||||||
|
|||||||
@@ -416,7 +416,7 @@
|
|||||||
for(var/datum/disease/advance/AD in SSdisease.active_diseases)
|
for(var/datum/disease/advance/AD in SSdisease.active_diseases)
|
||||||
AD.Refresh()
|
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))
|
if(!(H.z in GLOB.station_z_levels))
|
||||||
continue
|
continue
|
||||||
if(!H.HasDisease(D))
|
if(!H.HasDisease(D))
|
||||||
|
|||||||
@@ -326,7 +326,8 @@ GLOBAL_LIST_EMPTY(teleportlocs)
|
|||||||
var/obj/machinery/camera/C = item
|
var/obj/machinery/camera/C = item
|
||||||
cameras += C
|
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))
|
if(SILICON.triggerAlarm("Burglar", src, cameras, trigger))
|
||||||
//Cancel silicon alert after 1 minute
|
//Cancel silicon alert after 1 minute
|
||||||
addtimer(CALLBACK(SILICON, /mob/living/silicon.proc/cancelAlarm,"Burglar",src,trigger), 600)
|
addtimer(CALLBACK(SILICON, /mob/living/silicon.proc/cancelAlarm,"Burglar",src,trigger), 600)
|
||||||
|
|||||||
@@ -79,7 +79,8 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
|||||||
/mob/camera/blob/proc/victory()
|
/mob/camera/blob/proc/victory()
|
||||||
sound_to_playing_players('sound/machines/alarm.ogg')
|
sound_to_playing_players('sound/machines/alarm.ogg')
|
||||||
sleep(100)
|
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)
|
var/turf/T = get_turf(L)
|
||||||
if(!T || !(T.z in GLOB.station_z_levels))
|
if(!T || !(T.z in GLOB.station_z_levels))
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -48,7 +48,8 @@
|
|||||||
if(3)
|
if(3)
|
||||||
to_chat(user, "<span class='notice'>We mold the [target]'s mind like clay, granting [target.p_them()] the ability to speak in the hivemind!</span>")
|
to_chat(user, "<span class='notice'>We mold the [target]'s mind like clay, granting [target.p_them()] the ability to speak in the hivemind!</span>")
|
||||||
to_chat(target, "<span class='userdanger'>A migraine throbs behind your eyes, you hear yourself screaming - but your mouth has not opened!</span>")
|
to_chat(target, "<span class='userdanger'>A migraine throbs behind your eyes, you hear yourself screaming - but your mouth has not opened!</span>")
|
||||||
for(var/mob/M in GLOB.mob_list)
|
for(var/mi in GLOB.mob_list)
|
||||||
|
var/mob/M = mi
|
||||||
if(M.lingcheck() == 2)
|
if(M.lingcheck() == 2)
|
||||||
to_chat(M, "<i><font color=#800080>We can sense a foreign presence in the hivemind...</font></i>")
|
to_chat(M, "<i><font color=#800080>We can sense a foreign presence in the hivemind...</font></i>")
|
||||||
target.mind.linglink = 1
|
target.mind.linglink = 1
|
||||||
|
|||||||
@@ -162,7 +162,7 @@
|
|||||||
var/locname = initial(A.name)
|
var/locname = initial(A.name)
|
||||||
possible_targets[avoid_assoc_duplicate_keys("[locname] [O.name]", teleportnames)] = O
|
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
|
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
|
possible_targets[avoid_assoc_duplicate_keys("[L.name] ([L.real_name])", teleportnames)] = L
|
||||||
|
|
||||||
|
|||||||
@@ -322,7 +322,7 @@
|
|||||||
to_chat(invoker, "<span class='warning'>You must not be inside an object to use this scripture!</span>")
|
to_chat(invoker, "<span class='warning'>You must not be inside an object to use this scripture!</span>")
|
||||||
return FALSE
|
return FALSE
|
||||||
var/other_servants = 0
|
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)
|
if(is_servant_of_ratvar(L) && !L.stat && L != invoker)
|
||||||
other_servants++
|
other_servants++
|
||||||
for(var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/O in GLOB.all_clockwork_objects)
|
for(var/obj/structure/destructible/clockwork/powered/clockwork_obelisk/O in GLOB.all_clockwork_objects)
|
||||||
|
|||||||
@@ -100,7 +100,7 @@
|
|||||||
continue
|
continue
|
||||||
C.update_values()
|
C.update_values()
|
||||||
to_chat(C, C.empower_string)
|
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))
|
if(is_servant_of_ratvar(H))
|
||||||
to_chat(H, "<span class='bold alloy'>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!</span>")
|
to_chat(H, "<span class='bold alloy'>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!</span>")
|
||||||
H.set_species(/datum/species/golem/clockwork/no_scrap)
|
H.set_species(/datum/species/golem/clockwork/no_scrap)
|
||||||
|
|||||||
@@ -67,7 +67,7 @@
|
|||||||
T.ratvar_act(TRUE)
|
T.ratvar_act(TRUE)
|
||||||
var/dir_to_step_in = pick(GLOB.cardinals)
|
var/dir_to_step_in = pick(GLOB.cardinals)
|
||||||
var/list/meals = list()
|
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)
|
if(L.z == z && !is_servant_of_ratvar(L) && L.mind)
|
||||||
meals += L
|
meals += L
|
||||||
if(GLOB.cult_narsie && GLOB.cult_narsie.z == z)
|
if(GLOB.cult_narsie && GLOB.cult_narsie.z == z)
|
||||||
|
|||||||
@@ -40,7 +40,8 @@
|
|||||||
else if(!ishuman(user))
|
else if(!ishuman(user))
|
||||||
title = "Construct"
|
title = "Construct"
|
||||||
my_message = "<span class='[span]'><b>[title] [findtextEx(user.name, user.real_name) ? user.name : "[user.real_name] (as [user.name])"]:</b> [message]</span>"
|
my_message = "<span class='[span]'><b>[title] [findtextEx(user.name, user.real_name) ? user.name : "[user.real_name] (as [user.name])"]:</b> [message]</span>"
|
||||||
for(var/mob/M in GLOB.mob_list)
|
for(var/i in GLOB.player_list)
|
||||||
|
var/mob/M = i
|
||||||
if(iscultist(M))
|
if(iscultist(M))
|
||||||
to_chat(M, my_message)
|
to_chat(M, my_message)
|
||||||
else if(M in GLOB.dead_mob_list)
|
else if(M in GLOB.dead_mob_list)
|
||||||
|
|||||||
@@ -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))
|
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.
|
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 && Player.stat != DEAD && !isnewplayer(Player) &&!isbrain(Player) && Player.client)
|
||||||
if(Player.mind.special_role || LAZYLEN(Player.mind.antag_datums)) //Someone's still antaging!
|
if(Player.mind.special_role || LAZYLEN(Player.mind.antag_datums)) //Someone's still antaging!
|
||||||
living_antag_player = Player
|
living_antag_player = Player
|
||||||
@@ -407,16 +407,11 @@
|
|||||||
//////////////////////////
|
//////////////////////////
|
||||||
/proc/display_roundstart_logout_report()
|
/proc/display_roundstart_logout_report()
|
||||||
var/msg = "<span class='boldnotice'>Roundstart logout report\n\n</span>"
|
var/msg = "<span class='boldnotice'>Roundstart logout report\n\n</span>"
|
||||||
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)
|
if(L.ckey && !GLOB.directory[L.ckey])
|
||||||
var/found = 0
|
msg += "<b>[L.name]</b> ([L.ckey]), the [L.job] (<font color='#ffcc00'><b>Disconnected</b></font>)\n"
|
||||||
for(var/client/C in GLOB.clients)
|
|
||||||
if(C.ckey == L.ckey)
|
|
||||||
found = 1
|
|
||||||
break
|
|
||||||
if(!found)
|
|
||||||
msg += "<b>[L.name]</b> ([L.ckey]), the [L.job] (<font color='#ffcc00'><b>Disconnected</b></font>)\n"
|
|
||||||
|
|
||||||
|
|
||||||
if(L.ckey && L.client)
|
if(L.ckey && L.client)
|
||||||
@@ -452,10 +447,8 @@
|
|||||||
continue //Ghosted while alive
|
continue //Ghosted while alive
|
||||||
|
|
||||||
|
|
||||||
|
for (var/C in GLOB.admins)
|
||||||
for(var/mob/M in GLOB.mob_list)
|
to_chat(C, msg)
|
||||||
if(M.client && M.client.holder)
|
|
||||||
to_chat(M, msg)
|
|
||||||
|
|
||||||
/datum/game_mode/proc/printplayer(datum/mind/ply, fleecheck)
|
/datum/game_mode/proc/printplayer(datum/mind/ply, fleecheck)
|
||||||
var/text = "<br><b>[ply.key]</b> was <b>[ply.name]</b> the <b>[ply.assigned_role]</b> and"
|
var/text = "<br><b>[ply.key]</b> was <b>[ply.name]</b> the <b>[ply.assigned_role]</b> and"
|
||||||
@@ -535,4 +528,4 @@
|
|||||||
//By default nuke just ends the round
|
//By default nuke just ends the round
|
||||||
/datum/game_mode/proc/OnNukeExplosion(off_station)
|
/datum/game_mode/proc/OnNukeExplosion(off_station)
|
||||||
if(off_station < 2)
|
if(off_station < 2)
|
||||||
station_was_nuked = TRUE //Will end the round on next check.
|
station_was_nuked = TRUE //Will end the round on next check.
|
||||||
|
|||||||
@@ -375,7 +375,8 @@ GLOBAL_LIST_INIT(blacklisted_malf_machines, typecacheof(list(
|
|||||||
/obj/machinery/doomsday_device/proc/detonate(z_level = ZLEVEL_STATION_PRIMARY)
|
/obj/machinery/doomsday_device/proc/detonate(z_level = ZLEVEL_STATION_PRIMARY)
|
||||||
sound_to_playing_players('sound/machines/alarm.ogg')
|
sound_to_playing_players('sound/machines/alarm.ogg')
|
||||||
sleep(100)
|
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)
|
var/turf/T = get_turf(L)
|
||||||
if(!T || !(T.z in GLOB.station_z_levels))
|
if(!T || !(T.z in GLOB.station_z_levels))
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -654,7 +654,8 @@
|
|||||||
|
|
||||||
/mob/living/simple_animal/hostile/swarmer/proc/swarmer_chat(msg)
|
/mob/living/simple_animal/hostile/swarmer/proc/swarmer_chat(msg)
|
||||||
var/rendered = "<B>Swarm communication - [src]</b> [say_quote(msg, get_spans())]"
|
var/rendered = "<B>Swarm communication - [src]</b> [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))
|
if(isswarmer(M))
|
||||||
to_chat(M, rendered)
|
to_chat(M, rendered)
|
||||||
if(isobserver(M))
|
if(isobserver(M))
|
||||||
|
|||||||
@@ -21,7 +21,8 @@
|
|||||||
print_command_report(swarmer_report, announce=TRUE)
|
print_command_report(swarmer_report, announce=TRUE)
|
||||||
|
|
||||||
/datum/round_event/spawn_swarmer/proc/find_swarmer()
|
/datum/round_event/spawn_swarmer/proc/find_swarmer()
|
||||||
for(var/mob/living/M in GLOB.mob_list)
|
for(var/i in GLOB.mob_living_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
|
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 1
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -76,7 +76,7 @@
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
var/datum/disease/D = new /datum/disease/transformation/jungle_fever() //ugly but unfortunately needed
|
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.mind && H.stat != DEAD)
|
||||||
if(H.HasDisease(D))
|
if(H.HasDisease(D))
|
||||||
return 0
|
return 0
|
||||||
@@ -87,7 +87,7 @@
|
|||||||
if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME)
|
if(SSshuttle.emergency.mode != SHUTTLE_ENDGAME)
|
||||||
return 0
|
return 0
|
||||||
var/datum/disease/D = new /datum/disease/transformation/jungle_fever()
|
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.HasDisease(D))
|
||||||
if(M.onCentCom() || M.onSyndieBase())
|
if(M.onCentCom() || M.onSyndieBase())
|
||||||
escaped_monkeys++
|
escaped_monkeys++
|
||||||
|
|||||||
@@ -194,7 +194,7 @@
|
|||||||
if(headrevs.len)
|
if(headrevs.len)
|
||||||
var/num_revs = 0
|
var/num_revs = 0
|
||||||
var/num_survivors = 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)
|
if(survivor.ckey)
|
||||||
num_survivors++
|
num_survivors++
|
||||||
if(survivor.mind)
|
if(survivor.mind)
|
||||||
|
|||||||
@@ -288,7 +288,7 @@
|
|||||||
possible = list()
|
possible = list()
|
||||||
if(!link)
|
if(!link)
|
||||||
return
|
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)
|
if(md5(H.dna.uni_identity) in link.fingerprints)
|
||||||
possible |= H
|
possible |= H
|
||||||
|
|
||||||
|
|||||||
@@ -97,11 +97,12 @@
|
|||||||
GLOB.cameranet.addCamera(src)
|
GLOB.cameranet.addCamera(src)
|
||||||
emped = 0 //Resets the consecutive EMP count
|
emped = 0 //Resets the consecutive EMP count
|
||||||
addtimer(CALLBACK(src, .proc/cancelCameraAlarm), 100)
|
addtimer(CALLBACK(src, .proc/cancelCameraAlarm), 100)
|
||||||
for(var/mob/O in GLOB.mob_list)
|
for(var/i in GLOB.player_list)
|
||||||
if (O.client && O.client.eye == src)
|
var/mob/M = i
|
||||||
O.unset_machine()
|
if (M.client.eye == src)
|
||||||
O.reset_perspective(null)
|
M.unset_machine()
|
||||||
to_chat(O, "The screen bursts into static.")
|
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
|
/obj/machinery/camera/tesla_act(var/power)//EMP proof upgrade also makes it tesla immune
|
||||||
|
|||||||
@@ -50,7 +50,8 @@
|
|||||||
|
|
||||||
/obj/machinery/camera/proc/cancelAlarm()
|
/obj/machinery/camera/proc/cancelAlarm()
|
||||||
if (detectTime == -1)
|
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)
|
if (status)
|
||||||
aiPlayer.cancelAlarm("Motion", get_area(src), src)
|
aiPlayer.cancelAlarm("Motion", get_area(src), src)
|
||||||
detectTime = 0
|
detectTime = 0
|
||||||
@@ -69,4 +70,4 @@
|
|||||||
// Motion cameras outside of an "ai monitored" area will use this to detect stuff.
|
// Motion cameras outside of an "ai monitored" area will use this to detect stuff.
|
||||||
if (!area_motion)
|
if (!area_motion)
|
||||||
if(isliving(AM))
|
if(isliving(AM))
|
||||||
newTarget(AM)
|
newTarget(AM)
|
||||||
|
|||||||
@@ -1,172 +1,168 @@
|
|||||||
/mob/living/silicon/ai/proc/get_camera_list()
|
/mob/living/silicon/ai/proc/get_camera_list()
|
||||||
|
|
||||||
track.cameras.Cut()
|
track.cameras.Cut()
|
||||||
|
|
||||||
if(src.stat == DEAD)
|
if(src.stat == DEAD)
|
||||||
return
|
return
|
||||||
|
|
||||||
var/list/L = list()
|
var/list/L = list()
|
||||||
for (var/obj/machinery/camera/C in GLOB.cameranet.cameras)
|
for (var/obj/machinery/camera/C in GLOB.cameranet.cameras)
|
||||||
L.Add(C)
|
L.Add(C)
|
||||||
|
|
||||||
camera_sort(L)
|
camera_sort(L)
|
||||||
|
|
||||||
var/list/T = list()
|
var/list/T = list()
|
||||||
|
|
||||||
for (var/obj/machinery/camera/C in L)
|
for (var/obj/machinery/camera/C in L)
|
||||||
var/list/tempnetwork = C.network&src.network
|
var/list/tempnetwork = C.network&src.network
|
||||||
if (tempnetwork.len)
|
if (tempnetwork.len)
|
||||||
T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C
|
T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C
|
||||||
|
|
||||||
track.cameras = T
|
track.cameras = T
|
||||||
return T
|
return T
|
||||||
|
|
||||||
|
|
||||||
/mob/living/silicon/ai/proc/ai_camera_list(camera)
|
/mob/living/silicon/ai/proc/ai_camera_list(camera)
|
||||||
if (!camera)
|
if (!camera)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
var/obj/machinery/camera/C = track.cameras[camera]
|
var/obj/machinery/camera/C = track.cameras[camera]
|
||||||
src.eyeobj.setLoc(C)
|
src.eyeobj.setLoc(C)
|
||||||
|
|
||||||
return
|
return
|
||||||
|
|
||||||
/datum/trackable
|
/datum/trackable
|
||||||
var/list/names = list()
|
var/list/names = list()
|
||||||
var/list/namecounts = list()
|
var/list/namecounts = list()
|
||||||
var/list/humans = list()
|
var/list/humans = list()
|
||||||
var/list/others = list()
|
var/list/others = list()
|
||||||
var/list/cameras = list()
|
var/list/cameras = list()
|
||||||
|
|
||||||
/mob/living/silicon/ai/proc/trackable_mobs()
|
/mob/living/silicon/ai/proc/trackable_mobs()
|
||||||
|
|
||||||
track.names.Cut()
|
track.names.Cut()
|
||||||
track.namecounts.Cut()
|
track.namecounts.Cut()
|
||||||
track.humans.Cut()
|
track.humans.Cut()
|
||||||
track.others.Cut()
|
track.others.Cut()
|
||||||
|
|
||||||
if(usr.stat == DEAD)
|
if(usr.stat == DEAD)
|
||||||
return list()
|
return list()
|
||||||
|
|
||||||
for(var/mob/living/M in GLOB.mob_list)
|
for(var/i in GLOB.mob_living_list)
|
||||||
if(!M.can_track(usr))
|
var/mob/living/L = i
|
||||||
continue
|
if(!L.can_track(usr))
|
||||||
|
continue
|
||||||
// Human check
|
|
||||||
var/human = 0
|
var/name = L.name
|
||||||
if(ishuman(M))
|
while(name in track.names)
|
||||||
human = 1
|
track.namecounts[name]++
|
||||||
|
name = text("[] ([])", name, track.namecounts[name])
|
||||||
var/name = M.name
|
track.names.Add(name)
|
||||||
while(name in track.names)
|
track.namecounts[name] = 1
|
||||||
track.namecounts[name]++
|
|
||||||
name = text("[] ([])", name, track.namecounts[name])
|
if(ishuman(L))
|
||||||
track.names.Add(name)
|
track.humans[name] = L
|
||||||
track.namecounts[name] = 1
|
else
|
||||||
|
track.others[name] = L
|
||||||
if(human)
|
|
||||||
track.humans[name] = M
|
var/list/targets = sortList(track.humans) + sortList(track.others)
|
||||||
else
|
|
||||||
track.others[name] = M
|
return targets
|
||||||
|
|
||||||
var/list/targets = sortList(track.humans) + sortList(track.others)
|
/mob/living/silicon/ai/verb/ai_camera_track(target_name in trackable_mobs())
|
||||||
|
set name = "track"
|
||||||
return targets
|
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
|
||||||
|
|
||||||
/mob/living/silicon/ai/verb/ai_camera_track(target_name in trackable_mobs())
|
if(!target_name)
|
||||||
set name = "track"
|
return
|
||||||
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
|
|
||||||
|
var/mob/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name])
|
||||||
if(!target_name)
|
|
||||||
return
|
ai_actual_track(target)
|
||||||
|
|
||||||
var/mob/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name])
|
/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target)
|
||||||
|
if(!istype(target))
|
||||||
ai_actual_track(target)
|
return
|
||||||
|
var/mob/living/silicon/ai/U = usr
|
||||||
/mob/living/silicon/ai/proc/ai_actual_track(mob/living/target)
|
|
||||||
if(!istype(target))
|
U.cameraFollow = target
|
||||||
return
|
U.tracking = 1
|
||||||
var/mob/living/silicon/ai/U = usr
|
|
||||||
|
if(!target || !target.can_track(usr))
|
||||||
U.cameraFollow = target
|
to_chat(U, "<span class='warning'>Target is not near any active cameras.</span>")
|
||||||
U.tracking = 1
|
U.cameraFollow = null
|
||||||
|
return
|
||||||
if(!target || !target.can_track(usr))
|
|
||||||
to_chat(U, "<span class='warning'>Target is not near any active cameras.</span>")
|
to_chat(U, "<span class='notice'>Now tracking [target.get_visible_name()] on camera.</span>")
|
||||||
U.cameraFollow = null
|
|
||||||
return
|
var/cameraticks = 0
|
||||||
|
spawn(0)
|
||||||
to_chat(U, "<span class='notice'>Now tracking [target.get_visible_name()] on camera.</span>")
|
while(U.cameraFollow == target)
|
||||||
|
if(U.cameraFollow == null)
|
||||||
var/cameraticks = 0
|
return
|
||||||
spawn(0)
|
|
||||||
while(U.cameraFollow == target)
|
if(!target.can_track(usr))
|
||||||
if(U.cameraFollow == null)
|
U.tracking = 1
|
||||||
return
|
if(!cameraticks)
|
||||||
|
to_chat(U, "<span class='warning'>Target is not near any active cameras. Attempting to reacquire...</span>")
|
||||||
if(!target.can_track(usr))
|
cameraticks++
|
||||||
U.tracking = 1
|
if(cameraticks > 9)
|
||||||
if(!cameraticks)
|
U.cameraFollow = null
|
||||||
to_chat(U, "<span class='warning'>Target is not near any active cameras. Attempting to reacquire...</span>")
|
to_chat(U, "<span class='warning'>Unable to reacquire, cancelling track...</span>")
|
||||||
cameraticks++
|
tracking = 0
|
||||||
if(cameraticks > 9)
|
return
|
||||||
U.cameraFollow = null
|
else
|
||||||
to_chat(U, "<span class='warning'>Unable to reacquire, cancelling track...</span>")
|
sleep(10)
|
||||||
tracking = 0
|
continue
|
||||||
return
|
|
||||||
else
|
else
|
||||||
sleep(10)
|
cameraticks = 0
|
||||||
continue
|
U.tracking = 0
|
||||||
|
|
||||||
else
|
if(U.eyeobj)
|
||||||
cameraticks = 0
|
U.eyeobj.setLoc(get_turf(target))
|
||||||
U.tracking = 0
|
|
||||||
|
else
|
||||||
if(U.eyeobj)
|
view_core()
|
||||||
U.eyeobj.setLoc(get_turf(target))
|
U.cameraFollow = null
|
||||||
|
return
|
||||||
else
|
|
||||||
view_core()
|
sleep(10)
|
||||||
U.cameraFollow = null
|
|
||||||
return
|
/proc/near_camera(mob/living/M)
|
||||||
|
if (!isturf(M.loc))
|
||||||
sleep(10)
|
return 0
|
||||||
|
if(issilicon(M))
|
||||||
/proc/near_camera(mob/living/M)
|
var/mob/living/silicon/S = M
|
||||||
if (!isturf(M.loc))
|
if((!QDELETED(S.builtInCamera) || !S.builtInCamera.can_use()) && !GLOB.cameranet.checkCameraVis(M))
|
||||||
return 0
|
return 0
|
||||||
if(issilicon(M))
|
else if(!GLOB.cameranet.checkCameraVis(M))
|
||||||
var/mob/living/silicon/S = M
|
return 0
|
||||||
if((!QDELETED(S.builtInCamera) || !S.builtInCamera.can_use()) && !GLOB.cameranet.checkCameraVis(M))
|
return 1
|
||||||
return 0
|
|
||||||
else if(!GLOB.cameranet.checkCameraVis(M))
|
/obj/machinery/camera/attack_ai(mob/living/silicon/ai/user)
|
||||||
return 0
|
if (!istype(user))
|
||||||
return 1
|
return
|
||||||
|
if (!src.can_use())
|
||||||
/obj/machinery/camera/attack_ai(mob/living/silicon/ai/user)
|
return
|
||||||
if (!istype(user))
|
user.eyeobj.setLoc(get_turf(src))
|
||||||
return
|
|
||||||
if (!src.can_use())
|
|
||||||
return
|
/mob/living/silicon/ai/attack_ai(mob/user)
|
||||||
user.eyeobj.setLoc(get_turf(src))
|
ai_camera_list()
|
||||||
|
|
||||||
|
/proc/camera_sort(list/L)
|
||||||
/mob/living/silicon/ai/attack_ai(mob/user)
|
var/obj/machinery/camera/a
|
||||||
ai_camera_list()
|
var/obj/machinery/camera/b
|
||||||
|
|
||||||
/proc/camera_sort(list/L)
|
for (var/i = L.len, i > 0, i--)
|
||||||
var/obj/machinery/camera/a
|
for (var/j = 1 to i - 1)
|
||||||
var/obj/machinery/camera/b
|
a = L[j]
|
||||||
|
b = L[j + 1]
|
||||||
for (var/i = L.len, i > 0, i--)
|
if (a.c_tag_order != b.c_tag_order)
|
||||||
for (var/j = 1 to i - 1)
|
if (a.c_tag_order > b.c_tag_order)
|
||||||
a = L[j]
|
L.Swap(j, j + 1)
|
||||||
b = L[j + 1]
|
else
|
||||||
if (a.c_tag_order != b.c_tag_order)
|
if (sorttext(a.c_tag, b.c_tag) < 0)
|
||||||
if (a.c_tag_order > b.c_tag_order)
|
L.Swap(j, j + 1)
|
||||||
L.Swap(j, j + 1)
|
return L
|
||||||
else
|
|
||||||
if (sorttext(a.c_tag, b.c_tag) < 0)
|
|
||||||
L.Swap(j, j + 1)
|
|
||||||
return L
|
|
||||||
|
|||||||
@@ -150,7 +150,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
|||||||
var/pos_y
|
var/pos_y
|
||||||
var/life_status
|
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.
|
// 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.
|
// 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))
|
if ((H.z == 0 || H.z == z) && istype(H.w_uniform, /obj/item/clothing/under))
|
||||||
|
|||||||
@@ -173,7 +173,7 @@
|
|||||||
dat += "<a href='?src=[REF(src)];screen=1'>Back</a>"
|
dat += "<a href='?src=[REF(src)];screen=1'>Back</a>"
|
||||||
dat += "<br><b>Medical Robots:</b>"
|
dat += "<br><b>Medical Robots:</b>"
|
||||||
var/bdat = null
|
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)
|
if(M.z != src.z)
|
||||||
continue //only find medibots on the same z-level as the computer
|
continue //only find medibots on the same z-level as the computer
|
||||||
var/turf/bl = get_turf(M)
|
var/turf/bl = get_turf(M)
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
user.set_machine(src)
|
user.set_machine(src)
|
||||||
var/dat
|
var/dat
|
||||||
var/robots = 0
|
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))
|
if(!can_control(user, R))
|
||||||
continue
|
continue
|
||||||
robots++
|
robots++
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
dat += "<BR>"
|
dat += "<BR>"
|
||||||
|
|
||||||
var/drones = 0
|
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)
|
if(D.hacked)
|
||||||
continue
|
continue
|
||||||
drones++
|
drones++
|
||||||
|
|||||||
@@ -699,7 +699,7 @@ What a mess.*/
|
|||||||
if("released")
|
if("released")
|
||||||
active2.fields["criminal"] = "Discharged"
|
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)
|
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()
|
H.sec_hud_set_security_status()
|
||||||
if("Delete Record (Security) Execute")
|
if("Delete Record (Security) Execute")
|
||||||
investigate_log("[usr.name] ([usr.key]) has deleted the security records for [active1.fields["name"]].", INVESTIGATE_RECORDS)
|
investigate_log("[usr.name] ([usr.key]) has deleted the security records for [active1.fields["name"]].", INVESTIGATE_RECORDS)
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
/obj/effect/manifest
|
/obj/effect/manifest
|
||||||
name = "manifest"
|
name = "manifest"
|
||||||
icon = 'icons/mob/screen_gen.dmi'
|
icon = 'icons/mob/screen_gen.dmi'
|
||||||
icon_state = "x"
|
icon_state = "x"
|
||||||
|
|
||||||
/obj/effect/manifest/New()
|
/obj/effect/manifest/New()
|
||||||
src.invisibility = INVISIBILITY_ABSTRACT
|
src.invisibility = INVISIBILITY_ABSTRACT
|
||||||
|
|
||||||
/obj/effect/manifest/proc/manifest()
|
/obj/effect/manifest/proc/manifest()
|
||||||
var/dat = "<B>Crew Manifest</B>:<BR>"
|
var/dat = "<B>Crew Manifest</B>:<BR>"
|
||||||
for(var/mob/living/carbon/human/M in GLOB.mob_list)
|
for(var/mob/living/carbon/human/M in GLOB.carbon_list)
|
||||||
dat += text(" <B>[]</B> - []<BR>", M.name, M.get_assignment())
|
dat += text(" <B>[]</B> - []<BR>", M.name, M.get_assignment())
|
||||||
var/obj/item/paper/P = new /obj/item/paper( src.loc )
|
var/obj/item/paper/P = new /obj/item/paper( src.loc )
|
||||||
P.info = dat
|
P.info = dat
|
||||||
P.name = "paper- 'Crew Manifest'"
|
P.name = "paper- 'Crew Manifest'"
|
||||||
//SN src = null
|
//SN src = null
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|||||||
@@ -505,7 +505,7 @@ Code:
|
|||||||
menu += "<h4>Located Cleanbots:</h4>"
|
menu += "<h4>Located Cleanbots:</h4>"
|
||||||
|
|
||||||
ldat = null
|
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)
|
var/turf/bl = get_turf(B)
|
||||||
|
|
||||||
if(bl)
|
if(bl)
|
||||||
@@ -715,7 +715,7 @@ Code:
|
|||||||
var/turf/current_turf = get_turf(src)
|
var/turf/current_turf = get_turf(src)
|
||||||
var/zlevel = current_turf.z
|
var/zlevel = current_turf.z
|
||||||
var/botcount = 0
|
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!
|
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.
|
continue //Also, the PDA must have access to the bot type.
|
||||||
menu += "<A href='byond://?src=[REF(src)];op=control;bot=[REF(Bot)]'><b>[Bot.name]</b> ([Bot.get_mode()])<BR>"
|
menu += "<A href='byond://?src=[REF(src)];op=control;bot=[REF(Bot)]'><b>[Bot.name]</b> ([Bot.get_mode()])<BR>"
|
||||||
|
|||||||
@@ -103,7 +103,7 @@
|
|||||||
var/list/name_counts = list()
|
var/list/name_counts = list()
|
||||||
var/list/names = 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))
|
if(!trackable(H))
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -147,4 +147,3 @@
|
|||||||
return PROCESS_KILL
|
return PROCESS_KILL
|
||||||
scan_for_target()
|
scan_for_target()
|
||||||
update_icon()
|
update_icon()
|
||||||
|
|
||||||
|
|||||||
@@ -700,7 +700,8 @@
|
|||||||
|
|
||||||
/datum/admins/proc/output_ai_laws()
|
/datum/admins/proc/output_ai_laws()
|
||||||
var/ai_number = 0
|
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++
|
ai_number++
|
||||||
if(isAI(S))
|
if(isAI(S))
|
||||||
to_chat(usr, "<b>AI [key_name(S, usr)]'s laws:</b>")
|
to_chat(usr, "<b>AI [key_name(S, usr)]'s laws:</b>")
|
||||||
|
|||||||
@@ -253,7 +253,7 @@
|
|||||||
return
|
return
|
||||||
var/dat = "<B>Showing DNA from blood.</B><HR>"
|
var/dat = "<B>Showing DNA from blood.</B><HR>"
|
||||||
dat += "<table cellspacing=5><tr><th>Name</th><th>DNA</th><th>Blood Type</th></tr>"
|
dat += "<table cellspacing=5><tr><th>Name</th><th>DNA</th><th>Blood Type</th></tr>"
|
||||||
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)
|
if(H.ckey)
|
||||||
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.dna.blood_type]</td></tr>"
|
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.dna.blood_type]</td></tr>"
|
||||||
dat += "</table>"
|
dat += "</table>"
|
||||||
@@ -263,7 +263,7 @@
|
|||||||
return
|
return
|
||||||
var/dat = "<B>Showing Fingerprints.</B><HR>"
|
var/dat = "<B>Showing Fingerprints.</B><HR>"
|
||||||
dat += "<table cellspacing=5><tr><th>Name</th><th>Fingerprints</th></tr>"
|
dat += "<table cellspacing=5><tr><th>Name</th><th>Fingerprints</th></tr>"
|
||||||
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)
|
if(H.ckey)
|
||||||
dat += "<tr><td>[H]</td><td>[md5(H.dna.uni_identity)]</td></tr>"
|
dat += "<tr><td>[H]</td><td>[md5(H.dna.uni_identity)]</td></tr>"
|
||||||
dat += "</table>"
|
dat += "</table>"
|
||||||
@@ -273,7 +273,7 @@
|
|||||||
if(!check_rights(R_FUN))
|
if(!check_rights(R_FUN))
|
||||||
return
|
return
|
||||||
SSblackbox.add_details("admin_secrets_fun_used","Monkeyize All Humans")
|
SSblackbox.add_details("admin_secrets_fun_used","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)
|
spawn(0)
|
||||||
H.monkeyize()
|
H.monkeyize()
|
||||||
ok = 1
|
ok = 1
|
||||||
@@ -287,7 +287,7 @@
|
|||||||
log_admin("[key_name(usr)] turned all humans into [result]", 1)
|
log_admin("[key_name(usr)] turned all humans into [result]", 1)
|
||||||
message_admins("\blue [key_name_admin(usr)] turned all humans into [result]")
|
message_admins("\blue [key_name_admin(usr)] turned all humans into [result]")
|
||||||
var/newtype = GLOB.species_list[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)
|
H.set_species(newtype)
|
||||||
|
|
||||||
if("tripleAI")
|
if("tripleAI")
|
||||||
@@ -380,7 +380,7 @@
|
|||||||
return
|
return
|
||||||
SSblackbox.add_details("admin_secrets_fun_used","Chinese Cartoons")
|
SSblackbox.add_details("admin_secrets_fun_used","Chinese Cartoons")
|
||||||
message_admins("[key_name_admin(usr)] made everything kawaii.")
|
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'))
|
SEND_SOUND(H, sound('sound/ai/animes.ogg'))
|
||||||
|
|
||||||
if(H.dna.species.id == "human")
|
if(H.dna.species.id == "human")
|
||||||
@@ -505,7 +505,7 @@
|
|||||||
if(!check_rights(R_FUN))
|
if(!check_rights(R_FUN))
|
||||||
return
|
return
|
||||||
SSblackbox.add_details("admin_secrets_fun_used","Dwarf Beards")
|
SSblackbox.add_details("admin_secrets_fun_used","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.facial_hair_style = "Dward Beard"
|
||||||
B.update_hair()
|
B.update_hair()
|
||||||
message_admins("[key_name_admin(usr)] activated dorf mode")
|
message_admins("[key_name_admin(usr)] activated dorf mode")
|
||||||
|
|||||||
@@ -741,7 +741,7 @@ GLOBAL_PROTECT(LastAdminCalledProc)
|
|||||||
if("Mobs")
|
if("Mobs")
|
||||||
to_chat(usr, jointext(GLOB.mob_list,","))
|
to_chat(usr, jointext(GLOB.mob_list,","))
|
||||||
if("Living Mobs")
|
if("Living Mobs")
|
||||||
to_chat(usr, jointext(GLOB.living_mob_list,","))
|
to_chat(usr, jointext(GLOB.alive_mob_list,","))
|
||||||
if("Dead Mobs")
|
if("Dead Mobs")
|
||||||
to_chat(usr, jointext(GLOB.dead_mob_list,","))
|
to_chat(usr, jointext(GLOB.dead_mob_list,","))
|
||||||
if("Clients")
|
if("Clients")
|
||||||
|
|||||||
@@ -1006,7 +1006,7 @@ GLOBAL_LIST_EMPTY(custom_outfits) //Admin created outfits
|
|||||||
if(confirm != "Yes")
|
if(confirm != "Yes")
|
||||||
return
|
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)
|
new /obj/item/organ/zombie_infection(H)
|
||||||
|
|
||||||
message_admins("[key_name_admin(usr)] added a latent zombie infection to all humans.")
|
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")
|
if(confirm != "Yes")
|
||||||
return
|
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)
|
var/who_did_it = key_name_admin(usr)
|
||||||
|
|
||||||
message_admins("[key_name_admin(usr)] started polymorphed all living mobs.")
|
message_admins("[key_name_admin(usr)] started polymorphed all living mobs.")
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
|
|
||||||
////////// wildwest papers
|
////////// wildwest papers
|
||||||
|
|
||||||
/obj/item/paper/fluff/awaymissions/wildwest/grinder
|
/obj/item/paper/fluff/awaymissions/wildwest/grinder
|
||||||
info = "meat grinder requires sacri"
|
info = "meat grinder requires sacri"
|
||||||
|
|
||||||
@@ -124,7 +124,7 @@
|
|||||||
if("Peace")
|
if("Peace")
|
||||||
to_chat(user, "<B>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.</B>")
|
to_chat(user, "<B>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.</B>")
|
||||||
to_chat(user, "You feel as if you just narrowly avoided a terrible fate...")
|
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()
|
F.death()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,7 @@
|
|||||||
if(!virus_type)
|
if(!virus_type)
|
||||||
virus_type = pick(/datum/disease/dnaspread, /datum/disease/advance/flu, /datum/disease/advance/cold, /datum/disease/brainrot, /datum/disease/magnitis)
|
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)
|
var/turf/T = get_turf(H)
|
||||||
if(!T)
|
if(!T)
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -8,14 +8,14 @@
|
|||||||
|
|
||||||
/datum/round_event/spooky/start()
|
/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
|
var/obj/item/storage/backpack/b = locate() in H.contents
|
||||||
if(b)
|
if(b)
|
||||||
new /obj/item/storage/spooky(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))
|
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)
|
new /mob/living/simple_animal/parrot/Poly/ghost(Poly.loc)
|
||||||
qdel(Poly)
|
qdel(Poly)
|
||||||
|
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
/datum/round_event/valentines/start()
|
/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)
|
H.put_in_hands(new /obj/item/valentine)
|
||||||
var/obj/item/storage/backpack/b = locate() in H.contents
|
var/obj/item/storage/backpack/b = locate() in H.contents
|
||||||
new /obj/item/reagent_containers/food/snacks/candyheart(b)
|
new /obj/item/reagent_containers/food/snacks/candyheart(b)
|
||||||
|
|||||||
@@ -30,7 +30,7 @@
|
|||||||
for(var/turf/open/floor/T in orange(1,xmas))
|
for(var/turf/open/floor/T in orange(1,xmas))
|
||||||
for(var/i=1,i<=rand(1,5),i++)
|
for(var/i=1,i<=rand(1,5),i++)
|
||||||
new /obj/item/a_gift(T)
|
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))
|
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)
|
for(var/obj/machinery/computer/security/telescreen/entertainment/Monitor in GLOB.machines)
|
||||||
Monitor.icon_state = "entertainment_xmas"
|
Monitor.icon_state = "entertainment_xmas"
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
|
|
||||||
/datum/round_event/ion_storm/start()
|
/datum/round_event/ion_storm/start()
|
||||||
//AI laws
|
//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()
|
M.laws_sanity_check()
|
||||||
if(M.stat != DEAD && M.see_in_dark != 0)
|
if(M.stat != DEAD && M.see_in_dark != 0)
|
||||||
if(prob(replaceLawsetChance))
|
if(prob(replaceLawsetChance))
|
||||||
@@ -55,7 +55,7 @@
|
|||||||
M.post_lawchange()
|
M.post_lawchange()
|
||||||
|
|
||||||
if(botEmagChance)
|
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))
|
if(prob(botEmagChance))
|
||||||
bot.emag_act()
|
bot.emag_act()
|
||||||
|
|
||||||
|
|||||||
@@ -9,5 +9,5 @@
|
|||||||
fakeable = FALSE
|
fakeable = FALSE
|
||||||
|
|
||||||
/datum/round_event/mass_hallucination/start()
|
/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)
|
C.hallucination += rand(20, 50)
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
// find our chosen mob to breathe life into
|
// find our chosen mob to breathe life into
|
||||||
// Mobs have to be simple animals, mindless and on station
|
// Mobs have to be simple animals, mindless and on station
|
||||||
var/list/potential = list()
|
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)
|
var/turf/T = get_turf(L)
|
||||||
if(!(T.z in GLOB.station_z_levels))
|
if(!(T.z in GLOB.station_z_levels))
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
fakeable = FALSE
|
fakeable = FALSE
|
||||||
|
|
||||||
/datum/round_event/spontaneous_appendicitis/start()
|
/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)
|
if(!H.client)
|
||||||
continue
|
continue
|
||||||
if(H.stat == DEAD)
|
if(H.stat == DEAD)
|
||||||
|
|||||||
@@ -9,7 +9,8 @@
|
|||||||
|
|
||||||
/datum/round_event/wizard/robelesscasting/start()
|
/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)
|
if(L.mind && L.mind.spell_list.len != 0)
|
||||||
var/spell_improved = FALSE
|
var/spell_improved = FALSE
|
||||||
for(var/obj/effect/proc_holder/spell/S in L.mind.spell_list)
|
for(var/obj/effect/proc_holder/spell/S in L.mind.spell_list)
|
||||||
@@ -29,7 +30,8 @@
|
|||||||
earliest_start = 0
|
earliest_start = 0
|
||||||
|
|
||||||
/datum/round_event/wizard/improvedcasting/start()
|
/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)
|
if(L.mind && L.mind.spell_list.len != 0)
|
||||||
for(var/obj/effect/proc_holder/spell/S in L.mind.spell_list)
|
for(var/obj/effect/proc_holder/spell/S in L.mind.spell_list)
|
||||||
S.name = initial(S.name)
|
S.name = initial(S.name)
|
||||||
|
|||||||
@@ -37,7 +37,7 @@
|
|||||||
ruins_spaceworthiness = 1
|
ruins_spaceworthiness = 1
|
||||||
ruins_wizard_loadout = 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))
|
if(ruins_spaceworthiness && !(H.z in GLOB.station_z_levels) || isspaceturf(H.loc) || isplasmaman(H))
|
||||||
continue //#savetheminers
|
continue //#savetheminers
|
||||||
if(ruins_wizard_loadout && iswizard(H))
|
if(ruins_wizard_loadout && iswizard(H))
|
||||||
@@ -54,7 +54,7 @@
|
|||||||
I.flags_1 |= NODROP_1
|
I.flags_1 |= NODROP_1
|
||||||
I.name = "cursed " + I.name
|
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
|
var/datum/effect_system/smoke_spread/smoke = new
|
||||||
smoke.set_up(0, H.loc)
|
smoke.set_up(0, H.loc)
|
||||||
smoke.start()
|
smoke.start()
|
||||||
|
|||||||
@@ -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")
|
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)
|
if(H.mind)
|
||||||
var/datum/mind/M = H.mind
|
var/datum/mind/M = H.mind
|
||||||
if(M.assigned_role && !(M in SSticker.mode.traitors))
|
if(M.assigned_role && !(M in SSticker.mode.traitors))
|
||||||
|
|||||||
@@ -83,7 +83,8 @@
|
|||||||
|
|
||||||
. = ..()
|
. = ..()
|
||||||
GLOB.poi_list.Remove(src)
|
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 = "<span class='warning'>A dark temptation has passed from this world"
|
var/message = "<span class='warning'>A dark temptation has passed from this world"
|
||||||
if(M in color_altered_mobs)
|
if(M in color_altered_mobs)
|
||||||
message += " and you're finally able to forgive yourself"
|
message += " and you're finally able to forgive yourself"
|
||||||
|
|||||||
@@ -7,6 +7,6 @@
|
|||||||
|
|
||||||
/datum/round_event/wizard/invincible/start()
|
/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)
|
H.reagents.add_reagent("adminordrazine", 40) //100 ticks of absolute invinciblity (barring gibs)
|
||||||
to_chat(H, "<span class='notice'>You feel invincible, nothing can hurt you!</span>")
|
to_chat(H, "<span class='notice'>You feel invincible, nothing can hurt you!</span>")
|
||||||
@@ -7,7 +7,7 @@
|
|||||||
var/mobs_to_dupe = 0
|
var/mobs_to_dupe = 0
|
||||||
|
|
||||||
/datum/round_event_control/wizard/petsplosion/preRunEvent()
|
/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))
|
if(!ishostile(F) && (F.z in GLOB.station_z_levels))
|
||||||
mobs_to_dupe++
|
mobs_to_dupe++
|
||||||
if(mobs_to_dupe > 100 || !mobs_to_dupe)
|
if(mobs_to_dupe > 100 || !mobs_to_dupe)
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
/datum/round_event/wizard/petsplosion/tick()
|
/datum/round_event/wizard/petsplosion/tick()
|
||||||
if(activeFor >= 30 * countdown) // 0 seconds : 2 animals | 30 seconds : 4 animals | 1 minute : 8 animals
|
if(activeFor >= 30 * countdown) // 0 seconds : 2 animals | 30 seconds : 4 animals | 1 minute : 8 animals
|
||||||
countdown += 1
|
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))
|
if(!ishostile(F) && (F.z in GLOB.station_z_levels))
|
||||||
new F.type(F.loc)
|
new F.type(F.loc)
|
||||||
mobs_duped++
|
mobs_duped++
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
if(prob(50))
|
if(prob(50))
|
||||||
all_the_same = 1
|
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.set_species(new_species)
|
||||||
H.real_name = new_species.random_name(H.gender,1)
|
H.real_name = new_species.random_name(H.gender,1)
|
||||||
H.dna.unique_enzymes = H.dna.generate_unique_enzymes()
|
H.dna.unique_enzymes = H.dna.generate_unique_enzymes()
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
var/list/moblocs = list()
|
var/list/moblocs = list()
|
||||||
var/list/mobs = 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))
|
if(!(H.z in GLOB.station_z_levels))
|
||||||
continue //lets not try to strand people in space or stuck in the wizards den
|
continue //lets not try to strand people in space or stuck in the wizards den
|
||||||
moblocs += H.loc
|
moblocs += H.loc
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
do_teleport(H, moblocs[moblocs.len])
|
do_teleport(H, moblocs[moblocs.len])
|
||||||
moblocs.len -= 1
|
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
|
var/datum/effect_system/smoke_spread/smoke = new
|
||||||
smoke.set_up(0, H.loc)
|
smoke.set_up(0, H.loc)
|
||||||
smoke.start()
|
smoke.start()
|
||||||
@@ -48,7 +48,7 @@
|
|||||||
var/list/mobnames = list()
|
var/list/mobnames = list()
|
||||||
var/list/mobs = 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
|
mobnames += H.real_name
|
||||||
mobs += H
|
mobs += H
|
||||||
|
|
||||||
@@ -64,7 +64,7 @@
|
|||||||
H.real_name = mobnames[mobnames.len]
|
H.real_name = mobnames[mobnames.len]
|
||||||
mobnames.len -= 1
|
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
|
var/datum/effect_system/smoke_spread/smoke = new
|
||||||
smoke.set_up(0, H.loc)
|
smoke.set_up(0, H.loc)
|
||||||
smoke.start()
|
smoke.start()
|
||||||
@@ -81,7 +81,7 @@
|
|||||||
/datum/round_event/wizard/shuffleminds/start()
|
/datum/round_event/wizard/shuffleminds/start()
|
||||||
var/list/mobs = 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.stat || !H.mind || iswizard(H))
|
if(H.stat || !H.mind || iswizard(H))
|
||||||
continue //the wizard(s) are spared on this one
|
continue //the wizard(s) are spared on this one
|
||||||
mobs += H
|
mobs += H
|
||||||
@@ -98,7 +98,7 @@
|
|||||||
swapper.cast(list(H), mobs[mobs.len], 1)
|
swapper.cast(list(H), mobs[mobs.len], 1)
|
||||||
mobs -= mobs[mobs.len]
|
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
|
var/datum/effect_system/smoke_spread/smoke = new
|
||||||
smoke.set_up(0, H.loc)
|
smoke.set_up(0, H.loc)
|
||||||
smoke.start()
|
smoke.start()
|
||||||
|
|||||||
@@ -460,7 +460,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list(
|
|||||||
var/image/A = null
|
var/image/A = null
|
||||||
var/kind = force_kind ? force_kind : pick("monkey","corgi","carp","skeleton","demon","zombie")
|
var/kind = force_kind ? force_kind : pick("monkey","corgi","carp","skeleton","demon","zombie")
|
||||||
feedback_details += "Type: [kind]"
|
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)
|
if(H == target)
|
||||||
continue
|
continue
|
||||||
if(skip_nearby && (H in view(target)))
|
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/mob/living/carbon/human/clone = null
|
||||||
var/clone_weapon = 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)
|
if(H.stat || H.lying)
|
||||||
continue
|
continue
|
||||||
clone = H
|
clone = H
|
||||||
@@ -769,7 +769,7 @@ GLOBAL_LIST_INIT(hallucinations_major, list(
|
|||||||
target.client.images.Remove(speech_overlay)
|
target.client.images.Remove(speech_overlay)
|
||||||
else // Radio talk
|
else // Radio talk
|
||||||
var/list/humans = list()
|
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
|
humans += H
|
||||||
person = pick(humans)
|
person = pick(humans)
|
||||||
var/message = target.compose_message(person,understood_language,pick(radio_messages),"1459",person.get_spans(),face_name = TRUE)
|
var/message = target.compose_message(person,understood_language,pick(radio_messages),"1459",person.get_spans(),face_name = TRUE)
|
||||||
|
|||||||
@@ -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!"
|
set desc= "Take over the body of a mindless creature!"
|
||||||
|
|
||||||
var/list/possessible = list()
|
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)
|
if(!(L in GLOB.player_list) && !L.mind)
|
||||||
possessible += L
|
possessible += L
|
||||||
|
|
||||||
|
|||||||
@@ -63,7 +63,7 @@
|
|||||||
if(!newbrain.damaged_brain) // the brain organ hasn't been beaten to death.
|
if(!newbrain.damaged_brain) // the brain organ hasn't been beaten to death.
|
||||||
brainmob.stat = CONSCIOUS //we manually revive the brain mob
|
brainmob.stat = CONSCIOUS //we manually revive the brain mob
|
||||||
GLOB.dead_mob_list -= brainmob
|
GLOB.dead_mob_list -= brainmob
|
||||||
GLOB.living_mob_list += brainmob
|
GLOB.alive_mob_list += brainmob
|
||||||
|
|
||||||
brainmob.reset_perspective()
|
brainmob.reset_perspective()
|
||||||
brain = newbrain
|
brain = newbrain
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
brainmob.stat = DEAD
|
brainmob.stat = DEAD
|
||||||
brainmob.emp_damage = 0
|
brainmob.emp_damage = 0
|
||||||
brainmob.reset_perspective() //so the brainmob follows the brain organ instead of the mmi. And to update our vision
|
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
|
GLOB.dead_mob_list += brainmob
|
||||||
brain.brainmob = brainmob //Set the brain to use the brainmob
|
brain.brainmob = brainmob //Set the brain to use the brainmob
|
||||||
brainmob = null //Set mmi brainmob var to null
|
brainmob = null //Set mmi brainmob var to null
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
|
|||||||
brainmob.mind.assigned_role = new_role
|
brainmob.mind.assigned_role = new_role
|
||||||
brainmob.stat = CONSCIOUS
|
brainmob.stat = CONSCIOUS
|
||||||
GLOB.dead_mob_list -= brainmob
|
GLOB.dead_mob_list -= brainmob
|
||||||
GLOB.living_mob_list += brainmob
|
GLOB.alive_mob_list += brainmob
|
||||||
|
|
||||||
visible_message(new_mob_message)
|
visible_message(new_mob_message)
|
||||||
check_success()
|
check_success()
|
||||||
|
|||||||
@@ -110,11 +110,12 @@ Des: Gives the client of the alien an image on each infected mob.
|
|||||||
----------------------------------------*/
|
----------------------------------------*/
|
||||||
/mob/living/carbon/alien/proc/AddInfectionImages()
|
/mob/living/carbon/alien/proc/AddInfectionImages()
|
||||||
if (client)
|
if (client)
|
||||||
for (var/mob/living/C in GLOB.mob_list)
|
for (var/i in GLOB.mob_living_list)
|
||||||
if(C.status_flags & XENO_HOST)
|
var/mob/living/L = i
|
||||||
var/obj/item/organ/body_egg/alien_embryo/A = C.getorgan(/obj/item/organ/body_egg/alien_embryo)
|
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)
|
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
|
client.images += I
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|||||||
@@ -1,23 +1,23 @@
|
|||||||
/mob/living/carbon/alien/humanoid/death(gibbed)
|
/mob/living/carbon/alien/humanoid/death(gibbed)
|
||||||
if(stat == DEAD)
|
if(stat == DEAD)
|
||||||
return
|
return
|
||||||
|
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
update_canmove()
|
update_canmove()
|
||||||
update_icons()
|
update_icons()
|
||||||
status_flags |= CANPUSH
|
status_flags |= CANPUSH
|
||||||
|
|
||||||
//When the alien queen dies, all others must pay the price for letting her die.
|
//When the alien queen dies, all others must pay the price for letting her die.
|
||||||
/mob/living/carbon/alien/humanoid/royal/queen/death(gibbed)
|
/mob/living/carbon/alien/humanoid/royal/queen/death(gibbed)
|
||||||
if(stat == DEAD)
|
if(stat == DEAD)
|
||||||
return
|
return
|
||||||
|
|
||||||
for(var/mob/living/carbon/C in GLOB.living_mob_list)
|
for(var/mob/living/carbon/C in GLOB.alive_mob_list)
|
||||||
if(C == src) //Make sure not to proc it on ourselves.
|
if(C == src) //Make sure not to proc it on ourselves.
|
||||||
continue
|
continue
|
||||||
var/obj/item/organ/alien/hivenode/node = C.getorgan(/obj/item/organ/alien/hivenode)
|
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
|
if(istype(node)) // just in case someone would ever add a diffirent node to hivenode slot
|
||||||
node.queen_death()
|
node.queen_death()
|
||||||
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|||||||
@@ -111,7 +111,7 @@
|
|||||||
|
|
||||||
//For alien evolution/promotion/queen finder procs. Checks for an active alien of that type
|
//For alien evolution/promotion/queen finder procs. Checks for an active alien of that type
|
||||||
/proc/get_alien_type(var/alienpath)
|
/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))
|
if(!istype(A, alienpath))
|
||||||
continue
|
continue
|
||||||
if(!A.key || A.stat == DEAD) //Only living aliens with a ckey are valid.
|
if(!A.key || A.stat == DEAD) //Only living aliens with a ckey are valid.
|
||||||
|
|||||||
@@ -46,7 +46,7 @@
|
|||||||
|
|
||||||
/mob/living/carbon/alien/humanoid/royal/queen/Initialize()
|
/mob/living/carbon/alien/humanoid/royal/queen/Initialize()
|
||||||
//there should only be one queen
|
//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)
|
if(Q == src)
|
||||||
continue
|
continue
|
||||||
if(Q.stat == DEAD)
|
if(Q.stat == DEAD)
|
||||||
|
|||||||
@@ -2,9 +2,10 @@
|
|||||||
blood_volume = BLOOD_VOLUME_NORMAL
|
blood_volume = BLOOD_VOLUME_NORMAL
|
||||||
|
|
||||||
/mob/living/carbon/Initialize()
|
/mob/living/carbon/Initialize()
|
||||||
|
. = ..()
|
||||||
create_reagents(1000)
|
create_reagents(1000)
|
||||||
update_body_parts() //to update the carbon's new bodyparts appearance
|
update_body_parts() //to update the carbon's new bodyparts appearance
|
||||||
..()
|
GLOB.carbon_list += src
|
||||||
|
|
||||||
/mob/living/carbon/Destroy()
|
/mob/living/carbon/Destroy()
|
||||||
//This must be done first, so the mob ghosts correctly before DNA etc is nulled
|
//This must be done first, so the mob ghosts correctly before DNA etc is nulled
|
||||||
@@ -16,6 +17,7 @@
|
|||||||
QDEL_LIST(implants)
|
QDEL_LIST(implants)
|
||||||
remove_from_all_data_huds()
|
remove_from_all_data_huds()
|
||||||
QDEL_NULL(dna)
|
QDEL_NULL(dna)
|
||||||
|
GLOB.carbon_list -= src
|
||||||
|
|
||||||
/mob/living/carbon/relaymove(mob/user, direction)
|
/mob/living/carbon/relaymove(mob/user, direction)
|
||||||
if(user in src.stomach_contents)
|
if(user in src.stomach_contents)
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE)
|
deadchat_broadcast(rendered, follow_target = src, turf_target = T, message_type=DEADCHAT_DEATHRATTLE)
|
||||||
if(mind)
|
if(mind)
|
||||||
mind.store_memory("Time of death: [tod]", 0)
|
mind.store_memory("Time of death: [tod]", 0)
|
||||||
GLOB.living_mob_list -= src
|
GLOB.alive_mob_list -= src
|
||||||
if(!gibbed)
|
if(!gibbed)
|
||||||
GLOB.dead_mob_list += src
|
GLOB.dead_mob_list += src
|
||||||
set_drugginess(0)
|
set_drugginess(0)
|
||||||
|
|||||||
@@ -16,6 +16,7 @@
|
|||||||
var/datum/atom_hud/data/human/medical/advanced/medhud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
var/datum/atom_hud/data/human/medical/advanced/medhud = GLOB.huds[DATA_HUD_MEDICAL_ADVANCED]
|
||||||
medhud.add_to_hud(src)
|
medhud.add_to_hud(src)
|
||||||
faction += "[REF(src)]"
|
faction += "[REF(src)]"
|
||||||
|
GLOB.mob_living_list += src
|
||||||
|
|
||||||
|
|
||||||
/mob/living/prepare_huds()
|
/mob/living/prepare_huds()
|
||||||
@@ -47,6 +48,7 @@
|
|||||||
qdel(I)
|
qdel(I)
|
||||||
staticOverlays.len = 0
|
staticOverlays.len = 0
|
||||||
remove_from_all_data_huds()
|
remove_from_all_data_huds()
|
||||||
|
GLOB.mob_living_list -= src
|
||||||
|
|
||||||
return ..()
|
return ..()
|
||||||
|
|
||||||
@@ -368,7 +370,7 @@
|
|||||||
fully_heal(admin_revive)
|
fully_heal(admin_revive)
|
||||||
if(stat == DEAD && can_be_revived()) //in some cases you can't revive (e.g. no brain)
|
if(stat == DEAD && can_be_revived()) //in some cases you can't revive (e.g. no brain)
|
||||||
GLOB.dead_mob_list -= src
|
GLOB.dead_mob_list -= src
|
||||||
GLOB.living_mob_list += src
|
GLOB.alive_mob_list += src
|
||||||
suiciding = 0
|
suiciding = 0
|
||||||
stat = UNCONSCIOUS //the mob starts unconscious,
|
stat = UNCONSCIOUS //the mob starts unconscious,
|
||||||
blind_eyes(1)
|
blind_eyes(1)
|
||||||
|
|||||||
@@ -404,14 +404,14 @@
|
|||||||
if(call_bot_cooldown > world.time)
|
if(call_bot_cooldown > world.time)
|
||||||
to_chat(src, "<span class='danger'>Error: Your last call bot command is still processing, please wait for the bot to finish calculating a route.</span>")
|
to_chat(src, "<span class='danger'>Error: Your last call bot command is still processing, please wait for the bot to finish calculating a route.</span>")
|
||||||
return
|
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)
|
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.
|
return //True if there is no bot found, the bot is manually emagged, or the AI is carded with wireless off.
|
||||||
waypoint_mode = 1
|
waypoint_mode = 1
|
||||||
to_chat(src, "<span class='notice'>Set your waypoint by clicking on a valid location free of obstructions.</span>")
|
to_chat(src, "<span class='notice'>Set your waypoint by clicking on a valid location free of obstructions.</span>")
|
||||||
return
|
return
|
||||||
if(href_list["interface"]) //Remotely connect to a bot!
|
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)
|
if(!Bot || Bot.remote_disabled || src.control_disabled)
|
||||||
return
|
return
|
||||||
Bot.attack_ai(src)
|
Bot.attack_ai(src)
|
||||||
@@ -468,7 +468,7 @@
|
|||||||
d += "<A HREF=?src=[REF(src)];botrefresh=1>Query network status</A><br>"
|
d += "<A HREF=?src=[REF(src)];botrefresh=1>Query network status</A><br>"
|
||||||
d += "<table width='100%'><tr><td width='40%'><h3>Name</h3></td><td width='30%'><h3>Status</h3></td><td width='30%'><h3>Location</h3></td><td width='10%'><h3>Control</h3></td></tr>"
|
d += "<table width='100%'><tr><td width='40%'><h3>Name</h3></td><td width='30%'><h3>Status</h3></td><td width='30%'><h3>Location</h3></td><td width='10%'><h3>Control</h3></td></tr>"
|
||||||
|
|
||||||
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!
|
if(Bot.z == ai_Zlevel && !Bot.remote_disabled) //Only non-emagged bots on the same Z-level are detected!
|
||||||
bot_area = get_area(Bot)
|
bot_area = get_area(Bot)
|
||||||
var/bot_mode = Bot.get_mode()
|
var/bot_mode = Bot.get_mode()
|
||||||
|
|||||||
@@ -9,6 +9,6 @@
|
|||||||
clear_fullscreens()
|
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.
|
//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()
|
ghostize()
|
||||||
qdel(src)
|
qdel(src)
|
||||||
|
|||||||
@@ -172,7 +172,7 @@
|
|||||||
if(mmi.brainmob.stat == DEAD)
|
if(mmi.brainmob.stat == DEAD)
|
||||||
mmi.brainmob.stat = CONSCIOUS
|
mmi.brainmob.stat = CONSCIOUS
|
||||||
GLOB.dead_mob_list -= mmi.brainmob
|
GLOB.dead_mob_list -= mmi.brainmob
|
||||||
GLOB.living_mob_list += mmi.brainmob
|
GLOB.alive_mob_list += mmi.brainmob
|
||||||
mind.transfer_to(mmi.brainmob)
|
mind.transfer_to(mmi.brainmob)
|
||||||
mmi.update_icon()
|
mmi.update_icon()
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -18,17 +18,19 @@
|
|||||||
|
|
||||||
//Base proc for anything to call
|
//Base proc for anything to call
|
||||||
/proc/_alert_drones(msg, dead_can_hear = 0, atom/source, mob/living/faction_checked_mob, exact_faction_match)
|
/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)
|
if (dead_can_hear && source)
|
||||||
var/mob/living/simple_animal/drone/M = W
|
for (var/mob/M in GLOB.dead_mob_list)
|
||||||
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))
|
|
||||||
var/link = FOLLOW_LINK(M, source)
|
var/link = FOLLOW_LINK(M, source)
|
||||||
to_chat(M, "[link] [msg]")
|
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
|
//Wrapper for drones to handle factions
|
||||||
|
|||||||
@@ -150,7 +150,8 @@
|
|||||||
staticOverlays.len = 0
|
staticOverlays.len = 0
|
||||||
|
|
||||||
if(seeStatic)
|
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))
|
if(isdrone(L))
|
||||||
continue
|
continue
|
||||||
var/image/chosen
|
var/image/chosen
|
||||||
|
|||||||
@@ -106,7 +106,7 @@ Difficulty: Hard
|
|||||||
|
|
||||||
/mob/living/simple_animal/hostile/megafauna/bubblegum/Initialize()
|
/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)
|
if(B != src)
|
||||||
return INITIALIZE_HINT_QDEL //There can be only one
|
return INITIALIZE_HINT_QDEL //There can be only one
|
||||||
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
|
var/obj/effect/proc_holder/spell/bloodcrawl/bloodspell = new
|
||||||
|
|||||||
@@ -129,7 +129,7 @@ Difficulty: Medium
|
|||||||
visible_message("<span class='boldannounce'>[src] splits in twain!</span>")
|
visible_message("<span class='boldannounce'>[src] splits in twain!</span>")
|
||||||
else
|
else
|
||||||
var/last_legion = TRUE
|
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)
|
if(other != src)
|
||||||
last_legion = FALSE
|
last_legion = FALSE
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -50,7 +50,7 @@
|
|||||||
#define MEDAL_PREFIX "Tendril"
|
#define MEDAL_PREFIX "Tendril"
|
||||||
/mob/living/simple_animal/hostile/spawner/lavaland/death()
|
/mob/living/simple_animal/hostile/spawner/lavaland/death()
|
||||||
var/last_tendril = TRUE
|
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)
|
if(other != src)
|
||||||
last_tendril = FALSE
|
last_tendril = FALSE
|
||||||
break
|
break
|
||||||
|
|||||||
@@ -185,7 +185,7 @@
|
|||||||
range = 10
|
range = 10
|
||||||
|
|
||||||
/obj/effect/proc_holder/spell/aoe_turf/blindness/cast(list/targets,mob/user = usr)
|
/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)
|
var/turf/T = get_turf(L.loc)
|
||||||
if(T && T in targets)
|
if(T && T in targets)
|
||||||
L.blind_eyes(4)
|
L.blind_eyes(4)
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
/mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game.
|
/mob/Destroy()//This makes sure that mobs with clients/keys are not just deleted from the game.
|
||||||
GLOB.mob_list -= src
|
GLOB.mob_list -= src
|
||||||
GLOB.dead_mob_list -= src
|
GLOB.dead_mob_list -= src
|
||||||
GLOB.living_mob_list -= src
|
GLOB.alive_mob_list -= src
|
||||||
GLOB.all_clockwork_mobs -= src
|
GLOB.all_clockwork_mobs -= src
|
||||||
GLOB.mob_directory -= tag
|
GLOB.mob_directory -= tag
|
||||||
for (var/alert in alerts)
|
for (var/alert in alerts)
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
if(stat == DEAD)
|
if(stat == DEAD)
|
||||||
GLOB.dead_mob_list += src
|
GLOB.dead_mob_list += src
|
||||||
else
|
else
|
||||||
GLOB.living_mob_list += src
|
GLOB.alive_mob_list += src
|
||||||
prepare_huds()
|
prepare_huds()
|
||||||
for(var/v in GLOB.active_alternate_appearances)
|
for(var/v in GLOB.active_alternate_appearances)
|
||||||
if(!v)
|
if(!v)
|
||||||
@@ -926,9 +926,9 @@
|
|||||||
if("stat")
|
if("stat")
|
||||||
if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life
|
if((stat == DEAD) && (var_value < DEAD))//Bringing the dead back to life
|
||||||
GLOB.dead_mob_list -= src
|
GLOB.dead_mob_list -= src
|
||||||
GLOB.living_mob_list += src
|
GLOB.alive_mob_list += src
|
||||||
if((stat < DEAD) && (var_value == DEAD))//Kill he
|
if((stat < DEAD) && (var_value == DEAD))//Kill he
|
||||||
GLOB.living_mob_list -= src
|
GLOB.alive_mob_list -= src
|
||||||
GLOB.dead_mob_list += src
|
GLOB.dead_mob_list += src
|
||||||
. = ..()
|
. = ..()
|
||||||
switch(var_name)
|
switch(var_name)
|
||||||
|
|||||||
@@ -274,7 +274,8 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
|
|||||||
/proc/findname(msg)
|
/proc/findname(msg)
|
||||||
if(!istext(msg))
|
if(!istext(msg))
|
||||||
msg = "[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)
|
if(M.real_name == msg)
|
||||||
return M
|
return M
|
||||||
return 0
|
return 0
|
||||||
|
|||||||
@@ -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()
|
/obj/machinery/gravity_generator/main/proc/shake_everyone()
|
||||||
var/turf/T = get_turf(src)
|
var/turf/T = get_turf(src)
|
||||||
var/sound/alert_sound = sound('sound/effects/alert.ogg')
|
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)
|
if(M.z != z)
|
||||||
continue
|
continue
|
||||||
M.update_gravity(M.mob_has_gravity())
|
M.update_gravity(M.mob_has_gravity())
|
||||||
|
|||||||
@@ -140,7 +140,7 @@
|
|||||||
acquire(enemy)
|
acquire(enemy)
|
||||||
return
|
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)
|
var/turf/pos = get_turf(food)
|
||||||
if(!pos || (pos.z != z))
|
if(!pos || (pos.z != z))
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -229,7 +229,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
|||||||
|
|
||||||
/obj/machinery/power/supermatter_shard/proc/explode()
|
/obj/machinery/power/supermatter_shard/proc/explode()
|
||||||
var/turf/T = get_turf(src)
|
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)
|
if(M.z == z)
|
||||||
SEND_SOUND(M, 'sound/magic/charge.ogg')
|
SEND_SOUND(M, 'sound/magic/charge.ogg')
|
||||||
to_chat(M, "<span class='boldannounce'>You feel reality distort for a moment...</span>")
|
to_chat(M, "<span class='boldannounce'>You feel reality distort for a moment...</span>")
|
||||||
@@ -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())
|
radio.talk_into(src, "Warning: Critical coolant mass reached.", engineering_channel, get_spans(), get_default_language())
|
||||||
|
|
||||||
if(damage > explosion_point)
|
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
|
var/mob/living/L = mob
|
||||||
if(istype(L) && L.z == z)
|
if(istype(L) && L.z == z)
|
||||||
if(ishuman(mob))
|
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)
|
investigate_log("Supermatter shard consumed by singularity.", INVESTIGATE_SINGULO)
|
||||||
message_admins("Singularity has consumed a supermatter shard and can now become stage six.")
|
message_admins("Singularity has consumed a supermatter shard and can now become stage six.")
|
||||||
visible_message("<span class='userdanger'>[src] is consumed by the singularity!</span>")
|
visible_message("<span class='userdanger'>[src] is consumed by the singularity!</span>")
|
||||||
for(var/mob/M in GLOB.mob_list)
|
for(var/mob/M in GLOB.player_list)
|
||||||
if(M.z == z)
|
if(M.z == z)
|
||||||
SEND_SOUND(M, 'sound/effects/supermatter.ogg') //everyone goan know bout this
|
SEND_SOUND(M, 'sound/effects/supermatter.ogg') //everyone goan know bout this
|
||||||
to_chat(M, "<span class='boldannounce'>A horrible screeching fills your ears, and a wave of dread washes over you...</span>")
|
to_chat(M, "<span class='boldannounce'>A horrible screeching fills your ears, and a wave of dread washes over you...</span>")
|
||||||
|
|||||||
@@ -86,8 +86,8 @@
|
|||||||
/obj/machinery/r_n_d/experimentor/Initialize()
|
/obj/machinery/r_n_d/experimentor/Initialize()
|
||||||
. = ..()
|
. = ..()
|
||||||
|
|
||||||
trackedIan = locate(/mob/living/simple_animal/pet/dog/corgi/Ian) 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_list
|
trackedRuntime = locate(/mob/living/simple_animal/pet/cat/Runtime) in GLOB.mob_living_list
|
||||||
SetTypeReactions()
|
SetTypeReactions()
|
||||||
|
|
||||||
/obj/machinery/r_n_d/experimentor/RefreshParts()
|
/obj/machinery/r_n_d/experimentor/RefreshParts()
|
||||||
|
|||||||
@@ -117,7 +117,7 @@
|
|||||||
return FALSE
|
return FALSE
|
||||||
|
|
||||||
/obj/docking_port/mobile/arrivals/proc/PersonCheck()
|
/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
|
var/mob/living/L = M
|
||||||
if((get_area(M) in areas) && L.stat != DEAD)
|
if((get_area(M) in areas) && L.stat != DEAD)
|
||||||
return TRUE
|
return TRUE
|
||||||
|
|||||||
@@ -82,7 +82,7 @@
|
|||||||
//Hacks
|
//Hacks
|
||||||
var/mob/living/carbon/human/user = usr
|
var/mob/living/carbon/human/user = usr
|
||||||
var/rendered = "<span class='abductor'><b>[user.name]:</b> [message]</span>"
|
var/rendered = "<span class='abductor'><b>[user.name]:</b> [message]</span>"
|
||||||
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)
|
var/obj/item/organ/tongue/T = H.getorganslot(ORGAN_SLOT_TONGUE)
|
||||||
if(!T || T.type != type)
|
if(!T || T.type != type)
|
||||||
continue
|
continue
|
||||||
|
|||||||
Reference in New Issue
Block a user