diff --git a/code/modules/antagonists/changeling/powers/panacea.dm b/code/modules/antagonists/changeling/powers/panacea.dm
index d72d5dede99e..dff8cd7f7365 100644
--- a/code/modules/antagonists/changeling/powers/panacea.dm
+++ b/code/modules/antagonists/changeling/powers/panacea.dm
@@ -32,16 +32,18 @@
user.reagents.add_reagent(/datum/reagent/medicine/pen_acid, 20)
user.reagents.add_reagent(/datum/reagent/medicine/antihol, 10)
user.reagents.add_reagent(/datum/reagent/medicine/mannitol, 25)
+ user.reagents.add_reagent(/datum/reagent/medicine/antipathogenic/changeling, 5) //MONKESTATION ADDITION
if(iscarbon(user))
var/mob/living/carbon/C = user
C.cure_all_traumas(TRAUMA_RESILIENCE_LOBOTOMY)
- if(isliving(user))
+ /*if(isliving(user)) //MONKESTATION REMOVAL: Virology rework
var/mob/living/L = user
for(var/thing in L.diseases)
var/datum/disease/D = thing
if(D.severity == DISEASE_SEVERITY_POSITIVE)
continue
D.cure()
+ */
return TRUE
diff --git a/monkestation/code/game/objects/items/implants/hardlight.dm b/monkestation/code/game/objects/items/implants/hardlight.dm
index 94e5a5becbe2..5d7518b40a53 100644
--- a/monkestation/code/game/objects/items/implants/hardlight.dm
+++ b/monkestation/code/game/objects/items/implants/hardlight.dm
@@ -282,6 +282,8 @@
embed_falloff_tile = 0
speed = 0.4 //lower = faster
shrapnel_type = /obj/item/shrapnel/bullet/spear
+ light_outer_range = 1
+ light_power = 1
hitsound = 'sound/weapons/bladeslice.ogg'
hitsound_wall = 'sound/weapons/parry.ogg'
embedding = list(embed_chance=100, fall_chance=2, jostle_chance=4, ignore_throwspeed_threshold=TRUE, pain_stam_pct=0.5, pain_mult=5, jostle_pain_mult=6, rip_time=10)
diff --git a/monkestation/code/modules/cryopods/trackers/cryo_chaplain.dm b/monkestation/code/modules/cryopods/trackers/cryo_chaplain.dm
index 16676c89403a..d4c481e4466e 100644
--- a/monkestation/code/modules/cryopods/trackers/cryo_chaplain.dm
+++ b/monkestation/code/modules/cryopods/trackers/cryo_chaplain.dm
@@ -8,15 +8,11 @@
// if the mob is not a high priest, add to successors list
if(spawned_chaplain.mind.holy_role != HOLY_ROLE_HIGHPRIEST)
- if(isnull(GLOB.holy_successors))
+ if(isnull(GLOB.holy_successors))
GLOB.holy_successors = list()
GLOB.holy_successors |= WEAKREF(spawned_chaplain)
return
- // if the mob joins as a high priest (and there has been a previous high priest before them), make sure they get their own nullrod.
- if(isnull(GLOB.current_highpriest))
- spawned_chaplain.put_in_hands(new /obj/item/nullrod(spawned_chaplain))
-
// keep a record of the current high priest
GLOB.current_highpriest = WEAKREF(spawned_chaplain)
diff --git a/monkestation/code/modules/store/store_items/suits.dm b/monkestation/code/modules/store/store_items/suits.dm
index 799666dfe8dd..67a2c9b80aa4 100644
--- a/monkestation/code/modules/store/store_items/suits.dm
+++ b/monkestation/code/modules/store/store_items/suits.dm
@@ -186,6 +186,7 @@ GLOBAL_LIST_INIT(store_suits, generate_store_items(/datum/store_item/suit))
name = "Carp Costume"
item_path = /obj/item/clothing/suit/hooded/carp_costume
+
/datum/store_item/suit/wizard
name = "Wizard Robe"
item_path = /obj/item/clothing/suit/wizrobe/fake
diff --git a/monkestation/code/modules/virology/disease/_disease.dm b/monkestation/code/modules/virology/disease/_disease.dm
index f42110bfeac2..6f64e3f30f34 100644
--- a/monkestation/code/modules/virology/disease/_disease.dm
+++ b/monkestation/code/modules/virology/disease/_disease.dm
@@ -11,7 +11,7 @@ GLOBAL_LIST_INIT(virusDB, list())
//the percentage of the strength at which effects will start getting disabled by antibodies.
var/robustness = 100
//chance to cure the disease at every proc when the body is getting cooked alive.
- var/max_bodytemperature = 1000
+ var/max_bodytemperature = T0C+100
//very low temperatures will stop the disease from activating/progressing
var/min_bodytemperature = 120
///split category used for predefined diseases atm
diff --git a/monkestation/code/modules/virology/disease/symtoms/stage1.dm b/monkestation/code/modules/virology/disease/symtoms/stage1.dm
index 0be48bb975da..72fd89cd7516 100644
--- a/monkestation/code/modules/virology/disease/symtoms/stage1.dm
+++ b/monkestation/code/modules/virology/disease/symtoms/stage1.dm
@@ -20,15 +20,15 @@
var/mob/living/carbon/human/host = mob
if (prob(50) && isturf(mob.loc))
if(istype(host.wear_mask, /obj/item/clothing/mask/cigarette))
- var/obj/item/clothing/mask/cigarette/I = host.get_item_by_slot(ITEM_SLOT_MASK)
+ var/obj/item/clothing/mask/cigarette/ciggie = host.get_item_by_slot(ITEM_SLOT_MASK)
if(prob(20))
- var/turf/Q = get_turf(mob)
+ var/turf/startLocation = get_turf(mob)
var/turf/endLocation
var/spitForce = pick(0,1,2,3)
- endLocation = get_ranged_target_turf(Q, mob.dir, spitForce)
+ endLocation = get_ranged_target_turf(startLocation, mob.dir, spitForce)
to_chat(mob, "You sneezed \the [host.wear_mask] out of your mouth!")
- host.dropItemToGround(I)
- I.throw_at(endLocation,spitForce,1)
+ host.dropItemToGround(ciggie)
+ ciggie.throw_at(endLocation,spitForce,1)
/datum/symptom/gunck
name = "Flemmingtons"
@@ -85,6 +85,7 @@
/datum/symptom/eyewater/activate(mob/living/mob)
to_chat(mob, span_warning("Your eyes sting and water!"))
+ mob.emote("cry")
/datum/symptom/wheeze
diff --git a/monkestation/code/modules/virology/disease/symtoms/stage2.dm b/monkestation/code/modules/virology/disease/symtoms/stage2.dm
index 7661c3d68871..d6ded963ea9d 100644
--- a/monkestation/code/modules/virology/disease/symtoms/stage2.dm
+++ b/monkestation/code/modules/virology/disease/symtoms/stage2.dm
@@ -1,38 +1,3 @@
-
-
-/datum/symptom/cough
- max_chance = 10
- stage = 2
- badness = EFFECT_DANGER_ANNOYING
-
-/datum/symptom/cough/activate(mob/living/carbon/mob)
- mob.emote("cough")
-
- var/datum/gas_mixture/breath
- if (ishuman(mob))
- var/mob/living/carbon/human/H = mob
- breath = H.get_breath_from_internal(BREATH_VOLUME)
- if(!breath)//not wearing internals
- var/head_block = 0
- if (ishuman(mob))
- var/mob/living/carbon/human/H = mob
- if (H.head && (H.head.flags_cover & HEADCOVERSMOUTH))
- head_block = 1
- if(!head_block)
- if(!mob.wear_mask || !(mob.wear_mask.flags_cover & MASKCOVERSMOUTH))
- if(isturf(mob.loc))
- if(mob.check_airborne_sterility())
- return
- var/strength = 0
- for (var/datum/disease/advanced/V in mob.diseases)
- strength += V.infectionchance
- strength = round(strength / mob.diseases.len)
- var/i = 1
- while (strength > 0 && i < 10) //stronger viruses create more clouds at once, max limit of 10 clouds
- new /obj/effect/pathogen_cloud/core(get_turf(src), mob, virus_copylist(mob.diseases))
- strength -= 30
- i++
-
/datum/symptom/beard
name = "Facial Hypertrichosis"
desc = "Causes the infected to spontaneously grow a beard, regardless of gender. Only affects humans."
@@ -43,7 +8,7 @@
/datum/symptom/beard/activate(mob/living/mob)
if(istype(mob, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = mob
+ var/mob/living/carbon/human/victim = mob
if(ishuman(mob))
var/beard_name = ""
spawn(5 SECONDS)
@@ -55,10 +20,10 @@
beard_name = "Beard (Very Long)"
if(multiplier >= 4)
beard_name = "Beard (Dwarf)"
- if(beard_name != "" && H.facial_hairstyle != beard_name)
- H.facial_hairstyle = beard_name
- to_chat(H, span_warning("Your chin itches."))
- H.update_body_parts()
+ if(beard_name != "" && victim.facial_hairstyle != beard_name)
+ victim.facial_hairstyle = beard_name
+ to_chat(victim, span_warning("Your chin itches."))
+ victim.update_body_parts()
/datum/symptom/drowsness
name = "Automated Sleeping Syndrome"
@@ -78,29 +43,29 @@
badness = EFFECT_DANGER_ANNOYING
max_chance = 10
-/datum/symptom/cough/activate(var/mob/living/mob)
+/datum/symptom/cough/activate(mob/living/mob)
mob.emote("cough")
if(!ishuman(mob))
return
- var/mob/living/carbon/human/H = mob
+ var/mob/living/carbon/human/victim = mob
var/datum/gas_mixture/breath
- breath = H.get_breath_from_internal(BREATH_VOLUME)
+ breath = victim.get_breath_from_internal(BREATH_VOLUME)
if(!breath)//not wearing internals
- if(!H.wear_mask)
+ if(!victim.wear_mask)
if(isturf(mob.loc))
var/list/blockers = list()
- blockers = list(H.wear_mask,H.glasses,H.head)
+ blockers = list(victim.wear_mask,victim.glasses,victim.head)
for (var/item in blockers)
- var/obj/item/clothing/I = item
- if (!istype(I))
+ var/obj/item/clothing/clothes = item
+ if (!istype(clothes))
continue
- if (I.clothing_flags & BLOCK_GAS_SMOKE_EFFECT)
+ if (clothes.clothing_flags & BLOCK_GAS_SMOKE_EFFECT)
return
if(mob.check_airborne_sterility())
return
var/strength = 0
- for (var/datum/disease/advanced/V as anything in mob.diseases)
- strength += V.infectionchance
+ for (var/datum/disease/advanced/virus as anything in mob.diseases)
+ strength += virus.infectionchance
strength = round(strength/mob.diseases.len)
var/i = 1
@@ -134,13 +99,13 @@
mob.emote("shiver")
set_body_temp(mob)
-/datum/symptom/fridge/proc/set_body_temp(mob/living/M)
+/datum/symptom/fridge/proc/set_body_temp(mob/living/mob)
if(multiplier >= 3) // when unsafe the shivers can cause cold damage
- M.add_body_temperature_change("chills", -6 * power * multiplier)
+ mob.add_body_temperature_change("chills", -6 * power * multiplier)
else
// Get the max amount of change allowed before going under cold damage limit, then cap the maximum allowed temperature change from safe chills to 5 over the cold damage limit
- var/change_limit = min(M.get_body_temp_cold_damage_limit() + 5 - M.get_body_temp_normal(apply_change=FALSE), 0)
- M.add_body_temperature_change("chills", max(-6 * power * multiplier, change_limit))
+ var/change_limit = min(mob.get_body_temp_cold_damage_limit() + 5 - mob.get_body_temp_normal(apply_change=FALSE), 0)
+ mob.add_body_temperature_change("chills", max(-6 * power * multiplier, change_limit))
/datum/symptom/fridge/deactivate(mob/living/carbon/mob)
if(mob)
@@ -156,18 +121,18 @@
/datum/symptom/hair/activate(mob/living/mob)
if(ishuman(mob))
- var/mob/living/carbon/human/H = mob
- if(H.hairstyle != "Bald")
- if (H.hairstyle != "Balding Hair")
- to_chat(H, span_danger("Your hair starts to fall out in clumps..."))
+ var/mob/living/carbon/human/victim = mob
+ if(victim.hairstyle != "Bald")
+ if (victim.hairstyle != "Balding Hair")
+ to_chat(victim, span_danger("Your hair starts to fall out in clumps..."))
if (prob(multiplier*20))
- H.hairstyle = "Balding Hair"
- H.update_body_parts()
+ victim.hairstyle = "Balding Hair"
+ victim.update_body_parts()
else
- to_chat(H, span_danger("You have almost no hair left..."))
+ to_chat(victim, span_danger("You have almost no hair left..."))
if (prob(multiplier*20))
- H.hairstyle = "Bald"
- H.update_body_parts()
+ victim.hairstyle = "Bald"
+ victim.update_body_parts()
/datum/symptom/stimulant
name = "Adrenaline Extra"
@@ -214,16 +179,17 @@
/datum/symptom/bloodynose/activate(mob/living/mob)
if (prob(30))
if (ishuman(mob))
- var/mob/living/carbon/human/H = mob
- if (!(TRAIT_NOBLOOD in H.dna.species.inherent_traits))
- H.add_splatter_floor(get_turf(mob), 1)
+ var/mob/living/carbon/human/victim = mob
+ if (!(TRAIT_NOBLOOD in victim.dna.species.inherent_traits))
+ victim.add_splatter_floor(get_turf(mob), 1)
else
- var/obj/effect/decal/cleanable/blood/D= locate(/obj/effect/decal/cleanable/blood) in get_turf(mob)
- if(D==null)
- D = new /obj/effect/decal/cleanable/blood(get_turf(mob))
- D.diseases |= virus_copylist(mob.diseases)
+ var/obj/effect/decal/cleanable/blood/blood= locate(/obj/effect/decal/cleanable/blood) in get_turf(mob)
+ if(blood==null)
+ blood = new /obj/effect/decal/cleanable/blood(get_turf(mob))
+ blood.diseases |= virus_copylist(mob.diseases)
+/* //commented out until i can figure out how to make this work without shoving static lights on moving objects
/datum/symptom/lantern
name = "Lantern Syndrome"
desc = "Causes the infected to glow."
@@ -254,6 +220,7 @@
mob.set_light(0, 0, 0, l_color = rgb(0,0,0))
to_chat(mob, span_notice("You don't feel as bright."))
flavortext = 0
+*/
/datum/symptom/vitreous
name = "Vitreous resonance"
@@ -264,32 +231,32 @@
max_multiplier = 2
badness = EFFECT_DANGER_ANNOYING
-/datum/symptom/vitreous/activate(mob/living/carbon/human/H)
- H.Shake(3, 3, 3 SECONDS)
- if(ishuman(H))
- addtimer(CALLBACK(src, PROC_REF(shatter), H), 0.5 SECONDS)
+/datum/symptom/vitreous/activate(mob/living/carbon/human/victim)
+ victim.Shake(3, 3, 3 SECONDS)
+ if(ishuman(victim))
+ addtimer(CALLBACK(src, PROC_REF(shatter), victim), 0.5 SECONDS)
-/datum/symptom/vitreous/proc/shatter(mob/living/carbon/human/H)
- var/obj/item/reagent_containers/glass_to_shatter = H.get_active_held_item()
- var/obj/item/bodypart/check_arm = H.get_active_hand()
+/datum/symptom/vitreous/proc/shatter(mob/living/carbon/human/victim)
+ var/obj/item/reagent_containers/glass_to_shatter = victim.get_active_held_item()
+ var/obj/item/bodypart/check_arm = victim.get_active_hand()
if(!glass_to_shatter)
return
if (is_type_in_list(glass_to_shatter, list(/obj/item/reagent_containers/cup/glass)))
- to_chat(H, span_warning("Your [check_arm] resonates with the glass in \the [glass_to_shatter], shattering it to bits!"))
- glass_to_shatter.reagents.expose(H, TOUCH)
- new/obj/effect/decal/cleanable/generic(get_turf(H))
- playsound(H, 'sound/effects/glassbr1.ogg', 25, 1)
+ to_chat(victim, span_warning("Your [check_arm] resonates with the glass in \the [glass_to_shatter], shattering it to bits!"))
+ glass_to_shatter.reagents.expose(victim, TOUCH)
+ new/obj/effect/decal/cleanable/generic(get_turf(victim))
+ playsound(victim, 'sound/effects/glassbr1.ogg', 25, 1)
spawn(1 SECONDS)
- if (H && check_arm)
+ if (victim && check_arm)
if (prob(50 * multiplier))
- to_chat(H, span_notice("Your [check_arm] deresonates, healing completely!"))
+ to_chat(victim, span_notice("Your [check_arm] deresonates, healing completely!"))
check_arm.heal_damage(1000) // full heal
else
- to_chat(H, span_warning("Your [check_arm] deresonates, sustaining burns!"))
+ to_chat(victim, span_warning("Your [check_arm] deresonates, sustaining burns!"))
check_arm.take_damage(15 * multiplier, BRUTE)
qdel(glass_to_shatter)
else if (prob(1))
- to_chat(H, span_notice("Your [check_arm] aches for the cold, smooth feel of container-grade glass..."))
+ to_chat(victim, span_notice("Your [check_arm] aches for the cold, smooth feel of container-grade glass..."))
/datum/symptom/spiky_skin
name = "Porokeratosis Acanthus"
@@ -314,41 +281,39 @@
return
if(!istype(toucher) || !istype(touched))
return
- var/obj/item/bodypart/E
- var/mob/living/carbon/human/H
+ var/obj/item/bodypart/bodypartTarget
+ var/mob/living/carbon/human/target
if(toucher == mob) //we bumped into someone else
if(ishuman(touched))
- H = touched
- E = H.get_bodypart(H.get_random_valid_zone())
+ target = touched
+ bodypartTarget = target.get_bodypart(target.get_random_valid_zone())
else //someone else bumped into us
if(ishuman(toucher))
- H = toucher
- E = H.get_bodypart(H.get_random_valid_zone())
+ target = toucher
+ bodypartTarget = target.get_bodypart(target.get_random_valid_zone())
if(toucher == mob)
- if(E)
- to_chat(mob, span_warning("As you bump into \the [touched], your spines dig into \his [E]!"))
- E.take_damage(multiplier, BRUTE)
+ if(bodypartTarget)
+ to_chat(mob, span_warning("As you bump into \the [touched], your spines dig into \his [bodypartTarget]!"))
+ bodypartTarget.take_damage(multiplier, BRUTE)
else
to_chat(mob, span_warning("As you bump into \the [touched], your spines dig into \him!"))
- var/mob/living/L = touched
- if(istype(L) && !istype(L, /mob/living/silicon))
- L.apply_damage(multiplier, BRUTE, E)
- var/mob/M = touched
- log_attack("[M] damaged [H] with keratin spikes")
+ var/mob/living/impaled = touched
+ if(istype(impaled) && !istype(impaled, /mob/living/silicon))
+ impaled.apply_damage(multiplier, BRUTE, bodypartTarget)
else
- if(E)
- to_chat(mob, span_warning("As \the [toucher] [touch_type == DISEASE_BUMP ? "bumps into" : "touches"] you, your spines dig into \his [E]!"))
- to_chat(toucher, span_danger("As you [touch_type == DISEASE_BUMP ? "bump into" : "touch"] \the [mob], \his spines dig into your [E]!"))
- E.take_damage(multiplier)
+ if(bodypartTarget)
+ to_chat(mob, span_warning("As \the [toucher] [touch_type == DISEASE_BUMP ? "bumps into" : "touches"] you, your spines dig into \his [bodypartTarget]!"))
+ to_chat(toucher, span_danger("As you [touch_type == DISEASE_BUMP ? "bump into" : "touch"] \the [mob], \his spines dig into your [bodypartTarget]!"))
+ bodypartTarget.take_damage(multiplier)
else
to_chat(mob, span_warning("As \the [toucher] [touch_type == DISEASE_BUMP ? "bumps into" : "touches"] you, your spines dig into \him!"))
to_chat(toucher, span_danger("As you [touch_type == DISEASE_BUMP ? "bump into" : "touch"] \the [mob], \his spines dig into you!"))
- var/mob/living/L = toucher
- if(istype(L) && !istype(L, /mob/living/silicon))
- L.apply_damage(multiplier)
- var/mob/M = touched
- log_attack("[M] damaged [H] with keratin spikes")
+ var/mob/living/victim = toucher
+ if(istype(victim) && !istype(victim, /mob/living/silicon))
+ victim.apply_damage(multiplier)
+ var/mob/attacker = touched
+ log_attack("[attacker] damaged [target] with keratin spikes")
/* TODO LATER
@@ -364,14 +329,14 @@
/datum/symptom/calorieburn/activate(var/mob/living/mob)
if(ishuman(mob))
- var/mob/living/carbon/human/H = mob
- H.calorie_burn_rate *= multiplier
+ var/mob/living/carbon/human/victim = mob
+ victim.calorie_burn_rate *= multiplier
/datum/symptom/calorieburn/deactivate(var/mob/living/mob)
if (count)
if(ishuman(mob))
- var/mob/living/carbon/human/H = mob
- H.calorie_burn_rate /= multiplier
+ var/mob/living/carbon/human/victim = mob
+ victim.calorie_burn_rate /= multiplier
/datum/symptom/calorieconserve
name = "Caloric expenditure defficiency"
@@ -385,14 +350,14 @@
/datum/symptom/calorieconserve/activate(var/mob/living/mob)
if(ishuman(mob))
- var/mob/living/carbon/human/H = mob
- H.calorie_burn_rate /= multiplier
+ var/mob/living/carbon/human/victim = mob
+ victim.calorie_burn_rate /= multiplier
/datum/symptom/calorieconserve/deactivate(var/mob/living/mob)
if(count)
if(ishuman(mob))
- var/mob/living/carbon/human/H = mob
- H.calorie_burn_rate *= multiplier
+ var/mob/living/carbon/human/victim = mob
+ victim.calorie_burn_rate *= multiplier
*/
/datum/symptom/famine
@@ -402,31 +367,31 @@
max_multiplier = 3
badness = EFFECT_DANGER_HINDRANCE
-/datum/symptom/famine/activate(var/mob/living/mob)
+/datum/symptom/famine/activate(mob/living/mob)
if(ishuman(mob))
- var/mob/living/carbon/human/H = mob
- if(H.dna)
- if(ispodperson(H)) //Plantmen take a LOT of damage
- H.adjustCloneLoss(5 * multiplier)
+ var/mob/living/carbon/human/victim = mob
+ if(victim.dna)
+ if(ispodperson(victim)) //Plantmen take a LOT of damage
+ victim.adjustCloneLoss(5 * multiplier)
- for(var/obj/machinery/hydroponics/H in range(3*multiplier,mob))
+ for(var/obj/machinery/hydroponics/plantbox in range(3*multiplier,mob))
switch(rand(1,3))
if(1)
- H.adjust_waterlevel(-rand(1,10))
- H.adjust_plant_nutriments(-rand(1,5))
+ plantbox.adjust_waterlevel(-rand(1,10))
+ plantbox.adjust_plant_nutriments(-rand(1,5))
if(2)
- H.adjust_toxic(rand(1,50))
+ plantbox.adjust_toxic(rand(1,50))
if(3)
- H.adjust_weedlevel(10)
- H.adjust_pestlevel(10)
+ plantbox.adjust_weedlevel(10)
+ plantbox.adjust_pestlevel(10)
if(prob(5))
- H.plantdies()
+ plantbox.plantdies()
- for(var/obj/item/food/grown/G in range(2*multiplier,mob))
- G.visible_message("\The [G] rots at an alarming rate!")
- new /obj/item/food/badrecipe(get_turf(G))
- qdel(G)
+ for(var/obj/item/food/grown/crop in range(2*multiplier,mob))
+ crop.visible_message("\The [crop] rots at an alarming rate!")
+ new /obj/item/food/badrecipe(get_turf(crop))
+ qdel(crop)
if(prob(30/multiplier))
break
/datum/symptom/cyborg_vomit
@@ -436,11 +401,17 @@
badness = EFFECT_DANGER_ANNOYING
/datum/symptom/cyborg_vomit/activate(mob/living/mob)
+ if((HAS_TRAIT(mob, TRAIT_NOHUNGER)))
+ return
+
+ if(!(mob.has_mouth()))
+ return
+
if(prob(90)) //90% chance for just oil
mob.visible_message(span_danger("[mob.name] vomits up some oil!"))
mob.adjustToxLoss(-3)
- var/obj/effect/decal/cleanable/oil/O = new /obj/effect/decal/cleanable/oil(get_turf(mob))
- playsound(O, 'sound/effects/splat.ogg', 50, 1)
+ var/obj/effect/decal/cleanable/oil/oil = new /obj/effect/decal/cleanable/oil(get_turf(mob))
+ playsound(oil, 'sound/effects/splat.ogg', 50, 1)
mob.Stun(0.5 SECONDS)
else //10% chance for a random bot!
to_chat(mob, span_danger("You feel like something's about to burst out of you!"))
@@ -453,10 +424,10 @@
/mob/living/simple_animal/bot/buttbot
)
var/chosen_bot = pick(possible_bots)
- var/mob/living/simple_animal/bot/B = new chosen_bot(get_turf(mob))
+ var/mob/living/simple_animal/bot/newbot = new chosen_bot(get_turf(mob))
new /obj/effect/decal/cleanable/blood(get_turf(mob))
- mob.visible_message("A [B.name] bursts out of [mob.name]'s mouth!")
- playsound(B, 'sound/effects/splat.ogg', 50, 1)
+ mob.visible_message("A [newbot.name] bursts out of [mob.name]'s mouth!")
+ playsound(newbot, 'sound/effects/splat.ogg', 50, 1)
mob.emote("scream")
mob.adjustBruteLoss(15)
mob.Stun(1 SECONDS)
@@ -469,7 +440,7 @@
stage = 2
var/activated = 0
-/datum/symptom/mommi_shrink/activate(var/mob/living/mob)
+/datum/symptom/mommi_shrink/activate(mob/living/mob)
if(activated)
return
to_chat(mob, "You feel small...")
@@ -498,8 +469,8 @@
if(!ishuman(mob))
return
- var/mob/living/carbon/human/H = mob
- H.vomit(stun = FALSE)
+ var/mob/living/carbon/human/victim = mob
+ victim.vomit(stun = FALSE)
/datum/symptom/antitox
name = "Antioxidantisation Syndrome"
@@ -518,26 +489,21 @@
badness = EFFECT_DANGER_HINDRANCE
var/active = 0
-/datum/symptom/cult_vomit/activate(mob/living/carbon/M)
- if(!ishuman(M) || active)
+/datum/symptom/cult_vomit/activate(mob/living/carbon/mob)
+ if(!ishuman(mob) || active)
return
- if(istype(get_area(M), /area/station/service/chapel))
+ if(istype(get_area(mob), /area/station/service/chapel))
return
- if(IS_CULTIST(M))
+ if(IS_CULTIST(mob))
return
- var/mob/living/carbon/human/mob = M
+ var/mob/living/carbon/human/victim = mob
active = 1
- to_chat(mob, span_warning("You feel a burning sensation in your throat."))
+ to_chat(victim, span_warning("You feel a burning sensation in your throat."))
sleep(10 SECONDS)
- to_chat(mob, span_danger("You feel an agonizing pain in your throat!"))
+ to_chat(victim, span_danger("You feel an agonizing pain in your throat!"))
sleep(10 SECONDS)
- mob.visible_message(span_danger("[mob] vomits up blood!"), span_danger("You vomit up blood!"))
- var/obj/effect/decal/cleanable/blood/S = new(loc = get_turf(mob))
- S.count = 1
- playsound(mob, 'sound/effects/splat.ogg', 50, 1)
- mob.Stun(5)
- mob.blood_volume -= 8
+ victim.vomit(10, TRUE)
active = 0
/datum/symptom/choking
diff --git a/monkestation/code/modules/virology/disease/symtoms/stage3.dm b/monkestation/code/modules/virology/disease/symtoms/stage3.dm
index dfbb0a81687e..c0baba30f73d 100644
--- a/monkestation/code/modules/virology/disease/symtoms/stage3.dm
+++ b/monkestation/code/modules/virology/disease/symtoms/stage3.dm
@@ -20,7 +20,7 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
badness = EFFECT_DANGER_HINDRANCE
/datum/symptom/shakey/activate(mob/living/carbon/mob)
- shake_camera(mob,5*multiplier)
+ shake_camera(mob, 5*multiplier)
/datum/symptom/telepathic
@@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
desc = "Repurposes a portion of the users brain, making them incapable of normal speech but allows you to talk into a hivemind."
stage = 3
max_count = 1
- badness = EFFECT_DANGER_HELPFUL
+ badness = EFFECT_DANGER_FLAVOR
/datum/symptom/telepathic/first_activate(mob/living/carbon/mob)
GLOB.disease_hivemind_users |= mob
@@ -133,8 +133,8 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
mob.emote("me",1,"is sweating profusely!")
if(istype(mob.loc,/turf/open))
- var/turf/open/T = mob.loc
- T.add_liquid_list(list(/datum/reagent/water = 20), TRUE)
+ var/turf/open/turf = mob.loc
+ turf.add_liquid_list(list(/datum/reagent/water = 20), TRUE)
/datum/symptom/elvis
name = "Elvisism"
@@ -156,7 +156,7 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
if(!ishuman(mob))
return
- var/mob/living/carbon/human/H = mob
+ var/mob/living/carbon/human/victim = mob
/*
var/obj/item/clothing/glasses/H_glasses = H.get_item_by_slot(slot_glasses)
@@ -173,19 +173,19 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
else
mob.emote("me",1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!"))
- if(istype(H))
+ if(istype(victim))
- if(!(H.hairstyle == "Pompadour (Big)"))
+ if(!(victim.hairstyle == "Pompadour (Big)"))
spawn(50)
- H.hairstyle = "Pompadour (Big)"
- H.hair_color = "#242424"
- H.update_body()
+ victim.hairstyle = "Pompadour (Big)"
+ victim.hair_color = "#242424"
+ victim.update_body()
- if(!(H.facial_hairstyle == "Sideburns (Elvis)"))
+ if(!(victim.facial_hairstyle == "Sideburns (Elvis)"))
spawn(50)
- H.facial_hairstyle = "Sideburns (Elvis)"
- H.facial_hair_color = "#242424"
- H.update_body()
+ victim.facial_hairstyle = "Sideburns (Elvis)"
+ victim.facial_hair_color = "#242424"
+ victim.update_body()
/datum/symptom/elvis/deactivate(mob/living/carbon/mob)
if(ismouse(mob))
@@ -207,7 +207,6 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
badness = EFFECT_DANGER_HINDRANCE
/datum/symptom/pthroat/activate(mob/living/carbon/mob)
- //
if(ismouse(mob))
var/mob/living/basic/mouse/mouse = mob
mouse.icon_state = "mouse_clown"
@@ -215,28 +214,24 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
mouse.icon_dead = "mouse_clown_dead"
mouse.held_state = "mouse_clown"
- if(!ishuman(mob))
- return
-
- var/obj/item/clothing/mask/gas/clown_hat/virus/virusclown_hat = new /obj/item/clothing/mask/gas/clown_hat/virus
- if(mob.wear_mask && !istype(mob.wear_mask, /obj/item/clothing/mask/gas/clown_hat/virus))
- mob.dropItemToGround(mob.wear_mask, TRUE)
- mob.equip_to_slot(virusclown_hat, ITEM_SLOT_MASK)
- if(!mob.wear_mask)
- mob.equip_to_slot(virusclown_hat, ITEM_SLOT_MASK)
- mob.reagents.add_reagent(/datum/reagent/drug/mushroomhallucinogen, 20)
mob.say(pick("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk..."))
if(ishuman(mob))
var/mob/living/carbon/human/affected = mob
- if(multiplier >=2) //clown shoes added
+ if(multiplier >=2) //clown mask added
+ var/obj/item/clothing/mask/gas/clown_hat/virus/virusclown_hat = new /obj/item/clothing/mask/gas/clown_hat/virus
+ if(affected.wear_mask && !istype(affected.wear_mask, /obj/item/clothing/mask/gas/clown_hat/virus))
+ affected.dropItemToGround(mob.wear_mask, TRUE)
+ affected.equip_to_slot(virusclown_hat, ITEM_SLOT_MASK)
+ if(!affected.wear_mask)
+ affected.equip_to_slot(virusclown_hat, ITEM_SLOT_MASK)
+ if(multiplier >=3) //clown shoes added
+ var/obj/item/clothing/shoes/clown_shoes/virusshoes = new /obj/item/clothing/shoes/clown_shoes
if(affected.shoes && !istype(affected.shoes, /obj/item/clothing/shoes/clown_shoes))
- var/obj/item/clothing/shoes/clown_shoes/virusshoes = new /obj/item/clothing/shoes/clown_shoes
affected.dropItemToGround(affected.shoes, TRUE)
affected.equip_to_slot(virusshoes, ITEM_SLOT_FEET)
if(!affected.shoes)
- var/obj/item/clothing/shoes/clown_shoes/virusshoes = new /obj/item/clothing/shoes/clown_shoes
affected.equip_to_slot(virusshoes, ITEM_SLOT_FEET)
- if(multiplier >=3) //clown suit added
+ if(multiplier >=4) //clown suit added
var/obj/item/clothing/under/rank/civilian/clown/virussuit = new /obj/item/clothing/under/rank/civilian/clown
if(affected.w_uniform && !istype(affected.w_uniform, /obj/item/clothing/under/rank/civilian/clown))
affected.dropItemToGround(affected.w_uniform, TRUE)
@@ -317,18 +312,19 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
old_haircolor = affected.hair_color
- switch(hair_color)
- if("pink")
- affected.hair_color = "#e983d8"
- if("red")
- affected.hair_color = "#E01631"
- if("green")
- affected.hair_color = "#008000"
- if("blue")
- affected.hair_color = "#0000FF"
- if("purple")
- affected.hair_color = "#800080"
- affected.update_body()
+ if(!isethereal(affected)) //ethereals have weird custom hair color handling
+ switch(hair_color)
+ if("pink")
+ affected.hair_color = "#e983d8"
+ if("red")
+ affected.hair_color = "#E01631"
+ if("green")
+ affected.hair_color = "#008000"
+ if("blue")
+ affected.hair_color = "#0000FF"
+ if("purple")
+ affected.hair_color = "#800080"
+ affected.update_body()
if(multiplier)
if(multiplier >= 1.5)
@@ -418,8 +414,8 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
if(count && !skip)
var/obj/item/bodypart/part
if(ishuman(mob))
- var/mob/living/carbon/human/H = mob
- part = H.get_bodypart(H.get_random_valid_zone())
+ var/mob/living/carbon/human/victim = mob
+ part = victim.get_bodypart(victim.get_random_valid_zone())
if(toucher == mob)
if(part)
to_chat(mob, span_warning("As you bump into \the [touched], some of the skin on your [part] shears off!"))
@@ -444,17 +440,17 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
badness = EFFECT_DANGER_HELPFUL
/datum/symptom/thick_blood/activate(mob/living/carbon/mob)
- var/mob/living/carbon/human/H = mob
- if (ishuman(H))
- if(H.is_bleeding())
- H.restore_blood()
- to_chat(H, span_notice("You feel your blood regenerate, and your bleeding to stop!"))
+ var/mob/living/carbon/human/victim = mob
+ if (ishuman(victim))
+ if(victim.is_bleeding())
+ victim.restore_blood()
+ to_chat(victim, span_notice("You feel your blood regenerate, and your bleeding to stop!"))
/datum/symptom/teratoma
name = "Teratoma Syndrome"
- desc = "Causes the infected to oversynthesize stem cells engineered towards organ generation. Said generated organs are expelled from the body upon completion."
+ desc = "Causes the infected to oversynthesize stem cells engineered towards organ generation, causing damage to the host's organs in the process. Said generated organs are expelled from the body upon completion."
stage = 3
- badness = EFFECT_DANGER_FLAVOR
+ badness = EFFECT_DANGER_HARMFUL
/datum/symptom/teratoma/activate(mob/living/carbon/mob)
var/fail_counter = 0
@@ -470,6 +466,13 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
not_passed = FALSE
if(!not_passed)
+ if(ismouse(mob))
+ var/mob/living/basic/mouse/mouse = mob
+ mouse.splat() //tumors are bad for you, tumors equal to your body in size doubley so
+ if(ismonkey(mob)) //monkeys are smaller and thus have less space for human-organ sized tumors
+ for(var/i in 1 to 3)
+ mob.adjustOrganLoss(pick(ORGAN_SLOT_HEART, ORGAN_SLOT_LUNGS, ORGAN_SLOT_STOMACH, ORGAN_SLOT_LIVER), 30)
+ mob.adjustOrganLoss(pick(ORGAN_SLOT_HEART, ORGAN_SLOT_LUNGS, ORGAN_SLOT_STOMACH, ORGAN_SLOT_LIVER), 25)
mob.visible_message(span_warning("\A [spawned_organ.name] is extruded from \the [mob]'s body and falls to the ground!"),span_warning("\A [spawned_organ.name] is extruded from your body and falls to the ground!"))
/datum/symptom/damage_converter
@@ -510,37 +513,37 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
crab.loc = M
crab.override = 1
- var/client/C = mob.client
- if(C)
- C.images += crab
+ var/client/client = mob.client
+ if(client)
+ client.images += crab
var/duration = rand(60 SECONDS, 120 SECONDS)
spawn(duration)
- if(C)
- C.images.Remove(crab)
+ if(client)
+ client.images.Remove(crab)
var/list/turf_list = list()
- for(var/turf/T in spiral_block(get_turf(mob), 40))
+ for(var/turf/turf in spiral_block(get_turf(mob), 40))
if(prob(4))
- turf_list += T
+ turf_list += turf
if(turf_list.len)
- for(var/turf/open/floor/T in turf_list)
- var/image/supermatter = image('icons/obj/engine/supermatter.dmi', T ,"sm", ABOVE_MOB_LAYER)
+ for(var/turf/open/floor/turf in turf_list)
+ var/image/supermatter = image('icons/obj/engine/supermatter.dmi', turf ,"sm", ABOVE_MOB_LAYER)
- var/client/C = mob.client
- if(C)
- C.images += supermatter
+ var/client/client = mob.client
+ if(client)
+ client.images += supermatter
var/duration = rand(60 SECONDS, 120 SECONDS)
spawn(duration)
- if(C)
- C.images.Remove(supermatter)
+ if(client)
+ client.images.Remove(supermatter)
/datum/symptom/wendigo_hallucination
name = "Eldritch Mind Syndrome"
desc = "UNKNOWN"
- badness = EFFECT_DANGER_HARMFUL
+ badness = EFFECT_DANGER_ANNOYING
stage = 3
@@ -625,37 +628,37 @@ GLOBAL_LIST_INIT(disease_hivemind_users, list())
/datum/symptom/wizarditis/proc/spawn_wizard_clothes(chance = 0, mob/living/carbon/affected_mob)
if(ishuman(affected_mob))
- var/mob/living/carbon/human/H = affected_mob
+ var/mob/living/carbon/human/wizard = affected_mob
if(prob(chance))
- if(!istype(H.head, /obj/item/clothing/head/wizard))
- if(!H.dropItemToGround(H.head))
- qdel(H.head)
- H.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(H), ITEM_SLOT_HEAD)
+ if(!istype(wizard.head, /obj/item/clothing/head/wizard))
+ if(!wizard.dropItemToGround(wizard.head))
+ qdel(wizard.head)
+ wizard.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard), ITEM_SLOT_HEAD)
return
if(prob(chance))
- if(!istype(H.wear_suit, /obj/item/clothing/suit/wizrobe))
- if(!H.dropItemToGround(H.wear_suit))
- qdel(H.wear_suit)
- H.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(H), ITEM_SLOT_OCLOTHING)
+ if(!istype(wizard.wear_suit, /obj/item/clothing/suit/wizrobe))
+ if(!wizard.dropItemToGround(wizard.wear_suit))
+ qdel(wizard.wear_suit)
+ wizard.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard), ITEM_SLOT_OCLOTHING)
return
if(prob(chance))
- if(!istype(H.shoes, /obj/item/clothing/shoes/sandal/magic))
- if(!H.dropItemToGround(H.shoes))
- qdel(H.shoes)
- H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(H), ITEM_SLOT_FEET)
+ if(!istype(wizard.shoes, /obj/item/clothing/shoes/sandal/magic))
+ if(!wizard.dropItemToGround(wizard.shoes))
+ qdel(wizard.shoes)
+ wizard.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal/magic(wizard), ITEM_SLOT_FEET)
return
else
- var/mob/living/carbon/H = affected_mob
+ var/mob/living/carbon/wizard = affected_mob
if(prob(chance))
- var/obj/item/staff/S = new(H)
- if(!H.put_in_hands(S))
- qdel(S)
+ var/obj/item/staff/staff = new(wizard)
+ if(!wizard.put_in_hands(staff))
+ qdel(staff)
/datum/symptom/wizarditis/proc/teleport(mob/living/carbon/affected_mob)
var/list/theareas = get_areas_in_range(80, affected_mob)
- for(var/area/space/S in theareas)
- theareas -= S
+ for(var/area/space/unsafe in theareas)
+ theareas -= unsafe
if(!theareas || !theareas.len)
return
diff --git a/monkestation/code/modules/virology/disease/symtoms/stage4.dm b/monkestation/code/modules/virology/disease/symtoms/stage4.dm
index e872b22d4e25..e08b9f22a8f4 100644
--- a/monkestation/code/modules/virology/disease/symtoms/stage4.dm
+++ b/monkestation/code/modules/virology/disease/symtoms/stage4.dm
@@ -1,6 +1,6 @@
/datum/symptom/spaceadapt
name = "Space Adaptation Effect"
- desc = "Heals the infected from the effects of space exposure, should they remain in a vacuum."
+ desc = "Causes the infected to secrete a thin thermally insulating and spaceproof barrier from their skin."
stage = 4
max_count = 1
badness = EFFECT_DANGER_HELPFUL
@@ -116,15 +116,15 @@
/datum/symptom/bones/activate(mob/living/carbon/mob)
if(istype(mob, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = mob
- for (var/obj/item/bodypart/bp in H.bodyparts)
- bp.wound_resistance -= 10
+ var/mob/living/carbon/human/victim = mob
+ for (var/obj/item/bodypart/part in victim.bodyparts)
+ part.wound_resistance -= 10
/datum/symptom/bones/deactivate(mob/living/carbon/mob)
if(istype(mob, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = mob
- for (var/obj/item/bodypart/bp in H.bodyparts)
- bp.wound_resistance += 10
+ var/mob/living/carbon/human/victim = mob
+ for (var/obj/item/bodypart/part in victim.bodyparts)
+ part.wound_resistance += 10
/datum/symptom/fizzle
name = "Fizzle Effect"
@@ -139,11 +139,11 @@
name = "Delightful Effect"
desc = "A more powerful version of Full Glass. Makes the infected feel delightful."
stage = 4
- badness = EFFECT_DANGER_HELPFUL
+ badness = EFFECT_DANGER_FLAVOR
/datum/symptom/delightful/activate(mob/living/carbon/mob)
to_chat(mob, "You feel delightful!")
- if (mob.reagents.get_reagent_amount(/datum/reagent/drug/happiness) < 10)
+ if (mob.reagents.get_reagent_amount(/datum/reagent/drug/happiness) < 5)
mob.reagents.add_reagent(/datum/reagent/drug/happiness, 10)
/datum/symptom/spawn
@@ -206,7 +206,7 @@
name = "Magnitis"
desc = "This disease disrupts the magnetic field of the body, making it act as if a powerful magnet."
stage = 4
- badness = EFFECT_DANGER_HARMFUL
+ badness = EFFECT_DANGER_DEADLY
chance = 5
max_chance = 20
@@ -273,21 +273,21 @@
max_chance = 24
/datum/symptom/species/activate(mob/living/carbon/mob)
- var/mob/living/carbon/human/H = mob
- if(!ishuman(H))
+ var/mob/living/carbon/human/victim = mob
+ if(!ishuman(victim))
return
old_species = mob.dna.species
if(!old_species)
return
- H.set_species(new_species)
+ victim.set_species(new_species)
/datum/symptom/species/deactivate(mob/living/carbon/mob)
- var/mob/living/carbon/human/H = mob
- if(!ishuman(H))
+ var/mob/living/carbon/human/victim = mob
+ if(!ishuman(victim))
return
if(!old_species)
return
- H.set_species(old_species)
+ victim.set_species(old_species)
/datum/symptom/species/moth
name = "Mothification"
@@ -299,7 +299,7 @@
desc = "A DNA-altering retrovirus that scrambles the structural and unique enzymes of a host constantly."
max_multiplier = 4
stage = 4
- badness = EFFECT_DANGER_ANNOYING
+ badness = EFFECT_DANGER_HARMFUL
/datum/symptom/retrovirus/activate(mob/living/carbon/affected_mob)
if(!iscarbon(affected_mob))
diff --git a/monkestation/code/modules/virology/immune_systems/_immune_system.dm b/monkestation/code/modules/virology/immune_systems/_immune_system.dm
index 9b748db750fe..b4e79271cb63 100644
--- a/monkestation/code/modules/virology/immune_systems/_immune_system.dm
+++ b/monkestation/code/modules/virology/immune_systems/_immune_system.dm
@@ -118,6 +118,13 @@
if (prob(threshold) && prob(tally * 10) && prob((100 - antibodies[A])*100/(100-threshold)))//smaller and smaller chance for further increase
antibodies[A] = min(antibodies[A] + 1, 100)
+/datum/immune_system/proc/AntibodyCure()
+ if (overloaded)
+ return
+
+ for (var/datum/disease/advanced/disease as anything in host.diseases)
+ for (var/A in disease.antigen)
+ antibodies[A] = 100
/datum/immune_system/proc/ApplyVaccine(list/antigen, amount = 1, decay = 0)
if (overloaded)
diff --git a/monkestation/code/modules/virology/reagents/antipathenogenics.dm b/monkestation/code/modules/virology/reagents/antipathenogenics.dm
index 8e9f5834c675..cefc214ba814 100644
--- a/monkestation/code/modules/virology/reagents/antipathenogenics.dm
+++ b/monkestation/code/modules/virology/reagents/antipathenogenics.dm
@@ -26,3 +26,12 @@
if(..())
return TRUE
M.immune_system.ApplyAntipathogenics(data["threshold"])
+
+/datum/reagent/medicine/antipathogenic/changeling
+ name = "Changeling Immunoglobulin"
+ description = "Antibodies from a changeling's immune system. They seem to shift and change to respond to threats"
+
+/datum/reagent/medicine/antipathogenic/on_mob_life(mob/living/carbon/M, seconds_per_tick, times_fired)
+ if(..())
+ return TRUE
+ M.immune_system.AntibodyCure()