datums folder

This commit is contained in:
deathride58
2018-01-03 23:29:47 -05:00
parent 1acdd3ce5c
commit d26a9b23a4
42 changed files with 443 additions and 404 deletions
+16 -2
View File
@@ -170,14 +170,15 @@
..(current_button)
else if(target && current_button.appearance_cache != target.appearance) //replace with /ref comparison if this is not valid.
var/obj/item/I = target
current_button.appearance_cache = I.appearance
var/old_layer = I.layer
var/old_plane = I.plane
I.layer = FLOAT_LAYER //AAAH
I.plane = FLOAT_PLANE //^ what that guy said
current_button.overlays = list(I)
current_button.cut_overlays()
current_button.add_overlay(I)
I.layer = old_layer
I.plane = old_plane
current_button.appearance_cache = I.appearance
/datum/action/item_action/toggle_light
name = "Toggle Light"
@@ -344,6 +345,19 @@
/datum/action/item_action/change
name = "Change"
/datum/action/item_action/nano_picket_sign
name = "Retext Nano Picket Sign"
var/obj/item/picket_sign/S
/datum/action/item_action/nano_picket_sign/New(Target)
..()
if(istype(Target, /obj/item/picket_sign))
S = Target
/datum/action/item_action/nano_picket_sign/Trigger()
if(istype(S))
S.retext(owner)
/datum/action/item_action/adjust
/datum/action/item_action/adjust/New(Target)
-2
View File
@@ -1,5 +1,3 @@
/datum/action/item_action/flightsuit
icon_icon = 'icons/mob/actions/actions_flightsuit.dmi'
+6 -7
View File
@@ -78,7 +78,7 @@
. = ..()
/datum/antagonist/changeling/on_removal()
remove_changeling_powers(FALSE)
remove_changeling_powers()
owner.objectives -= objectives
. = ..()
@@ -100,11 +100,11 @@
chem_recharge_slowdown = initial(chem_recharge_slowdown)
mimicing = ""
/datum/antagonist/changeling/proc/remove_changeling_powers(keep_free_powers=0)
/datum/antagonist/changeling/proc/remove_changeling_powers()
if(ishuman(owner.current) || ismonkey(owner.current))
reset_properties()
for(var/obj/effect/proc_holder/changeling/p in purchasedpowers)
if((p.dna_cost == 0 && keep_free_powers) || p.always_keep)
if(p.always_keep)
continue
purchasedpowers -= p
p.on_refund(owner.current)
@@ -116,13 +116,13 @@
/datum/antagonist/changeling/proc/reset_powers()
if(purchasedpowers)
remove_changeling_powers(TRUE)
//Purchase free powers.
remove_changeling_powers()
//Repurchase free powers.
for(var/path in all_powers)
var/obj/effect/proc_holder/changeling/S = new path()
if(!S.dna_cost)
if(!has_sting(S))
purchasedpowers+=S
purchasedpowers += S
S.on_purchase(owner.current,TRUE)
/datum/antagonist/changeling/proc/has_sting(obj/effect/proc_holder/changeling/power)
@@ -223,7 +223,6 @@
if(verbose)
to_chat(user, "<span class='warning'>[target] is not compatible with our biology.</span>")
return
if((target.has_disability(DISABILITY_NOCLONE)) || (target.has_disability(DISABILITY_NOCLONE)))
if(verbose)
to_chat(user, "<span class='warning'>DNA of [target] is ruined beyond usability!</span>")
+2 -2
View File
@@ -131,7 +131,7 @@
SSticker.mode.cult -= owner
SSticker.mode.update_cult_icons_removed(owner)
if(!silent)
owner.current.visible_message("<span class='big'>[owner.current] looks like [owner.current.p_they()] just reverted to their old faith!</span>", ignored_mob = owner.current)
owner.current.visible_message("<span class='deconversion_message'>[owner.current] looks like [owner.current.p_they()] just reverted to their old faith!</span>", ignored_mob = owner.current)
to_chat(owner.current, "<span class='userdanger'>An unfamiliar white light flashes through your mind, cleansing the taint of the Geometer and all your memories as her servant.</span>")
owner.current.log_message("<font color=#960000>Has renounced the cult of Nar'Sie!</font>", INDIVIDUAL_ATTACK_LOG)
if(cult_team.blood_target && cult_team.blood_target_image && owner.current.client)
@@ -243,7 +243,7 @@
return sacced || completed
/datum/objective/sacrifice/update_explanation_text()
if(target && !sacced)
if(target)
explanation_text = "Sacrifice [target], the [target.assigned_role] via invoking a Sacrifice rune with them on it and three acolytes around it."
else
explanation_text = "The veil has already been weakened here, proceed to the final objective."
+3 -7
View File
@@ -127,6 +127,7 @@
if(prob(30))
objective_count += forge_single_objective()
for(var/i = objective_count, i < CONFIG_GET(number/traitor_objectives_amount), i++)
var/datum/objective/assassinate/kill_objective = new
kill_objective.owner = owner
@@ -152,11 +153,6 @@
maroon_objective.owner = owner
maroon_objective.find_target()
add_objective(maroon_objective)
else if(prob(50))
var/datum/objective/assassinate/late/late_objective = new
late_objective.owner = owner
late_objective.find_target()
add_objective(late_objective)
else
var/datum/objective/assassinate/kill_objective = new
kill_objective.owner = owner
@@ -306,8 +302,8 @@
var/uplink_true = FALSE
var/purchases = ""
for(var/datum/component/uplink/H in GLOB.uplinks)
if(H && H.owner && H.owner == owner.key)
TC_uses += H.spent_telecrystals
if(H.owner && H.owner == owner.key)
TC_uses += H.purchase_log.total_spent
uplink_true = TRUE
purchases += H.purchase_log.generate_render(FALSE)
+2 -8
View File
@@ -50,17 +50,11 @@
lose_text = "<span class='notice'>Your vision returns.</span>"
/datum/brain_trauma/severe/blindness/on_gain()
owner.become_blind()
..()
//no fiddling with genetics to get out of this one
/datum/brain_trauma/severe/blindness/on_life()
if(!(owner.disabilities & BLIND))
on_gain()
owner.become_blind(TRAUMA_DISABILITY)
..()
/datum/brain_trauma/severe/blindness/on_lose()
owner.cure_blind()
owner.cure_blind(TRAUMA_DISABILITY)
..()
/datum/brain_trauma/severe/paralysis
+1 -1
View File
@@ -62,4 +62,4 @@
qdel(src)
/datum/component/decal/proc/examine(mob/user)
to_chat(user, description)
to_chat(user, description)
+1 -1
View File
@@ -138,7 +138,7 @@
if(laststamppos)
LAZYSET(hiddenprints, M.key, copytext(hiddenprints[M.key], 1, laststamppos))
hiddenprints[M.key] += " Last: [M.real_name]\[[current_time]\][hasgloves]. Ckey: [M.ckey]" //made sure to be existing by if(!LAZYACCESS);else
fingerprintslast = M.ckey
parent.fingerprintslast = M.ckey
return TRUE
/datum/component/forensics/proc/add_blood_DNA(list/dna) //list(dna_enzymes = type)
+1 -1
View File
@@ -57,4 +57,4 @@
var/t = stripped_input(H, "Enter your new skeleton name", H.real_name, null, MAX_NAME_LEN)
if(!t)
t = "spooky skeleton"
H.fully_replace_character_name(H.real_name, t)
H.fully_replace_character_name(null, t)
+1
View File
@@ -1,3 +1,4 @@
/datum/datacore
var/medical[] = list()
var/medicalPrintCount = 0
+9
View File
@@ -17,6 +17,7 @@
/datum/proc/Destroy(force=FALSE, ...)
tag = null
weak_reference = null //ensure prompt GCing of weakref.
var/list/timers = active_timers
active_timers = null
for(var/thing in timers)
@@ -24,6 +25,7 @@
if (timer.spent)
continue
qdel(timer)
var/list/dc = datum_components
if(dc)
var/all_components = dc[/datum/component]
@@ -35,4 +37,11 @@
var/datum/component/C = all_components
qdel(C, FALSE, TRUE)
dc.Cut()
var/list/focusers = src.focusers
if(focusers)
for(var/i in 1 to focusers.len)
var/mob/M = focusers[i]
M.set_focus(M)
return QDEL_HINT_QUEUE
+45 -45
View File
@@ -1,59 +1,59 @@
// Cold
// Cold
/datum/disease/advance/cold/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE)
if(!D)
name = "Cold"
symptoms = list(new/datum/symptom/sneeze)
..(process, D, copy)
// Flu
if(!D)
name = "Cold"
symptoms = list(new/datum/symptom/sneeze)
..(process, D, copy)
// Flu
/datum/disease/advance/flu/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE)
if(!D)
name = "Flu"
symptoms = list(new/datum/symptom/cough)
..(process, D, copy)
// Voice Changing
if(!D)
name = "Flu"
symptoms = list(new/datum/symptom/cough)
..(process, D, copy)
// Voice Changing
/datum/disease/advance/voice_change/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE)
if(!D)
name = "Epiglottis Mutation"
symptoms = list(new/datum/symptom/voice_change)
..(process, D, copy)
// Toxin Filter
if(!D)
name = "Epiglottis Mutation"
symptoms = list(new/datum/symptom/voice_change)
..(process, D, copy)
// Toxin Filter
/datum/disease/advance/heal/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE)
if(!D)
name = "Liver Enhancer"
symptoms = list(new/datum/symptom/heal)
..(process, D, copy)
if(!D)
name = "Liver Enhancer"
symptoms = list(new/datum/symptom/heal)
..(process, D, copy)
// Hallucigen
/datum/disease/advance/hallucigen/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE)
if(!D)
if(!D)
name = "Second Sight"
symptoms = list(new/datum/symptom/hallucigen)
..(process, D, copy)
// Sensory Restoration
symptoms = list(new/datum/symptom/hallucigen)
..(process, D, copy)
// Sensory Restoration
/datum/disease/advance/mind_restoration/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE)
if(!D)
if(!D)
name = "Intelligence Booster"
symptoms = list(new/datum/symptom/mind_restoration)
..(process, D, copy)
// Sensory Destruction
..(process, D, copy)
// Sensory Destruction
/datum/disease/advance/narcolepsy/New(var/process = TRUE, var/datum/disease/advance/D, var/copy = FALSE)
if(!D)
if(!D)
name = "Experimental Insomnia Cure"
symptoms = list(new/datum/symptom/narcolepsy)
..(process, D, copy)
+27 -27
View File
@@ -1,33 +1,33 @@
/*
//////////////////////////////////////
Facial Hypertrichosis
Very very Noticable.
Decreases resistance slightly.
Decreases stage speed.
Reduced transmittability
Intense Level.
BONUS
Makes the mob grow a massive beard, regardless of gender.
//////////////////////////////////////
*/
/datum/symptom/beard
name = "Facial Hypertrichosis"
/*
//////////////////////////////////////
Facial Hypertrichosis
Very very Noticable.
Decreases resistance slightly.
Decreases stage speed.
Reduced transmittability
Intense Level.
BONUS
Makes the mob grow a massive beard, regardless of gender.
//////////////////////////////////////
*/
/datum/symptom/beard
name = "Facial Hypertrichosis"
desc = "The virus increases hair production significantly, causing rapid beard growth."
stealth = -3
resistance = -1
stage_speed = -3
transmittable = -1
level = 4
severity = 1
stealth = -3
resistance = -1
stage_speed = -3
transmittable = -1
level = 4
severity = 1
symptom_delay_min = 18
symptom_delay_max = 36
/datum/symptom/beard/Activate(datum/disease/advance/A)
/datum/symptom/beard/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/M = A.affected_mob
@@ -1,30 +1,30 @@
/*
//////////////////////////////////////
Confusion
Little bit hidden.
Lowers resistance.
Decreases stage speed.
Not very transmittable.
Intense Level.
Bonus
Makes the affected mob be confused for short periods of time.
//////////////////////////////////////
*/
/datum/symptom/confusion
name = "Confusion"
/*
//////////////////////////////////////
Confusion
Little bit hidden.
Lowers resistance.
Decreases stage speed.
Not very transmittable.
Intense Level.
Bonus
Makes the affected mob be confused for short periods of time.
//////////////////////////////////////
*/
/datum/symptom/confusion
name = "Confusion"
desc = "The virus interferes with the proper function of the neural system, leading to bouts of confusion and erratic movement."
stealth = 1
resistance = -1
stage_speed = -3
transmittable = 0
level = 4
severity = 2
stealth = 1
resistance = -1
stage_speed = -3
transmittable = 0
level = 4
severity = 2
base_message_chance = 25
symptom_delay_min = 10
symptom_delay_max = 30
@@ -32,7 +32,7 @@ Bonus
threshold_desc = "<b>Resistance 6:</b> Causes brain damage over time.<br>\
<b>Transmission 6:</b> Increases confusion duration.<br>\
<b>Stealth 4:</b> The symptom remains hidden until active."
/datum/symptom/confusion/Start(datum/disease/advance/A)
if(!..())
return
@@ -42,20 +42,20 @@ Bonus
power = 1.5
if(A.properties["stealth"] >= 4)
suppress_warning = TRUE
/datum/symptom/confusion/Activate(datum/disease/advance/A)
/datum/symptom/confusion/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/carbon/M = A.affected_mob
switch(A.stage)
if(1, 2, 3, 4)
if(prob(base_message_chance) && !suppress_warning)
to_chat(M, "<span class='warning'>[pick("Your head hurts.", "Your mind blanks for a moment.")]</span>")
to_chat(M, "<span class='warning'>[pick("Your head hurts.", "Your mind blanks for a moment.")]</span>")
else
to_chat(M, "<span class='userdanger'>You can't think straight!</span>")
M.confused = min(100 * power, M.confused + 8)
if(brain_damage)
M.adjustBrainLoss(3 * power, 80)
M.updatehealth()
return
return
@@ -50,4 +50,4 @@ Bonus
to_chat(M, "<span class='userdanger'>A wave of dizziness washes over you!</span>")
M.Dizzy(5)
if(power >= 2)
M.set_drugginess(5)
M.set_drugginess(5)
@@ -127,4 +127,4 @@ Bonus
M.reagents.add_reagent_list(list("heparin" = 2, "lipolicide" = 2))
if(zombie)
M.reagents.add_reagent("romerol", 1)
return 1
return 1
@@ -57,4 +57,4 @@ BONUS
M.adjustStaminaLoss(25)
if(power >= 3 && A.stage >= 5)
to_chat(M, "<span class='userdanger'>[pick("Your head hurts!", "You feel a burning knife inside your brain!", "A wave of pain fills your head!")]</span>")
M.Stun(35)
M.Stun(35)
+77 -75
View File
@@ -1,10 +1,10 @@
/datum/symptom/heal
name = "Basic Healing (does nothing)" //warning for adminspawn viruses
desc = "You should not be seeing this."
stealth = 1
resistance = -4
stage_speed = -4
transmittable = -4
stealth = 0
resistance = 0
stage_speed = 0
transmittable = 0
level = 0 //not obtainable
base_message_chance = 20 //here used for the overlays
symptom_delay_min = 1
@@ -22,7 +22,6 @@
/datum/symptom/heal/Activate(datum/disease/advance/A)
if(!..())
return
//100% chance to activate for slow but consistent healing
var/mob/living/M = A.affected_mob
switch(A.stage)
if(4, 5)
@@ -45,20 +44,20 @@
return TRUE
/datum/symptom/heal/toxin
/datum/symptom/heal/starlight
name = "Starlight Condensation"
desc = "The virus reacts to direct starlight, producing regenerative chemicals that can cure toxin damage."
stealth = 1
resistance = -3
stage_speed = -3
transmittable = -3
desc = "The virus reacts to direct starlight, producing regenerative chemicals. Works best against toxin-based damage."
stealth = -1
resistance = -2
stage_speed = 0
transmittable = 1
level = 6
passive_message = "<span class='notice'>You miss the feeling of starlight on your skin.</span>"
var/nearspace_penalty = 0.3
threshold_desc = "<b>Stage Speed 6:</b> Increases healing speed.<br>\
<b>Transmission 6:</b> Removes penalty for only being close to space."
/datum/symptom/heal/toxin/Start(datum/disease/advance/A)
/datum/symptom/heal/starlight/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["transmission"] >= 6)
@@ -66,7 +65,7 @@
if(A.properties["stage_rate"] >= 6)
power = 2
/datum/symptom/heal/toxin/CanHeal(datum/disease/advance/A)
/datum/symptom/heal/starlight/CanHeal(datum/disease/advance/A)
var/mob/living/M = A.affected_mob
if(istype(get_turf(M), /turf/open/space))
return power
@@ -75,15 +74,25 @@
if(istype(T, /turf/open/space))
return power * nearspace_penalty
/datum/symptom/heal/toxin/Heal(mob/living/M, datum/disease/advance/A, actual_power)
/datum/symptom/heal/starlight/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
var/heal_amt = actual_power
if(M.getToxLoss() && prob(5))
to_chat(M, "<span class='notice'>Your skin tingles as the starlight purges toxins from your bloodstream.</span>")
M.adjustToxLoss(-heal_amt)
to_chat(M, "<span class='notice'>Your skin tingles as the starlight seems to heal you.</span>")
M.adjustToxLoss(-(4 * heal_amt)) //most effective on toxins
var/list/parts = M.get_damaged_bodyparts(1,1)
if(!parts.len)
return
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len))
M.update_damage_overlays()
return 1
/datum/symptom/heal/toxin/passive_message_condition(mob/living/M)
if(M.getToxLoss())
/datum/symptom/heal/starlight/passive_message_condition(mob/living/M)
if(M.getBruteLoss() || M.getFireLoss() || M.getToxLoss())
return TRUE
return FALSE
@@ -91,7 +100,7 @@
name = "Toxolysis"
stealth = 0
resistance = -2
stage_speed = -2
stage_speed = 2
transmittable = -2
level = 7
var/food_conversion = FALSE
@@ -153,58 +162,50 @@
to_chat(C, "<span class='notice'>You feel an odd gurgle in your stomach, as if it was working much faster than normal.</span>")
return 1
/datum/symptom/heal/brute
name = "Cellular Molding"
desc = "The virus is able to shift cells around when in conditions of high heat, repairing existing physical damage."
stealth = 1
resistance = -3
stage_speed = -3
transmittable = -3
/datum/symptom/heal/darkness
name = "Nocturnal Regeneration"
desc = "The virus is able to mend the host's flesh when in conditions of low light, repairing physical damage. More effective against brute damage."
stealth = 2
resistance = -1
stage_speed = -2
transmittable = -1
level = 6
passive_message = "<span class='notice'>You feel the flesh pulsing under your skin for a moment, but it's too cold to move.</span>"
passive_message = "<span class='notice'>You feel tingling on your skin as light passes over it.</span>"
threshold_desc = "<b>Stage Speed 8:</b> Doubles healing speed."
/datum/symptom/heal/brute/Start(datum/disease/advance/A)
/datum/symptom/heal/darkness/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["stage_rate"] >= 8)
power = 2
/datum/symptom/heal/brute/CanHeal(datum/disease/advance/A)
/datum/symptom/heal/darkness/CanHeal(datum/disease/advance/A)
var/mob/living/M = A.affected_mob
switch(M.bodytemperature)
if(0 to 340)
return FALSE
if(340 to BODYTEMP_HEAT_DAMAGE_LIMIT)
. = 0.3 * power
if(BODYTEMP_HEAT_DAMAGE_LIMIT to 400)
. = 0.75 * power
if(400 to 460)
. = power
else
. = 1.5 * power
var/light_amount = 0
if(isturf(M.loc)) //else, there's considered to be no light
var/turf/T = M.loc
light_amount = min(1,T.get_lumcount()) - 0.5
if(light_amount < SHADOW_SPECIES_LIGHT_THRESHOLD)
return power
if(M.on_fire)
. *= 2
/datum/symptom/heal/brute/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
/datum/symptom/heal/darkness/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
var/heal_amt = 2 * actual_power
var/list/parts = M.get_damaged_bodyparts(1,0) //brute only
var/list/parts = M.get_damaged_bodyparts(1,1)
if(!parts.len)
return
if(prob(5))
to_chat(M, "<span class='notice'>You feel your flesh moving beneath your heated skin, mending your wounds.</span>")
to_chat(M, "<span class='notice'>The darkness soothes and mends your wounds.</span>")
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(heal_amt/parts.len, 0))
if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len * 0.5)) //more effective on brute
M.update_damage_overlays()
return 1
/datum/symptom/heal/brute/passive_message_condition(mob/living/M)
if(M.getBruteLoss())
/datum/symptom/heal/darkness/passive_message_condition(mob/living/M)
if(M.getBruteLoss() || M.getFireLoss())
return TRUE
return FALSE
@@ -212,8 +213,8 @@
name = "Regenerative Coma"
desc = "The virus causes the host to fall into a death-like coma when severely damaged, then rapidly fixes the damage."
stealth = 0
resistance = 0
stage_speed = -2
resistance = 2
stage_speed = -3
transmittable = -2
level = 8
passive_message = "<span class='notice'>The pain from your wounds makes you feel oddly sleepy...</span>"
@@ -283,20 +284,20 @@
return TRUE
return FALSE
/datum/symptom/heal/burn
/datum/symptom/heal/water
name = "Tissue Hydration"
desc = "The virus uses excess water inside and outside the body to repair burned tisue cells."
stealth = 1
resistance = -3
stage_speed = -3
transmittable = -3
desc = "The virus uses excess water inside and outside the body to repair damaged tissue cells. More effective against burns."
stealth = 0
resistance = -1
stage_speed = 0
transmittable = 1
level = 6
passive_message = "<span class='notice'>Your burned skin feels oddly dry...</span>"
passive_message = "<span class='notice'>Your skin feels oddly dry...</span>"
var/absorption_coeff = 1
threshold_desc = "<b>Resistance 5:</b> Water is consumed at a much slower rate.<br>\
<b>Stage Speed 7:</b> Increases healing speed."
/datum/symptom/heal/burn/Start(datum/disease/advance/A)
/datum/symptom/heal/water/Start(datum/disease/advance/A)
if(!..())
return
if(A.properties["stage_rate"] >= 7)
@@ -304,7 +305,7 @@
if(A.properties["stealth"] >= 2)
absorption_coeff = 0.25
/datum/symptom/heal/burn/CanHeal(datum/disease/advance/A)
/datum/symptom/heal/water/CanHeal(datum/disease/advance/A)
. = 0
var/mob/living/M = A.affected_mob
if(M.fire_stacks < 0)
@@ -317,33 +318,33 @@
M.reagents.remove_reagent("water", 0.5 * absorption_coeff)
. += power * 0.5
/datum/symptom/heal/burn/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
/datum/symptom/heal/water/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
var/heal_amt = 2 * actual_power
var/list/parts = M.get_damaged_bodyparts(0,1) //burn only
var/list/parts = M.get_damaged_bodyparts(1,1) //more effective on burns
if(!parts.len)
return
if(prob(5))
to_chat(M, "<span class='notice'>You feel yourself absorbing the water around you to soothe your burned skin.</span>")
to_chat(M, "<span class='notice'>You feel yourself absorbing the water around you to soothe your damaged skin.</span>")
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(0, heal_amt/parts.len))
if(L.heal_damage(heal_amt/parts.len * 0.5, heal_amt/parts.len))
M.update_damage_overlays()
return 1
/datum/symptom/heal/burn/passive_message_condition(mob/living/M)
if(M.getFireLoss())
/datum/symptom/heal/water/passive_message_condition(mob/living/M)
if(M.getBruteLoss() || M.getFireLoss())
return TRUE
return FALSE
/datum/symptom/heal/plasma
name = "Plasma Fixation"
desc = "The virus draws plasma from the atmosphere and from inside the body to stabilize body temperature and heal burns."
desc = "The virus draws plasma from the atmosphere and from inside the body to heal and stabilize body temperature."
stealth = 0
resistance = 0
resistance = 3
stage_speed = -2
transmittable = -2
level = 8
@@ -379,8 +380,6 @@
/datum/symptom/heal/plasma/Heal(mob/living/carbon/M, datum/disease/advance/A, actual_power)
var/heal_amt = 4 * actual_power
var/list/parts = M.get_damaged_bodyparts(0,1) //burn only
if(prob(5))
to_chat(M, "<span class='notice'>You feel yourself absorbing plasma inside and around you...</span>")
@@ -393,24 +392,25 @@
if(prob(5))
to_chat(M, "<span class='notice'>You feel warmer.</span>")
M.adjustToxLoss(-heal_amt)
var/list/parts = M.get_damaged_bodyparts(1,1)
if(!parts.len)
return
if(prob(5))
to_chat(M, "<span class='notice'>The pain from your burns fades rapidly.</span>")
to_chat(M, "<span class='notice'>The pain from your wounds fades rapidly.</span>")
for(var/obj/item/bodypart/L in parts)
if(L.heal_damage(0, heal_amt/parts.len))
if(L.heal_damage(heal_amt/parts.len, heal_amt/parts.len))
M.update_damage_overlays()
return 1
/datum/symptom/heal/radiation
name = "Radioactive Resonance"
desc = "The virus uses radiation to fix damage through dna mutations."
stealth = -1
resistance = -2
stage_speed = 0
stage_speed = 2
transmittable = -3
level = 6
symptom_delay_min = 1
@@ -450,6 +450,8 @@
if(cellular_damage)
M.adjustCloneLoss(-heal_amt * 0.5)
M.adjustToxLoss(-(2 * heal_amt))
var/list/parts = M.get_damaged_bodyparts(1,1)
if(!parts.len)
@@ -51,4 +51,4 @@ BONUS
var/can_scratch = scratch && !M.incapacitated() && get_location_accessible(M, picked_bodypart)
M.visible_message("[can_scratch ? "<span class='warning'>[M] scratches [M.p_their()] [bodypart.name].</span>" : ""]", "<span class='warning'>Your [bodypart.name] itches. [can_scratch ? " You scratch it." : ""]</span>")
if(can_scratch)
bodypart.receive_damage(0.5)
bodypart.receive_damage(0.5)
@@ -105,4 +105,4 @@
M.adjust_eye_damage(-1)
else
if(prob(base_message_chance))
to_chat(M, "<span class='notice'>[pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your ears feel great.","Your healing feels more acute.")]</span>")
to_chat(M, "<span class='notice'>[pick("Your eyes feel great.","You feel like your eyes can focus more clearly.", "You don't feel the need to blink.","Your ears feel great.","Your healing feels more acute.")]</span>")
@@ -1,39 +1,39 @@
/*
//////////////////////////////////////
Alopecia
/*
//////////////////////////////////////
Alopecia
Not Noticeable.
Increases resistance slightly.
Reduces stage speed slightly.
Transmittable.
Intense Level.
BONUS
Makes the mob lose hair.
//////////////////////////////////////
*/
/datum/symptom/shedding
name = "Alopecia"
Reduces stage speed slightly.
Transmittable.
Intense Level.
BONUS
Makes the mob lose hair.
//////////////////////////////////////
*/
/datum/symptom/shedding
name = "Alopecia"
desc = "The virus causes rapid shedding of head and body hair."
stealth = 0
resistance = 1
stage_speed = -1
stage_speed = -1
transmittable = 3
level = 4
severity = 1
level = 4
severity = 1
base_message_chance = 50
symptom_delay_min = 45
symptom_delay_max = 90
/datum/symptom/shedding/Activate(datum/disease/advance/A)
/datum/symptom/shedding/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/M = A.affected_mob
if(prob(base_message_chance))
to_chat(M, "<span class='warning'>[pick("Your scalp itches.", "Your skin feels flakey.")]</span>")
to_chat(M, "<span class='warning'>[pick("Your scalp itches.", "Your skin feels flakey.")]</span>")
if(ishuman(M))
var/mob/living/carbon/human/H = M
switch(A.stage)
@@ -45,11 +45,11 @@ BONUS
if(!(H.facial_hair_style == "Shaved") || !(H.hair_style == "Bald"))
to_chat(H, "<span class='warning'>Your hair starts to fall out in clumps...</span>")
addtimer(CALLBACK(src, .proc/Shed, H, TRUE), 50)
/datum/symptom/shedding/proc/Shed(mob/living/carbon/human/H, fullbald)
if(fullbald)
H.facial_hair_style = "Shaved"
H.hair_style = "Bald"
else
H.hair_style = "Balding Hair"
/datum/symptom/shedding/proc/Shed(mob/living/carbon/human/H, fullbald)
if(fullbald)
H.facial_hair_style = "Shaved"
H.hair_style = "Bald"
else
H.hair_style = "Balding Hair"
H.update_hair()
@@ -56,4 +56,4 @@ Bonus
M.bodytemperature = min(M.bodytemperature - (get_cold * A.stage), BODYTEMP_COLD_DAMAGE_LIMIT + 1)
else
M.bodytemperature -= (get_cold * A.stage)
return 1
return 1
@@ -46,7 +46,6 @@ Bonus
if(1, 2, 3)
if(!suppress_warning)
M.emote("sniff")
else
M.emote("sneeze")
A.spread(5)
return
else
M.emote("sneeze")
A.spread(4 + power)
@@ -58,14 +58,15 @@ Bonus
M.blur_eyes(20)
M.adjust_eye_damage(5)
if(eyes.eye_damage >= 10)
M.become_nearsighted()
M.become_nearsighted(EYE_DAMAGE)
if(prob(eyes.eye_damage - 10 + 1))
if(!remove_eyes)
if(!M.has_disability(DISABILITY_BLIND))
to_chat(M, "<span class='userdanger'>You go blind!</span>")
M.become_blind(EYE_DAMAGE)
else
M.visible_message("<span class='warning'>[M]'s eyes fall off their sockets!</span>", "<span class='userdanger'>Your eyes fall off their sockets!</span>")
eyes.Remove(M)
eyes.forceMove(get_turf(M))
else
to_chat(M, "<span class='userdanger'>Your eyes burn horrifically!</span>")
to_chat(M, "<span class='userdanger'>Your eyes burn horrifically!</span>")
@@ -48,4 +48,4 @@ Bonus
else
to_chat(M, "<span class='warning'><i>[pick("So hungry...", "You'd kill someone for a bite of food...", "Hunger cramps seize you...")]</i></span>")
M.overeatduration = max(M.overeatduration - 100, 0)
M.nutrition = max(M.nutrition - 100, 0)
M.nutrition = max(M.nutrition - 100, 0)
+27 -27
View File
@@ -1,35 +1,35 @@
/*
//////////////////////////////////////
Eternal Youth
Moderate stealth boost.
Increases resistance tremendously.
Increases stage speed tremendously.
Reduces transmission tremendously.
Critical Level.
BONUS
Gives you immortality and eternal youth!!!
Can be used to buff your virus
//////////////////////////////////////
*/
/datum/symptom/youth
name = "Eternal Youth"
/*
//////////////////////////////////////
Eternal Youth
Moderate stealth boost.
Increases resistance tremendously.
Increases stage speed tremendously.
Reduces transmission tremendously.
Critical Level.
BONUS
Gives you immortality and eternal youth!!!
Can be used to buff your virus
//////////////////////////////////////
*/
/datum/symptom/youth
name = "Eternal Youth"
desc = "The virus becomes symbiotically connected to the cells in the host's body, preventing and reversing aging. \
The virus, in turn, becomes more resistant, spreads faster, and is harder to spot, although it doesn't thrive as well without a host."
stealth = 3
resistance = 4
stage_speed = 4
transmittable = -4
level = 5
stealth = 3
resistance = 4
stage_speed = 4
transmittable = -4
level = 5
base_message_chance = 100
symptom_delay_min = 25
symptom_delay_max = 50
/datum/symptom/youth/Activate(datum/disease/advance/A)
/datum/symptom/youth/Activate(datum/disease/advance/A)
if(!..())
return
var/mob/living/M = A.affected_mob
+1 -1
View File
@@ -36,4 +36,4 @@
affected_mob.visible_message("<span class='danger'>[affected_mob] coughs up a swarm of bees!</span>", \
"<span class='userdanger'>You cough up a swarm of bees!</span>")
new /mob/living/simple_animal/hostile/poison/bees(affected_mob.loc)
return
return
+1 -1
View File
@@ -50,4 +50,4 @@
if(!affected_mob.resistances.Find(/datum/disease/flu))
var/datum/disease/Flu = new /datum/disease/flu(0)
affected_mob.ForceContractDisease(Flu)
cure()
cure()
+1 -1
View File
@@ -36,4 +36,4 @@
if(prob(1))
to_chat(affected_mob, "<span class='danger'>Your throat feels sore.</span>")
if(prob(10))
to_chat(affected_mob, "<span class='danger'>You feel stiff.</span>")
to_chat(affected_mob, "<span class='danger'>You feel stiff.</span>")
+5 -15
View File
@@ -1,6 +1,6 @@
/datum/disease/gbs
name = "GBS"
max_stages = 5
max_stages = 4
spread_text = "On contact"
spread_flags = VIRUS_SPREAD_BLOOD | VIRUS_SPREAD_CONTACT_SKIN | VIRUS_SPREAD_CONTACT_FLUIDS
cure_text = "Synaptizine & Sulfur"
@@ -16,25 +16,15 @@
..()
switch(stage)
if(2)
if(prob(45))
affected_mob.adjustToxLoss(5)
affected_mob.updatehealth()
if(prob(1))
affected_mob.emote("sneeze")
if(3)
if(prob(5))
affected_mob.emote("cough")
else if(prob(5))
if(3)
if(prob(5))
affected_mob.emote("gasp")
if(prob(10))
to_chat(affected_mob, "<span class='danger'>You're starting to feel very weak...</span>")
to_chat(affected_mob, "<span class='danger'>Your body hurts all over!</span>")
if(4)
if(prob(10))
affected_mob.emote("cough")
affected_mob.adjustToxLoss(5)
affected_mob.updatehealth()
if(5)
to_chat(affected_mob, "<span class='danger'>Your body feels as if it's trying to rip itself open...</span>")
to_chat(affected_mob, "<span class='userdanger'>Your body feels as if it's trying to rip itself apart!</span>")
if(prob(50))
affected_mob.gib()
else
+1 -1
View File
@@ -65,4 +65,4 @@
var/iter = rand(1,3)
for(i=0,i<iter,i++)
step_towards(S,affected_mob)
return
return
+1 -1
View File
@@ -80,4 +80,4 @@
if(prob(50))
scramble_dna(affected_mob, 1, 0, rand(50,75))
else
scramble_dna(affected_mob, 0, 1, rand(50,75))
scramble_dna(affected_mob, 0, 1, rand(50,75))
+9
View File
@@ -196,6 +196,15 @@ GLOBAL_LIST_EMPTY(explosions)
//------- EX_ACT AND TURF FIRES -------
if(T == epicenter) // Ensures explosives detonating from bags trigger other explosives in that bag
var/list/items = list()
for(var/I in T)
var/atom/A = I
items += A.GetAllContents()
for(var/O in items)
var/atom/A = O
A.ex_act(dist)
if(flame_dist && prob(40) && !isspaceturf(T) && !T.density)
new /obj/effect/hotspot(T) //Mostly for ambience!
+2 -1
View File
@@ -28,7 +28,6 @@
else
log_world(originmastercommit)
/datum/getrev/proc/GetTestMergeInfo(header = TRUE)
if(!testmerge.len)
return ""
@@ -45,6 +44,8 @@
set name = "Show Server Revision"
set desc = "Check the current server code revision"
if(GLOB.round_id)
to_chat(src, "<b>Round ID:</b> [GLOB.round_id]")
if(GLOB.revdata.originmastercommit)
to_chat(src, "<b>Server revision compiled on:</b> [GLOB.revdata.date]")
var/prefix = ""
+61 -61
View File
@@ -1,62 +1,62 @@
/datum/topic_input
var/href
var/list/href_list
/datum/topic_input/New(thref,list/thref_list)
href = thref
href_list = thref_list.Copy()
return
/datum/topic_input/proc/get(i)
return listgetindex(href_list,i)
/datum/topic_input/proc/getAndLocate(i)
var/t = get(i)
if(t)
t = locate(t)
if (istext(t))
t = null
return t || null
/datum/topic_input/proc/getNum(i)
var/t = get(i)
if(t)
t = text2num(t)
return isnum(t) ? t : null
/datum/topic_input/proc/getObj(i)
var/t = getAndLocate(i)
return isobj(t) ? t : null
/datum/topic_input/proc/getMob(i)
var/t = getAndLocate(i)
return ismob(t) ? t : null
/datum/topic_input/proc/getTurf(i)
var/t = getAndLocate(i)
return isturf(t) ? t : null
/datum/topic_input/proc/getAtom(i)
/datum/topic_input
var/href
var/list/href_list
/datum/topic_input/New(thref,list/thref_list)
href = thref
href_list = thref_list.Copy()
return
/datum/topic_input/proc/get(i)
return listgetindex(href_list,i)
/datum/topic_input/proc/getAndLocate(i)
var/t = get(i)
if(t)
t = locate(t)
if (istext(t))
t = null
return t || null
/datum/topic_input/proc/getNum(i)
var/t = get(i)
if(t)
t = text2num(t)
return isnum(t) ? t : null
/datum/topic_input/proc/getObj(i)
var/t = getAndLocate(i)
return isobj(t) ? t : null
/datum/topic_input/proc/getMob(i)
var/t = getAndLocate(i)
return ismob(t) ? t : null
/datum/topic_input/proc/getTurf(i)
var/t = getAndLocate(i)
return isturf(t) ? t : null
/datum/topic_input/proc/getAtom(i)
return getType(i, /atom)
/datum/topic_input/proc/getArea(i)
var/t = getAndLocate(i)
return isarea(t) ? t : null
/datum/topic_input/proc/getStr(i)//params should always be text, but...
var/t = get(i)
return istext(t) ? t : null
/datum/topic_input/proc/getType(i,type)
var/t = getAndLocate(i)
return istype(t,type) ? t : null
/datum/topic_input/proc/getPath(i)
var/t = get(i)
if(t)
t = text2path(t)
return ispath(t) ? t : null
/datum/topic_input/proc/getList(i)
var/t = getAndLocate(i)
return islist(t) ? t : null
/datum/topic_input/proc/getArea(i)
var/t = getAndLocate(i)
return isarea(t) ? t : null
/datum/topic_input/proc/getStr(i)//params should always be text, but...
var/t = get(i)
return istext(t) ? t : null
/datum/topic_input/proc/getType(i,type)
var/t = getAndLocate(i)
return istype(t,type) ? t : null
/datum/topic_input/proc/getPath(i)
var/t = get(i)
if(t)
t = text2path(t)
return ispath(t) ? t : null
/datum/topic_input/proc/getList(i)
var/t = getAndLocate(i)
return islist(t) ? t : null
+28 -18
View File
@@ -122,6 +122,8 @@
transfer_martial_arts(new_character)
if(active || force_key_move)
new_character.key = key //now transfer the key to link the client to our new body
//CIT CHANGE - makes arousal update when transfering bodies
if(isliving(new_character)) //New humans and such are by default enabled arousal. Let's always use the new mind's prefs.
var/mob/living/L = new_character
if(L.client && L.client.prefs)
@@ -202,7 +204,6 @@
remove_antag_datum(ANTAG_DATUM_BROTHER)
SSticker.mode.update_brother_icons_removed(src)
/datum/mind/proc/remove_nukeop()
var/datum/antagonist/nukeop/nuke = has_antag_datum(/datum/antagonist/nukeop,TRUE)
if(nuke)
@@ -225,6 +226,7 @@
remove_antag_datum(rev.type)
special_role = null
/datum/mind/proc/remove_antag_equip()
var/list/Mob_Contents = current.get_contents()
for(var/obj/item/I in Mob_Contents)
@@ -462,20 +464,27 @@
text = uppertext(text)
text = "<i><b>[text]</b></i>: "
if (ishuman(current))
text += "<a href='?src=[REF(src)];monkey=healthy'>healthy</a> | <a href='?src=[REF(src)];monkey=infected'>infected</a> | <b>HUMAN</b> | other"
if(is_monkey_leader(src))
text += "<a href='?src=[REF(src)];monkey=healthy'>healthy</a> | <a href='?src=[REF(src)];monkey=infected'>infected</a> <b>LEADER</b> | <a href='?src=[REF(src)];monkey=human'>human</a> | other"
else
text += "<a href='?src=[REF(src)];monkey=healthy'>healthy</a> | <a href='?src=[REF(src)];monkey=infected'>infected</a> | <a href='?src=[REF(src)];monkey=leader'>leader</a> | <b>HUMAN</b> | other"
else if(ismonkey(current))
var/found = FALSE
for(var/datum/disease/transformation/jungle_fever/JF in current.viruses)
found = TRUE
break
if(found)
text += "<a href='?src=[REF(src)];monkey=healthy'>healthy</a> | <b>INFECTED</b> | <a href='?src=[REF(src)];monkey=human'>human</a> | other"
var/isLeader = is_monkey_leader(src)
if(isLeader)
text += "<a href='?src=[REF(src)];monkey=healthy'>healthy</a> | <a href='?src=[REF(src)];monkey=infected'>infected</a> <b>LEADER</b> | <a href='?src=[REF(src)];monkey=human'>human</a> | other"
else if(found)
text += "<a href='?src=[REF(src)];monkey=healthy'>healthy</a> | <b>INFECTED</b> | <a href='?src=[REF(src)];monkey=leader'>leader</a> | <a href='?src=[REF(src)];monkey=human'>human</a> | other"
else
text += "<b>HEALTHY</b> | <a href='?src=[REF(src)];monkey=infected'>infected</a> | <a href='?src=[REF(src)];monkey=human'>human</a> | other"
text += "<b>HEALTHY</b> | <a href='?src=[REF(src)];monkey=infected'>infected</a> | <a href='?src=[REF(src)];monkey=leader'>leader</a> | <a href='?src=[REF(src)];monkey=human'>human</a> | other"
else
text += "healthy | infected | human | <b>OTHER</b>"
text += "healthy | infected | leader | human | <b>OTHER</b>"
if(current && current.client && (ROLE_MONKEY in current.client.prefs.be_special))
text += " | Enabled in Prefs"
@@ -579,8 +588,8 @@
sections["revolution"] = text
/** Abductors **/
text = "Abductor"
/** ABDUCTION **/
text = "abductor"
if(SSticker.mode.config_tag == "abductor")
text = uppertext(text)
text = "<i><b>[text]</b></i>: "
@@ -807,7 +816,7 @@
else
target_antag = target
var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "late-assassinate", "maroon", "debrain", "protect", "destroy", "prevent", "hijack", "escape", "survive", "martyr", "steal", "download", "nuclear", "capture", "absorb", "custom")
var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "maroon", "debrain", "protect", "destroy", "prevent", "hijack", "escape", "survive", "martyr", "steal", "download", "nuclear", "capture", "absorb", "custom")
if (!new_obj_type)
return
@@ -842,12 +851,6 @@
//Will display as special role if the target is set as MODE. Ninjas/commandos/nuke ops.
new_objective.update_explanation_text()
if ("late-assassinate")
new_objective = new /datum/objective/assassinate/late
new_objective.owner = src
new_objective.target = null
new_objective.find_target() //This will begin the "find-target" loop and update their explanation text
if ("destroy")
var/list/possible_targets = active_ais(1)
if(possible_targets.len)
@@ -905,7 +908,7 @@
switch(new_obj_type)
if("download")
new_objective = new /datum/objective/download
new_objective.explanation_text = "Download [target_number] research levels."
new_objective.explanation_text = "Download [target_number] research node\s."
if("capture")
new_objective = new /datum/objective/capture
new_objective.explanation_text = "Capture [target_number] lifeforms with an energy net. Live, rare specimens are worth more."
@@ -1256,11 +1259,17 @@
else if (istype(M) && length(M.viruses))
for(var/thing in M.viruses)
var/datum/disease/D = thing
D.cure(0)
D.cure(FALSE)
if("leader")
if(check_rights(R_ADMIN, 0))
add_monkey_leader(src)
log_admin("[key_name(usr)] made [key_name(current)] a monkey leader!")
message_admins("[key_name_admin(usr)] made [key_name_admin(current)] a monkey leader!")
if("infected")
if (check_rights(R_ADMIN, 0))
if(check_rights(R_ADMIN, 0))
var/mob/living/carbon/human/H = current
var/mob/living/carbon/monkey/M = current
add_monkey(src)
if (istype(H))
log_admin("[key_name(usr)] attempting to monkeyize and infect [key_name(current)]")
message_admins("<span class='notice'>[key_name_admin(usr)] attempting to monkeyize and infect [key_name_admin(current)]</span>")
@@ -1278,6 +1287,7 @@
for(var/datum/disease/transformation/jungle_fever/JF in M.viruses)
JF.cure(0)
stoplag() //because deleting of virus is doing throught spawn(0) //What
remove_monkey(src)
log_admin("[key_name(usr)] attempting to humanize [key_name(current)]")
message_admins("<span class='notice'>[key_name_admin(usr)] attempting to humanize [key_name_admin(current)]</span>")
H = M.humanize(TR_KEEPITEMS | TR_KEEPIMPLANTS | TR_KEEPORGANS | TR_KEEPDAMAGE | TR_KEEPVIRUS | TR_DEFAULTMSG)
-1
View File
@@ -8,7 +8,6 @@ GLOBAL_LIST_EMPTY(mutations_list)
GLOB.mutations_list[name] = src
/datum/mutation/human
var/dna_block
var/quality
var/get_chance = 100
+4 -4
View File
@@ -7,12 +7,12 @@
/datum/mutation/human/nearsight/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
owner.become_nearsighted()
owner.become_nearsighted(GENETIC_MUTATION)
/datum/mutation/human/nearsight/on_losing(mob/living/carbon/human/owner)
if(..())
return
owner.cure_nearsighted()
owner.cure_nearsighted(GENETIC_MUTATION)
//Blind makes you blind. Who knew?
@@ -24,12 +24,12 @@
/datum/mutation/human/blind/on_acquiring(mob/living/carbon/human/owner)
if(..())
return
owner.become_blind()
owner.become_blind(GENETIC_MUTATION)
/datum/mutation/human/blind/on_losing(mob/living/carbon/human/owner)
if(..())
return
owner.cure_blind()
owner.cure_blind(GENETIC_MUTATION)
//X-Ray Vision lets you see through walls.
+23 -1
View File
@@ -33,7 +33,7 @@
if(LINGHIVE_LING)
var/datum/antagonist/changeling/changeling = user.mind.has_antag_datum(/datum/antagonist/changeling)
var/msg = "<i><font color=#800080><b>[changeling.changelingID]:</b> [message]</font></i>"
log_talk(src,"[changeling.changelingID]/[user.key] : [message]",LOGSAY)
log_talk(user,"[changeling.changelingID]/[user.key] : [message]",LOGSAY)
for(var/_M in GLOB.mob_list)
var/mob/M = _M
if(M in GLOB.dead_mob_list)
@@ -110,3 +110,25 @@
AI.holopad_talk(message, language)
return FALSE
return TRUE
/datum/saymode/monkey
key = "k"
mode = MODE_MONKEY
/datum/saymode/monkey/handle_message(mob/living/user, message, datum/language/language)
var/datum/mind = user.mind
if(!mind)
return TRUE
if(is_monkey_leader(mind) || (ismonkey(user) && is_monkey(mind)))
log_talk(user, "(MONKEY) [user]/[user.key]: [message]",LOGSAY)
if(prob(75) && ismonkey(user))
user.visible_message("<span class='notice'>\The [user] chimpers.</span>")
var/msg = "<span class='[is_monkey_leader(mind) ? "monkeylead" : "monkeyhive"]'><b><font size=2>\[[is_monkey_leader(mind) ? "Monkey Leader" : "Monkey"]\]</font> [user]</b>: [message]</span>"
for(var/_M in GLOB.mob_list)
var/mob/M = _M
if(M in GLOB.dead_mob_list)
var/link = FOLLOW_LINK(M, user)
to_chat(M, "[link] [msg]")
if((is_monkey_leader(M.mind) || ismonkey(M)) && (M.mind in SSticker.mode.ape_infectees))
to_chat(M, msg)
return FALSE
+1
View File
@@ -16,3 +16,4 @@
/datum/weakref/proc/resolve()
var/datum/D = locate(reference)
return (!QDELETED(D) && D.weak_reference == src) ? D : null
@@ -25,7 +25,7 @@
/datum/weather/rad_storm/telegraph()
..()
status_alarm("alert")
status_alarm(TRUE)
/datum/weather/rad_storm/weather_act(mob/living/L)
@@ -49,24 +49,19 @@
if(..())
return
priority_announce("The radiation threat has passed. Please return to your workplaces.", "Anomaly Alert")
status_alarm()
sleep(300)
revoke_maint_all_access() // Need to make this a timer at some point.
/datum/weather/rad_storm/proc/status_alarm(command) //Makes the status displays show the radiation warning for those who missed the announcement.
var/datum/radio_frequency/frequency = SSradio.return_frequency(1435)
status_alarm(FALSE)
/datum/weather/rad_storm/proc/status_alarm(active) //Makes the status displays show the radiation warning for those who missed the announcement.
var/datum/radio_frequency/frequency = SSradio.return_frequency(FREQ_STATUS_DISPLAYS)
if(!frequency)
return
var/datum/signal/status_signal = new
var/atom/movable/virtualspeaker/virt = new /atom/movable/virtualspeaker(null)
status_signal.source = virt
status_signal.transmission_method = 1
status_signal.data["command"] = "shuttle"
var/datum/signal/signal = new
if (active)
signal.data["command"] = "alert"
signal.data["picture_state"] = "radiation"
else
signal.data["command"] = "shuttle"
if(command == "alert")
status_signal.data["command"] = "alert"
status_signal.data["picture_state"] = "radiation"
frequency.post_signal(src, status_signal)
var/atom/movable/virtualspeaker/virt = new(null)
frequency.post_signal(virt, signal)
+1 -2
View File
@@ -11,8 +11,7 @@
/datum/wires/radio/interactable(mob/user)
var/obj/item/device/radio/R = holder
if(R.b_stat)
return TRUE
return R.unscrewed
/datum/wires/radio/on_pulse(index)
var/obj/item/device/radio/R = holder