Hard upstream sync (#6951)

* maps - none of our changes included yet i'll get them in after i finish up the rest of the sync

* sync part 1 - underscore folders in code

* controllers folder

* datums folder

* game folder

* cmon, work

* modules - admin to awaymissions

* cargo to events

* fields to lighting

* mapping > ruins

* rest of the code folder

* rest of the folders in the root directory

* DME

* fixes compiling errors. it compiles so it works

* readds map changes

* fixes dogborg module select

* fixes typo in moduleselect_alternate_icon filepath
This commit is contained in:
deathride58
2018-05-31 23:03:18 +00:00
committed by kevinz000
parent b6e608cb4c
commit 2f9e3e403d
395 changed files with 134016 additions and 26287 deletions
+2 -2
View File
@@ -6,9 +6,9 @@ INITIALIZE_IMMEDIATE(/mob/dead)
sight = SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
/mob/dead/Initialize()
if(initialized)
if(flags_1 & INITIALIZED_1)
stack_trace("Warning: [src]([type]) initialized multiple times!")
initialized = TRUE
flags_1 |= INITIALIZED_1
tag = "mob_[next_mob_id++]"
GLOB.mob_list += src
@@ -10,7 +10,7 @@
density = FALSE
stat = DEAD
canmove = 0
canmove = FALSE
anchored = TRUE // don't get pushed around
var/mob/living/new_character //for instant transfer once the round is set up
@@ -377,11 +377,6 @@
if(GLOB.highlander)
to_chat(humanc, "<span class='userdanger'><i>THERE CAN BE ONLY ONE!!!</i></span>")
humanc.make_scottish()
/* if(prob(5) && !issilicon(humanc) && !jobban_isbanned(humanc.mind, "Syndicate") && GLOB.miscreants_allowed && ROLE_MISCREANT in humanc.client.prefs.be_special)
SSticker.generate_miscreant_objectives(humanc.mind)
else
if(CONFIG_GET(flag/allow_crew_objectives))
SSticker.generate_individual_objectives(humanc.mind) */
if(GLOB.summon_guns_triggered)
give_guns(humanc)
+3 -2
View File
@@ -68,8 +68,9 @@
if(prob(15))
Unconscious(rand(20,60))
to_chat(src, "<span class='warning'>You feel extremely [word].</span>")
if(0 to BLOOD_VOLUME_SURVIVE)
death()
if(-INFINITY to BLOOD_VOLUME_SURVIVE)
if(!has_trait(TRAIT_NODEATH))
death()
var/temp_bleed = 0
//Bleeding out
+3 -1
View File
@@ -148,6 +148,9 @@
to_chat(brainmob, "<span class='notice'>Radio is [radio.listening==1 ? "now" : "no longer"] receiving broadcast.</span>")
/obj/item/mmi/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
if(!brainmob || iscyborg(loc))
return
else
@@ -159,7 +162,6 @@
if(3)
brainmob.emp_damage = min(brainmob.emp_damage + rand(0,10), 30)
brainmob.emote("alarm")
..()
/obj/item/mmi/Destroy()
if(iscyborg(loc))
@@ -68,6 +68,7 @@ GLOBAL_VAR(posibrain_notify_cooldown)
else
visible_message(fail_message)
//ATTACK GHOST IGNORING PARENT RETURN VALUE
/obj/item/mmi/posibrain/attack_ghost(mob/user)
activate(user)
+3 -3
View File
@@ -739,14 +739,14 @@
if(status_flags & GODMODE)
return
if(stat != DEAD)
if(health <= HEALTH_THRESHOLD_DEAD)
if(health <= HEALTH_THRESHOLD_DEAD && !has_trait(TRAIT_NODEATH))
death()
return
if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (has_trait(TRAIT_FAKEDEATH)) || health <= HEALTH_THRESHOLD_FULLCRIT)
if(IsUnconscious() || IsSleeping() || getOxyLoss() > 50 || (has_trait(TRAIT_FAKEDEATH)) || (health <= HEALTH_THRESHOLD_FULLCRIT && !has_trait(TRAIT_NOHARDCRIT)))
stat = UNCONSCIOUS
blind_eyes(1)
else
if(health <= HEALTH_THRESHOLD_CRIT)
if(health <= HEALTH_THRESHOLD_CRIT && !has_trait(TRAIT_NOSOFTCRIT))
stat = SOFT_CRIT
else
stat = CONSCIOUS
@@ -214,10 +214,12 @@
adjustBruteLoss(10)
/mob/living/carbon/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_CONTENTS)
return
for(var/X in internal_organs)
var/obj/item/organ/O = X
O.emp_act(severity)
..()
/mob/living/carbon/electrocute_act(shock_damage, obj/source, siemens_coeff = 1, safety = 0, override = 0, tesla_shock = 0, illusion = 0, stun = TRUE)
if(tesla_shock && (flags_1 & TESLA_IGNORE_1))
@@ -497,12 +497,12 @@
// If targeting anything else, see if the wear suit is thin enough.
if (!penetrate_thick)
if(above_neck(target_zone))
if(head && is_type_in_typecache(head, GLOB.typecache_clothing))
if(head && istype(head, /obj/item/clothing))
var/obj/item/clothing/CH = head
if (CH.clothing_flags & THICKMATERIAL)
. = 0
else
if(wear_suit && is_type_in_typecache(wear_suit, GLOB.typecache_clothing))
if(wear_suit && istype(wear_suit, /obj/item/clothing))
var/obj/item/clothing/CS = wear_suit
if (CS.clothing_flags & THICKMATERIAL)
. = 0
@@ -596,20 +596,16 @@
threatcount += 6 //fuk u antags <3
//Check for nonhuman scum
if(dna && dna.species.id && !(dna.species.id in list("human" , "lizard", "mammal", "avian", "aquatic", "insect")))
if(dna && dna.species.id && dna.species.id != "human")
threatcount += 1
//mindshield implants imply trustworthyness
if(isloyal())
threatcount -= 1
//Agent cards lower threatlevel. But only enough to openly carry without being busted.
//Agent cards lower threatlevel.
if(istype(idcard, /obj/item/card/id/syndicate))
threatcount -= 2
//CentCom cards lower threat level. Even to emagged bots.
if(istype(idcard, /obj/item/card/id/centcom) || istype(idcard, /obj/item/card/id/ert))
threatcount -= 10
threatcount -= 5
return threatcount
@@ -469,6 +469,9 @@
/mob/living/carbon/human/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_CONTENTS)
return
var/informed = FALSE
for(var/obj/item/bodypart/L in src.bodyparts)
if(L.status == BODYPART_ROBOTIC)
@@ -482,7 +485,6 @@
if(2)
L.receive_damage(0,5)
Stun(100)
..()
/mob/living/carbon/human/acid_act(acidpwr, acid_volume, bodyzone_hit)
var/list/damaged = list()
@@ -11,7 +11,7 @@
if (!(lube&GALOSHES_DONT_HELP))
if(has_trait(TRAIT_NOSLIPWATER))
return 0
if(shoes && is_type_in_typecache(shoes, GLOB.typecache_clothing))
if(shoes && istype(shoes, /obj/item/clothing))
var/obj/item/clothing/CS = shoes
if (CS.clothing_flags & NOSLIP)
return 0
@@ -19,7 +19,7 @@
/mob/living/carbon/human/experience_pressure_difference()
playsound(src, 'sound/effects/space_wind.ogg', 50, 1)
if(shoes && is_type_in_typecache(shoes, GLOB.typecache_clothing))
if(shoes && istype(shoes, /obj/item/clothing))
var/obj/item/clothing/S = shoes
if (S.clothing_flags & NOSLIP)
return 0
+2 -2
View File
@@ -48,7 +48,7 @@
return ONE_ATMOSPHERE
if(istype(loc, /obj/item/dogborg/sleeper))
return ONE_ATMOSPHERE //END OF CIT CHANGES
if (wear_suit && head && is_type_in_typecache(wear_suit, GLOB.typecache_clothing) && is_type_in_typecache(head, GLOB.typecache_clothing))
if (wear_suit && head && istype(wear_suit, /obj/item/clothing) && istype(head, /obj/item/clothing))
var/obj/item/clothing/CS = wear_suit
var/obj/item/clothing/CH = head
if (CS.clothing_flags & CH.clothing_flags & STOPSPRESSUREDAMAGE)
@@ -293,7 +293,7 @@
if(glasses)
if(glasses.clothing_flags & BLOCK_GAS_SMOKE_EFFECT)
return TRUE
if(head && is_type_in_typecache(head, GLOB.typecache_clothing))
if(head && istype(head, /obj/item/clothing))
var/obj/item/clothing/CH = head
if(CH.clothing_flags & BLOCK_GAS_SMOKE_EFFECT)
return TRUE
@@ -25,7 +25,7 @@
/datum/species/plasmaman/spec_life(mob/living/carbon/human/H)
var/datum/gas_mixture/environment = H.loc.return_air()
var/atmos_sealed = FALSE
if (H.wear_suit && H.head && is_type_in_typecache(H.wear_suit, GLOB.typecache_clothing) && is_type_in_typecache(H.head, GLOB.typecache_clothing))
if (H.wear_suit && H.head && istype(H.wear_suit, /obj/item/clothing) && istype(H.head, /obj/item/clothing))
var/obj/item/clothing/CS = H.wear_suit
var/obj/item/clothing/CH = H.head
if (CS.clothing_flags & CH.clothing_flags & STOPSPRESSUREDAMAGE)
@@ -39,7 +39,7 @@
/datum/species/vampire/spec_life(mob/living/carbon/human/C)
. = ..()
if(istype(C.loc, /obj/structure/closet/coffin))
if(istype(C.loc, /obj/structure/closet/crate/coffin))
C.heal_overall_damage(4,4)
C.adjustToxLoss(-4)
C.adjustOxyLoss(-4)
@@ -29,3 +29,6 @@
return FALSE
return TRUE
return FALSE //Unsupported slot
@@ -183,4 +183,4 @@
#undef COLD_DAMAGE_LEVEL_1
#undef COLD_DAMAGE_LEVEL_2
#undef COLD_DAMAGE_LEVEL_3
#undef COLD_DAMAGE_LEVEL_3
+1 -13
View File
@@ -27,9 +27,6 @@
adjustStaminaLoss(damage * hit_percent)
if(BRAIN)
adjustBrainLoss(damage * hit_percent)
//citadel code
if(AROUSAL)
adjustArousalLoss(damage * hit_percent)
return 1
/mob/living/proc/apply_damage_type(damage = 0, damagetype = BRUTE) //like apply damage except it always uses the damage procs
@@ -48,9 +45,6 @@
return adjustStaminaLoss(damage)
if(BRAIN)
return adjustBrainLoss(damage)
//citadel code
if(AROUSAL)
return adjustArousalLoss(damage)
/mob/living/proc/get_damage_amount(damagetype = BRUTE)
switch(damagetype)
@@ -68,12 +62,9 @@
return getStaminaLoss()
if(BRAIN)
return getBrainLoss()
//citadel code
if(AROUSAL)
return getArousalLoss()
/mob/living/proc/apply_damages(brute = 0, burn = 0, tox = 0, oxy = 0, clone = 0, def_zone = null, blocked = FALSE, stamina = 0, brain = 0, arousal = 0)
/mob/living/proc/apply_damages(brute = 0, burn = 0, tox = 0, oxy = 0, clone = 0, def_zone = null, blocked = FALSE, stamina = 0, brain = 0)
if(blocked >= 100)
return 0
if(brute)
@@ -90,9 +81,6 @@
apply_damage(stamina, STAMINA, def_zone, blocked)
if(brain)
apply_damage(brain, BRAIN, def_zone, blocked)
//citadel code
if(arousal)
apply_damage(arousal, AROUSAL, def_zone, blocked)
return 1
+5 -2
View File
@@ -26,8 +26,11 @@
/mob/living/proc/spread_bodyparts()
return
/mob/living/dust(just_ash = FALSE)
death(1)
/mob/living/dust(just_ash = FALSE, drop_items = FALSE)
death(TRUE)
if(drop_items)
unequip_everything()
if(buckled)
buckled.unbuckle_mob(src,force=1)
+5
View File
@@ -58,6 +58,11 @@
message = "coughs!"
emote_type = EMOTE_AUDIBLE
/datum/emote/living/cough/can_run_emote(mob/user, status_check = TRUE)
. = ..()
if(user.reagents.get_reagent("menthol"))
return FALSE
/datum/emote/living/dance
key = "dance"
key_third_person = "dances"
+16 -15
View File
@@ -7,31 +7,32 @@
if((movement_type & FLYING) && !floating) //TODO: Better floating
float(on = TRUE)
if (client || registered_z) // This is a temporary error tracker to make sure we've caught everything
if (client)
var/turf/T = get_turf(src)
if (client && registered_z != T.z)
if(!T)
for(var/obj/effect/landmark/error/E in GLOB.landmarks_list)
forceMove(E.loc)
break
var/msg = "[key_name_admin(src)] [ADMIN_JMP(src)] was found to have no .loc with an attached client, if the cause is unknown it would be wise to ask how this was accomplished."
message_admins(msg)
send2irc_adminless_only("Mob", msg, R_ADMIN)
log_game("[key_name(src)] was found to have no .loc with an attached client.")
// This is a temporary error tracker to make sure we've caught everything
else if (registered_z != T.z)
#ifdef TESTING
message_admins("[src] [ADMIN_FLW(src)] has somehow ended up in Z-level [T.z] despite being registered in Z-level [registered_z]. If you could ask them how that happened and notify coderbus, it would be appreciated.")
#endif
log_game("Z-TRACKING: [src] has somehow ended up in Z-level [T.z] despite being registered in Z-level [registered_z].")
update_z(T.z)
else if (!client && registered_z)
log_game("Z-TRACKING: [src] of type [src.type] has a Z-registration despite not having a client.")
update_z(null)
else if (registered_z)
log_game("Z-TRACKING: [src] of type [src.type] has a Z-registration despite not having a client.")
update_z(null)
if (notransform)
return
if(!loc)
if(client)
for(var/obj/effect/landmark/error/E in GLOB.landmarks_list)
forceMove(E.loc)
break
var/msg = "[key_name_admin(src)] was found to have no .loc with an attached client, if the cause is unknown it would be wise to ask how this was accomplished."
message_admins(msg)
send2irc_adminless_only("Mob", msg, R_ADMIN)
log_game("[key_name(src)] was found to have no .loc with an attached client.")
else
return
return
var/datum/gas_mixture/environment = loc.return_air()
if(stat != DEAD)
+3 -1
View File
@@ -317,9 +317,11 @@
return shock_damage
/mob/living/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_CONTENTS)
return
for(var/obj/O in contents)
O.emp_act(severity)
..()
/mob/living/singularity_act()
var/gain = 20
@@ -22,6 +22,9 @@
return 0
/mob/living/silicon/ai/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
disconnect_shell()
if (prob(30))
switch(pick(1,2))
@@ -29,7 +32,6 @@
view_core()
if(2)
SSshuttle.requestEvac(src,"ALERT: Energy surge detected in AI core! Station integrity may be compromised! Initiati--%m091#ar-BZZT")
..()
/mob/living/silicon/ai/ex_act(severity, target)
switch(severity)
@@ -3,6 +3,9 @@
return FALSE
/mob/living/silicon/pai/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
take_holo_damage(50/severity)
Knockdown(400/severity)
silent = max(30/severity, silent)
@@ -90,7 +90,7 @@
/obj/item/clothing/head/wizard,
/obj/item/clothing/head/nursehat,
/obj/item/clothing/head/sombrero,
/obj/item/clothing/head/witchunter_hat)
/obj/item/clothing/head/helmet/chaplain/witchunter_hat)
can_buckle = TRUE
buckle_lying = FALSE
@@ -388,16 +388,11 @@
user.changeNext_move(CLICK_CD_MELEE)
var/obj/item/stack/cable_coil/coil = W
if (getFireLoss() > 0 || getToxLoss() > 0)
if(src == user && coil.use(1))
if(src == user)
to_chat(user, "<span class='notice'>You start fixing yourself...</span>")
if(!do_after(user, 50, target = src))
return
adjustFireLoss(-10)
adjustToxLoss(-10)
if (coil.use(1))
to_chat(user, "<span class='notice'>You start fixing [src]...</span>")
if(!do_after(user, 30, target = src))
return
adjustFireLoss(-30)
adjustToxLoss(-30)
updatehealth()
@@ -77,12 +77,14 @@
/mob/living/silicon/robot/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
switch(severity)
if(1)
Stun(160)
if(2)
Stun(60)
..()
/mob/living/silicon/robot/emag_act(mob/user)
@@ -58,6 +58,9 @@
return ..()
/obj/item/robot_module/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_CONTENTS)
return
for(var/obj/O in modules)
O.emp_act(severity)
..()
@@ -91,20 +91,22 @@
return 0 //So borgs they don't die trying to fix wiring
/mob/living/silicon/emp_act(severity)
. = ..()
to_chat(src, "<span class='danger'>Warning: Electromagnetic pulse detected.</span>")
if(. & EMP_PROTECT_SELF)
return
switch(severity)
if(1)
src.take_bodypart_damage(20)
if(2)
src.take_bodypart_damage(10)
to_chat(src, "<span class='userdanger'>*BZZZT*</span>")
to_chat(src, "<span class='danger'>Warning: Electromagnetic pulse detected.</span>")
for(var/mob/living/M in buckled_mobs)
if(prob(severity*50))
unbuckle_mob(M)
M.Knockdown(40)
M.visible_message("<span class='boldwarning'>[M] is thrown off of [src]!</span>")
flash_act(affect_silicon = 1)
..()
/mob/living/silicon/bullet_act(obj/item/projectile/Proj)
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
@@ -320,6 +320,9 @@
return ..()
/mob/living/simple_animal/bot/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
var/was_on = on
stat |= EMPED
new /obj/effect/temp_visual/emp(loc)
@@ -459,10 +459,12 @@ Auto Patrol[]"},
/mob/living/simple_animal/bot/ed209/emp_act(severity)
if(severity==2 && prob(70))
..(severity-1)
else
if(severity == 2 && prob(70))
severity = 1
. = ..()
if(. & EMP_PROTECT_SELF)
return
if (severity >= 2)
new /obj/effect/temp_visual/emp(loc)
var/list/mob/living/carbon/targets = new
for(var/mob/living/carbon/C in view(12,src))
@@ -357,7 +357,7 @@
if(ishuman(C))
var/mob/living/carbon/human/H = C
if (H.wear_suit && H.head && is_type_in_typecache(H.wear_suit, GLOB.typecache_clothing) && is_type_in_typecache(H.wear_suit, GLOB.typecache_clothing))
if (H.wear_suit && H.head && istype(H.wear_suit, /obj/item/clothing) && istype(H.head, /obj/item/clothing))
var/obj/item/clothing/CS = H.wear_suit
var/obj/item/clothing/CH = H.head
if (CS.clothing_flags & CH.clothing_flags & THICKMATERIAL)
@@ -687,11 +687,11 @@
calc_path()
/mob/living/simple_animal/bot/mulebot/emp_act(severity)
if(cell)
. = ..()
if(cell && !(. & EMP_PROTECT_CONTENTS))
cell.emp_act(severity)
if(load)
load.emp_act(severity)
..()
/mob/living/simple_animal/bot/mulebot/explode()
@@ -219,6 +219,9 @@
/mob/living/simple_animal/drone/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
Stun(100)
to_chat(src, "<span class='danger'><b>ER@%R: MME^RY CO#RU9T!</b> R&$b@0tin)...</span>")
if(severity == 1)
@@ -60,6 +60,6 @@
var/hat_type = pick(possible_seasonal_hats)
var/obj/item/new_hat = new hat_type(D)
D.equip_to_slot_or_del(new_hat, SLOT_HEAD)
D.admin_spawned = admin_spawned
D.flags_1 |= (flags_1 & ADMIN_SPAWNED_1)
D.key = user.key
qdel(src)
@@ -671,7 +671,7 @@ Difficulty: Very Hard
for(var/i in T)
if(isitem(i) && !is_type_in_typecache(i, banned_items_typecache))
var/obj/item/W = i
if(!W.admin_spawned && !(W.flags_1 & HOLOGRAM_1) && !(W.flags_1 & ABSTRACT_1))
if(!(W.flags_1 & ADMIN_SPAWNED_1) && !(W.flags_1 & HOLOGRAM_1) && !(W.flags_1 & ABSTRACT_1))
L += W
if(L.len)
var/obj/item/CHOSEN = pick(L)
@@ -50,7 +50,7 @@
if(C && crusher_loot && C.total_damage >= maxHealth * 0.6)
spawn_crusher_loot()
crusher_kill = TRUE
if(!admin_spawned)
if(!(flags_1 & ADMIN_SPAWNED_1))
var/tab = "megafauna_kills"
if(crusher_kill)
tab = "megafauna_kills_crusher"
@@ -114,7 +114,7 @@
recovery_time = world.time + buffer_time
/mob/living/simple_animal/hostile/megafauna/proc/grant_achievement(medaltype, scoretype, crusher_kill)
if(!medal_type || admin_spawned || !SSmedals.hub_enabled) //Don't award medals if the medal type isn't set
if(!medal_type || (flags_1 & ADMIN_SPAWNED_1) || !SSmedals.hub_enabled) //Don't award medals if the medal type isn't set
return FALSE
for(var/mob/living/L in view(7,src))
@@ -36,7 +36,8 @@
/mob/living/simple_animal/hostile/asteroid/hivelord/OpenFire(the_target)
if(world.time >= ranged_cooldown)
var/mob/living/simple_animal/hostile/asteroid/hivelordbrood/A = new brood_type(src.loc)
A.admin_spawned = admin_spawned
A.flags_1 |= (flags_1 & ADMIN_SPAWNED_1)
A.GiveTarget(target)
A.friends = friends
A.faction = faction.Copy()
@@ -53,7 +53,7 @@
if(other != src)
last_tendril = FALSE
break
if(last_tendril && !admin_spawned)
if(last_tendril && !(flags_1 & ADMIN_SPAWNED_1))
if(SSmedals.hub_enabled)
for(var/mob/living/L in view(7,src))
if(L.stat || !L.client)
@@ -72,8 +72,8 @@
melee_damage_upper = 30
deathmessage = "collapses into a pile of bones, its gear clanging as it hits the ground!"
loot = list(/obj/effect/decal/remains/human,
/obj/item/clothing/suit/armor/riot/knight/templar,
/obj/item/clothing/head/helmet/knight/templar,
/obj/item/clothing/suit/armor/riot/chaplain,
/obj/item/clothing/head/helmet/chaplain,
/obj/item/claymore/weak{name = "holy sword"})
/mob/living/simple_animal/hostile/skeleton/ice
@@ -119,4 +119,4 @@
/mob/living/simple_animal/hostile/skeleton/plasmaminer/Initialize()
. = ..()
set_light(2)
set_light(2)
@@ -224,8 +224,10 @@
return 0
/mob/living/simple_animal/slime/emp_act(severity)
. = ..()
if(. & EMP_PROTECT_SELF)
return
powerlevel = 0 // oh no, the power!
..()
/mob/living/simple_animal/slime/MouseDrop(atom/movable/A as mob|obj)
if(isliving(A) && A != src && usr == src)
@@ -44,7 +44,7 @@
spawn_delay = world.time + spawn_time
var/chosen_mob_type = pick(mob_types)
var/mob/living/simple_animal/L = new chosen_mob_type(src.loc)
L.admin_spawned = admin_spawned //If we were admin spawned, lets have our children count as that as well.
L.flags_1 |= (flags_1 & ADMIN_SPAWNED_1) //If we were admin spawned, lets have our children count as that as well.
spawned_mobs += L
L.nest = src
L.faction = src.faction
+1
View File
@@ -10,6 +10,7 @@
var/lighting_alpha = LIGHTING_PLANE_ALPHA_VISIBLE
var/datum/mind/mind
var/list/datum/action/actions = list()
var/list/datum/action/chameleon_item_actions
var/static/next_mob_id = 0
var/stat = 0 //Whether a mob is alive or dead. TODO: Move this to living - Nodrak