diff --git a/code/datums/diseases/viruses/advance/symptoms/vomit.dm b/code/datums/diseases/viruses/advance/symptoms/vomit.dm
index 1387543d0fd..d5fd75e73d2 100644
--- a/code/datums/diseases/viruses/advance/symptoms/vomit.dm
+++ b/code/datums/diseases/viruses/advance/symptoms/vomit.dm
@@ -106,4 +106,4 @@ Bonus
level = 4
/datum/symptom/vomit/projectile/Vomit(mob/living/carbon/M)
- M.vomit(6,0,1,5,1)
+ M.vomit(6,0,8 SECONDS,5,1)
diff --git a/code/datums/diseases/viruses/cadaver.dm b/code/datums/diseases/viruses/cadaver.dm
index 3f330201138..4de4a2bbbd8 100644
--- a/code/datums/diseases/viruses/cadaver.dm
+++ b/code/datums/diseases/viruses/cadaver.dm
@@ -4,11 +4,12 @@
agent = "Cadaveric microbes"
desc = "A terrible disease caused by rotting corpses"
cures = list("calomel")
- cure_prob = 4
- stage_prob = 1.5
+ cure_prob = 6
+ stage_prob = 0.8
max_stages = 5
spread_flags = BLOOD
severity = DANGEROUS
+ discovery_threshold = 0.3 // 2 stage is visible
/datum/disease/virus/cadaver/stage_act()
if(!..())
@@ -21,13 +22,13 @@
switch(stage)
if(2)
if(prob(2))
- H.vomit()
+ H.vomit(stun = 0.1 SECONDS)
if(prob(7))
H.bodytemperature = max(H.bodytemperature, H.dna.species.heat_level_1 + 10)
to_chat(H, span_warning("You feel hot!"))
if(3, 4)
if(prob(3))
- H.vomit()
+ H.vomit(stun = 0.1 SECONDS)
if(prob(7))
H.bodytemperature = max(H.bodytemperature, H.dna.species.heat_level_1 + 30)
to_chat(H, span_warning("You feel very hot!"))
diff --git a/code/datums/spells/lavaland_spells/healtouch.dm b/code/datums/spells/lavaland_spells/healtouch.dm
index a62678a9633..fc0355e98fa 100644
--- a/code/datums/spells/lavaland_spells/healtouch.dm
+++ b/code/datums/spells/lavaland_spells/healtouch.dm
@@ -33,6 +33,9 @@
M.heal_overall_damage(brute, burn)
M.adjustToxLoss(-tox)
M.adjustOxyLoss(-oxy)
+ for(var/datum/disease/D in M.diseases)
+ if(D.curable)
+ D.cure(need_immunity = FALSE)
return ..()
/obj/effect/proc_holder/spell/touch/healtouch/advanced
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index 03d3861fae6..058b42a0767 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -839,7 +839,7 @@
if(prob(pukeprob))
carbon.AdjustConfused(9 SECONDS)
carbon.AdjustStuttering(3 SECONDS)
- carbon.vomit(15, FALSE, TRUE, 0, FALSE)
+ carbon.vomit(15, FALSE, 8 SECONDS, 0, FALSE)
carbon.Dizzy(15 SECONDS)
if(strength >= DISGUST_LEVEL_DISGUSTED)
if(prob(25))
diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm
index 1f21b499f66..567932db69a 100644
--- a/code/game/gamemodes/shadowling/shadowling_abilities.dm
+++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm
@@ -929,7 +929,7 @@
var/mob/living/carbon/human/target = targets[1]
- target.vomit(lost_nutrition = 0, blood = TRUE, stun = TRUE, distance = 1, message = FALSE)
+ target.vomit(lost_nutrition = 0, blood = TRUE, stun = 8 SECONDS, distance = 1, message = FALSE)
playsound(user.loc, 'sound/hallucinations/veryfar_noise.ogg', 50, TRUE)
to_chat(user, "You instantly rearrange [target]'s memories, hyptonitizing [target.p_them()] into a thrall.")
to_chat(target, "An agonizing spike of pain drives into your mind, and--")
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 3d862ad45de..ed340e36e22 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -97,7 +97,7 @@
return FALSE
-/mob/living/carbon/proc/vomit(var/lost_nutrition = 10, var/blood = 0, var/stun = 1, var/distance = 0, var/message = 1)
+/mob/living/carbon/proc/vomit(lost_nutrition = 10, blood = 0, stun = 8 SECONDS, distance = 0, message = 1)
if(ismachineperson(src)) //IPCs do not vomit particulates
return FALSE
if(is_muzzled())
@@ -105,13 +105,13 @@
to_chat(src, "Намордник препятствует рвоте!")
return FALSE
if(stun)
- Stun(8 SECONDS)
+ Stun(stun)
if(nutrition < 100 && !blood)
if(message)
visible_message("[src.name] сухо кашля[pluralize_ru(src.gender,"ет","ют")]!", \
"Вы пытаетесь проблеваться, но в вашем желудке пусто!")
if(stun)
- Weaken(20 SECONDS)
+ Weaken(stun * 2.5)
else
if(message)
visible_message("[src.name] блю[pluralize_ru(src.gender,"ет","ют")]!", \
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 49f71f8f66c..c3127e4fce0 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -878,7 +878,7 @@
if(getToxLoss() >= 45 && nutrition > 20)
lastpuke ++
if(lastpuke >= 25) // about 25 second delay I guess
- vomit(20, 0, 1, 0, 1)
+ vomit(20, 0, 8 SECONDS, 0, 1)
adjustToxLoss(-3)
lastpuke = 0
@@ -970,9 +970,9 @@
return
for(var/mob/living/carbon/human/H in view(decaylevel, src) - src)
- if(prob(0.5 * decaylevel))
+ if(prob(0.3 * decaylevel))
var/datum/disease/virus/cadaver/D = new()
- D.Contract(H, CONTACT|AIRBORNE, need_protection_check = TRUE)
+ D.Contract(H, CONTACT, need_protection_check = TRUE)
if(prob(2))
var/obj/item/clothing/mask/M = H.wear_mask
if(M && (M.flags_cover & MASKCOVERSMOUTH))
diff --git a/code/modules/mob/living/carbon/human/species/unathi.dm b/code/modules/mob/living/carbon/human/species/unathi.dm
index e42c997e42d..30f511cd655 100644
--- a/code/modules/mob/living/carbon/human/species/unathi.dm
+++ b/code/modules/mob/living/carbon/human/species/unathi.dm
@@ -143,6 +143,7 @@
//Ash walker shaman, worse defensive stats, but better at surgery and have a healing touch ability
/datum/species/unathi/ashwalker/shaman
name = SPECIES_ASHWALKER_SHAMAN
+ species_traits = list(NOGUNS, LIPS, PIERCEIMMUNE, VIRUSIMMUNE)
brute_mod = 1.15
burn_mod = 1.15
speed_mod = -0.60 //less fast as ash walkers